2016-04-11 19 views
1

私はSendGridモジュール(require sendgrid-ruby)を使用していますが、このようなコードを配置することはあまりDRYしません。モジュールにモジュールが必要ですか?

client = SendGrid::Client.new(api_key: SENDGRID_KEY) 
     mail = SendGrid::Mail.new do |m| 
     m.to = '[email protected]' 
     m.from = '[email protected]' 
     m.subject = 'Boo' 
     m.html = " " 
     m.text = " " 
     end 

私の思考その後、私はちょうどメールオブジェクトの設定と移動する準備を返すために(include MyModule経由)standardMailを使用することができますstandardMail

module MyModule 
    require 'sendgrid-ruby' 
    def standardMail 
      mail = SendGrid::Mail.new do |m| 
      m.to = '[email protected]' 
      m.from = '[email protected]' 
      m.subject = 'Boo' 
      m.html = " " 
      m.text = " " 
      end 
    return mail 
    end 
end 

というメソッドを作成し、モジュールMyModuleを作成しました。私の質問は、あなたがモジュール内のモジュールを要求することができます(別名私のカスタムモジュールにsendgrid-rubyが必要です)。

class Thing 
    include MyModule 

    def doMail 
    mail = Thing.standardMail 
    end 
end 
+1

を」モジュール内のモジュールを含める "と"モジュール内のモジュールを必要とする "の2つの方法があります。特に、 'require MyModule'は有効ではありません。 – Amadan

+0

質問タイトルを修正しました – jdog

答えて

-1

の間に違いありません:

module Foo 
    require 'bar' 
    # ... 
end 

require 'bar' 
module Foo 
    # ... 
end 

だから、はい、あなたはモジュール内 モジュール Rubyのファイルを必要とすることができますが、理由はほとんどありませんそうするために。

1

私はあなたがこのような場合には、モジュールを必要とする理由、Sendgridのデフォルトの動作を拡張するためにはるかに容易になるか分からない:

class MyMailer < SendGrid::Mail 
def initialize(params) 
    @to = '[email protected]' 
    @from = '[email protected]' 
    @subject = 'Boo' 
    @html = " " 
    @text = " " 

    super 
    end 
end 

それとも、直接上書きすることができます

class SendGrid::Mail 
    def initialize(params) 
    @to = '[email protected]' 
    @from = '[email protected]' 
    @subject = 'Boo' 
    @html = " " 
    @text = " " 

    super 
    end 
end 
+0

私はRubyを初めて使っているので、そのことを考えていませんでした。しかし私はすべてのSendGrid :: Mailがオーバーライドされることを望んでいない、私のアプリでわずか約30回。私が自分のスタンダードを使っていない10の用途があります。私はあなたのコードを使用して、私はちょうど通常の公式SendGrid :: Mailを使用して30ケースと他の10 MyMailerを使用すると思いますか? – jdog

+1

最初の例を使用して、メーラーを拡張しますが、デフォルトの機能をオーバーライドしません。 –

関連する問題