class Mongoid::Fields::Standard

Attributes

default_val[RW]

Defines the behavior for defined fields in the document. Set readers for the instance variables.

label[RW]

Defines the behavior for defined fields in the document. Set readers for the instance variables.

name[RW]

Defines the behavior for defined fields in the document. Set readers for the instance variables.

options[RW]

Defines the behavior for defined fields in the document. Set readers for the instance variables.

Public Class Methods

new(name, options = {}) click to toggle source

Create the new field with a name and optional additional options.

@example Create the new field.

Field.new(:name, :type => String)

@param [ Hash ] options The field options.

@option options [ Class ] :type The class of the field. @option options [ Object ] :default The default value for the field. @option options [ String ] :label The field’s label.

@since 3.0.0

# File lib/mongoid/fields/standard.rb, line 75
def initialize(name, options = {})
  @name = name
  @options = options
  @label = options[:label]
  @default_val = options[:default]

  # @todo: Durran, change API in 4.0 to take the class as a parameter.
  # This is here temporarily to address #2529 without changing the
  # constructor signature.
  if default_val.respond_to?(:call)
    define_default_method(options[:klass])
  end
end

Public Instance Methods

add_atomic_changes(document, name, key, mods, new, old) click to toggle source

Adds the atomic changes for this type of resizable field.

@example Add the atomic changes. field.add_atomic_changes(doc, “key”, {}, [], [])

@param [ Document ] document The document to add to. @param [ String ] name The name of the field. @param [ String ] key The atomic location of the field. @param [ Hash ] mods The current modifications. @param [ Array ] new The new elements to add. @param [ Array ] old The old elements getting removed.

@since 2.4.0

# File lib/mongoid/fields/standard.rb, line 28
def add_atomic_changes(document, name, key, mods, new, old)
  mods[key] = new
end
association() click to toggle source

Get the metadata for the field if its a foreign key.

@example Get the metadata.

field.metadata

@return [ Metadata ] The association metadata.

@since 2.2.0

# File lib/mongoid/fields/standard.rb, line 121
def association
  @association ||= options[:association]
end
eval_default(doc) click to toggle source

Evaluate the default value and return it. Will handle the serialization, proc calls, and duplication if necessary.

@example Evaluate the default value.

field.eval_default(document)

@param [ Document ] doc The document the field belongs to.

@return [ Object ] The serialized default value.

@since 2.1.8

# File lib/mongoid/fields/standard.rb, line 43
def eval_default(doc)
  if fields = doc.__selected_fields
    evaluated_default(doc) if included?(fields)
  else
    evaluated_default(doc)
  end
end
foreign_key?() click to toggle source

Is this field a foreign key?

@example Is the field a foreign key?

field.foreign_key?

@return [ true, false ] If the field is a foreign key.

@since 2.4.0

# File lib/mongoid/fields/standard.rb, line 59
def foreign_key?
  false
end
lazy?() click to toggle source

Does this field do lazy default evaluation?

@example Is the field lazy?

field.lazy?

@return [ true, false ] If the field is lazy.

@since 3.1.0

# File lib/mongoid/fields/standard.rb, line 97
def lazy?
  false
end
localized?() click to toggle source

Is the field localized or not?

@example Is the field localized?

field.localized?

@return [ true, false ] If the field is localized.

@since 2.3.0

# File lib/mongoid/fields/standard.rb, line 109
def localized?
  false
end
object_id_field?() click to toggle source

Is the field a BSON::ObjectId?

@example Is the field a BSON::ObjectId?

field.object_id_field?

@return [ true, false ] If the field is a BSON::ObjectId.

@since 2.2.0

# File lib/mongoid/fields/standard.rb, line 133
def object_id_field?
  @object_id_field ||= (type == BSON::ObjectId)
end
pre_processed?() click to toggle source

Does the field pre-process its default value?

@example Does the field pre-process the default?

field.pre_processed?

@return [ true, false ] If the field’s default is pre-processed.

@since 3.0.0

# File lib/mongoid/fields/standard.rb, line 145
def pre_processed?
  @pre_processed ||=
    (options[:pre_processed] || (default_val && !default_val.is_a?(::Proc)))
end
type() click to toggle source

Get the type of this field - inferred from the class name.

@example Get the type.

field.type

@return [ Class ] The name of the class.

@since 2.1.0

# File lib/mongoid/fields/standard.rb, line 158
def type
  @type ||= options[:type] || Object
end

Private Instance Methods

default_name() click to toggle source

Get the name of the default method for this field.

@api private

@example Get the default name.

field.default_name

@return [ String ] The method name.

@since 3.0.0

# File lib/mongoid/fields/standard.rb, line 174
def default_name
  @default_name ||= "__#{name}_default__"
end
define_default_method(object) click to toggle source

Define the method for getting the default on the document.

@api private

@example Define the method.

field.define_default_method(doc)

@note Ruby’s instance_exec was just too slow.

@param [ Class, Module ] object The class or module the field is

defined on.

@since 3.0.0

# File lib/mongoid/fields/standard.rb, line 191
def define_default_method(object)
  object.__send__(:define_method, default_name, default_val)
end
evaluate_default_proc(doc) click to toggle source

Evaluate the default proc. In some cases we need to instance exec, in others we don’t.

@example Eval the default proc.

field.evaluate_default_proc(band)

@param [ Document ] doc The document.

@return [ Object ] The called proc.

@since 3.0.0

# File lib/mongoid/fields/standard.rb, line 242
def evaluate_default_proc(doc)
  serialize_default(doc.__send__(default_name))
end
evaluated_default(doc) click to toggle source

Get the evaluated default.

@example Get the evaluated default.

field.evaluated_default.

@param [ Document ] doc The doc being applied to.

@return [ Object ] The default value.

@since 2.4.4

# File lib/mongoid/fields/standard.rb, line 223
def evaluated_default(doc)
  if default_val.respond_to?(:call)
    evaluate_default_proc(doc)
  else
    serialize_default(default_val.__deep_copy__)
  end
end
included?(fields) click to toggle source

Is the field included in the fields that were returned from the database? We can apply the default if:

1. The field is included in an only limitation (field: 1)
2. The field is not excluded in a without limitation (field: 0)

@example Is the field included?

field.included?(fields)

@param [ Hash ] fields The field limitations.

@return [ true, false ] If the field was included.

@since 2.4.4

# File lib/mongoid/fields/standard.rb, line 208
def included?(fields)
  (fields.values.first == 1 && fields[name.to_s] == 1) ||
    (fields.values.first == 0 && !fields.has_key?(name.to_s))
end
serialize_default(object) click to toggle source

This is used when default values need to be serialized. Most of the time just return the object.

@api private

@example Serialize the default value.

field.serialize_default(obj)

@param [ Object ] object The default.

@return [ Object ] The serialized default.

@since 3.0.0

# File lib/mongoid/fields/standard.rb, line 259
def serialize_default(object)
  mongoize(object)
end