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.
Files changed (274) hide show
  1. data/MIT_LICENSE +20 -0
  2. data/README.rdoc +47 -0
  3. data/lib/mongoid.rb +141 -0
  4. data/lib/mongoid/associations.rb +306 -0
  5. data/lib/mongoid/associations/embedded_in.rb +74 -0
  6. data/lib/mongoid/associations/embeds_many.rb +280 -0
  7. data/lib/mongoid/associations/embeds_one.rb +97 -0
  8. data/lib/mongoid/associations/foreign_key.rb +35 -0
  9. data/lib/mongoid/associations/meta_data.rb +38 -0
  10. data/lib/mongoid/associations/options.rb +62 -0
  11. data/lib/mongoid/associations/proxy.rb +33 -0
  12. data/lib/mongoid/associations/referenced_in.rb +59 -0
  13. data/lib/mongoid/associations/references_many.rb +245 -0
  14. data/lib/mongoid/associations/references_many_as_array.rb +78 -0
  15. data/lib/mongoid/associations/references_one.rb +99 -0
  16. data/lib/mongoid/atomicity.rb +55 -0
  17. data/lib/mongoid/attributes.rb +242 -0
  18. data/lib/mongoid/callbacks.rb +21 -0
  19. data/lib/mongoid/collection.rb +120 -0
  20. data/lib/mongoid/collections.rb +71 -0
  21. data/lib/mongoid/collections/cyclic_iterator.rb +34 -0
  22. data/lib/mongoid/collections/master.rb +29 -0
  23. data/lib/mongoid/collections/operations.rb +41 -0
  24. data/lib/mongoid/collections/slaves.rb +45 -0
  25. data/lib/mongoid/components.rb +34 -0
  26. data/lib/mongoid/config.rb +263 -0
  27. data/lib/mongoid/contexts.rb +24 -0
  28. data/lib/mongoid/contexts/enumerable.rb +156 -0
  29. data/lib/mongoid/contexts/ids.rb +25 -0
  30. data/lib/mongoid/contexts/mongo.rb +285 -0
  31. data/lib/mongoid/contexts/paging.rb +50 -0
  32. data/lib/mongoid/criteria.rb +248 -0
  33. data/lib/mongoid/criterion/complex.rb +21 -0
  34. data/lib/mongoid/criterion/exclusion.rb +65 -0
  35. data/lib/mongoid/criterion/inclusion.rb +110 -0
  36. data/lib/mongoid/criterion/optional.rb +189 -0
  37. data/lib/mongoid/cursor.rb +81 -0
  38. data/lib/mongoid/deprecation.rb +21 -0
  39. data/lib/mongoid/dirty.rb +252 -0
  40. data/lib/mongoid/document.rb +210 -0
  41. data/lib/mongoid/errors.rb +131 -0
  42. data/lib/mongoid/extensions.rb +115 -0
  43. data/lib/mongoid/extensions/array/accessors.rb +17 -0
  44. data/lib/mongoid/extensions/array/assimilation.rb +26 -0
  45. data/lib/mongoid/extensions/array/conversions.rb +23 -0
  46. data/lib/mongoid/extensions/array/parentization.rb +13 -0
  47. data/lib/mongoid/extensions/big_decimal/conversions.rb +19 -0
  48. data/lib/mongoid/extensions/binary/conversions.rb +17 -0
  49. data/lib/mongoid/extensions/boolean/conversions.rb +27 -0
  50. data/lib/mongoid/extensions/date/conversions.rb +24 -0
  51. data/lib/mongoid/extensions/datetime/conversions.rb +12 -0
  52. data/lib/mongoid/extensions/false_class/equality.rb +13 -0
  53. data/lib/mongoid/extensions/float/conversions.rb +20 -0
  54. data/lib/mongoid/extensions/hash/accessors.rb +42 -0
  55. data/lib/mongoid/extensions/hash/assimilation.rb +40 -0
  56. data/lib/mongoid/extensions/hash/conversions.rb +42 -0
  57. data/lib/mongoid/extensions/hash/criteria_helpers.rb +20 -0
  58. data/lib/mongoid/extensions/hash/scoping.rb +12 -0
  59. data/lib/mongoid/extensions/integer/conversions.rb +20 -0
  60. data/lib/mongoid/extensions/nil/assimilation.rb +17 -0
  61. data/lib/mongoid/extensions/object/conversions.rb +21 -0
  62. data/lib/mongoid/extensions/objectid/conversions.rb +15 -0
  63. data/lib/mongoid/extensions/proc/scoping.rb +12 -0
  64. data/lib/mongoid/extensions/set/conversions.rb +20 -0
  65. data/lib/mongoid/extensions/string/conversions.rb +15 -0
  66. data/lib/mongoid/extensions/string/inflections.rb +97 -0
  67. data/lib/mongoid/extensions/symbol/inflections.rb +40 -0
  68. data/lib/mongoid/extensions/time_conversions.rb +35 -0
  69. data/lib/mongoid/extensions/true_class/equality.rb +13 -0
  70. data/lib/mongoid/extras.rb +61 -0
  71. data/lib/mongoid/factory.rb +20 -0
  72. data/lib/mongoid/field.rb +83 -0
  73. data/lib/mongoid/fields.rb +62 -0
  74. data/lib/mongoid/finders.rb +145 -0
  75. data/lib/mongoid/hierarchy.rb +74 -0
  76. data/lib/mongoid/identity.rb +47 -0
  77. data/lib/mongoid/indexes.rb +27 -0
  78. data/lib/mongoid/javascript.rb +21 -0
  79. data/lib/mongoid/javascript/functions.yml +37 -0
  80. data/lib/mongoid/logger.rb +19 -0
  81. data/lib/mongoid/matchers.rb +35 -0
  82. data/lib/mongoid/matchers/all.rb +11 -0
  83. data/lib/mongoid/matchers/default.rb +26 -0
  84. data/lib/mongoid/matchers/exists.rb +13 -0
  85. data/lib/mongoid/matchers/gt.rb +11 -0
  86. data/lib/mongoid/matchers/gte.rb +11 -0
  87. data/lib/mongoid/matchers/in.rb +11 -0
  88. data/lib/mongoid/matchers/lt.rb +11 -0
  89. data/lib/mongoid/matchers/lte.rb +11 -0
  90. data/lib/mongoid/matchers/ne.rb +11 -0
  91. data/lib/mongoid/matchers/nin.rb +11 -0
  92. data/lib/mongoid/matchers/size.rb +11 -0
  93. data/lib/mongoid/memoization.rb +33 -0
  94. data/lib/mongoid/named_scope.rb +37 -0
  95. data/lib/mongoid/paranoia.rb +106 -0
  96. data/lib/mongoid/paths.rb +61 -0
  97. data/lib/mongoid/persistence.rb +216 -0
  98. data/lib/mongoid/persistence/command.rb +39 -0
  99. data/lib/mongoid/persistence/insert.rb +48 -0
  100. data/lib/mongoid/persistence/insert_embedded.rb +44 -0
  101. data/lib/mongoid/persistence/remove.rb +39 -0
  102. data/lib/mongoid/persistence/remove_all.rb +38 -0
  103. data/lib/mongoid/persistence/remove_embedded.rb +50 -0
  104. data/lib/mongoid/persistence/update.rb +71 -0
  105. data/lib/mongoid/railtie.rb +67 -0
  106. data/lib/mongoid/railties/database.rake +60 -0
  107. data/lib/mongoid/scope.rb +75 -0
  108. data/lib/mongoid/state.rb +32 -0
  109. data/lib/mongoid/timestamps.rb +27 -0
  110. data/lib/mongoid/validations.rb +51 -0
  111. data/lib/mongoid/validations/associated.rb +32 -0
  112. data/lib/mongoid/validations/locale/en.yml +5 -0
  113. data/lib/mongoid/validations/uniqueness.rb +56 -0
  114. data/lib/mongoid/version.rb +4 -0
  115. data/lib/mongoid/versioning.rb +26 -0
  116. data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
  117. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +24 -0
  118. data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
  119. data/lib/rails/generators/mongoid/model/templates/model.rb +15 -0
  120. data/lib/rails/generators/mongoid_generator.rb +61 -0
  121. data/spec/integration/mongoid/association_attributes_spec.rb +71 -0
  122. data/spec/integration/mongoid/associations_spec.rb +768 -0
  123. data/spec/integration/mongoid/attributes_spec.rb +59 -0
  124. data/spec/integration/mongoid/callback_spec.rb +33 -0
  125. data/spec/integration/mongoid/contexts/enumerable_spec.rb +33 -0
  126. data/spec/integration/mongoid/criteria_spec.rb +281 -0
  127. data/spec/integration/mongoid/dirty_spec.rb +85 -0
  128. data/spec/integration/mongoid/document_spec.rb +741 -0
  129. data/spec/integration/mongoid/extensions_spec.rb +22 -0
  130. data/spec/integration/mongoid/finders_spec.rb +119 -0
  131. data/spec/integration/mongoid/inheritance_spec.rb +171 -0
  132. data/spec/integration/mongoid/named_scope_spec.rb +58 -0
  133. data/spec/integration/mongoid/paranoia_spec.rb +44 -0
  134. data/spec/integration/mongoid/persistence/update_spec.rb +46 -0
  135. data/spec/integration/mongoid/persistence_spec.rb +311 -0
  136. data/spec/integration/mongoid/validations/uniqueness_spec.rb +206 -0
  137. data/spec/models/account.rb +5 -0
  138. data/spec/models/address.rb +40 -0
  139. data/spec/models/agent.rb +7 -0
  140. data/spec/models/animal.rb +15 -0
  141. data/spec/models/answer.rb +4 -0
  142. data/spec/models/callbacks.rb +47 -0
  143. data/spec/models/category.rb +13 -0
  144. data/spec/models/comment.rb +10 -0
  145. data/spec/models/country_code.rb +6 -0
  146. data/spec/models/employer.rb +5 -0
  147. data/spec/models/favorite.rb +8 -0
  148. data/spec/models/game.rb +9 -0
  149. data/spec/models/inheritance.rb +72 -0
  150. data/spec/models/location.rb +5 -0
  151. data/spec/models/login.rb +6 -0
  152. data/spec/models/mixed_drink.rb +4 -0
  153. data/spec/models/name.rb +13 -0
  154. data/spec/models/namespacing.rb +11 -0
  155. data/spec/models/paranoid_post.rb +18 -0
  156. data/spec/models/parents.rb +32 -0
  157. data/spec/models/patient.rb +15 -0
  158. data/spec/models/person.rb +106 -0
  159. data/spec/models/pet.rb +7 -0
  160. data/spec/models/pet_owner.rb +6 -0
  161. data/spec/models/phone.rb +7 -0
  162. data/spec/models/post.rb +25 -0
  163. data/spec/models/preference.rb +7 -0
  164. data/spec/models/question.rb +8 -0
  165. data/spec/models/survey.rb +6 -0
  166. data/spec/models/translation.rb +5 -0
  167. data/spec/models/user.rb +6 -0
  168. data/spec/models/user_accout.rb +5 -0
  169. data/spec/models/vet_visit.rb +5 -0
  170. data/spec/models/video.rb +5 -0
  171. data/spec/spec_helper.rb +33 -0
  172. data/spec/unit/mongoid/associations/embedded_in_spec.rb +193 -0
  173. data/spec/unit/mongoid/associations/embeds_many_spec.rb +626 -0
  174. data/spec/unit/mongoid/associations/embeds_one_spec.rb +287 -0
  175. data/spec/unit/mongoid/associations/foreign_key_spec.rb +90 -0
  176. data/spec/unit/mongoid/associations/meta_data_spec.rb +110 -0
  177. data/spec/unit/mongoid/associations/options_spec.rb +215 -0
  178. data/spec/unit/mongoid/associations/referenced_in_spec.rb +145 -0
  179. data/spec/unit/mongoid/associations/references_many_as_array_spec.rb +424 -0
  180. data/spec/unit/mongoid/associations/references_many_spec.rb +502 -0
  181. data/spec/unit/mongoid/associations/references_one_spec.rb +204 -0
  182. data/spec/unit/mongoid/associations_spec.rb +688 -0
  183. data/spec/unit/mongoid/atomicity_spec.rb +164 -0
  184. data/spec/unit/mongoid/attributes_spec.rb +646 -0
  185. data/spec/unit/mongoid/callbacks_spec.rb +85 -0
  186. data/spec/unit/mongoid/collection_spec.rb +187 -0
  187. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +75 -0
  188. data/spec/unit/mongoid/collections/master_spec.rb +41 -0
  189. data/spec/unit/mongoid/collections/slaves_spec.rb +81 -0
  190. data/spec/unit/mongoid/collections_spec.rb +98 -0
  191. data/spec/unit/mongoid/config_spec.rb +298 -0
  192. data/spec/unit/mongoid/contexts/enumerable_spec.rb +447 -0
  193. data/spec/unit/mongoid/contexts/mongo_spec.rb +703 -0
  194. data/spec/unit/mongoid/contexts_spec.rb +25 -0
  195. data/spec/unit/mongoid/criteria_spec.rb +873 -0
  196. data/spec/unit/mongoid/criterion/complex_spec.rb +17 -0
  197. data/spec/unit/mongoid/criterion/exclusion_spec.rb +121 -0
  198. data/spec/unit/mongoid/criterion/inclusion_spec.rb +274 -0
  199. data/spec/unit/mongoid/criterion/optional_spec.rb +483 -0
  200. data/spec/unit/mongoid/cursor_spec.rb +80 -0
  201. data/spec/unit/mongoid/deprecation_spec.rb +24 -0
  202. data/spec/unit/mongoid/dirty_spec.rb +430 -0
  203. data/spec/unit/mongoid/document_spec.rb +623 -0
  204. data/spec/unit/mongoid/errors_spec.rb +154 -0
  205. data/spec/unit/mongoid/extensions/array/accessors_spec.rb +50 -0
  206. data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +24 -0
  207. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +52 -0
  208. data/spec/unit/mongoid/extensions/array/parentization_spec.rb +20 -0
  209. data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +36 -0
  210. data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +22 -0
  211. data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +49 -0
  212. data/spec/unit/mongoid/extensions/date/conversions_spec.rb +145 -0
  213. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +14 -0
  214. data/spec/unit/mongoid/extensions/false_class/equality_spec.rb +35 -0
  215. data/spec/unit/mongoid/extensions/float/conversions_spec.rb +61 -0
  216. data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +184 -0
  217. data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +59 -0
  218. data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +35 -0
  219. data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +17 -0
  220. data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +14 -0
  221. data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +61 -0
  222. data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +29 -0
  223. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +44 -0
  224. data/spec/unit/mongoid/extensions/objectid/conversions_spec.rb +22 -0
  225. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +34 -0
  226. data/spec/unit/mongoid/extensions/set/conversions_spec.rb +21 -0
  227. data/spec/unit/mongoid/extensions/string/conversions_spec.rb +28 -0
  228. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +208 -0
  229. data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +107 -0
  230. data/spec/unit/mongoid/extensions/time_conversions_spec.rb +186 -0
  231. data/spec/unit/mongoid/extensions/true_class/equality_spec.rb +35 -0
  232. data/spec/unit/mongoid/extras_spec.rb +102 -0
  233. data/spec/unit/mongoid/factory_spec.rb +31 -0
  234. data/spec/unit/mongoid/field_spec.rb +169 -0
  235. data/spec/unit/mongoid/fields_spec.rb +181 -0
  236. data/spec/unit/mongoid/finders_spec.rb +439 -0
  237. data/spec/unit/mongoid/hierarchy_spec.rb +68 -0
  238. data/spec/unit/mongoid/identity_spec.rb +109 -0
  239. data/spec/unit/mongoid/indexes_spec.rb +99 -0
  240. data/spec/unit/mongoid/javascript_spec.rb +48 -0
  241. data/spec/unit/mongoid/logger_spec.rb +38 -0
  242. data/spec/unit/mongoid/matchers/all_spec.rb +27 -0
  243. data/spec/unit/mongoid/matchers/default_spec.rb +27 -0
  244. data/spec/unit/mongoid/matchers/exists_spec.rb +56 -0
  245. data/spec/unit/mongoid/matchers/gt_spec.rb +39 -0
  246. data/spec/unit/mongoid/matchers/gte_spec.rb +49 -0
  247. data/spec/unit/mongoid/matchers/in_spec.rb +27 -0
  248. data/spec/unit/mongoid/matchers/lt_spec.rb +39 -0
  249. data/spec/unit/mongoid/matchers/lte_spec.rb +49 -0
  250. data/spec/unit/mongoid/matchers/ne_spec.rb +27 -0
  251. data/spec/unit/mongoid/matchers/nin_spec.rb +27 -0
  252. data/spec/unit/mongoid/matchers/size_spec.rb +27 -0
  253. data/spec/unit/mongoid/matchers_spec.rb +329 -0
  254. data/spec/unit/mongoid/memoization_spec.rb +75 -0
  255. data/spec/unit/mongoid/named_scope_spec.rb +123 -0
  256. data/spec/unit/mongoid/paranoia_spec.rb +108 -0
  257. data/spec/unit/mongoid/paths_spec.rb +272 -0
  258. data/spec/unit/mongoid/persistence/insert_embedded_spec.rb +154 -0
  259. data/spec/unit/mongoid/persistence/insert_spec.rb +144 -0
  260. data/spec/unit/mongoid/persistence/remove_all_spec.rb +82 -0
  261. data/spec/unit/mongoid/persistence/remove_embedded_spec.rb +152 -0
  262. data/spec/unit/mongoid/persistence/remove_spec.rb +89 -0
  263. data/spec/unit/mongoid/persistence/update_spec.rb +177 -0
  264. data/spec/unit/mongoid/persistence_spec.rb +452 -0
  265. data/spec/unit/mongoid/scope_spec.rb +240 -0
  266. data/spec/unit/mongoid/serialization_spec.rb +43 -0
  267. data/spec/unit/mongoid/state_spec.rb +94 -0
  268. data/spec/unit/mongoid/timestamps_spec.rb +30 -0
  269. data/spec/unit/mongoid/validations/associated_spec.rb +103 -0
  270. data/spec/unit/mongoid/validations/uniqueness_spec.rb +201 -0
  271. data/spec/unit/mongoid/validations_spec.rb +43 -0
  272. data/spec/unit/mongoid/versioning_spec.rb +41 -0
  273. data/spec/unit/mongoid_spec.rb +46 -0
  274. metadata +433 -0
