Sha256: eb97e96a732a3214768b1a4f78881f51c1bddad6da2be179a8f00416e48ed4dc

Contents?: true

Size: 1.56 KB

Versions: 2

Compression:

Stored size: 1.56 KB

Contents

namespace :<%= gem_name %> do
  namespace :install do

    desc "Initializes the <%= gem_name %> gem to rails engine"
    task default: %w(dependencies migrations routes)

    desc "Installs the <%= gem_name %> gem dependencies"
    task :dependencies do
      reenable_railties
      system "rake #{ app }uuids:install"
    end

    desc "Copies migrations from the <%= gem_name %> gem to application"
    task :migrations do
      reenable_railties
      Rake::Task["#{ app }<%= gem_name %>:install:migrations"].invoke
    end

    desc "Mounts the <%= gem_name %> API routes"
    task :routes do
      insert_into_file(
        "config/routes.rb",
        before: "\nend",
        line:   "\n\n  mount <%= module_name %>::Engine => \"/<%= gem_name %>\"",
        engine: "<%= module_name %>::Engine"
      ) unless engine?
    end

    def engine?
      @engine ||= Rake::Task.task_defined?("railties:install:migrations")
    end

    def app
      @app ||= engine? ? "" : "app:"
    end

    def reenable_railties
      Rake::Task["#{ app }railties:install:migrations"].reenable
    end

    def insert_into_file(name, before:, line:, engine:)
      say_with_time "mounting <%= gem_name %>' routes" do
        text = File.read(name)
        return if text[engine]
        File.write name, text.gsub(before, line << before)
      end
    end

    def say_with_time(text)
      start = current_time
      puts "=== #{ text } #{ "=" * (74 - text.count) }"
      yield
      puts "  -> #{ (current_time - start).round(4) }s"
    end

    def current_time
      Time.new.to_f
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hexx-1.1.1 lib/generators/install/templates/lib/task.erb
hexx-1.1.0 lib/generators/install/templates/lib/task.erb