1

通常の方法で Sinatra ヘルパーを定義しました。

module Sinatra
  module FooHelper
    # code goes here
  end
end

私のヘルパーでは、とりわけ、にメソッドを追加したいと思いNumericます:

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

ただし、目立たないようにするために、Sinatra ヘルパーが実際にアプリケーションに含まれている場合にのみ、このメソッドを追加したいと考えています。誰も実行しない場合helpers Sinatra::FooHelper、私は何にも影響を与えたくありません (これは Sinatra 拡張機能に期待するのが妥当なことのように思えます)。

私のヘルパーが含まれているときに起動されるフックはありますか?

4

1 に答える 1

1

Module#includedメソッドを使用してこれを行うことができます。を使用するには、クラス定義を少し変更する必要があると思いますclass_eval。以下をテストしましたが、期待どおりに動作します。

module Sinatra
  module FooHelper    
    def self.included(mod)
      ::Numeric.class_eval do
        def my_new_method
          return "whatever"
        end
      end
    end
  end  
end
于 2013-07-16T17:13:58.333 に答える