Reuse methods in a Rails generator

45 Views Asked by At

I'm writing a series of Rails generators that will share several of the same methods. I would like to abstract these methods into a module or class of their own to be reused (but not automatically fired) within each of my generators.

My latest attempt was to autoload a helper file and later include it:

lib/my_gem/engine.rb

module MyGem
  class Engine < Rails::Engine
    config.autoload_paths += Dir["#{config.root}/lib/helpers/**"]
  end
end

lib/helpers/generators_helper.rb

module MyGem
  module GeneratorsHelper
    def some_method
      # ...
    end
  end
end

lib/generators/my_gem/my_generator.rb

# ...
include MyGem::GeneratorsHelper
# ...

But I'll see something like Error: uninitialized constant MyGem::GeneratorsHelper.

1

There are 1 best solutions below

0
On

I was able to accomplish this by manually requiring the file and then including the module. It's a little ugly, but keeps me from duplicating helper methods:

lib/my_gem/generators/my_generator.rb

require "#{Gem::Specification.find_by_name("my_gem").gem_dir}/lib/helpers/generators_helper.rb"
include MyGem::GeneratorsHelper