2010-06-09 10 views
5

Estoy tratando de usar la biblioteca de ruby ​​google_search (sigue el código) pero se queja de que 'cattr_accessor es un método indefinido' - ¿Alguna idea de por qué esto podría ser o cómo podría solucionarlo?cattr_accessor fuera de los raíles

require 'rubygems' 
require 'google_search' 

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

alerta a los autores de la gema 'google_search' que tienen este problema. No deberían depender de 'cattr_accessor' de Rails IMO. – horseyguy

Respuesta

10

cattr_accessor parece ser una extensión de los carriles that acts like attr_accessor, but is accessible on both the class and its instances.

Si quiere copiar el código fuente del método cattr_accessor, echa un vistazo a 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+ utiliza un método similar mattr_accessor, ya que cattr_accessor está en desuso en los raíles 4 –

3

usted puede conseguir esta funcionalidad mediante la inclusión de la gema de Ruby facetas. Hacer referencia a la fuente aquí:

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

Por lo general, no es necesario requerir todo el código de la joya. Puede solicitar de forma selectiva lo que desee. Sin embargo, hay bastantes extensiones útiles en la gema.

+1

Esto me llevó al proyecto de facetas de rubyworks que se movió desde esta publicación https://github.com/rubyworks/facets +1 porque el código fuente final es bueno – earlonrails

Cuestiones relacionadas