google_searchルビーライブラリ(コードは次のとおり)を使用しようとしていますが、「cattr_accessor
未定義のメソッド」であると文句を言います-これがなぜであるか、またはどのように修正できるかについてのアイデアはありますか?
require 'rubygems'
require 'google_search'
GoogleSearch.web :q => "pink floyd"
google_searchルビーライブラリ(コードは次のとおり)を使用しようとしていますが、「cattr_accessor
未定義のメソッド」であると文句を言います-これがなぜであるか、またはどのように修正できるかについてのアイデアはありますか?
require 'rubygems'
require 'google_search'
GoogleSearch.web :q => "pink floyd"
cattr_accessor
のように機能するRails拡張機能のようattr_accessor
ですが、クラスとそのインスタンスの両方でアクセスできます。
メソッドのソースをコピーする場合は、次のドキュメントcattr_accessor
を確認してください。
# File vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb, line 46
def cattr_accessor(*syms)
cattr_reader(*syms)
cattr_writer(*syms)
end
# File vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb, line 4
def cattr_reader(*syms)
syms.flatten.each do |sym|
next if sym.is_a?(Hash)
class_eval("unless defined? @@\#{sym}\n@@\#{sym} = nil\nend\n\ndef self.\#{sym}\n@@\#{sym}\nend\n\ndef \#{sym}\n@@\#{sym}\nend\n", __FILE__, __LINE__)
end
end
# File vendor/rails/activesupport/lib/active_support/core_ext/class/attribute_accessors.rb, line 24
def cattr_writer(*syms)
options = syms.extract_options!
syms.flatten.each do |sym|
class_eval("unless defined? @@\#{sym}\n@@\#{sym} = nil\nend\n\ndef self.\#{sym}=(obj)\n@@\#{sym} = obj\nend\n\n\#{\"\ndef \#{sym}=(obj)\n@@\#{sym} = obj\nend\n\" unless options[:instance_writer] == false }\n", __FILE__, __LINE__)
end
end
Ruby Facets gemを含めることで、この機能を利用できます。ここでソースを参照してください:
https://github.com/rubyworks/facets/blob/master/lib/core/facets/cattr.rb
通常、gemのすべてのコードを要求する必要はありません。あなたはあなたが望むものを選択的に要求することができます。ただし、gemにはかなりの数の便利な拡張機能があります。