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.
Files changed (199) hide show
  1. data/LICENSE +20 -0
  2. data/README.rdoc +50 -0
  3. data/Rakefile +51 -0
  4. data/lib/config/locales/bg.yml +44 -0
  5. data/lib/config/locales/de.yml +44 -0
  6. data/lib/config/locales/en.yml +45 -0
  7. data/lib/config/locales/es.yml +44 -0
  8. data/lib/config/locales/fr.yml +45 -0
  9. data/lib/config/locales/hu.yml +47 -0
  10. data/lib/config/locales/it.yml +42 -0
  11. data/lib/config/locales/kr.yml +68 -0
  12. data/lib/config/locales/nl.yml +42 -0
  13. data/lib/config/locales/pl.yml +42 -0
  14. data/lib/config/locales/pt-br.yml +43 -0
  15. data/lib/config/locales/pt.yml +43 -0
  16. data/lib/config/locales/ro.yml +49 -0
  17. data/lib/config/locales/sv.yml +43 -0
  18. data/lib/config/locales/zh-CN.yml +34 -0
  19. data/lib/mongoid/atomicity.rb +111 -0
  20. data/lib/mongoid/attributes.rb +251 -0
  21. data/lib/mongoid/callbacks.rb +13 -0
  22. data/lib/mongoid/collection.rb +137 -0
  23. data/lib/mongoid/collections/cyclic_iterator.rb +34 -0
  24. data/lib/mongoid/collections/master.rb +29 -0
  25. data/lib/mongoid/collections/operations.rb +42 -0
  26. data/lib/mongoid/collections/slaves.rb +45 -0
  27. data/lib/mongoid/collections.rb +70 -0
  28. data/lib/mongoid/components.rb +45 -0
  29. data/lib/mongoid/config/database.rb +167 -0
  30. data/lib/mongoid/config/replset_database.rb +48 -0
  31. data/lib/mongoid/config.rb +343 -0
  32. data/lib/mongoid/contexts/enumerable/sort.rb +43 -0
  33. data/lib/mongoid/contexts/enumerable.rb +226 -0
  34. data/lib/mongoid/contexts/ids.rb +25 -0
  35. data/lib/mongoid/contexts/mongo.rb +345 -0
  36. data/lib/mongoid/contexts/paging.rb +50 -0
  37. data/lib/mongoid/contexts.rb +21 -0
  38. data/lib/mongoid/copyable.rb +44 -0
  39. data/lib/mongoid/criteria.rb +325 -0
  40. data/lib/mongoid/criterion/complex.rb +34 -0
  41. data/lib/mongoid/criterion/creational.rb +34 -0
  42. data/lib/mongoid/criterion/exclusion.rb +67 -0
  43. data/lib/mongoid/criterion/inclusion.rb +134 -0
  44. data/lib/mongoid/criterion/inspection.rb +20 -0
  45. data/lib/mongoid/criterion/optional.rb +213 -0
  46. data/lib/mongoid/criterion/selector.rb +74 -0
  47. data/lib/mongoid/cursor.rb +81 -0
  48. data/lib/mongoid/default_scope.rb +28 -0
  49. data/lib/mongoid/dirty.rb +251 -0
  50. data/lib/mongoid/document.rb +256 -0
  51. data/lib/mongoid/errors/document_not_found.rb +29 -0
  52. data/lib/mongoid/errors/invalid_collection.rb +19 -0
  53. data/lib/mongoid/errors/invalid_database.rb +20 -0
  54. data/lib/mongoid/errors/invalid_field.rb +19 -0
  55. data/lib/mongoid/errors/invalid_options.rb +16 -0
  56. data/lib/mongoid/errors/invalid_type.rb +26 -0
  57. data/lib/mongoid/errors/mongoid_error.rb +27 -0
  58. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +21 -0
  59. data/lib/mongoid/errors/unsaved_document.rb +23 -0
  60. data/lib/mongoid/errors/unsupported_version.rb +21 -0
  61. data/lib/mongoid/errors/validations.rb +24 -0
  62. data/lib/mongoid/errors.rb +12 -0
  63. data/lib/mongoid/extensions/array/conversions.rb +23 -0
  64. data/lib/mongoid/extensions/array/parentization.rb +13 -0
  65. data/lib/mongoid/extensions/big_decimal/conversions.rb +19 -0
  66. data/lib/mongoid/extensions/binary/conversions.rb +17 -0
  67. data/lib/mongoid/extensions/boolean/conversions.rb +27 -0
  68. data/lib/mongoid/extensions/date/conversions.rb +25 -0
  69. data/lib/mongoid/extensions/datetime/conversions.rb +12 -0
  70. data/lib/mongoid/extensions/false_class/equality.rb +13 -0
  71. data/lib/mongoid/extensions/float/conversions.rb +20 -0
  72. data/lib/mongoid/extensions/hash/conversions.rb +19 -0
  73. data/lib/mongoid/extensions/hash/criteria_helpers.rb +22 -0
  74. data/lib/mongoid/extensions/hash/scoping.rb +12 -0
  75. data/lib/mongoid/extensions/integer/conversions.rb +20 -0
  76. data/lib/mongoid/extensions/nil/collectionization.rb +12 -0
  77. data/lib/mongoid/extensions/object/conversions.rb +25 -0
  78. data/lib/mongoid/extensions/object/reflections.rb +17 -0
  79. data/lib/mongoid/extensions/object/yoda.rb +27 -0
  80. data/lib/mongoid/extensions/object_id/conversions.rb +57 -0
  81. data/lib/mongoid/extensions/proc/scoping.rb +12 -0
  82. data/lib/mongoid/extensions/set/conversions.rb +20 -0
  83. data/lib/mongoid/extensions/string/conversions.rb +34 -0
  84. data/lib/mongoid/extensions/string/inflections.rb +97 -0
  85. data/lib/mongoid/extensions/symbol/conversions.rb +21 -0
  86. data/lib/mongoid/extensions/symbol/inflections.rb +40 -0
  87. data/lib/mongoid/extensions/time_conversions.rb +38 -0
  88. data/lib/mongoid/extensions/true_class/equality.rb +13 -0
  89. data/lib/mongoid/extensions.rb +116 -0
  90. data/lib/mongoid/extras.rb +61 -0
  91. data/lib/mongoid/factory.rb +20 -0
  92. data/lib/mongoid/field.rb +95 -0
  93. data/lib/mongoid/fields.rb +138 -0
  94. data/lib/mongoid/finders.rb +173 -0
  95. data/lib/mongoid/hierarchy.rb +85 -0
  96. data/lib/mongoid/identity.rb +89 -0
  97. data/lib/mongoid/indexes.rb +38 -0
  98. data/lib/mongoid/inspection.rb +58 -0
  99. data/lib/mongoid/javascript/functions.yml +37 -0
  100. data/lib/mongoid/javascript.rb +21 -0
  101. data/lib/mongoid/json.rb +16 -0
  102. data/lib/mongoid/keys.rb +77 -0
  103. data/lib/mongoid/logger.rb +18 -0
  104. data/lib/mongoid/matchers/all.rb +11 -0
  105. data/lib/mongoid/matchers/default.rb +27 -0
  106. data/lib/mongoid/matchers/exists.rb +13 -0
  107. data/lib/mongoid/matchers/gt.rb +11 -0
  108. data/lib/mongoid/matchers/gte.rb +11 -0
  109. data/lib/mongoid/matchers/in.rb +11 -0
  110. data/lib/mongoid/matchers/lt.rb +11 -0
  111. data/lib/mongoid/matchers/lte.rb +11 -0
  112. data/lib/mongoid/matchers/ne.rb +11 -0
  113. data/lib/mongoid/matchers/nin.rb +11 -0
  114. data/lib/mongoid/matchers/size.rb +11 -0
  115. data/lib/mongoid/matchers.rb +55 -0
  116. data/lib/mongoid/modifiers/command.rb +18 -0
  117. data/lib/mongoid/modifiers/inc.rb +24 -0
  118. data/lib/mongoid/modifiers.rb +24 -0
  119. data/lib/mongoid/multi_database.rb +11 -0
  120. data/lib/mongoid/multi_parameter_attributes.rb +80 -0
  121. data/lib/mongoid/named_scope.rb +36 -0
  122. data/lib/mongoid/nested_attributes.rb +43 -0
  123. data/lib/mongoid/paranoia.rb +103 -0
  124. data/lib/mongoid/paths.rb +61 -0
  125. data/lib/mongoid/persistence/command.rb +59 -0
  126. data/lib/mongoid/persistence/insert.rb +53 -0
  127. data/lib/mongoid/persistence/insert_embedded.rb +42 -0
  128. data/lib/mongoid/persistence/remove.rb +44 -0
  129. data/lib/mongoid/persistence/remove_all.rb +40 -0
  130. data/lib/mongoid/persistence/remove_embedded.rb +48 -0
  131. data/lib/mongoid/persistence/update.rb +76 -0
  132. data/lib/mongoid/persistence.rb +237 -0
  133. data/lib/mongoid/railtie.rb +129 -0
  134. data/lib/mongoid/railties/database.rake +171 -0
  135. data/lib/mongoid/railties/document.rb +12 -0
  136. data/lib/mongoid/relations/accessors.rb +157 -0
  137. data/lib/mongoid/relations/auto_save.rb +34 -0
  138. data/lib/mongoid/relations/binding.rb +26 -0
  139. data/lib/mongoid/relations/bindings/embedded/in.rb +82 -0
  140. data/lib/mongoid/relations/bindings/embedded/many.rb +98 -0
  141. data/lib/mongoid/relations/bindings/embedded/one.rb +66 -0
  142. data/lib/mongoid/relations/bindings/referenced/in.rb +74 -0
  143. data/lib/mongoid/relations/bindings/referenced/many.rb +96 -0
  144. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +99 -0
  145. data/lib/mongoid/relations/bindings/referenced/one.rb +66 -0
  146. data/lib/mongoid/relations/bindings.rb +9 -0
  147. data/lib/mongoid/relations/builder.rb +42 -0
  148. data/lib/mongoid/relations/builders/embedded/in.rb +25 -0
  149. data/lib/mongoid/relations/builders/embedded/many.rb +32 -0
  150. data/lib/mongoid/relations/builders/embedded/one.rb +26 -0
  151. data/lib/mongoid/relations/builders/nested_attributes/many.rb +116 -0
  152. data/lib/mongoid/relations/builders/nested_attributes/one.rb +135 -0
  153. data/lib/mongoid/relations/builders/referenced/in.rb +32 -0
  154. data/lib/mongoid/relations/builders/referenced/many.rb +26 -0
  155. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +29 -0
  156. data/lib/mongoid/relations/builders/referenced/one.rb +30 -0
  157. data/lib/mongoid/relations/builders.rb +79 -0
  158. data/lib/mongoid/relations/cascading/delete.rb +19 -0
  159. data/lib/mongoid/relations/cascading/destroy.rb +19 -0
  160. data/lib/mongoid/relations/cascading/nullify.rb +18 -0
  161. data/lib/mongoid/relations/cascading/strategy.rb +26 -0
  162. data/lib/mongoid/relations/cascading.rb +55 -0
  163. data/lib/mongoid/relations/constraint.rb +45 -0
  164. data/lib/mongoid/relations/cyclic.rb +97 -0
  165. data/lib/mongoid/relations/embedded/in.rb +173 -0
  166. data/lib/mongoid/relations/embedded/many.rb +483 -0
  167. data/lib/mongoid/relations/embedded/one.rb +170 -0
  168. data/lib/mongoid/relations/macros.rb +306 -0
  169. data/lib/mongoid/relations/many.rb +171 -0
  170. data/lib/mongoid/relations/metadata.rb +533 -0
  171. data/lib/mongoid/relations/nested_builder.rb +68 -0
  172. data/lib/mongoid/relations/one.rb +47 -0
  173. data/lib/mongoid/relations/polymorphic.rb +54 -0
  174. data/lib/mongoid/relations/proxy.rb +128 -0
  175. data/lib/mongoid/relations/referenced/in.rb +216 -0
  176. data/lib/mongoid/relations/referenced/many.rb +443 -0
  177. data/lib/mongoid/relations/referenced/many_to_many.rb +344 -0
  178. data/lib/mongoid/relations/referenced/one.rb +206 -0
  179. data/lib/mongoid/relations/reflections.rb +45 -0
  180. data/lib/mongoid/relations.rb +105 -0
  181. data/lib/mongoid/safe.rb +23 -0
  182. data/lib/mongoid/safety.rb +207 -0
  183. data/lib/mongoid/scope.rb +31 -0
  184. data/lib/mongoid/serialization.rb +99 -0
  185. data/lib/mongoid/state.rb +66 -0
  186. data/lib/mongoid/timestamps.rb +38 -0
  187. data/lib/mongoid/validations/associated.rb +42 -0
  188. data/lib/mongoid/validations/uniqueness.rb +85 -0
  189. data/lib/mongoid/validations.rb +117 -0
  190. data/lib/mongoid/version.rb +4 -0
  191. data/lib/mongoid/versioning.rb +51 -0
  192. data/lib/mongoid.rb +139 -0
  193. data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
  194. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +23 -0
  195. data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
  196. data/lib/rails/generators/mongoid/model/templates/model.rb +17 -0
  197. data/lib/rails/generators/mongoid_generator.rb +61 -0
  198. data/lib/rails/mongoid.rb +57 -0
  199. 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,12 @@
