2010-06-09 4 views
5

Ich versuche, die google_search Ruby-Bibliothek zu verwenden (Code folgt), aber es klagt, dass 'cattr_accessor ist eine undefinierte Methode' - irgendwelche Ideen, warum dies sein könnte oder wie ich es beheben könnte?cattr_accessor außerhalb der Schienen

require 'rubygems' 
require 'google_search' 

GoogleSearch.web :q => "pink floyd" 
+2

warnen die Autoren des 'google_search'-Edelsteins, dass sie dieses Problem haben. Sie sollten nicht von 'cattr_accessor' von Rails IMO abhängen. – horseyguy

Antwort

10

cattr_accessor scheint that acts like attr_accessor, but is accessible on both the class and its instances eine Rails-Erweiterung zu sein.

Wenn Sie möchten, um die Quelle der cattr_accessor Methode kopieren Besuche this documentation:

# 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}\[email protected]@\#{sym} = nil\nend\n\ndef self.\#{sym}\[email protected]@\#{sym}\nend\n\ndef \#{sym}\[email protected]@\#{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}\[email protected]@\#{sym} = nil\nend\n\ndef self.\#{sym}=(obj)\[email protected]@\#{sym} = obj\nend\n\n\#{\"\ndef \#{sym}=(obj)\[email protected]@\#{sym} = obj\nend\n\" unless options[:instance_writer] == false }\n", __FILE__, __LINE__) 
    end 
end 
+0

Rails 4+ verwenden ähnliche methode mattr_accessor, da cattr_accessor in rails 4 veraltet ist –

3

Sie diese Funktionalität, indem den Ruby-Facetten Edelstein bekommen. Verweisen Sie auf die Quelle hier:

https://github.com/rubyworks/facets/blob/master/lib/core/facets/cattr.rb

Sie in der Regel nicht den gesamten Code aus dem Edelstein verlangen müssen. Sie können selektiv verlangen, was Sie wollen. Es gibt jedoch einige nützliche Erweiterungen in diesem Juwel.

+1

Dies führte mich zu den rubyworks Facetten Projekt, die seit diesem Beitrag https://github.com/rubyworks/facets +1 verschoben, obwohl der Ende-Quellcode ist gut – earlonrails