class Mongoid::Relations::Embedded::One

This class defines the behaviour needed for embedded one to one relations.

Constants

VALID_OPTIONS

The allowed options when defining this relation.

@return [ Array<Symbol> ] The allowed options when defining this relation.

@since 6.0.0

Public Class Methods

new(base, target, metadata) click to toggle source

Instantiate a new embeds_one relation.

@example Create the new proxy.

One.new(person, name, metadata)

@param [ Document ] base The document this relation hangs off of. @param [ Document ] target The child document in the relation. @param [ Metadata ] metadata The relation's metadata

# File lib/mongoid/relations/embedded/one.rb, line 30
def initialize(base, target, metadata)
  init(base, target, metadata) do
    characterize_one(target)
    bind_one
    characterize_one(target)
    base._reset_memoized_children!
    target.save if persistable?
  end
end

Private Class Methods

builder(base, meta, object) click to toggle source

Return the builder that is responsible for generating the documents that will be used by this relation.

@example Get the builder.

Embedded::One.builder(meta, object, person)

@param [ Document ] base The base document. @param [ Metadata ] meta The metadata of the relation. @param [ Document, Hash ] object A document or attributes to build with.

@return [ Builder ] A newly instantiated builder object.

@since 2.0.0.rc.1

# File lib/mongoid/relations/embedded/one.rb, line 112
def builder(base, meta, object)
  Builders::Embedded::One.new(base, meta, object)
end
embedded?() click to toggle source

Returns true if the relation is an embedded one. In this case always true.

@example Is this relation embedded?

Embedded::One.embedded?

@return [ true ] true.

@since 2.0.0.rc.1

# File lib/mongoid/relations/embedded/one.rb, line 125
def embedded?
  true
end
foreign_key_suffix() click to toggle source

Returns the suffix of the foreign key field, either “_id” or “_ids”.

@example Get the suffix for the foreign key.

Referenced::Many.foreign_key_suffix

@return [ nil ] nil.

@since 3.0.0

# File lib/mongoid/relations/embedded/one.rb, line 137
def foreign_key_suffix
  nil
end
macro() click to toggle source

Returns the macro for this relation. Used mostly as a helper in reflection.

@example Get the macro.

Mongoid::Relations::Embedded::One.macro

@return [ Symbol ] :embeds_one.

@since 2.0.0.rc.1

# File lib/mongoid/relations/embedded/one.rb, line 150
def macro
  :embeds_one
end
nested_builder(metadata, attributes, options) click to toggle source

Return the nested builder that is responsible for generating the documents that will be used by this relation.

@example Get the builder.

NestedAttributes::One.builder(attributes, options)

@param [ Metadata ] metadata The relation metadata. @param [ Hash ] attributes The attributes to build with. @param [ Hash ] options The options for the builder.

@option options [ true, false ] :allow_destroy Can documents be

deleted?

@option options [ Integer ] :limit Max number of documents to

create at once.

@option options [ Proc, Symbol ] :reject_if If documents match this

option then they are ignored.

@option options [ true, false ] :update_only Only existing documents

can be modified.

@return [ Builder ] A newly instantiated nested builder object.

@since 2.0.0.rc.1

# File lib/mongoid/relations/embedded/one.rb, line 176
def nested_builder(metadata, attributes, options)
  Builders::NestedAttributes::One.new(metadata, attributes, options)
end
path(document) click to toggle source

Get the path calculator for the supplied document.

@example Get the path calculator.

Proxy.path(document)

@param [ Document ] document The document to calculate on.

@return [ Mongoid::Atomic::Paths::Embedded::One ]

The embedded one atomic path calculator.

@since 2.1.0

# File lib/mongoid/relations/embedded/one.rb, line 191
def path(document)
  Mongoid::Atomic::Paths::Embedded::One.new(document)
end
stores_foreign_key?() click to toggle source

Tells the caller if this relation is one that stores the foreign key on its own objects.

@example Does this relation store a foreign key?

Embedded::One.stores_foreign_key?

@return [ false ] false.

@since 2.0.0.rc.1

# File lib/mongoid/relations/embedded/one.rb, line 204
def stores_foreign_key?
  false
end
valid_options() click to toggle source

Get the valid options allowed with this relation.

@example Get the valid options.

Relation.valid_options

@return [ Array<Symbol> ] The valid options.

@since 2.1.0

# File lib/mongoid/relations/embedded/one.rb, line 216
def valid_options
  VALID_OPTIONS
end
validation_default() click to toggle source

Get the default validation setting for the relation. Determines if by default a validates associated will occur.

@example Get the validation default.

Proxy.validation_default

@return [ true, false ] The validation default.

@since 2.1.9

# File lib/mongoid/relations/embedded/one.rb, line 229
def validation_default
  true
end

Public Instance Methods

substitute(replacement) click to toggle source

Substitutes the supplied target documents for the existing document in the relation.

@example Substitute the new document.

person.name.substitute(new_name)

@param [ Document ] other A document to replace the target.

@return [ Document, nil ] The relation or nil.

@since 2.0.0.rc.1

# File lib/mongoid/relations/embedded/one.rb, line 51
def substitute(replacement)
  if replacement != self
    if _assigning?
      base.add_atomic_unset(target) unless replacement
    else
      target.destroy if persistable?
    end
    unbind_one
    return nil unless replacement
    replacement = Factory.build(klass, replacement) if replacement.is_a?(::Hash)
    self.target = replacement
    bind_one
    characterize_one(target)
    target.save if persistable? && !_assigning?
  end
  self
end

Private Instance Methods

binding() click to toggle source

Instantiate the binding associated with this relation.

@example Get the binding.

relation.binding([ address ])

@param [ Document ] new_target The new document to bind with.

@return [ Binding ] The relation's binding.

@since 2.0.0.rc.1

# File lib/mongoid/relations/embedded/one.rb, line 81
def binding
  Bindings::Embedded::One.new(base, target, __metadata)
end
persistable?() click to toggle source

Are we able to persist this relation?

@example Can we persist the relation?

relation.persistable?

@return [ true, false ] If the relation is persistable.

@since 2.1.0

# File lib/mongoid/relations/embedded/one.rb, line 93
def persistable?
  base.persisted? && !_binding? && !_building? && !_assigning?
end