mongoid 2.0.0.beta.20 → 2.0.0.rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +8 -0
- data/Rakefile +51 -0
- data/lib/config/locales/nl.yml +39 -0
- data/lib/config/locales/ro.yml +1 -1
- data/lib/mongoid.rb +17 -17
- data/lib/mongoid/atomicity.rb +54 -22
- data/lib/mongoid/attributes.rb +145 -125
- data/lib/mongoid/callbacks.rb +7 -2
- data/lib/mongoid/collection.rb +49 -32
- data/lib/mongoid/collections.rb +0 -1
- data/lib/mongoid/components.rb +34 -29
- data/lib/mongoid/config.rb +207 -193
- data/lib/mongoid/config/database.rb +167 -0
- data/lib/mongoid/contexts.rb +2 -5
- data/lib/mongoid/contexts/enumerable.rb +30 -4
- data/lib/mongoid/contexts/ids.rb +2 -2
- data/lib/mongoid/contexts/mongo.rb +30 -5
- data/lib/mongoid/copyable.rb +44 -0
- data/lib/mongoid/criteria.rb +110 -56
- data/lib/mongoid/criterion/creational.rb +34 -0
- data/lib/mongoid/criterion/destructive.rb +37 -0
- data/lib/mongoid/criterion/exclusion.rb +3 -1
- data/lib/mongoid/criterion/inclusion.rb +59 -64
- data/lib/mongoid/criterion/inspection.rb +22 -0
- data/lib/mongoid/criterion/optional.rb +42 -54
- data/lib/mongoid/criterion/selector.rb +9 -0
- data/lib/mongoid/default_scope.rb +28 -0
- data/lib/mongoid/deprecation.rb +5 -5
- data/lib/mongoid/dirty.rb +4 -5
- data/lib/mongoid/document.rb +161 -114
- data/lib/mongoid/extensions.rb +7 -11
- data/lib/mongoid/extensions/array/parentization.rb +2 -2
- data/lib/mongoid/extensions/date/conversions.rb +1 -1
- data/lib/mongoid/extensions/hash/conversions.rb +0 -23
- data/lib/mongoid/extensions/nil/collectionization.rb +12 -0
- data/lib/mongoid/extensions/object/reflections.rb +17 -0
- data/lib/mongoid/extensions/object/yoda.rb +27 -0
- data/lib/mongoid/extensions/string/conversions.rb +23 -4
- data/lib/mongoid/extensions/time_conversions.rb +4 -4
- data/lib/mongoid/field.rb +30 -19
- data/lib/mongoid/fields.rb +15 -5
- data/lib/mongoid/finders.rb +19 -11
- data/lib/mongoid/hierarchy.rb +34 -28
- data/lib/mongoid/identity.rb +62 -20
- data/lib/mongoid/inspection.rb +58 -0
- data/lib/mongoid/matchers.rb +20 -0
- data/lib/mongoid/multi_database.rb +11 -0
- data/lib/mongoid/nested_attributes.rb +41 -0
- data/lib/mongoid/paranoia.rb +3 -4
- data/lib/mongoid/paths.rb +1 -1
- data/lib/mongoid/persistence.rb +89 -90
- data/lib/mongoid/persistence/command.rb +20 -4
- data/lib/mongoid/persistence/insert.rb +13 -11
- data/lib/mongoid/persistence/insert_embedded.rb +8 -6
- data/lib/mongoid/persistence/remove.rb +6 -4
- data/lib/mongoid/persistence/remove_all.rb +6 -4
- data/lib/mongoid/persistence/remove_embedded.rb +8 -6
- data/lib/mongoid/persistence/update.rb +12 -10
- data/lib/mongoid/railtie.rb +2 -2
- data/lib/mongoid/railties/database.rake +10 -9
- data/lib/mongoid/relations.rb +104 -0
- data/lib/mongoid/relations/accessors.rb +154 -0
- data/lib/mongoid/relations/auto_save.rb +34 -0
- data/lib/mongoid/relations/binding.rb +24 -0
- data/lib/mongoid/relations/bindings.rb +9 -0
- data/lib/mongoid/relations/bindings/embedded/in.rb +77 -0
- data/lib/mongoid/relations/bindings/embedded/many.rb +93 -0
- data/lib/mongoid/relations/bindings/embedded/one.rb +65 -0
- data/lib/mongoid/relations/bindings/referenced/in.rb +78 -0
- data/lib/mongoid/relations/bindings/referenced/many.rb +93 -0
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +94 -0
- data/lib/mongoid/relations/bindings/referenced/one.rb +63 -0
- data/lib/mongoid/relations/builder.rb +41 -0
- data/lib/mongoid/relations/builders.rb +79 -0
- data/lib/mongoid/relations/builders/embedded/in.rb +25 -0
- data/lib/mongoid/relations/builders/embedded/many.rb +32 -0
- data/lib/mongoid/relations/builders/embedded/one.rb +26 -0
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +116 -0
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +135 -0
- data/lib/mongoid/relations/builders/referenced/in.rb +32 -0
- data/lib/mongoid/relations/builders/referenced/many.rb +26 -0
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +29 -0
- data/lib/mongoid/relations/builders/referenced/one.rb +30 -0
- data/lib/mongoid/relations/cascading.rb +55 -0
- data/lib/mongoid/relations/cascading/delete.rb +19 -0
- data/lib/mongoid/relations/cascading/destroy.rb +19 -0
- data/lib/mongoid/relations/cascading/nullify.rb +18 -0
- data/lib/mongoid/relations/cascading/strategy.rb +26 -0
- data/lib/mongoid/relations/cyclic.rb +97 -0
- data/lib/mongoid/relations/embedded/in.rb +172 -0
- data/lib/mongoid/relations/embedded/many.rb +450 -0
- data/lib/mongoid/relations/embedded/one.rb +169 -0
- data/lib/mongoid/relations/macros.rb +302 -0
- data/lib/mongoid/relations/many.rb +185 -0
- data/lib/mongoid/relations/metadata.rb +529 -0
- data/lib/mongoid/relations/nested_builder.rb +52 -0
- data/lib/mongoid/relations/one.rb +29 -0
- data/lib/mongoid/relations/polymorphic.rb +54 -0
- data/lib/mongoid/relations/proxy.rb +122 -0
- data/lib/mongoid/relations/referenced/in.rb +214 -0
- data/lib/mongoid/relations/referenced/many.rb +358 -0
- data/lib/mongoid/relations/referenced/many_to_many.rb +379 -0
- data/lib/mongoid/relations/referenced/one.rb +204 -0
- data/lib/mongoid/relations/reflections.rb +45 -0
- data/lib/mongoid/safe.rb +11 -1
- data/lib/mongoid/safety.rb +122 -97
- data/lib/mongoid/scope.rb +14 -9
- data/lib/mongoid/state.rb +37 -3
- data/lib/mongoid/timestamps.rb +11 -0
- data/lib/mongoid/validations.rb +42 -3
- data/lib/mongoid/validations/associated.rb +8 -5
- data/lib/mongoid/validations/uniqueness.rb +23 -2
- data/lib/mongoid/version.rb +1 -1
- data/lib/mongoid/versioning.rb +25 -16
- data/lib/rails/generators/mongoid/model/templates/model.rb +3 -1
- metadata +95 -80
- data/lib/mongoid/associations.rb +0 -364
- data/lib/mongoid/associations/embedded_in.rb +0 -74
- data/lib/mongoid/associations/embeds_many.rb +0 -299
- data/lib/mongoid/associations/embeds_one.rb +0 -111
- data/lib/mongoid/associations/foreign_key.rb +0 -35
- data/lib/mongoid/associations/meta_data.rb +0 -38
- data/lib/mongoid/associations/options.rb +0 -78
- data/lib/mongoid/associations/proxy.rb +0 -60
- data/lib/mongoid/associations/referenced_in.rb +0 -70
- data/lib/mongoid/associations/references_many.rb +0 -254
- data/lib/mongoid/associations/references_many_as_array.rb +0 -128
- data/lib/mongoid/associations/references_one.rb +0 -104
- data/lib/mongoid/extensions/array/accessors.rb +0 -17
- data/lib/mongoid/extensions/array/assimilation.rb +0 -26
- data/lib/mongoid/extensions/hash/accessors.rb +0 -42
- data/lib/mongoid/extensions/hash/assimilation.rb +0 -40
- data/lib/mongoid/extensions/nil/assimilation.rb +0 -17
- data/lib/mongoid/memoization.rb +0 -33
@@ -0,0 +1,52 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid # :nodoc:
|
3
|
+
module Relations #:nodoc:
|
4
|
+
|
5
|
+
# This is the superclass for builders that are in charge of handling
|
6
|
+
# creation, deletion, and updates of documents through that ever so lovely
|
7
|
+
# #accepts_nested_attributes_for.
|
8
|
+
class NestedBuilder
|
9
|
+
attr_accessor :attributes, :existing, :metadata, :options
|
10
|
+
|
11
|
+
# Determines if destroys are allowed for this document.
|
12
|
+
#
|
13
|
+
# @example Do we allow a destroy?
|
14
|
+
# builder.allow_destroy?
|
15
|
+
#
|
16
|
+
# @return [ true, false ] True if the allow destroy option was set.
|
17
|
+
#
|
18
|
+
# @since 2.0.0.rc.1
|
19
|
+
def allow_destroy?
|
20
|
+
options[:allow_destroy] || false
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns the reject if option defined with the macro.
|
24
|
+
#
|
25
|
+
# @example Is there a reject proc?
|
26
|
+
# builder.reject?
|
27
|
+
#
|
28
|
+
# @param [ Hash ] attrs The attributes to check for rejection.
|
29
|
+
#
|
30
|
+
# @return [ true, false ] True and call proc if rejectable, false if not.
|
31
|
+
#
|
32
|
+
# @since 2.0.0.rc.1
|
33
|
+
def reject?(attrs)
|
34
|
+
criteria = options[:reject_if]
|
35
|
+
criteria ? criteria.call(attrs) : false
|
36
|
+
end
|
37
|
+
|
38
|
+
# Determines if only updates can occur. Only valid for one-to-one
|
39
|
+
# relations.
|
40
|
+
#
|
41
|
+
# @example Is this update only?
|
42
|
+
# builder.update_only?
|
43
|
+
#
|
44
|
+
# @return [ true, false ] True if the update_only option was set.
|
45
|
+
#
|
46
|
+
# @since 2.0.0.rc.1
|
47
|
+
def update_only?
|
48
|
+
options[:update_only] || false
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid # :nodoc:
|
3
|
+
module Relations #:nodoc:
|
4
|
+
|
5
|
+
# This is the superclass for one to one relations and defines the common
|
6
|
+
# behaviour or those proxies.
|
7
|
+
class One < Proxy
|
8
|
+
|
9
|
+
# Substitutes the supplied target documents for the existing document
|
10
|
+
# in the relation.
|
11
|
+
#
|
12
|
+
# @example Substitute the new document.
|
13
|
+
# person.name.substitute(new_name)
|
14
|
+
#
|
15
|
+
# @param [ Document ] other A document to replace the target.
|
16
|
+
#
|
17
|
+
# @return [ Document, nil ] The relation or nil.
|
18
|
+
#
|
19
|
+
# @since 2.0.0.rc.1
|
20
|
+
def substitute(new_target, options = {})
|
21
|
+
old_target = target
|
22
|
+
tap do |relation|
|
23
|
+
relation.target = new_target
|
24
|
+
new_target ? bind(options) : (unbind(old_target, options) and return nil)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid # :nodoc:
|
3
|
+
module Relations #:nodoc:
|
4
|
+
|
5
|
+
# This module contains the behaviour for handling polymorphic relational
|
6
|
+
# associations.
|
7
|
+
module Polymorphic
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
included do
|
11
|
+
class_inheritable_accessor :polymorphic
|
12
|
+
delegate :polymorphic?, :to => "self.class"
|
13
|
+
end
|
14
|
+
|
15
|
+
module ClassMethods #:nodoc:
|
16
|
+
|
17
|
+
# Attempts to set up the information needed to handle a polymorphic
|
18
|
+
# relation, if the metadata checks out.
|
19
|
+
#
|
20
|
+
# @example Set up the polymorphic information.
|
21
|
+
# Movie.polymorph(metadata)
|
22
|
+
#
|
23
|
+
# @param [ Metadata ] metadata The relation metadata.
|
24
|
+
#
|
25
|
+
# @return [ Class ] The class being set up.
|
26
|
+
#
|
27
|
+
# @since 2.0.0.rc.1
|
28
|
+
def polymorph(metadata)
|
29
|
+
tap do |klass|
|
30
|
+
if metadata.polymorphic?
|
31
|
+
klass.polymorphic = true
|
32
|
+
if metadata.relation.stores_foreign_key?
|
33
|
+
field(metadata.inverse_type, :type => String)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
# Determines if the class is in a polymorphic relations, and thus must
|
40
|
+
# store the _type field in the database.
|
41
|
+
#
|
42
|
+
# @example Check if the class is polymorphic.
|
43
|
+
# Movie.polymorphic?
|
44
|
+
#
|
45
|
+
# @return [ true, false ] True if polymorphic, false if not.
|
46
|
+
#
|
47
|
+
# @since 2.0.0.rc.1
|
48
|
+
def polymorphic?
|
49
|
+
!!polymorphic
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,122 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid # :nodoc:
|
3
|
+
module Relations #:nodoc:
|
4
|
+
|
5
|
+
# This class is the superclass for all relation proxy objects, and contains
|
6
|
+
# common behaviour for all of them.
|
7
|
+
class Proxy
|
8
|
+
|
9
|
+
DEFAULT_OPTIONS = { :building => false, :continue => true }
|
10
|
+
|
11
|
+
# We undefine most methods to get them sent through to the target.
|
12
|
+
instance_methods.each do |method|
|
13
|
+
undef_method(method) unless
|
14
|
+
method =~ /(^__|^send$|^object_id$|^extend$|^tap$)/
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_accessor :base, :metadata, :target
|
18
|
+
|
19
|
+
# Backwards compatibiloty with Mongoid beta releases.
|
20
|
+
delegate :klass, :to => :metadata
|
21
|
+
|
22
|
+
# Convenience for setting the target and the metadata properties since
|
23
|
+
# all proxies will need to do this.
|
24
|
+
#
|
25
|
+
# @example Initialize the proxy.
|
26
|
+
# proxy.init(person, name, metadata)
|
27
|
+
#
|
28
|
+
# @param [ Document ] base The base document on the proxy.
|
29
|
+
# @param [ Document, Array<Document> ] target The target of the proxy.
|
30
|
+
# @param [ Metadata ] metadata The relation's metadata.
|
31
|
+
#
|
32
|
+
# @since 2.0.0.rc.1
|
33
|
+
def init(base, target, metadata, &block)
|
34
|
+
@base, @building, @target, @metadata = base, false, target, metadata
|
35
|
+
metadatafy(target)
|
36
|
+
yield block if block_given?
|
37
|
+
extend Module.new(&metadata.extension) if metadata.extension?
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
# Yields to the block to allow the building flag to get set and unset for
|
43
|
+
# the supplied code.
|
44
|
+
#
|
45
|
+
# @example Set the building status.
|
46
|
+
# person.building { @target << Post.new }
|
47
|
+
#
|
48
|
+
# @since 2.0.0.rc.1
|
49
|
+
def building(&block)
|
50
|
+
@building = true
|
51
|
+
yield block if block_given?
|
52
|
+
@building = false
|
53
|
+
end
|
54
|
+
|
55
|
+
# Convenience method for determining if we are building an association.
|
56
|
+
# We never want to save in this case.
|
57
|
+
#
|
58
|
+
# @example Are we currently building?
|
59
|
+
# person.posts.building?
|
60
|
+
#
|
61
|
+
# @return [ true, false ] True if currently building, false if not.
|
62
|
+
#
|
63
|
+
# @since 2.0.0.rc.1
|
64
|
+
def building?
|
65
|
+
!!@building
|
66
|
+
end
|
67
|
+
|
68
|
+
# Return a new document for the type of class we want to instantiate.
|
69
|
+
# If the type is provided use that, otherwise the klass from the
|
70
|
+
# metadata.
|
71
|
+
#
|
72
|
+
# @example Get an instantiated document.
|
73
|
+
# proxy.instantiated(Person)
|
74
|
+
#
|
75
|
+
# @param [ Class ] type The type of class to instantiate.
|
76
|
+
#
|
77
|
+
# @return [ Document ] The freshly created document.
|
78
|
+
#
|
79
|
+
# @since 2.0.0.rc.1
|
80
|
+
def instantiated(type = nil)
|
81
|
+
type ? type.instantiate : metadata.klass.instantiate
|
82
|
+
end
|
83
|
+
|
84
|
+
# Determines if the target been loaded into memory or not.
|
85
|
+
#
|
86
|
+
# @example Is the proxy loaded?
|
87
|
+
# proxy.loaded?
|
88
|
+
#
|
89
|
+
# @return [ true, false ] True if loaded, false if not.
|
90
|
+
#
|
91
|
+
# @since 2.0.0.rc.1
|
92
|
+
def loaded?
|
93
|
+
!target.is_a?(Mongoid::Criteria)
|
94
|
+
end
|
95
|
+
|
96
|
+
# Takes the supplied document and sets the metadata on it. Used when
|
97
|
+
# creating new documents and adding them to the relation.
|
98
|
+
#
|
99
|
+
# @example Set the metadata.
|
100
|
+
# proxy.metadatafy(address)
|
101
|
+
#
|
102
|
+
# @param [ Document, Array<Document> ] object The object to set the
|
103
|
+
# metadata on.
|
104
|
+
#
|
105
|
+
# @since 2.0.0.rc.1
|
106
|
+
def metadatafy(object)
|
107
|
+
object.to_a.each do |obj|
|
108
|
+
obj.metadata = metadata unless obj.metadata
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Default behavior of method missing should be to delegate all calls
|
113
|
+
# to the target of the proxy. This can be overridden in special cases.
|
114
|
+
#
|
115
|
+
# @param [ String, Symbol ] name The name of the method.
|
116
|
+
# @param [ Array ] *args The arguments passed to the method.
|
117
|
+
def method_missing(name, *args, &block)
|
118
|
+
target.send(name, *args, &block)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,214 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid # :nodoc:
|
3
|
+
module Relations #:nodoc:
|
4
|
+
module Referenced #:nodoc:
|
5
|
+
|
6
|
+
# This class handles all behaviour for relations that are either
|
7
|
+
# one-to-many or one-to-one, where the foreign key is store on this side
|
8
|
+
# of the relation and the reference is to document(s) in another
|
9
|
+
# collection.
|
10
|
+
class In < Relations::One
|
11
|
+
|
12
|
+
# Binds the base object to the inverse of the relation. This is so we
|
13
|
+
# are referenced to the actual objects themselves and dont hit the
|
14
|
+
# database twice when setting the relations up.
|
15
|
+
#
|
16
|
+
# This is called after first creating the relation, or if a new object
|
17
|
+
# is set on the relation.
|
18
|
+
#
|
19
|
+
# @example Bind the relation.
|
20
|
+
# game.person.bind
|
21
|
+
#
|
22
|
+
# @param [ Hash ] options The options to bind with.
|
23
|
+
#
|
24
|
+
# @option options [ true, false ] :building Are we in build mode?
|
25
|
+
# @option options [ true, false ] :continue Continue binding the
|
26
|
+
# inverse?
|
27
|
+
#
|
28
|
+
# @since 2.0.0.rc.1
|
29
|
+
def bind(options = {})
|
30
|
+
binding.bind(options)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Instantiate a new referenced_in relation.
|
34
|
+
#
|
35
|
+
# @example Create the new relation.
|
36
|
+
# Referenced::In.new(game, person, metadata)
|
37
|
+
#
|
38
|
+
# @param [ Document ] base The document this relation hangs off of.
|
39
|
+
# @param [ Document, Array<Document> ] target The target (parent) of the
|
40
|
+
# relation.
|
41
|
+
# @param [ Metadata ] metadata The relation's metadata.
|
42
|
+
def initialize(base, target, metadata)
|
43
|
+
init(base, target, metadata)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Substitutes the supplied target documents for the existing document
|
47
|
+
# in the relation.
|
48
|
+
#
|
49
|
+
# @example Substitute the relation.
|
50
|
+
# name.substitute(new_name)
|
51
|
+
#
|
52
|
+
# @param [ Document, Array<Document> ] new_target The replacement.
|
53
|
+
# @param [ true, false ] building Are we in build mode?
|
54
|
+
#
|
55
|
+
# @return [ In, nil ] The relation or nil.
|
56
|
+
#
|
57
|
+
# @since 2.0.0.rc.1
|
58
|
+
def substitute(new_target, options = {})
|
59
|
+
old_target = target
|
60
|
+
tap do |relation|
|
61
|
+
relation.target = new_target
|
62
|
+
if new_target
|
63
|
+
bind(options)
|
64
|
+
else
|
65
|
+
unbind(old_target, options)
|
66
|
+
nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Unbinds the base object to the inverse of the relation. This occurs
|
72
|
+
# when setting a side of the relation to nil.
|
73
|
+
#
|
74
|
+
# @example Unbind the relation.
|
75
|
+
# game.person.unbind
|
76
|
+
#
|
77
|
+
# @param [ Document, Array<Document> ] old_target The previous target.
|
78
|
+
# @param [ Hash ] options The options to bind with.
|
79
|
+
#
|
80
|
+
# @option options [ true, false ] :building Are we in build mode?
|
81
|
+
# @option options [ true, false ] :continue Continue binding the
|
82
|
+
# inverse?
|
83
|
+
#
|
84
|
+
# @since 2.0.0.rc.1
|
85
|
+
def unbind(old_target, options = {})
|
86
|
+
binding(old_target).unbind(options)
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
# Instantiate the binding associated with this relation.
|
92
|
+
#
|
93
|
+
# @example Get the binding object.
|
94
|
+
# binding([ address ])
|
95
|
+
#
|
96
|
+
# @param [ Document, Array<Document> ] new_target The replacement.
|
97
|
+
#
|
98
|
+
# @return [ Binding ] The binding object.
|
99
|
+
#
|
100
|
+
# @since 2.0.0.rc.1
|
101
|
+
def binding(new_target = nil)
|
102
|
+
Bindings::Referenced::In.new(base, new_target || target, metadata)
|
103
|
+
end
|
104
|
+
|
105
|
+
class << self
|
106
|
+
|
107
|
+
# Return the builder that is responsible for generating the documents
|
108
|
+
# that will be used by this relation.
|
109
|
+
#
|
110
|
+
# @example Get the builder.
|
111
|
+
# Referenced::In.builder(meta, object)
|
112
|
+
#
|
113
|
+
# @param [ Metadata ] meta The metadata of the relation.
|
114
|
+
# @param [ Document, Hash ] object A document or attributes to build
|
115
|
+
# with.
|
116
|
+
#
|
117
|
+
# @return [ Builder ] A new builder object.
|
118
|
+
#
|
119
|
+
# @since 2.0.0.rc.1
|
120
|
+
def builder(meta, object)
|
121
|
+
Builders::Referenced::In.new(meta, object)
|
122
|
+
end
|
123
|
+
|
124
|
+
# Returns true if the relation is an embedded one. In this case
|
125
|
+
# always false.
|
126
|
+
#
|
127
|
+
# @example Is this relation embedded?
|
128
|
+
# Referenced::In.embedded?
|
129
|
+
#
|
130
|
+
# @return [ false ] Always false.
|
131
|
+
#
|
132
|
+
# @since 2.0.0.rc.1
|
133
|
+
def embedded?
|
134
|
+
false
|
135
|
+
end
|
136
|
+
|
137
|
+
# Get the default value for the foreign key.
|
138
|
+
#
|
139
|
+
# @example Get the default.
|
140
|
+
# Referenced::In.foreign_key_default
|
141
|
+
#
|
142
|
+
# @return [ nil ] Always nil.
|
143
|
+
#
|
144
|
+
# @since 2.0.0.rc.1
|
145
|
+
def foreign_key_default
|
146
|
+
nil
|
147
|
+
end
|
148
|
+
|
149
|
+
# Returns the suffix of the foreign key field, either "_id" or "_ids".
|
150
|
+
#
|
151
|
+
# @example Get the suffix for the foreign key.
|
152
|
+
# Referenced::In.foreign_key_suffix
|
153
|
+
#
|
154
|
+
# @return [ String ] "_id"
|
155
|
+
#
|
156
|
+
# @since 2.0.0.rc.1
|
157
|
+
def foreign_key_suffix
|
158
|
+
"_id"
|
159
|
+
end
|
160
|
+
|
161
|
+
# Returns the macro for this relation. Used mostly as a helper in
|
162
|
+
# reflection.
|
163
|
+
#
|
164
|
+
# @example Get the macro.
|
165
|
+
# Referenced::In.macro
|
166
|
+
#
|
167
|
+
# @return [ Symbol ] :referenced_in
|
168
|
+
def macro
|
169
|
+
:referenced_in
|
170
|
+
end
|
171
|
+
|
172
|
+
# Return the nested builder that is responsible for generating the documents
|
173
|
+
# that will be used by this relation.
|
174
|
+
#
|
175
|
+
# @example Get the nested builder.
|
176
|
+
# Referenced::In.builder(attributes, options)
|
177
|
+
#
|
178
|
+
# @param [ Metadata ] metadata The relation metadata.
|
179
|
+
# @param [ Hash ] attributes The attributes to build with.
|
180
|
+
# @param [ Hash ] options The options for the builder.
|
181
|
+
#
|
182
|
+
# @option options [ true, false ] :allow_destroy Can documents be
|
183
|
+
# deleted?
|
184
|
+
# @option options [ Integer ] :limit Max number of documents to
|
185
|
+
# create at once.
|
186
|
+
# @option options [ Proc, Symbol ] :reject_if If documents match this
|
187
|
+
# option then they are ignored.
|
188
|
+
# @option options [ true, false ] :update_only Only existing documents
|
189
|
+
# can be modified.
|
190
|
+
#
|
191
|
+
# @return [ NestedBuilder ] A newly instantiated nested builder object.
|
192
|
+
#
|
193
|
+
# @since 2.0.0.rc.1
|
194
|
+
def nested_builder(metadata, attributes, options)
|
195
|
+
Builders::NestedAttributes::One.new(metadata, attributes, options)
|
196
|
+
end
|
197
|
+
|
198
|
+
# Tells the caller if this relation is one that stores the foreign
|
199
|
+
# key on its own objects.
|
200
|
+
#
|
201
|
+
# @example Does this relation store a foreign key?
|
202
|
+
# Referenced::In.stores_foreign_key?
|
203
|
+
#
|
204
|
+
# @return [ true ] Always true.
|
205
|
+
#
|
206
|
+
# @since 2.0.0.rc.1
|
207
|
+
def stores_foreign_key?
|
208
|
+
true
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
end
|
213
|
+
end
|
214
|
+
end
|