Module: CouchRest::InheritableAttributes
- Included in:
- Document
- Defined in:
- lib/couchrest/support/inheritable_attributes.rb
Instance Method Summary collapse
-
#couchrest_inheritable_accessor(*syms, &block) ⇒ Array[#to_s]
Defines class-level inheritable attribute accessor.
-
#couchrest_inheritable_reader(*ivars) ⇒ Array[#to_s]
Defines class-level inheritable attribute reader.
-
#couchrest_inheritable_writer(*ivars) ⇒ Array[#to_s]
Defines class-level inheritable attribute writer.
Instance Method Details
#couchrest_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.
102 103 104 105 |
# File 'lib/couchrest/support/inheritable_attributes.rb', line 102 def couchrest_inheritable_accessor(*syms, &block) couchrest_inheritable_reader(*syms) couchrest_inheritable_writer(*syms, &block) end |
#couchrest_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.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/couchrest/support/inheritable_attributes.rb', line 41 def couchrest_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 |
#couchrest_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.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/couchrest/support/inheritable_attributes.rb', line 75 def couchrest_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 |