2016-04-16 7 views
0

私が構築している宝石にGmailの宝石を利用しようとしています。 the sourceから、宝石がそう(簡体字)のようなGmailのモジュール/クラスを定義していることがわかります。このRubyモジュールを拡張するにはどうすればよいですか?

module Gmail 
    class << self 
    def connect; end 
    end 
end 

私がやりたい何か自分のクラスにGmailのモジュール/クラスを拡張することです。そして、私が呼び出すことができるはずです

module Foo 
    class << self 
    def example 
     puts :this_is_foo 
    end 
    end 
end 

class Bar 
    extend Foo 
end 

Bar.example 

しかし、私は次の例外を取得:基本的に、これは私が何をしようとしているの一般的な例である

NoMethodError: undefined method `example' for Bar:Class 

Fooで利用できるメソッドを上記の例のBarで使用するにはどうすればよいですか?

答えて

2

あなたは、あなたの目標のためにincludedを使用することができます。

module Foo 
    def self.included(base) 
    base.extend ClassMethods 
    end 

    module ClassMethods 
    def example 
     puts :this_is_foo 
    end 
    end 
end 

class Bar 
    include Foo 
end 

Bar.example 
this_is_foo 
#=> nil 

それとも、クラスメソッドのみを含める場合、あなたはexampleメソッドのインスタンスを作成し、Barモジュール拡張することができます。

module Foo 
    def example 
    puts :this_is_foo 
    end 
end 
class Bar 
    extend Foo 
end 
Bar.example 
this_is_foo 
#=> nil 
+0

感謝を。私はそれが何をしているのか分かりません!これが私が尋ねた質問に答える一方で、私が最初に拡張することについて設定したGmailクラスを拡張することはできません。サンプルコードはうまくいきますが、私はこれを答えてクラス分けします.Gmailの宝石についてさらに具体的な質問をします。 – JoeNyland

関連する問題