Class: Class
Overview
cattr_* and class_inheritable_* are taken from ActiveSupport. Included here to help keep the codebase simple / clean.
Instance Method Summary collapse
- #cattr_accessor(*syms) ⇒ Object
- #cattr_reader(*syms) ⇒ Object
- #cattr_writer(*syms) ⇒ Object
-
#class_inheritable_accessor(*syms, &block) ⇒ Array[#to_s]
Defines class-level inheritable attribute accessor.
-
#class_inheritable_reader(*ivars) ⇒ Array[#to_s]
Defines class-level inheritable attribute reader.
-
#class_inheritable_writer(*ivars) ⇒ Array[#to_s]
Defines class-level inheritable attribute writer.
Instance Method Details
#cattr_accessor(*syms) ⇒ Object
45 46 47 48 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 45 def cattr_accessor(*syms) cattr_reader(*syms) cattr_writer(*syms) end |
#cattr_reader(*syms) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 5 def cattr_reader(*syms) syms.flatten.each do |sym| next if sym.is_a?(Hash) class_eval(" unless defined? @@\#{sym} # unless defined? @@hair_colors\n @@\#{sym} = nil # @@hair_colors = nil\n end # end\n #\n def self.\#{sym} # def self.hair_colors\n @@\#{sym} # @@hair_colors\n end # end\n #\n def \#{sym} # def hair_colors\n @@\#{sym} # @@hair_colors\n end # end\n EOS\n end\nend\n", __FILE__, __LINE__ + 1) |
#cattr_writer(*syms) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 24 def cattr_writer(*syms) = syms. syms.flatten.each do |sym| class_eval(" unless defined? @@\#{sym} # unless defined? @@hair_colors\n @@\#{sym} = nil # @@hair_colors = nil\n end # end\n #\n def self.\#{sym}=(obj) # def self.hair_colors=(obj)\n @@\#{sym} = obj # @@hair_colors = obj\n end # end\n #\n \#{\" #\n def \#{sym}=(obj) # def hair_colors=(obj)\n @@\#{sym} = obj # @@hair_colors = obj\n end # end\n \" unless options[:instance_writer] == false } # # instance writer above is generated unless options[:instance_writer] == false\n EOS\n end\nend\n", __FILE__, __LINE__ + 1) |
#class_inheritable_accessor(*syms, &block) ⇒ Array[#to_s]
Defines class-level inheritable attribute accessor. Attributes are available to subclasses, each subclass has a copy of parent's attribute.
124 125 126 127 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 124 def class_inheritable_accessor(*syms, &block) class_inheritable_reader(*syms) class_inheritable_writer(*syms, &block) end |
#class_inheritable_reader(*ivars) ⇒ Array[#to_s]
Do we want to block instance_reader via :instance_reader => false
It would be preferable that we do something with a Hash passed in (error out or do the same as other methods above) instead of silently moving on). In particular, this makes the return value of this function less useful.
Defines class-level inheritable attribute reader. Attributes are available to subclasses, each subclass has a copy of parent's attribute.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 63 def class_inheritable_reader(*ivars) instance_reader = ivars.pop[:reader] if ivars.last.is_a?(Hash) ivars.each do |ivar| self.class_eval " def self.\#{ivar}\n return @\#{ivar} if self.object_id == \#{self.object_id} || defined?(@\#{ivar})\n ivar = superclass.\#{ivar}\n return nil if ivar.nil? && !\#{self}.instance_variable_defined?(\"@\#{ivar}\")\n @\#{ivar} = ivar && !ivar.is_a?(Module) && !ivar.is_a?(Numeric) && !ivar.is_a?(TrueClass) && !ivar.is_a?(FalseClass) ? ivar.dup : ivar\n end\n RUBY\n unless instance_reader == false\n self.class_eval <<-RUBY, __FILE__, __LINE__ + 1\n def \#{ivar}\n self.class.\#{ivar}\n end\n RUBY\n end\n end\nend\n", __FILE__, __LINE__ + 1 |
#class_inheritable_writer(*ivars) ⇒ Array[#to_s]
We need a style for class_eval <<-HEREDOC. I'd like to make it class_eval(<<-RUBY, FILE, LINE), but we should codify it somewhere.
Defines class-level inheritable attribute writer. Attributes are available to subclasses, each subclass has a copy of parent's attribute.
97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 97 def class_inheritable_writer(*ivars) instance_writer = ivars.pop[:writer] if ivars.last.is_a?(Hash) ivars.each do |ivar| self.class_eval " def self.\#{ivar}=(obj)\n @\#{ivar} = obj\n end\n RUBY\n unless instance_writer == false\n self.class_eval <<-RUBY, __FILE__, __LINE__ + 1\n def \#{ivar}=(obj) self.class.\#{ivar} = obj end\n RUBY\n end\n \n self.send(\"\#{ivar}=\", yield) if block_given?\n end\nend\n", __FILE__, __LINE__ + 1 |