Module: MongoMapper::EmbeddedDocument::InstanceMethods
- Defined in:
- lib/mongomapper/embedded_document.rb
Instance Method Summary collapse
- #==(other) ⇒ Object
- #[](name) ⇒ Object
- #[]=(name, value) ⇒ Object
- #attributes ⇒ Object
- #attributes=(attrs) ⇒ Object
- #clone ⇒ Object
- #id ⇒ Object
- #id=(value) ⇒ Object
- #initialize(attrs = {}) ⇒ Object
- #inspect ⇒ Object
- #new? ⇒ Boolean
- #save ⇒ Object
- #to_mongo ⇒ Object
- #update_attributes(attrs = {}) ⇒ Object
- #using_custom_id? ⇒ Boolean
Instance Method Details
#==(other) ⇒ Object
273 274 275 |
# File 'lib/mongomapper/embedded_document.rb', line 273 def ==(other) other.is_a?(self.class) && id == other.id end |
#[](name) ⇒ Object
264 265 266 |
# File 'lib/mongomapper/embedded_document.rb', line 264 def [](name) read_attribute(name) end |
#[]=(name, value) ⇒ Object
268 269 270 271 |
# File 'lib/mongomapper/embedded_document.rb', line 268 def []=(name, value) ensure_key_exists(name) write_attribute(name, value) end |
#attributes ⇒ Object
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 |
# File 'lib/mongomapper/embedded_document.rb', line 220 def attributes attrs = HashWithIndifferentAccess.new .each do |key| puts key.inspect attrs[key.name] = read_attribute(key.name).try(:attributes) end .each do |key| attrs[key.name] = read_attribute(key.name) end .each do |association| documents = instance_variable_get(association.ivar) next if documents.nil? attrs[association.name] = documents.collect { |doc| doc.attributes } end attrs end |
#attributes=(attrs) ⇒ Object
207 208 209 210 211 212 213 214 215 216 217 218 |
# File 'lib/mongomapper/embedded_document.rb', line 207 def attributes=(attrs) return if attrs.blank? attrs.each_pair do |name, value| writer_method = "#{name}=" if respond_to?(writer_method) self.send(writer_method, value) else self[name.to_s] = value end end end |
#clone ⇒ Object
258 259 260 261 262 |
# File 'lib/mongomapper/embedded_document.rb', line 258 def clone clone_attributes = self.attributes clone_attributes.delete("_id") self.class.new(clone_attributes) end |
#id ⇒ Object
277 278 279 |
# File 'lib/mongomapper/embedded_document.rb', line 277 def id read_attribute(:_id) end |
#id=(value) ⇒ Object
281 282 283 284 |
# File 'lib/mongomapper/embedded_document.rb', line 281 def id=(value) @using_custom_id = true write_attribute :_id, value end |
#initialize(attrs = {}) ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/mongomapper/embedded_document.rb', line 172 def initialize(attrs={}) unless attrs.nil? self.class.associations.each_pair do |name, association| if collection = attrs.delete(name) if association.many? && association.klass. root_document = attrs[:_root_document] || self collection.each do |doc| doc[:_root_document] = root_document end end send("#{association.name}=", collection) end end self.attributes = attrs if respond_to?(:_type=) && self['_type'].blank? self._type = self.class.name end end if self.class. if read_attribute(:_id).blank? write_attribute :_id, Mongo::ObjectID.new.to_s @new_document = true else @new_document = false end end end |
#inspect ⇒ Object
290 291 292 293 294 295 |
# File 'lib/mongomapper/embedded_document.rb', line 290 def inspect attributes_as_nice_string = key_names.collect do |name| "#{name}: #{read_attribute(name).inspect}" end.join(", ") "#<#{self.class} #{attributes_as_nice_string}>" end |
#new? ⇒ Boolean
203 204 205 |
# File 'lib/mongomapper/embedded_document.rb', line 203 def new? !!@new_document end |
#save ⇒ Object
297 298 299 300 301 |
# File 'lib/mongomapper/embedded_document.rb', line 297 def save if _root_document _root_document.save end end |
#to_mongo ⇒ Object
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 |
# File 'lib/mongomapper/embedded_document.rb', line 241 def to_mongo attrs = HashWithIndifferentAccess.new _keys.each_pair do |name, key| value = key.set(read_attribute(key.name)) attrs[name] = value end .each do |association| if documents = instance_variable_get(association.ivar) attrs[association.name] = documents.map { |document| document.to_mongo } end end attrs end |
#update_attributes(attrs = {}) ⇒ Object
303 304 305 306 |
# File 'lib/mongomapper/embedded_document.rb', line 303 def update_attributes(attrs={}) self.attributes = attrs save end |
#using_custom_id? ⇒ Boolean
286 287 288 |
# File 'lib/mongomapper/embedded_document.rb', line 286 def using_custom_id? !!@using_custom_id end |