stonegao-mongoid 2.0.0.rc.6
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/LICENSE +20 -0
- data/README.rdoc +50 -0
- data/Rakefile +51 -0
- data/lib/config/locales/bg.yml +44 -0
- data/lib/config/locales/de.yml +44 -0
- data/lib/config/locales/en.yml +45 -0
- data/lib/config/locales/es.yml +44 -0
- data/lib/config/locales/fr.yml +45 -0
- data/lib/config/locales/hu.yml +47 -0
- data/lib/config/locales/it.yml +42 -0
- data/lib/config/locales/kr.yml +68 -0
- data/lib/config/locales/nl.yml +42 -0
- data/lib/config/locales/pl.yml +42 -0
- data/lib/config/locales/pt-br.yml +43 -0
- data/lib/config/locales/pt.yml +43 -0
- data/lib/config/locales/ro.yml +49 -0
- data/lib/config/locales/sv.yml +43 -0
- data/lib/config/locales/zh-CN.yml +34 -0
- data/lib/mongoid/atomicity.rb +111 -0
- data/lib/mongoid/attributes.rb +251 -0
- data/lib/mongoid/callbacks.rb +13 -0
- data/lib/mongoid/collection.rb +137 -0
- data/lib/mongoid/collections/cyclic_iterator.rb +34 -0
- data/lib/mongoid/collections/master.rb +29 -0
- data/lib/mongoid/collections/operations.rb +42 -0
- data/lib/mongoid/collections/slaves.rb +45 -0
- data/lib/mongoid/collections.rb +70 -0
- data/lib/mongoid/components.rb +45 -0
- data/lib/mongoid/config/database.rb +167 -0
- data/lib/mongoid/config/replset_database.rb +48 -0
- data/lib/mongoid/config.rb +343 -0
- data/lib/mongoid/contexts/enumerable/sort.rb +43 -0
- data/lib/mongoid/contexts/enumerable.rb +226 -0
- data/lib/mongoid/contexts/ids.rb +25 -0
- data/lib/mongoid/contexts/mongo.rb +345 -0
- data/lib/mongoid/contexts/paging.rb +50 -0
- data/lib/mongoid/contexts.rb +21 -0
- data/lib/mongoid/copyable.rb +44 -0
- data/lib/mongoid/criteria.rb +325 -0
- data/lib/mongoid/criterion/complex.rb +34 -0
- data/lib/mongoid/criterion/creational.rb +34 -0
- data/lib/mongoid/criterion/exclusion.rb +67 -0
- data/lib/mongoid/criterion/inclusion.rb +134 -0
- data/lib/mongoid/criterion/inspection.rb +20 -0
- data/lib/mongoid/criterion/optional.rb +213 -0
- data/lib/mongoid/criterion/selector.rb +74 -0
- data/lib/mongoid/cursor.rb +81 -0
- data/lib/mongoid/default_scope.rb +28 -0
- data/lib/mongoid/dirty.rb +251 -0
- data/lib/mongoid/document.rb +256 -0
- data/lib/mongoid/errors/document_not_found.rb +29 -0
- data/lib/mongoid/errors/invalid_collection.rb +19 -0
- data/lib/mongoid/errors/invalid_database.rb +20 -0
- data/lib/mongoid/errors/invalid_field.rb +19 -0
- data/lib/mongoid/errors/invalid_options.rb +16 -0
- data/lib/mongoid/errors/invalid_type.rb +26 -0
- data/lib/mongoid/errors/mongoid_error.rb +27 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +21 -0
- data/lib/mongoid/errors/unsaved_document.rb +23 -0
- data/lib/mongoid/errors/unsupported_version.rb +21 -0
- data/lib/mongoid/errors/validations.rb +24 -0
- data/lib/mongoid/errors.rb +12 -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 +25 -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/conversions.rb +19 -0
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +22 -0
- data/lib/mongoid/extensions/hash/scoping.rb +12 -0
- data/lib/mongoid/extensions/integer/conversions.rb +20 -0
- data/lib/mongoid/extensions/nil/collectionization.rb +12 -0
- data/lib/mongoid/extensions/object/conversions.rb +25 -0
- data/lib/mongoid/extensions/object/reflections.rb +17 -0
- data/lib/mongoid/extensions/object/yoda.rb +27 -0
- data/lib/mongoid/extensions/object_id/conversions.rb +57 -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 +34 -0
- data/lib/mongoid/extensions/string/inflections.rb +97 -0
- data/lib/mongoid/extensions/symbol/conversions.rb +21 -0
- data/lib/mongoid/extensions/symbol/inflections.rb +40 -0
- data/lib/mongoid/extensions/time_conversions.rb +38 -0
- data/lib/mongoid/extensions/true_class/equality.rb +13 -0
- data/lib/mongoid/extensions.rb +116 -0
- data/lib/mongoid/extras.rb +61 -0
- data/lib/mongoid/factory.rb +20 -0
- data/lib/mongoid/field.rb +95 -0
- data/lib/mongoid/fields.rb +138 -0
- data/lib/mongoid/finders.rb +173 -0
- data/lib/mongoid/hierarchy.rb +85 -0
- data/lib/mongoid/identity.rb +89 -0
- data/lib/mongoid/indexes.rb +38 -0
- data/lib/mongoid/inspection.rb +58 -0
- data/lib/mongoid/javascript/functions.yml +37 -0
- data/lib/mongoid/javascript.rb +21 -0
- data/lib/mongoid/json.rb +16 -0
- data/lib/mongoid/keys.rb +77 -0
- data/lib/mongoid/logger.rb +18 -0
- data/lib/mongoid/matchers/all.rb +11 -0
- data/lib/mongoid/matchers/default.rb +27 -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/matchers.rb +55 -0
- data/lib/mongoid/modifiers/command.rb +18 -0
- data/lib/mongoid/modifiers/inc.rb +24 -0
- data/lib/mongoid/modifiers.rb +24 -0
- data/lib/mongoid/multi_database.rb +11 -0
- data/lib/mongoid/multi_parameter_attributes.rb +80 -0
- data/lib/mongoid/named_scope.rb +36 -0
- data/lib/mongoid/nested_attributes.rb +43 -0
- data/lib/mongoid/paranoia.rb +103 -0
- data/lib/mongoid/paths.rb +61 -0
- data/lib/mongoid/persistence/command.rb +59 -0
- data/lib/mongoid/persistence/insert.rb +53 -0
- data/lib/mongoid/persistence/insert_embedded.rb +42 -0
- data/lib/mongoid/persistence/remove.rb +44 -0
- data/lib/mongoid/persistence/remove_all.rb +40 -0
- data/lib/mongoid/persistence/remove_embedded.rb +48 -0
- data/lib/mongoid/persistence/update.rb +76 -0
- data/lib/mongoid/persistence.rb +237 -0
- data/lib/mongoid/railtie.rb +129 -0
- data/lib/mongoid/railties/database.rake +171 -0
- data/lib/mongoid/railties/document.rb +12 -0
- data/lib/mongoid/relations/accessors.rb +157 -0
- data/lib/mongoid/relations/auto_save.rb +34 -0
- data/lib/mongoid/relations/binding.rb +26 -0
- data/lib/mongoid/relations/bindings/embedded/in.rb +82 -0
- data/lib/mongoid/relations/bindings/embedded/many.rb +98 -0
- data/lib/mongoid/relations/bindings/embedded/one.rb +66 -0
- data/lib/mongoid/relations/bindings/referenced/in.rb +74 -0
- data/lib/mongoid/relations/bindings/referenced/many.rb +96 -0
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +99 -0
- data/lib/mongoid/relations/bindings/referenced/one.rb +66 -0
- data/lib/mongoid/relations/bindings.rb +9 -0
- data/lib/mongoid/relations/builder.rb +42 -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/builders.rb +79 -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/cascading.rb +55 -0
- data/lib/mongoid/relations/constraint.rb +45 -0
- data/lib/mongoid/relations/cyclic.rb +97 -0
- data/lib/mongoid/relations/embedded/in.rb +173 -0
- data/lib/mongoid/relations/embedded/many.rb +483 -0
- data/lib/mongoid/relations/embedded/one.rb +170 -0
- data/lib/mongoid/relations/macros.rb +306 -0
- data/lib/mongoid/relations/many.rb +171 -0
- data/lib/mongoid/relations/metadata.rb +533 -0
- data/lib/mongoid/relations/nested_builder.rb +68 -0
- data/lib/mongoid/relations/one.rb +47 -0
- data/lib/mongoid/relations/polymorphic.rb +54 -0
- data/lib/mongoid/relations/proxy.rb +128 -0
- data/lib/mongoid/relations/referenced/in.rb +216 -0
- data/lib/mongoid/relations/referenced/many.rb +443 -0
- data/lib/mongoid/relations/referenced/many_to_many.rb +344 -0
- data/lib/mongoid/relations/referenced/one.rb +206 -0
- data/lib/mongoid/relations/reflections.rb +45 -0
- data/lib/mongoid/relations.rb +105 -0
- data/lib/mongoid/safe.rb +23 -0
- data/lib/mongoid/safety.rb +207 -0
- data/lib/mongoid/scope.rb +31 -0
- data/lib/mongoid/serialization.rb +99 -0
- data/lib/mongoid/state.rb +66 -0
- data/lib/mongoid/timestamps.rb +38 -0
- data/lib/mongoid/validations/associated.rb +42 -0
- data/lib/mongoid/validations/uniqueness.rb +85 -0
- data/lib/mongoid/validations.rb +117 -0
- data/lib/mongoid/version.rb +4 -0
- data/lib/mongoid/versioning.rb +51 -0
- data/lib/mongoid.rb +139 -0
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +23 -0
- data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
- data/lib/rails/generators/mongoid/model/templates/model.rb +17 -0
- data/lib/rails/generators/mongoid_generator.rb +61 -0
- data/lib/rails/mongoid.rb +57 -0
- metadata +380 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Float #:nodoc:
|
|
5
|
+
module Conversions #:nodoc:
|
|
6
|
+
def set(value)
|
|
7
|
+
return nil if value.blank?
|
|
8
|
+
begin
|
|
9
|
+
Float(value)
|
|
10
|
+
rescue ArgumentError => e
|
|
11
|
+
value
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
def get(value)
|
|
15
|
+
value
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Hash #:nodoc:
|
|
5
|
+
module Conversions #:nodoc:
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
module ClassMethods #:nodoc:
|
|
9
|
+
def get(value)
|
|
10
|
+
value
|
|
11
|
+
end
|
|
12
|
+
def set(value)
|
|
13
|
+
value
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Hash #:nodoc:
|
|
5
|
+
module CriteriaHelpers #:nodoc:
|
|
6
|
+
def expand_complex_criteria
|
|
7
|
+
hsh = {}
|
|
8
|
+
each_pair do |k,v|
|
|
9
|
+
case k
|
|
10
|
+
when Mongoid::Criterion::Complex
|
|
11
|
+
hsh[k.key] ||= {}
|
|
12
|
+
hsh[k.key].merge!({"$#{k.operator}" => v})
|
|
13
|
+
else
|
|
14
|
+
hsh[k] = v
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
hsh
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Integer #:nodoc:
|
|
5
|
+
module Conversions #:nodoc:
|
|
6
|
+
def set(value)
|
|
7
|
+
return nil if value.blank?
|
|
8
|
+
begin
|
|
9
|
+
Integer(value)
|
|
10
|
+
rescue ArgumentError => e
|
|
11
|
+
value
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
def get(value)
|
|
15
|
+
value
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Object #:nodoc:
|
|
5
|
+
# This module converts objects into mongoid related objects.
|
|
6
|
+
module Conversions #:nodoc:
|
|
7
|
+
extend ActiveSupport::Concern
|
|
8
|
+
|
|
9
|
+
module ClassMethods
|
|
10
|
+
def set(value)
|
|
11
|
+
value.respond_to?(:raw_attributes) ? value.raw_attributes : value
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def get(value)
|
|
15
|
+
if value && respond_to?(:instantiate)
|
|
16
|
+
instantiate(value)
|
|
17
|
+
else
|
|
18
|
+
value
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Object #:nodoc:
|
|
5
|
+
module Reflections #:nodoc:
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
def ivar(name)
|
|
9
|
+
if instance_variable_defined?("@#{name}")
|
|
10
|
+
return instance_variable_get("@#{name}")
|
|
11
|
+
end
|
|
12
|
+
nil
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Object #:nodoc:
|
|
5
|
+
|
|
6
|
+
# This module behaves like the master jedi.
|
|
7
|
+
module Yoda #:nodoc:
|
|
8
|
+
|
|
9
|
+
# Do or do not, there is no try. -- Yoda.
|
|
10
|
+
#
|
|
11
|
+
# @example Do or do not.
|
|
12
|
+
# object.do_or_do_not(:use, "The Force")
|
|
13
|
+
#
|
|
14
|
+
# @param [ String, Symbol ] name The method name.
|
|
15
|
+
# @param [ Array ] *args The arguments.
|
|
16
|
+
#
|
|
17
|
+
# @return [ Object, nil ] The result of the method call or nil if the
|
|
18
|
+
# method does not exist.
|
|
19
|
+
#
|
|
20
|
+
# @since 2.0.0.rc.1
|
|
21
|
+
def do_or_do_not(name, *args)
|
|
22
|
+
respond_to?(name) ? send(name, *args) : nil
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module ObjectId #:nodoc:
|
|
5
|
+
module Conversions #:nodoc:
|
|
6
|
+
|
|
7
|
+
def set(value)
|
|
8
|
+
if value.is_a?(::String)
|
|
9
|
+
BSON::ObjectId.from_string(value) unless value.blank?
|
|
10
|
+
else
|
|
11
|
+
value
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def get(value)
|
|
16
|
+
value
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# If the document is using BSON::ObjectIds the convert the argument to
|
|
20
|
+
# either an object id or an array of them if the supplied argument is an
|
|
21
|
+
# Array. Otherwise just return.
|
|
22
|
+
#
|
|
23
|
+
# Options:
|
|
24
|
+
# args: A +String+ or an +Array+ convert to +BSON::ObjectId+
|
|
25
|
+
# cast: A +Boolean+ define if we can or not cast to BSON::ObjectId.
|
|
26
|
+
# If false, we use the default type of args
|
|
27
|
+
#
|
|
28
|
+
# Example:
|
|
29
|
+
#
|
|
30
|
+
# <tt>Mongoid.cast_ids!("4ab2bc4b8ad548971900005c", true)</tt>
|
|
31
|
+
# <tt>Mongoid.cast_ids!(["4ab2bc4b8ad548971900005c"])</tt>
|
|
32
|
+
#
|
|
33
|
+
# Returns:
|
|
34
|
+
#
|
|
35
|
+
# If using object ids:
|
|
36
|
+
# An +Array+ of +BSON::ObjectId+ of each element if params is an +Array+
|
|
37
|
+
# A +BSON::ObjectId+ from params if params is +String+
|
|
38
|
+
# Otherwise:
|
|
39
|
+
# <tt>args</tt>
|
|
40
|
+
def cast!(klass, args, cast = true)
|
|
41
|
+
if !klass.using_object_ids? || args.is_a?(::BSON::ObjectId) || !cast
|
|
42
|
+
return args
|
|
43
|
+
end
|
|
44
|
+
if args.is_a?(::String)
|
|
45
|
+
::BSON::ObjectId.from_string(args)
|
|
46
|
+
elsif args.is_a?(::Array)
|
|
47
|
+
args.map{ |a|
|
|
48
|
+
a.is_a?(::BSON::ObjectId) ? a : ::BSON::ObjectId(a)
|
|
49
|
+
}
|
|
50
|
+
else
|
|
51
|
+
args
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
@@ -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.to_a
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module String #:nodoc:
|
|
5
|
+
module Conversions #:nodoc:
|
|
6
|
+
extend ActiveSupport::Concern
|
|
7
|
+
|
|
8
|
+
# Convert the string to an array with the string in it.
|
|
9
|
+
#
|
|
10
|
+
# Example:
|
|
11
|
+
#
|
|
12
|
+
# <tt>"Testing".to_a</tt>
|
|
13
|
+
#
|
|
14
|
+
# Returns:
|
|
15
|
+
#
|
|
16
|
+
# An array with only the string in it.
|
|
17
|
+
def to_a
|
|
18
|
+
[ self ]
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
module ClassMethods #:nodoc:
|
|
22
|
+
|
|
23
|
+
def get(value)
|
|
24
|
+
value
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def set(value)
|
|
28
|
+
value.to_s unless value.nil?
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
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,21 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Symbol#:nodoc:
|
|
5
|
+
# This module converts objects into mongoid related objects.
|
|
6
|
+
module Conversions #:nodoc:
|
|
7
|
+
extend ActiveSupport::Concern
|
|
8
|
+
|
|
9
|
+
module ClassMethods
|
|
10
|
+
def set(value)
|
|
11
|
+
(value.nil? or (value.respond_to?(:empty?) && value.empty?)) ? nil : value.to_sym
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def get(value)
|
|
15
|
+
value
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
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,38 @@
|
|
|
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
|
+
value = value.getlocal unless Mongoid::Config.use_utc?
|
|
13
|
+
if Mongoid::Config.use_activesupport_time_zone?
|
|
14
|
+
time_zone = Mongoid::Config.use_utc? ? 'UTC' : Time.zone
|
|
15
|
+
value = value.in_time_zone(time_zone)
|
|
16
|
+
end
|
|
17
|
+
value
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
protected
|
|
21
|
+
|
|
22
|
+
def strip_milliseconds(time)
|
|
23
|
+
::Time.at(time.to_i)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def convert_to_time(value)
|
|
27
|
+
time = Mongoid::Config.use_activesupport_time_zone? ? ::Time.zone : ::Time
|
|
28
|
+
case value
|
|
29
|
+
when ::String then time.parse(value)
|
|
30
|
+
when ::DateTime then time.local(value.year, value.month, value.day, value.hour, value.min, value.sec)
|
|
31
|
+
when ::Date then time.local(value.year, value.month, value.day)
|
|
32
|
+
when ::Array then time.local(*value)
|
|
33
|
+
else value
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "mongoid/extensions/time_conversions"
|
|
3
|
+
require "mongoid/extensions/array/conversions"
|
|
4
|
+
require "mongoid/extensions/array/parentization"
|
|
5
|
+
require "mongoid/extensions/set/conversions"
|
|
6
|
+
require "mongoid/extensions/big_decimal/conversions"
|
|
7
|
+
require "mongoid/extensions/binary/conversions"
|
|
8
|
+
require "mongoid/extensions/boolean/conversions"
|
|
9
|
+
require "mongoid/extensions/date/conversions"
|
|
10
|
+
require "mongoid/extensions/datetime/conversions"
|
|
11
|
+
require "mongoid/extensions/false_class/equality"
|
|
12
|
+
require "mongoid/extensions/float/conversions"
|
|
13
|
+
require "mongoid/extensions/hash/conversions"
|
|
14
|
+
require "mongoid/extensions/hash/criteria_helpers"
|
|
15
|
+
require "mongoid/extensions/hash/scoping"
|
|
16
|
+
require "mongoid/extensions/integer/conversions"
|
|
17
|
+
require "mongoid/extensions/nil/collectionization"
|
|
18
|
+
require "mongoid/extensions/object/conversions"
|
|
19
|
+
require "mongoid/extensions/object/reflections"
|
|
20
|
+
require "mongoid/extensions/object/yoda"
|
|
21
|
+
require "mongoid/extensions/proc/scoping"
|
|
22
|
+
require "mongoid/extensions/string/conversions"
|
|
23
|
+
require "mongoid/extensions/string/inflections"
|
|
24
|
+
require "mongoid/extensions/symbol/inflections"
|
|
25
|
+
require "mongoid/extensions/symbol/conversions"
|
|
26
|
+
require "mongoid/extensions/true_class/equality"
|
|
27
|
+
require "mongoid/extensions/object_id/conversions"
|
|
28
|
+
|
|
29
|
+
class Array #:nodoc
|
|
30
|
+
include Mongoid::Extensions::Array::Conversions
|
|
31
|
+
include Mongoid::Extensions::Array::Parentization
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class Set #:nodoc
|
|
35
|
+
include Mongoid::Extensions::Set::Conversions
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
class BigDecimal #:nodoc
|
|
39
|
+
extend Mongoid::Extensions::BigDecimal::Conversions
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
class Binary #:nodoc
|
|
43
|
+
extend Mongoid::Extensions::Binary::Conversions
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
class Boolean #:nodoc
|
|
47
|
+
include Mongoid::Extensions::Boolean::Conversions
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
class DateTime #:nodoc
|
|
51
|
+
extend Mongoid::Extensions::TimeConversions
|
|
52
|
+
extend Mongoid::Extensions::DateTime::Conversions
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class Date #:nodoc
|
|
56
|
+
extend Mongoid::Extensions::TimeConversions
|
|
57
|
+
extend Mongoid::Extensions::Date::Conversions
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
class FalseClass #:nodoc
|
|
61
|
+
include Mongoid::Extensions::FalseClass::Equality
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class Float #:nodoc
|
|
65
|
+
extend Mongoid::Extensions::Float::Conversions
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
class Hash #:nodoc
|
|
69
|
+
include Mongoid::Extensions::Hash::CriteriaHelpers
|
|
70
|
+
include Mongoid::Extensions::Hash::Scoping
|
|
71
|
+
include Mongoid::Extensions::Hash::Conversions
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
class Integer #:nodoc
|
|
75
|
+
extend Mongoid::Extensions::Integer::Conversions
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
class NilClass #:nodoc
|
|
79
|
+
include Mongoid::Extensions::Nil::Collectionization
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
class Object #:nodoc:
|
|
83
|
+
include Mongoid::Extensions::Object::Conversions
|
|
84
|
+
include Mongoid::Extensions::Object::Reflections
|
|
85
|
+
include Mongoid::Extensions::Object::Yoda
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class Proc #:nodoc:
|
|
89
|
+
include Mongoid::Extensions::Proc::Scoping
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
class String #:nodoc
|
|
93
|
+
include Mongoid::Extensions::String::Inflections
|
|
94
|
+
include Mongoid::Extensions::String::Conversions
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
class Symbol #:nodoc
|
|
98
|
+
remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
|
|
99
|
+
include Mongoid::Extensions::Symbol::Inflections
|
|
100
|
+
include Mongoid::Extensions::Symbol::Conversions
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
class Time #:nodoc
|
|
104
|
+
extend Mongoid::Extensions::TimeConversions
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
class TrueClass #:nodoc
|
|
108
|
+
include Mongoid::Extensions::TrueClass::Equality
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
class BSON::ObjectId #:nodoc
|
|
112
|
+
extend Mongoid::Extensions::ObjectId::Conversions
|
|
113
|
+
def as_json(options = nil)
|
|
114
|
+
to_s
|
|
115
|
+
end
|
|
116
|
+
end
|