Class: Class
- Defined in:
- lib/perennial/core_ext/misc.rb,
lib/perennial/core_ext/attribute_accessors.rb
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.
- #is(*mixins) ⇒ Object
Instance Method Details
#cattr_accessor(*syms) ⇒ Object
70 71 72 73 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 70 def cattr_accessor(*syms) cattr_reader(*syms) cattr_writer(*syms) end |
#cattr_reader(*syms) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 30 def cattr_reader(*syms) syms.flatten.each do |sym| next if sym.is_a?(Hash) class_eval(<<-EOS, __FILE__, __LINE__ + 1) unless defined? @@#{sym} # unless defined? @@hair_colors @@#{sym} = nil # @@hair_colors = nil end # end # def self.#{sym} # def self.hair_colors @@#{sym} # @@hair_colors end # end # def #{sym} # def hair_colors @@#{sym} # @@hair_colors end # end EOS end end |
#cattr_writer(*syms) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 49 def cattr_writer(*syms) = syms. syms.flatten.each do |sym| class_eval(<<-EOS, __FILE__, __LINE__ + 1) unless defined? @@#{sym} # unless defined? @@hair_colors @@#{sym} = nil # @@hair_colors = nil end # end # def self.#{sym}=(obj) # def self.hair_colors=(obj) @@#{sym} = obj # @@hair_colors = obj end # end # #{" # def #{sym}=(obj) # def hair_colors=(obj) @@#{sym} = obj # @@hair_colors = obj end # end " unless [:instance_writer] == false } # # instance writer above is generated unless options[:instance_writer] == false EOS end end |
#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.
149 150 151 152 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 149 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.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 88 def class_inheritable_reader(*ivars) instance_reader = ivars.pop[:reader] if ivars.last.is_a?(Hash) ivars.each do |ivar| self.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def self.#{ivar} return @#{ivar} if self.object_id == #{self.object_id} || defined?(@#{ivar}) ivar = superclass.#{ivar} return nil if ivar.nil? && !#{self}.instance_variable_defined?("@#{ivar}") @#{ivar} = ivar && !ivar.is_a?(Module) && !ivar.is_a?(Numeric) && !ivar.is_a?(TrueClass) && !ivar.is_a?(FalseClass) ? ivar.dup : ivar end RUBY unless instance_reader == false self.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{ivar} self.class.#{ivar} end RUBY end end end |
#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.
122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/perennial/core_ext/attribute_accessors.rb', line 122 def class_inheritable_writer(*ivars) instance_writer = ivars.pop[:writer] if ivars.last.is_a?(Hash) ivars.each do |ivar| self.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def self.#{ivar}=(obj) @#{ivar} = obj end RUBY unless instance_writer == false self.class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{ivar}=(obj) self.class.#{ivar} = obj end RUBY end self.send("#{ivar}=", yield) if block_given? end end |