ここの回答の次に、次のこともできます。
module Prober
class << self
def probe_invoke(type, data = {})
p = Probe.new({:probe_type => type.to_s,
:data => data.to_json, :probe_status => 0, :retries => 0})
p.save
end
# more module instance methods ...
end
end
ブロックは、その中のclass << self
すべてのメソッドもモジュールのインスタンス メソッドとして定義します。
(機能は、すべてのメソッドをdef Prober.mymethod ...
orで定義するのと同じですdef self.mymethod ...
)
更新 (2014-11-22)
Ruby Style Guide によると、代わりに次を使用する必要があります。module_function
module Prober
module_function # <-- preferred style nowadays
def probe_invoke(type, data = {})
Probe.new(probe_type: type.to_s,
data: data.to_json,
probe_status: 0,
retries: 0)
.save # no need for a temporary variable
end
# more module methods ...
end
これをユーティリティモジュールと呼びます。
ところで: 以前は、メソッドをブロックextend self
でラップする代わりに使用する方が一般的でした。class << self
また、上記のコードを他のスタイル ガイドの推奨事項に適合させました。