Best way to write initializers on a gem

1.2k Views Asked by At

I'm writing my first gem, and I've some issues with initializers part.

So I read about Railtie, and I'm little bit confused, there is part that talks about initializers and something on generators.

According to this thread, he suggested using generator Rails how to create an initializer inside a gem

So I'm not sure what's the best way.

Anyway I tried to do some initializer that add some method to Jbuilder

module MyGem
  class Railtie < Rails::Railtie
    initializer "my_gem.jbuilder_custom_cache" do |variable|
      class JbuilderTemplate
        def custom_cache!(resource, name, &block)
          fragment_cache_key = ::MyGem::Logic.cache_key(name, resource)
          options = { expires_in: 1.hour }
          cache!(fragment_cache_key, options, &block)
        end
      end
    end
  end
end

This didn't work well.

1

There are 1 best solutions below

1
On BEST ANSWER

This is untested, but I think you can do:

module MyGem
  class Railtie < Rails::Railtie
    config.to_prepare do
      JbuilderTemplate.class_eval do 
        def custom_cache!(resource, name, &block)
          fragment_cache_key = ::MyGem::Logic.cache_key(name, resource)
          options = { expires_in: 1.hour }
          cache!(fragment_cache_key, options, &block)
        end
      end
    end
  end
end

See here (http://api.rubyonrails.org/classes/Rails/Railtie.html#class-Rails::Railtie-label-Configuration) for more information about the config.to_prepare block.