1
+ # encoding: utf-8
2
+ module Mongoid #:nodoc:
3
+ module Extensions #:nodoc:
4
+ module Hash #:nodoc:
5
+ module Scoping #:nodoc:
6
+ def scoped(*args)
7
+ self
8
+ end
9
+ end
10
+ end
11
+ end
12
+ 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,12 @@
1
+ # encoding: utf-8
2
+ module Mongoid #:nodoc:
3
+ module Extensions #:nodoc:
4
+ module Nil #:nodoc:
5
+ module Collectionization #:nodoc:
6
+ def collectionize
7
+ to_s.collectionize
8
+ end
9
+ end
10
+ end
11
+ end
12
+ 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,12 @@
1
+ # encoding: utf-8
2
+ module Mongoid #:nodoc:
3
+ module Extensions #:nodoc:
4
+ module Proc #:nodoc:
5
+ module Scoping #:nodoc:
6
+ def scoped(*args)
7
+ call(*args).scoped
8
+ end
9
+ end
10
+ end
11
+ end
12
+ 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,13 @@
1
+ # encoding: utf-8
2
+ module Mongoid #:nodoc:
3
+ module Extensions #:nodoc:
4
+ module TrueClass #:nodoc:
5
+ module Equality #:nodoc:
6
+ def is_a?(other)
7
+ return true if other.name == "Boolean"
8
+ super(other)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ 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