Class: Mongoid::Fields::Standard

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/mongoid/fields/standard.rb

Overview

Represents a standard field definition (name, type, etc.) used to enforce consistent schema structure to the BSON documents which Mongoid persists.

Direct Known Subclasses

Encrypted, ForeignKey, Localized

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, options = {}) ⇒ Standard

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

Examples:

Create the new field.

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

Parameters:

  • options (Hash) (defaults to: {})

    The field options.

Options Hash (options):

  • :type (Class)

    The class of the field.

  • :default (Object)

    The default value for the field.

  • :label (String)

    The field’s label.



71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/mongoid/fields/standard.rb', line 71

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

Instance Attribute Details

#default_valObject

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



15
16
17
# File 'lib/mongoid/fields/standard.rb', line 15

def default_val
  @default_val
end

#labelObject

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



15
16
17
# File 'lib/mongoid/fields/standard.rb', line 15

def label
  @label
end

#nameObject

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



15
16
17
# File 'lib/mongoid/fields/standard.rb', line 15

def name
  @name
end

#optionsObject

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



15
16
17
# File 'lib/mongoid/fields/standard.rb', line 15

def options
  @options
end

Instance Method Details

#add_atomic_changes(document, name, key, mods, new, old) ⇒ Object

Adds the atomic changes for this type of resizable field.

field.add_atomic_changes(doc, “key”, {}, [], [])

Examples:

Add the atomic changes.

Parameters:

  • document (Document)

    The document to add to.

  • name (String)

    The name of the field.

  • key (String)

    The atomic location of the field.

  • mods (Hash)

    The current modifications.

  • new (Array)

    The new elements to add.

  • old (Array)

    The old elements getting removed.



30
31
32
# File 'lib/mongoid/fields/standard.rb', line 30

def add_atomic_changes(document, name, key, mods, new, old)
  mods[key] = new
end

#associationMetadata

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

Examples:

Get the metadata.

field.

Returns:

  • (Metadata)

    The association metadata.



121
122
123
# File 'lib/mongoid/fields/standard.rb', line 121

def association
  @association ||= options[:association]
end

#eval_default(doc) ⇒ Object

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

Examples:

Evaluate the default value.

field.eval_default(document)

Parameters:

  • doc (Document)

    The document the field belongs to.

Returns:

  • (Object)

    The serialized default value.



43
44
45
46
47
48
49
# 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?true | false

Is this field a foreign key?

Examples:

Is the field a foreign key?

field.foreign_key?

Returns:

  • (true | false)

    If the field is a foreign key.



57
58
59
# File 'lib/mongoid/fields/standard.rb', line 57

def foreign_key?
  false
end

#lazy?true | false

Does this field do lazy default evaluation?

Examples:

Is the field lazy?

field.lazy?

Returns:

  • (true | false)

    If the field is lazy.



91
92
93
# File 'lib/mongoid/fields/standard.rb', line 91

def lazy?
  false
end

#localize_present?true | false

Is the localized field enforcing values to be present?

Examples:

Is the localized field enforcing values to be present?

field.localize_present?

Returns:

  • (true | false)

    If the field enforces present.



111
112
113
# File 'lib/mongoid/fields/standard.rb', line 111

def localize_present?
  false
end

#localized?true | false

Is the field localized or not?

Examples:

Is the field localized?

field.localized?

Returns:

  • (true | false)

    If the field is localized.



101
102
103
# File 'lib/mongoid/fields/standard.rb', line 101

def localized?
  false
end

#object_id_field?true | false

Is the field a BSON::ObjectId?

Examples:

Is the field a BSON::ObjectId?

field.object_id_field?

Returns:

  • (true | false)

    If the field is a BSON::ObjectId.



131
132
133
# File 'lib/mongoid/fields/standard.rb', line 131

def object_id_field?
  @object_id_field ||= (type == BSON::ObjectId)
end

#pre_processed?true | false

Does the field pre-process its default value?

Examples:

Does the field pre-process the default?

field.pre_processed?

Returns:

  • (true | false)

    If the field’s default is pre-processed.



141
142
143
144
# File 'lib/mongoid/fields/standard.rb', line 141

def pre_processed?
  @pre_processed ||=
    (options[:pre_processed] || (default_val && !default_val.is_a?(::Proc)))
end

#typeClass

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

Examples:

Get the type.

field.type

Returns:

  • (Class)

    The name of the class.



152
153
154
# File 'lib/mongoid/fields/standard.rb', line 152

def type
  @type ||= options[:type] || Object
end