Module: CouchRest::ClassExtension::InstanceMethods
- Defined in:
- lib/couchrest/support/class.rb
Instance Method Summary collapse
-
#cattr_accessor(*syms) ⇒ Array[#to_s]
Defines class-level (and optionally instance-level) attribute accessor.
-
#cattr_reader(*syms) ⇒ Array[#to_s]
Defines class-level and instance-level attribute reader.
-
#cattr_writer(*syms) ⇒ Array[#to_s]
Defines class-level (and optionally instance-level) attribute writer.
-
#class_inheritable_accessor(*syms) ⇒ 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) ⇒ Array[#to_s]
Defines class-level (and optionally instance-level) attribute accessor.
106 107 108 109 |
# File 'lib/couchrest/support/class.rb', line 106 def cattr_accessor(*syms) cattr_reader(*syms) cattr_writer(*syms) end |
#cattr_reader(*syms) ⇒ Array[#to_s]
Is this inconsistent in that it does not allow you to prevent
Defines class-level and instance-level attribute reader.
an instance_reader via :instance_reader => false
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/couchrest/support/class.rb', line 50 def cattr_reader(*syms) syms.flatten.each do |sym| next if sym.is_a?(Hash) class_eval(" unless defined? @@\#{sym}\n @@\#{sym} = nil\n end\n \n def self.\#{sym}\n @@\#{sym}\n end\n \n def \#{sym}\n @@\#{sym}\n end\n RUBY\n end\nend\n", __FILE__, __LINE__ + 1) |
#cattr_writer(*syms) ⇒ Array[#to_s]
Defines class-level (and optionally instance-level) attribute writer.
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/couchrest/support/class.rb', line 76 def cattr_writer(*syms) = syms.last.is_a?(Hash) ? syms.pop : {} syms.flatten.each do |sym| class_eval(" unless defined? @@\#{sym}\n @@\#{sym} = nil\n end\n \n def self.\#{sym}=(obj)\n @@\#{sym} = obj\n end\n RUBY\n \n unless options[:instance_writer] == false\n class_eval(<<-RUBY, __FILE__, __LINE__ + 1)\n def \#{sym}=(obj)\n @@\#{sym} = obj\n end\n RUBY\n end\n end\nend\n", __FILE__, __LINE__ + 1) |
#class_inheritable_accessor(*syms) ⇒ Array[#to_s]
Defines class-level inheritable attribute accessor. Attributes are available to subclasses, each subclass has a copy of parent’s attribute.
define inheritable accessor for.
183 184 185 186 |
# File 'lib/couchrest/support/class.rb', line 183 def class_inheritable_accessor(*syms) class_inheritable_reader(*syms) class_inheritable_writer(*syms) 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
Defines class-level inheritable attribute reader. Attributes are available to subclasses, each subclass has a copy of parent’s attribute.
(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.
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/couchrest/support/class.rb', line 124 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.is_a?(Symbol) ? 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
Defines class-level inheritable attribute writer. Attributes are available to subclasses, each subclass has a copy of parent’s attribute.
define inheritable writer for. class_eval(<<-RUBY, __FILE__, __LINE__), but we should codify it somewhere.
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File 'lib/couchrest/support/class.rb', line 158 def class_inheritable_writer(*ivars) instance_writer = ivars.pop[:instance_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 end\nend\n", __FILE__, __LINE__ + 1 |