cattr_accessor вне рельсов - PullRequest
       5

cattr_accessor вне рельсов

5 голосов
/ 09 июня 2010

Я пытаюсь использовать библиотеку google_search ruby ​​(код следует), но она жалуется, что «cattr_accessor - это неопределенный метод» - есть идеи, почему это может быть или как я могу это исправить?

require 'rubygems'
require 'google_search'

GoogleSearch.web :q => "pink floyd"

Ответы [ 2 ]

10 голосов
/ 09 июня 2010

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
3 голосов
/ 26 августа 2011

Вы можете получить эту функциональность, включив гем Ruby Facets. Ссылка на источник здесь:

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

Как правило, вам не нужно требовать весь код из драгоценного камня. Вы можете выборочно требовать то, что вы хотите. В геме есть несколько полезных расширений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...