cattr_accessor за пределами направляющих

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

require 'rubygems'
require 'google_search'

GoogleSearch.web :q => "pink floyd"

5
задан JP. 9 June 2010 в 00:02
поделиться

1 ответ

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
10
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: