Sha256: bff9056a0d3640a79413861be76cd98b28b8b1dd11d9d7cb377177df47c29073

Contents?: true

Size: 1.24 KB

Versions: 1

Compression:

Stored size: 1.24 KB

Contents

namespace :greenmat do
  desc 'Rename Redcarpet project to Greenmat'
  task :rename_project do
    ProjectRenamer.rename
  end
end

module ProjectRenamer
  PATH_MAP = {
    'redcarpet' => 'greenmat',
    'rc_'       => 'gm_'
  }

  SYMBOL_MAP = {
    'redcarpet' => 'greenmat',
    'Redcarpet' => 'Greenmat',
    'REDCARPET' => 'GREENMAT',
    /\brc_/     => 'gm_'
  }

  SYMBOL_RENAME_EXCLUSION_PATH_PATTERNS = [
    /^tasks\//,
    /^tmp\//,
    /\.(?:bundle|so)$/,
    /README/
  ]

  module_function

  def rename
    rename_paths
    rename_symbols
  end

  def rename_paths
    Dir['**/*'].each do |path|
      PATH_MAP.each do |old, new|
        next unless path.include?(old)
        is_directory = File.directory?(path)
        File.rename(path, path.gsub(old, new))
        fail RenamedDirectory if is_directory
      end
    end
  rescue RenamedDirectory
    retry
  end

  def rename_symbols
    Dir['**/*'].each do |path|
      next unless File.file?(path)
      next if SYMBOL_RENAME_EXCLUSION_PATH_PATTERNS.any? { |pattern| path.match(pattern) }

      source = File.read(path)

      SYMBOL_MAP.each do |old, new|
        source.gsub!(old, new)
      end

      File.write(path, source)
    end
  end

  class RenamedDirectory < StandardError
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
greenmat-3.2.0.2 tasks/greenmat.rake