@@ -0,0 +1,29 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Nil::Assimilation do
4
+
5
+ describe "#assimilate" do
6
+
7
+ before do
8
+ @name = Name.new(:first_name => "Durran")
9
+ @parent = Person.new(:title => "Mr.", :name => @name)
10
+ @options = Mongoid::Associations::Options.new(:name => :name)
11
+ end
12
+
13
+ it "removes the child attribute from the parent" do
14
+ nil.assimilate(@parent, @options)
15
+ @parent.attributes[:name].should be_nil
16
+ end
17
+
18
+ it "returns nil" do
19
+ nil.assimilate(@parent, @options).should be_nil
20
+ end
21
+ end
22
+
23
+ describe "#collectionize" do
24
+
25
+ it "returns ''" do
26
+ nil.collectionize.should == ""
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,44 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Object::Conversions do
4
+
5
+ describe "#get" do
6
+
7
+ before do
8
+ @attributes = { :_id => "test", :title => "Sir", :age => 100 }
9
+ end
10
+
11
+ it "instantiates a new class from the attributes" do
12
+ Person.get(@attributes).should == Person.new(@attributes)
13
+ end
14
+
15
+ context "when the value is nil" do
16
+
17
+ it "returns nil" do
18
+ Person.get(nil).should be_nil
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "#set" do
24
+
25
+ context "when object has attributes" do
26
+
27
+ before do
28
+ @attributes = {
29
+ "_id" => "test",
30
+ "title" => "Sir",
31
+ "age" => 100,
32
+ "_type" => "Person",
33
+ "blood_alcohol_content" => 0.0,
34
+ "pets" => false
35
+ }
36
+ @person = Person.instantiate(@attributes)
37
+ end
38
+
39
+ it "converts the object to a hash" do
40
+ Person.set(@person).except("_id").should == @attributes.except("_id")
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,22 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::ObjectID::Conversions do
4
+
5
+ let(:object_id) do
6
+ BSON::ObjectID.new
7
+ end
8
+
9
+ describe "#get" do
10
+
11
+ it "returns self" do
12
+ BSON::ObjectID.get(object_id).should == object_id
13
+ end
14
+ end
15
+
16
+ describe "#set" do
17
+
18
+ it "returns self" do
19
+ BSON::ObjectID.set(object_id).should == object_id
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Proc::Scoping do
4
+
5
+ describe "#scoped" do
6
+
7
+ context "when the proc accessed a hash" do
8
+
9
+ before do
10
+ @proc = lambda { |number| { :where => { :count => number } } }
11
+ end
12
+
13
+ it "calls the hash with the args" do
14
+ @proc.scoped(10).should == { :where => { :count => 10 } }
15
+ end
16
+
17
+ end
18
+
19
+ context "when the proc calls a criteria" do
20
+
21
+ before do
22
+ @proc = lambda { |title| Person.where(:title => title) }
23
+ end
24
+
25
+ it "returns the criteria scoped" do
26
+ @proc.scoped("Sir").should ==
27
+ { :where => { :title => "Sir" } }
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Set::Conversions do
4
+
5
+ describe "#get" do
6
+
7
+ it "returns the set if Array" do
8
+ Set.get(["test"]).should == Set.new(["test"])
9
+ end
10
+
11
+ end
12
+
13
+ describe "#set" do
14
+
15
+ it "returns an array" do
16
+ Set.set(["test"]).should == ["test"]
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,28 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::String::Conversions do
4
+
5
+ describe "#set" do
6
+
7
+ context "when the value is not nil" do
8
+
9
+ it "returns the object to_s" do
10
+ String.set(1).should == "1"
11
+ end
12
+ end
13
+
14
+ context "when the value is nil" do
15
+
16
+ it "returns nil" do
17
+ String.set(nil).should be_nil
18
+ end
19
+ end
20
+ end
21
+
22
+ describe "#get" do
23
+ it "returns the string" do
24
+ String.get("test").should == "test"
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,208 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::String::Inflections do
4
+
5
+ describe "#collectionize" do
6
+
7
+ context "when class is namepaced" do
8
+
9
+ it "returns an underscored tableized name" do
10
+ Medical::Patient.name.collectionize.should == "medical_patients"
11
+ end
12
+
13
+ end
14
+
15
+ context "when class is not namespaced" do
16
+
17
+ it "returns an underscored tableized name" do
18
+ MixedDrink.name.collectionize.should == "mixed_drinks"
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+ describe "#identify" do
26
+
27
+ context "when parameterizing composite keys" do
28
+
29
+ it "converts the string to all lowercase and dashed" do
30
+ "A Midsummer Night's Dream".identify.should == "a-midsummer-night-quo-s-dream"
31
+ end
32
+
33
+ end
34
+
35
+ context "when not parameterizing keys" do
36
+
37
+ before do
38
+ Mongoid.parameterize_keys = false
39
+ end
40
+
41
+ after do
42
+ Mongoid.parameterize_keys = true
43
+ end
44
+
45
+ it "does nothing to the keys" do
46
+ "A Midsummer Night's Dream".identify.should == "A Midsummer Night's Dream"
47
+ end
48
+ end
49
+
50
+ end
51
+
52
+ describe "#labelize" do
53
+
54
+ it "returns the underscored name humanized" do
55
+ MixedDrink.name.labelize.should == "Mixed drink"
56
+ end
57
+
58
+ end
59
+
60
+ describe "#singular?" do
61
+
62
+ context "when singular" do
63
+
64
+ it "returns true" do
65
+ "bat".singular?.should be_true
66
+ end
67
+
68
+ context "when string is added to inflections" do
69
+
70
+ it "returns true" do
71
+ "address".singular?.should be_true
72
+ end
73
+
74
+ end
75
+
76
+ end
77
+
78
+ context "when plural" do
79
+
80
+ it "returns false" do
81
+ "bats".singular?.should be_false
82
+ end
83
+
84
+ context "when string is added to inflections" do
85
+
86
+ it "returns false" do
87
+ "addresses".singular?.should be_false
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+
94
+ end
95
+
96
+ describe "plural?" do
97
+
98
+ context "when singular" do
99
+
100
+ it "returns false" do
101
+ "bat".plural?.should be_false
102
+ end
103
+
104
+ context "when string is added to inflections" do
105
+
106
+ it "returns false" do
107
+ "address".plural?.should be_false
108
+ end
109
+
110
+ end
111
+
112
+ end
113
+
114
+ context "when plural" do
115
+
116
+ it "returns true" do
117
+ "bats".plural?.should be_true
118
+ end
119
+
120
+ context "when string is added to inflections" do
121
+
122
+ it "returns true" do
123
+ "addresses".plural?.should be_true
124
+ end
125
+
126
+ end
127
+
128
+ end
129
+
130
+ end
131
+
132
+ describe "invert" do
133
+
134
+ context "when asc" do
135
+
136
+ it "returns desc" do
137
+ "asc".invert.should == "desc"
138
+ end
139
+
140
+ end
141
+
142
+ context "when ascending" do
143
+
144
+ it "returns descending" do
145
+ "ascending".invert.should == "descending"
146
+ end
147
+
148
+ end
149
+
150
+ context "when desc" do
151
+
152
+ it "returns asc" do
153
+ "desc".invert.should == "asc"
154
+ end
155
+
156
+ end
157
+
158
+ context "when descending" do
159
+
160
+ it "returns ascending" do
161
+ "descending".invert.should == "ascending"
162
+ end
163
+
164
+ end
165
+
166
+ end
167
+
168
+ describe "#reader" do
169
+
170
+ context "when string is a reader" do
171
+
172
+ it "returns self" do
173
+ "attribute".reader.should == "attribute"
174
+ end
175
+
176
+ end
177
+
178
+ context "when string is a writer" do
179
+
180
+ it "returns the reader" do
181
+ "attribute=".reader.should == "attribute"
182
+ end
183
+
184
+ end
185
+
186
+ end
187
+
188
+ describe "#writer?" do
189
+
190
+ context "when string is a reader" do
191
+
192
+ it "returns false" do
193
+ "attribute".writer?.should be_false
194
+ end
195
+
196
+ end
197
+
198
+ context "when string is a writer" do
199
+
200
+ it "returns true" do
201
+ "attribute=".writer?.should be_true
202
+ end
203
+
204
+ end
205
+
206
+ end
207
+
208
+ end
@@ -0,0 +1,107 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Extensions::Symbol::Inflections do
4
+
5
+ describe "#singular?" do
6
+
7
+ context "when singular" do
8
+
9
+ it "returns true" do
10
+ :bat.singular?.should be_true
11
+ end
12
+
13
+ end
14
+
15
+ context "when plural" do
16
+
17
+ it "returns false" do
18
+ :bats.singular?.should be_false
19
+ end
20
+
21
+ end
22
+
23
+ end
24
+
25
+ describe "plural?" do
26
+
27
+ context "when singular" do
28
+
29
+ it "returns false" do
30
+ :bat.plural?.should be_false
31
+ end
32
+
33
+ end
34
+
35
+ context "when plural" do
36
+
37
+ it "returns true" do
38
+ :bats.plural?.should be_true
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+
45
+ describe "invert" do
46
+
47
+ context "when :asc" do
48
+
49
+ it "returns :desc" do
50
+ :asc.invert.should == :desc
51
+ end
52
+
53
+ end
54
+
55
+ context "when :ascending" do
56
+
57
+ it "returns :descending" do
58
+ :ascending.invert.should == :descending
59
+ end
60
+
61
+ end
62
+
63
+ context "when :desc" do
64
+
65
+ it "returns :asc" do
66
+ :desc.invert.should == :asc
67
+ end
68
+
69
+ end
70
+
71
+ context "when :descending" do
72
+
73
+ it "returns :ascending" do
74
+ :descending.invert.should == :ascending
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+
81
+ describe "#gt" do
82
+
83
+ it 'returns :"foo $gt"' do
84
+ ret = :foo.gt
85
+ ret.key.should == :foo
86
+ ret.operator.should == "gt"
87
+ end
88
+ end
89
+
90
+ describe "#near" do
91
+
92
+ it 'returns :"foo $near"' do
93
+ ret = :foo.near
94
+ ret.key.should == :foo
95
+ ret.operator.should == "near"
96
+ end
97
+ end
98
+
99
+ describe "#within" do
100
+
101
+ it "returns :foo $within" do
102
+ ret = :foo.within
103
+ ret.key.should == :foo
104
+ ret.operator.should == "within"
105
+ end
106
+ end
107
+ end