Module: Mongoid::Document
- Extended by:
- ActiveSupport::Concern
- Includes:
- Components
- Defined in:
- lib/mongoid/document.rb,
lib/mongoid/railties/document.rb
Overview
This is the base module for all domain objects that need to be persisted to the database as documents.
Defined Under Namespace
Modules: ClassMethods
Constant Summary
Constants included from Components
Constants included from Copyable
Constants included from Callbacks
Constants included from Atomic
Instance Attribute Summary collapse
-
#new_record ⇒ Object
readonly
Returns the value of attribute new_record.
Attributes included from State
#destroyed, #flagged_for_destroy
Attributes included from Relations
Attributes included from Keys
Attributes included from Attributes
Instance Method Summary collapse
-
#<=>(other) ⇒ Integer
Default comparison is via the string version of the id.
-
#==(other) ⇒ true, false
Performs equality checking on the document ids.
-
#===(other) ⇒ true, false
Performs class equality checking.
-
#_destroy ⇒ Object
Used in conjunction with fields_for to build a form element for the destruction of this association.
-
#as_document ⇒ Hash
Return a hash of the entire document hierarchy from this document and below.
-
#becomes(klass) ⇒ Document
Returns an instance of the specified class with the attributes and errors of the current document.
-
#cache_key ⇒ String
Print out the cache key.
-
#eql?(other) ⇒ true, false
Delegates to ==.
-
#freeze ⇒ Document
Freezes the internal attributes of the document.
-
#frozen? ⇒ true, false
Checks if the document is frozen.
-
#hash ⇒ Integer
Delegates to id in order to allow two records of the same type and id to work with something like:.
-
#identify ⇒ BSON::ObjectId, String
Generate an id for this
Document
. -
#initialize(attrs = nil, options = nil) ⇒ Document
Instantiate a new
Document
, setting the Document’s attributes if given. -
#to_a ⇒ Array<Document>
Return an array with this
Document
only in it. -
#to_key ⇒ Object
Return the key value for the document.
Methods included from Components
Methods included from Callbacks
#callback_executable?, #run_callbacks
Methods included from Validations
#begin_validate, #exit_validate, #read_attribute_for_validation, #valid?, #validated?
Methods included from Timestamps::Timeless
Methods included from State
#destroyed?, #flagged_for_destroy?, #new_record?, #persisted?, #pushable?, #settable?, #updateable?
Methods included from Sharding
#shard_key_fields, #shard_key_selector
Methods included from Serialization
Methods included from Safety
merge_safety_options, #safely, #unsafely
Methods included from Reloading
Methods included from Relations
#embedded?, #embedded_many?, #embedded_one?, #referenced_many?, #referenced_one?, #reload_relations
Methods included from Relations::Synchronization
#remove_inverse_keys, #syncable?, #synced, #synced?, #update_inverse_keys
Methods included from Relations::Reflections
#reflect_on_all_associations, #reflect_on_association
Methods included from Relations::Macros
Methods included from Relations::Cascading
Methods included from Relations::Accessors
#build, #create_relation, #relation_exists?, #set_relation
Methods included from Persistence
#destroy, #insert, #remove, #save!, #touch, #update, #update_attribute, #update_attributes, #update_attributes!, #upsert
Methods included from Persistence::Atomic
#add_to_set, #bit, #inc, #pop, #pull, #pull_all, #push, #push_all, #rename, #set, #unset
Methods included from Matchers
Methods included from Keys
#primary_key, #using_object_ids?
Methods included from Inspection
Methods included from Hierarchy
#_children, #_root, #hereditary?, #parentize, #remove_child, #reset_persisted_children
Methods included from Fields
#apply_default, #apply_defaults, #apply_non_proc_defaults, #apply_proc_defaults, #defaults, option, options
Methods included from Collections
Methods included from Attributes
#assign_attributes, #attribute_present?, #read_attribute, #remove_attribute, #respond_to?, #write_attribute, #write_attributes
Methods included from Attributes::Processing
Methods included from Dirty
#changed, #changed?, #changed_attributes, #changes, #children_changed?, #move_changes, #previous_changes, #remove_change, #setters
Methods included from Atomic
#add_atomic_pull, #atomic_array_add_to_sets, #atomic_array_pulls, #atomic_array_pushes, #atomic_delete_modifier, #atomic_insert_modifier, #atomic_path, #atomic_position, #atomic_pulls, #atomic_pushes, #atomic_selector, #atomic_sets, #atomic_unsets, #atomic_updates, #delayed_atomic_pulls, #delayed_atomic_sets
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class Mongoid::Attributes
Instance Attribute Details
#new_record ⇒ Object (readonly)
Returns the value of attribute new_record.
10 11 12 |
# File 'lib/mongoid/document.rb', line 10 def new_record @new_record end |
Instance Method Details
#<=>(other) ⇒ Integer
Default comparison is via the string version of the id.
20 21 22 |
# File 'lib/mongoid/document.rb', line 20 def <=>(other) attributes["_id"].to_s <=> other.attributes["_id"].to_s end |
#==(other) ⇒ true, false
Performs equality checking on the document ids. For more robust equality checking please override this method.
33 34 35 36 |
# File 'lib/mongoid/document.rb', line 33 def ==(other) self.class == other.class && attributes["_id"] == other.attributes["_id"] end |
#===(other) ⇒ true, false
Performs class equality checking.
46 47 48 49 50 51 52 |
# File 'lib/mongoid/document.rb', line 46 def ===(other) if other.class == Class self.class === other else id == other.id end end |
#_destroy ⇒ Object
Used in conjunction with fields_for to build a form element for the destruction of this association. Always returns false because Mongoid only supports immediate deletion of associations.
See ActionView::Helpers::FormHelper::fields_for for more info.
8 9 10 |
# File 'lib/mongoid/railties/document.rb', line 8 def _destroy false end |
#as_document ⇒ Hash
Return a hash of the entire document hierarchy from this document and below. Used when the attributes are needed for everything and not just the current document.
179 180 181 182 183 184 185 186 187 188 189 |
# File 'lib/mongoid/document.rb', line 179 def as_document attributes.tap do |attrs| return attrs if frozen? relations.each_pair do |name, | if . relation = send(name) attrs[name] = relation.as_document unless relation.blank? end end end end |
#becomes(klass) ⇒ Document
Returns an instance of the specified class with the attributes and errors of the current document.
202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/mongoid/document.rb', line 202 def becomes(klass) unless klass.include?(Mongoid::Document) raise ArgumentError, "A class which includes Mongoid::Document is expected" end klass.instantiate(frozen? ? attributes.dup : attributes).tap do |became| became.instance_variable_set(:@errors, errors) became.instance_variable_set(:@new_record, new_record?) became.instance_variable_set(:@destroyed, destroyed?) became._type = klass.to_s end end |
#cache_key ⇒ String
Print out the cache key. This will append different values on the plural model name.
If new_record? - will append /new If not - will append /id-updated_at.to_s(:number) Without updated_at - will append /id
This is usually called insode a cache() block
229 230 231 232 233 |
# File 'lib/mongoid/document.rb', line 229 def cache_key return "#{model_key}/new" if new_record? return "#{model_key}/#{id}-#{updated_at.utc.to_s(:number)}" unless self[:updated_at].nil? "#{model_key}/#{id}" end |
#eql?(other) ⇒ true, false
Delegates to ==. Used when needing checks in hashes.
62 63 64 |
# File 'lib/mongoid/document.rb', line 62 def eql?(other) self == (other) end |
#freeze ⇒ Document
Freezes the internal attributes of the document.
74 75 76 |
# File 'lib/mongoid/document.rb', line 74 def freeze tap { |doc| doc.as_document.freeze } end |
#frozen? ⇒ true, false
Checks if the document is frozen
86 87 88 |
# File 'lib/mongoid/document.rb', line 86 def frozen? attributes.frozen? end |
#hash ⇒ Integer
Delegates to id in order to allow two records of the same type and id to work with something like:
[ Person.find(1), Person.find(2), Person.find(3) ] &
[ Person.find(1), Person.find(4) ] # => [ Person.find(1) ]
100 101 102 |
# File 'lib/mongoid/document.rb', line 100 def hash attributes["_id"].hash end |
#identify ⇒ BSON::ObjectId, String
Generate an id for this Document
.
110 111 112 |
# File 'lib/mongoid/document.rb', line 110 def identify Identity.new(self).create end |
#initialize(attrs = nil, options = nil) ⇒ Document
Instantiate a new Document
, setting the Document’s attributes if given. If no attributes are provided, they will be initialized with an empty Hash
.
If a primary key is defined, the document’s id will be set to that key, otherwise it will be set to a fresh BSON::ObjectId
string.
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/mongoid/document.rb', line 129 def initialize(attrs = nil, = nil) _building do @new_record = true @attributes ||= {} ||= {} apply_non_proc_defaults identify if using_object_ids? process(attrs, [:as] || :default, ![:without_protection]) do identify unless using_object_ids? yield(self) if block_given? end apply_proc_defaults run_callbacks(:initialize) { self } end end |
#to_a ⇒ Array<Document>
Return an array with this Document
only in it.
167 168 169 |
# File 'lib/mongoid/document.rb', line 167 def to_a [ self ] end |
#to_key ⇒ Object
Return the key value for the document.
153 154 155 156 157 158 159 |
# File 'lib/mongoid/document.rb', line 153 def to_key if destroyed? [ id ] else persisted? ? [ id ] : nil end end |