Question

I've defined a Sinatra helper in the usual way:

module Sinatra
  module FooHelper
    # code goes here
  end
end

In my helper, among other things, I'd like to add a method to Numeric:

module Sinatra
  module FooHelper
    class ::Numeric
      def my_new_method
      end
    end
  end
end

However, in the interests of being unobtrusive, I only want to do add this method if my Sinatra helper is actually included in an application; if nobody runs helpers Sinatra::FooHelper, I don't want to affect anything (which seems like a reasonable thing to expect of a Sinatra extension).

Is there any hook that's fired when my helper is included, that would enable me to add my method only once that happens?

Was it helpful?

Solution

You can use the Module#included method to do this. I think you will need to modify your class definition slightly to use class_eval. I've tested the following and it works as expected:

module Sinatra
  module FooHelper    
    def self.included(mod)
      ::Numeric.class_eval do
        def my_new_method
          return "whatever"
        end
      end
    end
  end  
end
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top