mongoid-locomotive 2.0.0.beta9
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/MIT_LICENSE +20 -0
- data/README.rdoc +47 -0
- data/lib/mongoid.rb +141 -0
- data/lib/mongoid/associations.rb +306 -0
- data/lib/mongoid/associations/embedded_in.rb +74 -0
- data/lib/mongoid/associations/embeds_many.rb +280 -0
- data/lib/mongoid/associations/embeds_one.rb +97 -0
- data/lib/mongoid/associations/foreign_key.rb +35 -0
- data/lib/mongoid/associations/meta_data.rb +38 -0
- data/lib/mongoid/associations/options.rb +62 -0
- data/lib/mongoid/associations/proxy.rb +33 -0
- data/lib/mongoid/associations/referenced_in.rb +59 -0
- data/lib/mongoid/associations/references_many.rb +245 -0
- data/lib/mongoid/associations/references_many_as_array.rb +78 -0
- data/lib/mongoid/associations/references_one.rb +99 -0
- data/lib/mongoid/atomicity.rb +55 -0
- data/lib/mongoid/attributes.rb +242 -0
- data/lib/mongoid/callbacks.rb +21 -0
- data/lib/mongoid/collection.rb +120 -0
- data/lib/mongoid/collections.rb +71 -0
- data/lib/mongoid/collections/cyclic_iterator.rb +34 -0
- data/lib/mongoid/collections/master.rb +29 -0
- data/lib/mongoid/collections/operations.rb +41 -0
- data/lib/mongoid/collections/slaves.rb +45 -0
- data/lib/mongoid/components.rb +34 -0
- data/lib/mongoid/config.rb +263 -0
- data/lib/mongoid/contexts.rb +24 -0
- data/lib/mongoid/contexts/enumerable.rb +156 -0
- data/lib/mongoid/contexts/ids.rb +25 -0
- data/lib/mongoid/contexts/mongo.rb +285 -0
- data/lib/mongoid/contexts/paging.rb +50 -0
- data/lib/mongoid/criteria.rb +248 -0
- data/lib/mongoid/criterion/complex.rb +21 -0
- data/lib/mongoid/criterion/exclusion.rb +65 -0
- data/lib/mongoid/criterion/inclusion.rb +110 -0
- data/lib/mongoid/criterion/optional.rb +189 -0
- data/lib/mongoid/cursor.rb +81 -0
- data/lib/mongoid/deprecation.rb +21 -0
- data/lib/mongoid/dirty.rb +252 -0
- data/lib/mongoid/document.rb +210 -0
- data/lib/mongoid/errors.rb +131 -0
- data/lib/mongoid/extensions.rb +115 -0
- data/lib/mongoid/extensions/array/accessors.rb +17 -0
- data/lib/mongoid/extensions/array/assimilation.rb +26 -0
- data/lib/mongoid/extensions/array/conversions.rb +23 -0
- data/lib/mongoid/extensions/array/parentization.rb +13 -0
- data/lib/mongoid/extensions/big_decimal/conversions.rb +19 -0
- data/lib/mongoid/extensions/binary/conversions.rb +17 -0
- data/lib/mongoid/extensions/boolean/conversions.rb +27 -0
- data/lib/mongoid/extensions/date/conversions.rb +24 -0
- data/lib/mongoid/extensions/datetime/conversions.rb +12 -0
- data/lib/mongoid/extensions/false_class/equality.rb +13 -0
- data/lib/mongoid/extensions/float/conversions.rb +20 -0
- data/lib/mongoid/extensions/hash/accessors.rb +42 -0
- data/lib/mongoid/extensions/hash/assimilation.rb +40 -0
- data/lib/mongoid/extensions/hash/conversions.rb +42 -0
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +20 -0
- data/lib/mongoid/extensions/hash/scoping.rb +12 -0
- data/lib/mongoid/extensions/integer/conversions.rb +20 -0
- data/lib/mongoid/extensions/nil/assimilation.rb +17 -0
- data/lib/mongoid/extensions/object/conversions.rb +21 -0
- data/lib/mongoid/extensions/objectid/conversions.rb +15 -0
- data/lib/mongoid/extensions/proc/scoping.rb +12 -0
- data/lib/mongoid/extensions/set/conversions.rb +20 -0
- data/lib/mongoid/extensions/string/conversions.rb +15 -0
- data/lib/mongoid/extensions/string/inflections.rb +97 -0
- data/lib/mongoid/extensions/symbol/inflections.rb +40 -0
- data/lib/mongoid/extensions/time_conversions.rb +35 -0
- data/lib/mongoid/extensions/true_class/equality.rb +13 -0
- data/lib/mongoid/extras.rb +61 -0
- data/lib/mongoid/factory.rb +20 -0
- data/lib/mongoid/field.rb +83 -0
- data/lib/mongoid/fields.rb +62 -0
- data/lib/mongoid/finders.rb +145 -0
- data/lib/mongoid/hierarchy.rb +74 -0
- data/lib/mongoid/identity.rb +47 -0
- data/lib/mongoid/indexes.rb +27 -0
- data/lib/mongoid/javascript.rb +21 -0
- data/lib/mongoid/javascript/functions.yml +37 -0
- data/lib/mongoid/logger.rb +19 -0
- data/lib/mongoid/matchers.rb +35 -0
- data/lib/mongoid/matchers/all.rb +11 -0
- data/lib/mongoid/matchers/default.rb +26 -0
- data/lib/mongoid/matchers/exists.rb +13 -0
- data/lib/mongoid/matchers/gt.rb +11 -0
- data/lib/mongoid/matchers/gte.rb +11 -0
- data/lib/mongoid/matchers/in.rb +11 -0
- data/lib/mongoid/matchers/lt.rb +11 -0
- data/lib/mongoid/matchers/lte.rb +11 -0
- data/lib/mongoid/matchers/ne.rb +11 -0
- data/lib/mongoid/matchers/nin.rb +11 -0
- data/lib/mongoid/matchers/size.rb +11 -0
- data/lib/mongoid/memoization.rb +33 -0
- data/lib/mongoid/named_scope.rb +37 -0
- data/lib/mongoid/paranoia.rb +106 -0
- data/lib/mongoid/paths.rb +61 -0
- data/lib/mongoid/persistence.rb +216 -0
- data/lib/mongoid/persistence/command.rb +39 -0
- data/lib/mongoid/persistence/insert.rb +48 -0
- data/lib/mongoid/persistence/insert_embedded.rb +44 -0
- data/lib/mongoid/persistence/remove.rb +39 -0
- data/lib/mongoid/persistence/remove_all.rb +38 -0
- data/lib/mongoid/persistence/remove_embedded.rb +50 -0
- data/lib/mongoid/persistence/update.rb +71 -0
- data/lib/mongoid/railtie.rb +67 -0
- data/lib/mongoid/railties/database.rake +60 -0
- data/lib/mongoid/scope.rb +75 -0
- data/lib/mongoid/state.rb +32 -0
- data/lib/mongoid/timestamps.rb +27 -0
- data/lib/mongoid/validations.rb +51 -0
- data/lib/mongoid/validations/associated.rb +32 -0
- data/lib/mongoid/validations/locale/en.yml +5 -0
- data/lib/mongoid/validations/uniqueness.rb +56 -0
- data/lib/mongoid/version.rb +4 -0
- data/lib/mongoid/versioning.rb +26 -0
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +24 -0
- data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
- data/lib/rails/generators/mongoid/model/templates/model.rb +15 -0
- data/lib/rails/generators/mongoid_generator.rb +61 -0
- data/spec/integration/mongoid/association_attributes_spec.rb +71 -0
- data/spec/integration/mongoid/associations_spec.rb +768 -0
- data/spec/integration/mongoid/attributes_spec.rb +59 -0
- data/spec/integration/mongoid/callback_spec.rb +33 -0
- data/spec/integration/mongoid/contexts/enumerable_spec.rb +33 -0
- data/spec/integration/mongoid/criteria_spec.rb +281 -0
- data/spec/integration/mongoid/dirty_spec.rb +85 -0
- data/spec/integration/mongoid/document_spec.rb +741 -0
- data/spec/integration/mongoid/extensions_spec.rb +22 -0
- data/spec/integration/mongoid/finders_spec.rb +119 -0
- data/spec/integration/mongoid/inheritance_spec.rb +171 -0
- data/spec/integration/mongoid/named_scope_spec.rb +58 -0
- data/spec/integration/mongoid/paranoia_spec.rb +44 -0
- data/spec/integration/mongoid/persistence/update_spec.rb +46 -0
- data/spec/integration/mongoid/persistence_spec.rb +311 -0
- data/spec/integration/mongoid/validations/uniqueness_spec.rb +206 -0
- data/spec/models/account.rb +5 -0
- data/spec/models/address.rb +40 -0
- data/spec/models/agent.rb +7 -0
- data/spec/models/animal.rb +15 -0
- data/spec/models/answer.rb +4 -0
- data/spec/models/callbacks.rb +47 -0
- data/spec/models/category.rb +13 -0
- data/spec/models/comment.rb +10 -0
- data/spec/models/country_code.rb +6 -0
- data/spec/models/employer.rb +5 -0
- data/spec/models/favorite.rb +8 -0
- data/spec/models/game.rb +9 -0
- data/spec/models/inheritance.rb +72 -0
- data/spec/models/location.rb +5 -0
- data/spec/models/login.rb +6 -0
- data/spec/models/mixed_drink.rb +4 -0
- data/spec/models/name.rb +13 -0
- data/spec/models/namespacing.rb +11 -0
- data/spec/models/paranoid_post.rb +18 -0
- data/spec/models/parents.rb +32 -0
- data/spec/models/patient.rb +15 -0
- data/spec/models/person.rb +106 -0
- data/spec/models/pet.rb +7 -0
- data/spec/models/pet_owner.rb +6 -0
- data/spec/models/phone.rb +7 -0
- data/spec/models/post.rb +25 -0
- data/spec/models/preference.rb +7 -0
- data/spec/models/question.rb +8 -0
- data/spec/models/survey.rb +6 -0
- data/spec/models/translation.rb +5 -0
- data/spec/models/user.rb +6 -0
- data/spec/models/user_accout.rb +5 -0
- data/spec/models/vet_visit.rb +5 -0
- data/spec/models/video.rb +5 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/unit/mongoid/associations/embedded_in_spec.rb +193 -0
- data/spec/unit/mongoid/associations/embeds_many_spec.rb +626 -0
- data/spec/unit/mongoid/associations/embeds_one_spec.rb +287 -0
- data/spec/unit/mongoid/associations/foreign_key_spec.rb +90 -0
- data/spec/unit/mongoid/associations/meta_data_spec.rb +110 -0
- data/spec/unit/mongoid/associations/options_spec.rb +215 -0
- data/spec/unit/mongoid/associations/referenced_in_spec.rb +145 -0
- data/spec/unit/mongoid/associations/references_many_as_array_spec.rb +424 -0
- data/spec/unit/mongoid/associations/references_many_spec.rb +502 -0
- data/spec/unit/mongoid/associations/references_one_spec.rb +204 -0
- data/spec/unit/mongoid/associations_spec.rb +688 -0
- data/spec/unit/mongoid/atomicity_spec.rb +164 -0
- data/spec/unit/mongoid/attributes_spec.rb +646 -0
- data/spec/unit/mongoid/callbacks_spec.rb +85 -0
- data/spec/unit/mongoid/collection_spec.rb +187 -0
- data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +75 -0
- data/spec/unit/mongoid/collections/master_spec.rb +41 -0
- data/spec/unit/mongoid/collections/slaves_spec.rb +81 -0
- data/spec/unit/mongoid/collections_spec.rb +98 -0
- data/spec/unit/mongoid/config_spec.rb +298 -0
- data/spec/unit/mongoid/contexts/enumerable_spec.rb +447 -0
- data/spec/unit/mongoid/contexts/mongo_spec.rb +703 -0
- data/spec/unit/mongoid/contexts_spec.rb +25 -0
- data/spec/unit/mongoid/criteria_spec.rb +873 -0
- data/spec/unit/mongoid/criterion/complex_spec.rb +17 -0
- data/spec/unit/mongoid/criterion/exclusion_spec.rb +121 -0
- data/spec/unit/mongoid/criterion/inclusion_spec.rb +274 -0
- data/spec/unit/mongoid/criterion/optional_spec.rb +483 -0
- data/spec/unit/mongoid/cursor_spec.rb +80 -0
- data/spec/unit/mongoid/deprecation_spec.rb +24 -0
- data/spec/unit/mongoid/dirty_spec.rb +430 -0
- data/spec/unit/mongoid/document_spec.rb +623 -0
- data/spec/unit/mongoid/errors_spec.rb +154 -0
- data/spec/unit/mongoid/extensions/array/accessors_spec.rb +50 -0
- data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +24 -0
- data/spec/unit/mongoid/extensions/array/conversions_spec.rb +52 -0
- data/spec/unit/mongoid/extensions/array/parentization_spec.rb +20 -0
- data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +36 -0
- data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +22 -0
- data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +49 -0
- data/spec/unit/mongoid/extensions/date/conversions_spec.rb +145 -0
- data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +14 -0
- data/spec/unit/mongoid/extensions/false_class/equality_spec.rb +35 -0
- data/spec/unit/mongoid/extensions/float/conversions_spec.rb +61 -0
- data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +184 -0
- data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +59 -0
- data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +35 -0
- data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +17 -0
- data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +14 -0
- data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +61 -0
- data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +29 -0
- data/spec/unit/mongoid/extensions/object/conversions_spec.rb +44 -0
- data/spec/unit/mongoid/extensions/objectid/conversions_spec.rb +22 -0
- data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +34 -0
- data/spec/unit/mongoid/extensions/set/conversions_spec.rb +21 -0
- data/spec/unit/mongoid/extensions/string/conversions_spec.rb +28 -0
- data/spec/unit/mongoid/extensions/string/inflections_spec.rb +208 -0
- data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +107 -0
- data/spec/unit/mongoid/extensions/time_conversions_spec.rb +186 -0
- data/spec/unit/mongoid/extensions/true_class/equality_spec.rb +35 -0
- data/spec/unit/mongoid/extras_spec.rb +102 -0
- data/spec/unit/mongoid/factory_spec.rb +31 -0
- data/spec/unit/mongoid/field_spec.rb +169 -0
- data/spec/unit/mongoid/fields_spec.rb +181 -0
- data/spec/unit/mongoid/finders_spec.rb +439 -0
- data/spec/unit/mongoid/hierarchy_spec.rb +68 -0
- data/spec/unit/mongoid/identity_spec.rb +109 -0
- data/spec/unit/mongoid/indexes_spec.rb +99 -0
- data/spec/unit/mongoid/javascript_spec.rb +48 -0
- data/spec/unit/mongoid/logger_spec.rb +38 -0
- data/spec/unit/mongoid/matchers/all_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/default_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/exists_spec.rb +56 -0
- data/spec/unit/mongoid/matchers/gt_spec.rb +39 -0
- data/spec/unit/mongoid/matchers/gte_spec.rb +49 -0
- data/spec/unit/mongoid/matchers/in_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/lt_spec.rb +39 -0
- data/spec/unit/mongoid/matchers/lte_spec.rb +49 -0
- data/spec/unit/mongoid/matchers/ne_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/nin_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/size_spec.rb +27 -0
- data/spec/unit/mongoid/matchers_spec.rb +329 -0
- data/spec/unit/mongoid/memoization_spec.rb +75 -0
- data/spec/unit/mongoid/named_scope_spec.rb +123 -0
- data/spec/unit/mongoid/paranoia_spec.rb +108 -0
- data/spec/unit/mongoid/paths_spec.rb +272 -0
- data/spec/unit/mongoid/persistence/insert_embedded_spec.rb +154 -0
- data/spec/unit/mongoid/persistence/insert_spec.rb +144 -0
- data/spec/unit/mongoid/persistence/remove_all_spec.rb +82 -0
- data/spec/unit/mongoid/persistence/remove_embedded_spec.rb +152 -0
- data/spec/unit/mongoid/persistence/remove_spec.rb +89 -0
- data/spec/unit/mongoid/persistence/update_spec.rb +177 -0
- data/spec/unit/mongoid/persistence_spec.rb +452 -0
- data/spec/unit/mongoid/scope_spec.rb +240 -0
- data/spec/unit/mongoid/serialization_spec.rb +43 -0
- data/spec/unit/mongoid/state_spec.rb +94 -0
- data/spec/unit/mongoid/timestamps_spec.rb +30 -0
- data/spec/unit/mongoid/validations/associated_spec.rb +103 -0
- data/spec/unit/mongoid/validations/uniqueness_spec.rb +201 -0
- data/spec/unit/mongoid/validations_spec.rb +43 -0
- data/spec/unit/mongoid/versioning_spec.rb +41 -0
- data/spec/unit/mongoid_spec.rb +46 -0
- metadata +433 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Set #:nodoc:
|
|
5
|
+
# This module converts set into mongoid related objects.
|
|
6
|
+
module Conversions #:nodoc:
|
|
7
|
+
extend ActiveSupport::Concern
|
|
8
|
+
|
|
9
|
+
module ClassMethods #:nodoc:
|
|
10
|
+
def get(value)
|
|
11
|
+
::Set.new(value)
|
|
12
|
+
end
|
|
13
|
+
def set(value)
|
|
14
|
+
value
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module String #:nodoc:
|
|
5
|
+
module Inflections #:nodoc:
|
|
6
|
+
|
|
7
|
+
ActiveSupport::Inflector.inflections do |inflect|
|
|
8
|
+
inflect.singular("address", "address")
|
|
9
|
+
inflect.singular("addresses", "address")
|
|
10
|
+
inflect.irregular("canvas", "canvases")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Represents how special characters will get converted when creating a
|
|
14
|
+
# composite key that should be unique and part of a url.
|
|
15
|
+
CHAR_CONV = {
|
|
16
|
+
" " => "-",
|
|
17
|
+
"!" => "-excl-",
|
|
18
|
+
"\"" => "-bckslsh-",
|
|
19
|
+
"#" => "-hash-",
|
|
20
|
+
"$" => "-dol-",
|
|
21
|
+
"%" => "-perc-",
|
|
22
|
+
"&" => "-and-",
|
|
23
|
+
"'" => "-quo-",
|
|
24
|
+
"(" => "-oparen-",
|
|
25
|
+
")" => "-cparen-",
|
|
26
|
+
"*" => "-astx-",
|
|
27
|
+
"+" => "-plus-",
|
|
28
|
+
"," => "-comma-",
|
|
29
|
+
"-" => "-dash-",
|
|
30
|
+
"." => "-period-",
|
|
31
|
+
"/" => "-fwdslsh-",
|
|
32
|
+
":" => "-colon-",
|
|
33
|
+
";" => "-semicol-",
|
|
34
|
+
"<" => "-lt-",
|
|
35
|
+
"=" => "-eq-",
|
|
36
|
+
">" => "-gt-",
|
|
37
|
+
"?" => "-ques-",
|
|
38
|
+
"@" => "-at-",
|
|
39
|
+
"[" => "-obrck-",
|
|
40
|
+
"\\" => "-bckslsh-",
|
|
41
|
+
"]" => "-clbrck-",
|
|
42
|
+
"^" => "-carat-",
|
|
43
|
+
"_" => "-undscr-",
|
|
44
|
+
"`" => "-bcktick-",
|
|
45
|
+
"{" => "-ocurly-",
|
|
46
|
+
"|" => "-pipe-",
|
|
47
|
+
"}" => "-clcurly-",
|
|
48
|
+
"~" => "-tilda-"
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
REVERSALS = {
|
|
52
|
+
"asc" => "desc",
|
|
53
|
+
"ascending" => "descending",
|
|
54
|
+
"desc" => "asc",
|
|
55
|
+
"descending" => "ascending"
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
def collectionize
|
|
59
|
+
tableize.gsub("/", "_")
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def identify
|
|
63
|
+
if Mongoid.parameterize_keys
|
|
64
|
+
key = ""
|
|
65
|
+
each_char { |c| key += (CHAR_CONV[c] || c.downcase) }; key
|
|
66
|
+
else
|
|
67
|
+
self
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
def labelize
|
|
72
|
+
underscore.humanize
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def invert
|
|
76
|
+
REVERSALS[self]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def singular?
|
|
80
|
+
singularize == self
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def plural?
|
|
84
|
+
pluralize == self
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def reader
|
|
88
|
+
writer? ? gsub("=", "") : self
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def writer?
|
|
92
|
+
include?("=")
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Symbol #:nodoc:
|
|
5
|
+
module Inflections #:nodoc:
|
|
6
|
+
|
|
7
|
+
REVERSALS = {
|
|
8
|
+
:asc => :desc,
|
|
9
|
+
:ascending => :descending,
|
|
10
|
+
:desc => :asc,
|
|
11
|
+
:descending => :ascending
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
def invert
|
|
15
|
+
REVERSALS[self]
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def singular?
|
|
19
|
+
to_s.singular?
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def plural?
|
|
23
|
+
to_s.plural?
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
[ "asc", "ascending", "desc", "descending", "gt", "lt", "gte",
|
|
27
|
+
"lte", "ne", "near", "in", "nin", "mod", "all", "size", "exists",
|
|
28
|
+
"within", ["matches","elemMatch"] ].each do |oper|
|
|
29
|
+
m, oper = oper
|
|
30
|
+
oper = m unless oper
|
|
31
|
+
class_eval <<-OPERATORS
|
|
32
|
+
def #{m}
|
|
33
|
+
Criterion::Complex.new(:key => self, :operator => "#{oper}")
|
|
34
|
+
end
|
|
35
|
+
OPERATORS
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Mongoid #:nodoc:
|
|
2
|
+
module Extensions #:nodoc:
|
|
3
|
+
module TimeConversions #:nodoc:
|
|
4
|
+
def set(value)
|
|
5
|
+
return nil if value.blank?
|
|
6
|
+
time = convert_to_time(value)
|
|
7
|
+
strip_milliseconds(time).utc
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def get(value)
|
|
11
|
+
return nil if value.blank?
|
|
12
|
+
if Mongoid::Config.instance.use_utc?
|
|
13
|
+
value
|
|
14
|
+
else
|
|
15
|
+
value.getlocal
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
protected
|
|
20
|
+
|
|
21
|
+
def strip_milliseconds(time)
|
|
22
|
+
::Time.at(time.to_i)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def convert_to_time(value)
|
|
26
|
+
case value
|
|
27
|
+
when ::String then ::Time.parse(value)
|
|
28
|
+
when ::DateTime then ::Time.utc(value.year, value.month, value.day, value.hour, value.min, value.sec)
|
|
29
|
+
when ::Date then ::Time.utc(value.year, value.month, value.day)
|
|
30
|
+
else value
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extras #:nodoc:
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
included do
|
|
6
|
+
class_inheritable_accessor :cached, :enslaved
|
|
7
|
+
self.cached = false
|
|
8
|
+
self.enslaved = false
|
|
9
|
+
delegate :cached?, :enslaved?, :to => "self.class"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
module ClassMethods #:nodoc
|
|
13
|
+
# Sets caching on for this class. This class level configuration will
|
|
14
|
+
# default all queries to cache the results of the first iteration over
|
|
15
|
+
# the cursor into an internal array. This should only be used for queries
|
|
16
|
+
# that return a small number of results or have small documents, as after
|
|
17
|
+
# the first iteration the entire results will be stored in memory.
|
|
18
|
+
#
|
|
19
|
+
# Example:
|
|
20
|
+
#
|
|
21
|
+
# class Person
|
|
22
|
+
# include Mongoid::Document
|
|
23
|
+
# cache
|
|
24
|
+
# end
|
|
25
|
+
def cache
|
|
26
|
+
self.cached = true
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Determines if the class is cached or not.
|
|
30
|
+
#
|
|
31
|
+
# Returns:
|
|
32
|
+
#
|
|
33
|
+
# True if cached, false if not.
|
|
34
|
+
def cached?
|
|
35
|
+
!!self.cached
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Set whether or not this documents read operations should delegate to
|
|
39
|
+
# the slave database by default.
|
|
40
|
+
#
|
|
41
|
+
# Example:
|
|
42
|
+
#
|
|
43
|
+
# class Person
|
|
44
|
+
# include Mongoid::Document
|
|
45
|
+
# enslave
|
|
46
|
+
# end
|
|
47
|
+
def enslave
|
|
48
|
+
self.enslaved = true
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Determines if the class is enslaved or not.
|
|
52
|
+
#
|
|
53
|
+
# Returns:
|
|
54
|
+
#
|
|
55
|
+
# True if enslaved, false if not.
|
|
56
|
+
def enslaved?
|
|
57
|
+
!!self.enslaved
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
class Factory #:nodoc:
|
|
4
|
+
# Builds a new +Document+ from the supplied attributes.
|
|
5
|
+
#
|
|
6
|
+
# Example:
|
|
7
|
+
#
|
|
8
|
+
# <tt>Mongoid::Factory.build(Person, {})</tt>
|
|
9
|
+
#
|
|
10
|
+
# Options:
|
|
11
|
+
#
|
|
12
|
+
# klass: The class to instantiate from if _type is not present.
|
|
13
|
+
# attributes: The +Document+ attributes.
|
|
14
|
+
def self.build(klass, attributes)
|
|
15
|
+
attrs = {}.merge(attributes)
|
|
16
|
+
type = attrs["_type"]
|
|
17
|
+
type ? type.constantize.instantiate(attrs) : klass.instantiate(attrs)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
class Field
|
|
4
|
+
attr_reader :name, :type
|
|
5
|
+
|
|
6
|
+
# Determine if the field is able to be accessible via a mass update.
|
|
7
|
+
#
|
|
8
|
+
# Returns:
|
|
9
|
+
#
|
|
10
|
+
# true if accessible, false if not.
|
|
11
|
+
def accessible?
|
|
12
|
+
!!@accessible
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Get the declared options for this field
|
|
16
|
+
#
|
|
17
|
+
# Returns:
|
|
18
|
+
#
|
|
19
|
+
# a hash of options
|
|
20
|
+
def options
|
|
21
|
+
@options
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Get the default value for the field.
|
|
25
|
+
#
|
|
26
|
+
# Returns:
|
|
27
|
+
#
|
|
28
|
+
# The primitive value or a copy of the default.
|
|
29
|
+
def default
|
|
30
|
+
copy
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Create the new field with a name and optional additional options. Valid
|
|
34
|
+
# options are :default
|
|
35
|
+
#
|
|
36
|
+
# Options:
|
|
37
|
+
#
|
|
38
|
+
# name: The name of the field as a +Symbol+.
|
|
39
|
+
# options: A +Hash+ of options for the field.
|
|
40
|
+
#
|
|
41
|
+
# Example:
|
|
42
|
+
#
|
|
43
|
+
# <tt>Field.new(:score, :default => 0)</tt>
|
|
44
|
+
def initialize(name, options = {})
|
|
45
|
+
check_name!(name)
|
|
46
|
+
@type = options[:type] || String
|
|
47
|
+
@name, @default = name, options[:default]
|
|
48
|
+
@copyable = (@default.is_a?(Array) || @default.is_a?(Hash))
|
|
49
|
+
@accessible = options.has_key?(:accessible) ? options[:accessible] : true
|
|
50
|
+
@options = options
|
|
51
|
+
check_default!
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# Used for setting an object in the attributes hash. If nil is provided the
|
|
55
|
+
# default will get returned if it exists.
|
|
56
|
+
def set(object)
|
|
57
|
+
type.set(object)
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Used for retrieving the object out of the attributes hash.
|
|
61
|
+
def get(object)
|
|
62
|
+
type.get(object)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
protected
|
|
66
|
+
# Slightly faster default check.
|
|
67
|
+
def copy
|
|
68
|
+
@copyable ? @default.dup : @default
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Check if the name is valid.
|
|
72
|
+
def check_name!(name)
|
|
73
|
+
raise Mongoid::Errors::InvalidField.new(name) if Mongoid.destructive_fields.include?(name.to_s)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def check_default!
|
|
77
|
+
return if @default.is_a?(Proc)
|
|
78
|
+
if !@default.nil? && !@default.is_a?(@type)
|
|
79
|
+
raise Mongoid::Errors::InvalidType.new(@type, @default)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc
|
|
3
|
+
module Fields #:nodoc
|
|
4
|
+
extend ActiveSupport::Concern
|
|
5
|
+
included do
|
|
6
|
+
# Set up the class attributes that must be available to all subclasses.
|
|
7
|
+
# These include defaults, fields
|
|
8
|
+
class_inheritable_accessor :fields
|
|
9
|
+
|
|
10
|
+
self.fields = {}
|
|
11
|
+
delegate :defaults, :fields, :to => "self.class"
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module ClassMethods #:nodoc
|
|
15
|
+
# Defines all the fields that are accessable on the Document
|
|
16
|
+
# For each field that is defined, a getter and setter will be
|
|
17
|
+
# added as an instance method to the Document.
|
|
18
|
+
#
|
|
19
|
+
# Options:
|
|
20
|
+
#
|
|
21
|
+
# name: The name of the field, as a +Symbol+.
|
|
22
|
+
# options: A +Hash+ of options to supply to the +Field+.
|
|
23
|
+
#
|
|
24
|
+
# Example:
|
|
25
|
+
#
|
|
26
|
+
# <tt>field :score, :default => 0</tt>
|
|
27
|
+
def field(name, options = {})
|
|
28
|
+
access = name.to_s
|
|
29
|
+
set_field(access, options)
|
|
30
|
+
attr_protected name if options[:accessible] == false
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# Returns the default values for the fields on the document
|
|
34
|
+
def defaults
|
|
35
|
+
fields.inject({}) do |defs,(field_name,field)|
|
|
36
|
+
next(defs) if field.default.nil?
|
|
37
|
+
defs[field_name.to_s] = field.default
|
|
38
|
+
defs
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
protected
|
|
43
|
+
# Define a field attribute for the +Document+.
|
|
44
|
+
def set_field(name, options = {})
|
|
45
|
+
meth = options.delete(:as) || name
|
|
46
|
+
fields[name] = Field.new(name, options)
|
|
47
|
+
create_accessors(name, meth, options)
|
|
48
|
+
add_dirty_methods(name)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# Create the field accessors.
|
|
52
|
+
def create_accessors(name, meth, options = {})
|
|
53
|
+
define_method(meth) { read_attribute(name) }
|
|
54
|
+
define_method("#{meth}=") { |value| write_attribute(name, value) }
|
|
55
|
+
define_method("#{meth}?") do
|
|
56
|
+
attr = read_attribute(name)
|
|
57
|
+
(options[:type] == Boolean) ? attr == true : attr.present?
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|