cattr_accessor outside of rails

前端 未结 2 797
北恋
北恋 2021-01-13 08:19

I\'m trying to use the google_search ruby library (code follows) but it complains that \'cattr_accessor is an undefined method\' - any ideas why this might be o

相关标签:
2条回答
  • 2021-01-13 09:05

    You can get this functionality by including the Ruby Facets gem. Reference the source here:

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

    You generally don't need to require all code from the gem. You can selectively require what you want. There are quite a few useful extensions in the gem though.

    0 讨论(0)
  • 2021-01-13 09:24

    cattr_accessor seems to be a Rails extension that acts like attr_accessor, but is accessible on both the class and its instances.

    If you want to copy the source of the cattr_accessor method, check out 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}\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
    
    0 讨论(0)
提交回复
热议问题