humanoid 1.2.7

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 (210) hide show
  1. data/.gitignore +6 -0
  2. data/.watchr +29 -0
  3. data/HISTORY +342 -0
  4. data/MIT_LICENSE +20 -0
  5. data/README.rdoc +56 -0
  6. data/Rakefile +53 -0
  7. data/VERSION +1 -0
  8. data/caliper.yml +4 -0
  9. data/humanoid.gemspec +374 -0
  10. data/lib/humanoid.rb +111 -0
  11. data/lib/humanoid/associations.rb +258 -0
  12. data/lib/humanoid/associations/belongs_to.rb +64 -0
  13. data/lib/humanoid/associations/belongs_to_related.rb +62 -0
  14. data/lib/humanoid/associations/has_many.rb +180 -0
  15. data/lib/humanoid/associations/has_many_related.rb +109 -0
  16. data/lib/humanoid/associations/has_one.rb +95 -0
  17. data/lib/humanoid/associations/has_one_related.rb +81 -0
  18. data/lib/humanoid/associations/options.rb +57 -0
  19. data/lib/humanoid/associations/proxy.rb +31 -0
  20. data/lib/humanoid/attributes.rb +184 -0
  21. data/lib/humanoid/callbacks.rb +23 -0
  22. data/lib/humanoid/collection.rb +118 -0
  23. data/lib/humanoid/collections/cyclic_iterator.rb +34 -0
  24. data/lib/humanoid/collections/master.rb +28 -0
  25. data/lib/humanoid/collections/mimic.rb +46 -0
  26. data/lib/humanoid/collections/operations.rb +41 -0
  27. data/lib/humanoid/collections/slaves.rb +44 -0
  28. data/lib/humanoid/commands.rb +182 -0
  29. data/lib/humanoid/commands/create.rb +21 -0
  30. data/lib/humanoid/commands/delete.rb +16 -0
  31. data/lib/humanoid/commands/delete_all.rb +23 -0
  32. data/lib/humanoid/commands/deletion.rb +18 -0
  33. data/lib/humanoid/commands/destroy.rb +19 -0
  34. data/lib/humanoid/commands/destroy_all.rb +23 -0
  35. data/lib/humanoid/commands/save.rb +27 -0
  36. data/lib/humanoid/components.rb +24 -0
  37. data/lib/humanoid/config.rb +84 -0
  38. data/lib/humanoid/contexts.rb +25 -0
  39. data/lib/humanoid/contexts/enumerable.rb +117 -0
  40. data/lib/humanoid/contexts/ids.rb +25 -0
  41. data/lib/humanoid/contexts/mongo.rb +224 -0
  42. data/lib/humanoid/contexts/paging.rb +42 -0
  43. data/lib/humanoid/criteria.rb +259 -0
  44. data/lib/humanoid/criterion/complex.rb +21 -0
  45. data/lib/humanoid/criterion/exclusion.rb +65 -0
  46. data/lib/humanoid/criterion/inclusion.rb +91 -0
  47. data/lib/humanoid/criterion/optional.rb +128 -0
  48. data/lib/humanoid/cursor.rb +82 -0
  49. data/lib/humanoid/document.rb +300 -0
  50. data/lib/humanoid/enslavement.rb +38 -0
  51. data/lib/humanoid/errors.rb +77 -0
  52. data/lib/humanoid/extensions.rb +84 -0
  53. data/lib/humanoid/extensions/array/accessors.rb +17 -0
  54. data/lib/humanoid/extensions/array/aliasing.rb +4 -0
  55. data/lib/humanoid/extensions/array/assimilation.rb +26 -0
  56. data/lib/humanoid/extensions/array/conversions.rb +29 -0
  57. data/lib/humanoid/extensions/array/parentization.rb +13 -0
  58. data/lib/humanoid/extensions/boolean/conversions.rb +16 -0
  59. data/lib/humanoid/extensions/date/conversions.rb +15 -0
  60. data/lib/humanoid/extensions/datetime/conversions.rb +17 -0
  61. data/lib/humanoid/extensions/float/conversions.rb +16 -0
  62. data/lib/humanoid/extensions/hash/accessors.rb +38 -0
  63. data/lib/humanoid/extensions/hash/assimilation.rb +30 -0
  64. data/lib/humanoid/extensions/hash/conversions.rb +15 -0
  65. data/lib/humanoid/extensions/hash/criteria_helpers.rb +20 -0
  66. data/lib/humanoid/extensions/hash/scoping.rb +12 -0
  67. data/lib/humanoid/extensions/integer/conversions.rb +16 -0
  68. data/lib/humanoid/extensions/nil/assimilation.rb +13 -0
  69. data/lib/humanoid/extensions/object/conversions.rb +33 -0
  70. data/lib/humanoid/extensions/proc/scoping.rb +12 -0
  71. data/lib/humanoid/extensions/string/conversions.rb +15 -0
  72. data/lib/humanoid/extensions/string/inflections.rb +97 -0
  73. data/lib/humanoid/extensions/symbol/inflections.rb +36 -0
  74. data/lib/humanoid/extensions/time/conversions.rb +18 -0
  75. data/lib/humanoid/factory.rb +19 -0
  76. data/lib/humanoid/field.rb +39 -0
  77. data/lib/humanoid/fields.rb +62 -0
  78. data/lib/humanoid/finders.rb +224 -0
  79. data/lib/humanoid/identity.rb +39 -0
  80. data/lib/humanoid/indexes.rb +30 -0
  81. data/lib/humanoid/matchers.rb +36 -0
  82. data/lib/humanoid/matchers/all.rb +11 -0
  83. data/lib/humanoid/matchers/default.rb +26 -0
  84. data/lib/humanoid/matchers/exists.rb +13 -0
  85. data/lib/humanoid/matchers/gt.rb +11 -0
  86. data/lib/humanoid/matchers/gte.rb +11 -0
  87. data/lib/humanoid/matchers/in.rb +11 -0
  88. data/lib/humanoid/matchers/lt.rb +11 -0
  89. data/lib/humanoid/matchers/lte.rb +11 -0
  90. data/lib/humanoid/matchers/ne.rb +11 -0
  91. data/lib/humanoid/matchers/nin.rb +11 -0
  92. data/lib/humanoid/matchers/size.rb +11 -0
  93. data/lib/humanoid/memoization.rb +27 -0
  94. data/lib/humanoid/named_scope.rb +40 -0
  95. data/lib/humanoid/scope.rb +75 -0
  96. data/lib/humanoid/timestamps.rb +30 -0
  97. data/lib/humanoid/versioning.rb +28 -0
  98. data/perf/benchmark.rb +77 -0
  99. data/spec/integration/humanoid/associations_spec.rb +301 -0
  100. data/spec/integration/humanoid/attributes_spec.rb +22 -0
  101. data/spec/integration/humanoid/commands_spec.rb +216 -0
  102. data/spec/integration/humanoid/contexts/enumerable_spec.rb +33 -0
  103. data/spec/integration/humanoid/criteria_spec.rb +224 -0
  104. data/spec/integration/humanoid/document_spec.rb +587 -0
  105. data/spec/integration/humanoid/extensions_spec.rb +26 -0
  106. data/spec/integration/humanoid/finders_spec.rb +119 -0
  107. data/spec/integration/humanoid/inheritance_spec.rb +137 -0
  108. data/spec/integration/humanoid/named_scope_spec.rb +46 -0
  109. data/spec/models/address.rb +39 -0
  110. data/spec/models/animal.rb +6 -0
  111. data/spec/models/comment.rb +8 -0
  112. data/spec/models/country_code.rb +6 -0
  113. data/spec/models/employer.rb +5 -0
  114. data/spec/models/game.rb +6 -0
  115. data/spec/models/inheritance.rb +56 -0
  116. data/spec/models/location.rb +5 -0
  117. data/spec/models/mixed_drink.rb +4 -0
  118. data/spec/models/name.rb +13 -0
  119. data/spec/models/namespacing.rb +11 -0
  120. data/spec/models/patient.rb +4 -0
  121. data/spec/models/person.rb +98 -0
  122. data/spec/models/pet.rb +7 -0
  123. data/spec/models/pet_owner.rb +6 -0
  124. data/spec/models/phone.rb +7 -0
  125. data/spec/models/post.rb +15 -0
  126. data/spec/models/translation.rb +5 -0
  127. data/spec/models/vet_visit.rb +5 -0
  128. data/spec/spec.opts +3 -0
  129. data/spec/spec_helper.rb +31 -0
  130. data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +141 -0
  131. data/spec/unit/mongoid/associations/belongs_to_spec.rb +193 -0
  132. data/spec/unit/mongoid/associations/has_many_related_spec.rb +387 -0
  133. data/spec/unit/mongoid/associations/has_many_spec.rb +471 -0
  134. data/spec/unit/mongoid/associations/has_one_related_spec.rb +179 -0
  135. data/spec/unit/mongoid/associations/has_one_spec.rb +282 -0
  136. data/spec/unit/mongoid/associations/options_spec.rb +191 -0
  137. data/spec/unit/mongoid/associations_spec.rb +545 -0
  138. data/spec/unit/mongoid/attributes_spec.rb +484 -0
  139. data/spec/unit/mongoid/callbacks_spec.rb +55 -0
  140. data/spec/unit/mongoid/collection_spec.rb +171 -0
  141. data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +75 -0
  142. data/spec/unit/mongoid/collections/master_spec.rb +41 -0
  143. data/spec/unit/mongoid/collections/mimic_spec.rb +43 -0
  144. data/spec/unit/mongoid/collections/slaves_spec.rb +81 -0
  145. data/spec/unit/mongoid/commands/create_spec.rb +30 -0
  146. data/spec/unit/mongoid/commands/delete_all_spec.rb +58 -0
  147. data/spec/unit/mongoid/commands/delete_spec.rb +35 -0
  148. data/spec/unit/mongoid/commands/destroy_all_spec.rb +23 -0
  149. data/spec/unit/mongoid/commands/destroy_spec.rb +44 -0
  150. data/spec/unit/mongoid/commands/save_spec.rb +105 -0
  151. data/spec/unit/mongoid/commands_spec.rb +282 -0
  152. data/spec/unit/mongoid/config_spec.rb +165 -0
  153. data/spec/unit/mongoid/contexts/enumerable_spec.rb +374 -0
  154. data/spec/unit/mongoid/contexts/mongo_spec.rb +505 -0
  155. data/spec/unit/mongoid/contexts_spec.rb +25 -0
  156. data/spec/unit/mongoid/criteria_spec.rb +769 -0
  157. data/spec/unit/mongoid/criterion/complex_spec.rb +19 -0
  158. data/spec/unit/mongoid/criterion/exclusion_spec.rb +91 -0
  159. data/spec/unit/mongoid/criterion/inclusion_spec.rb +211 -0
  160. data/spec/unit/mongoid/criterion/optional_spec.rb +329 -0
  161. data/spec/unit/mongoid/cursor_spec.rb +74 -0
  162. data/spec/unit/mongoid/document_spec.rb +986 -0
  163. data/spec/unit/mongoid/enslavement_spec.rb +63 -0
  164. data/spec/unit/mongoid/errors_spec.rb +103 -0
  165. data/spec/unit/mongoid/extensions/array/accessors_spec.rb +50 -0
  166. data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +24 -0
  167. data/spec/unit/mongoid/extensions/array/conversions_spec.rb +35 -0
  168. data/spec/unit/mongoid/extensions/array/parentization_spec.rb +20 -0
  169. data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +49 -0
  170. data/spec/unit/mongoid/extensions/date/conversions_spec.rb +102 -0
  171. data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +70 -0
  172. data/spec/unit/mongoid/extensions/float/conversions_spec.rb +61 -0
  173. data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +184 -0
  174. data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +46 -0
  175. data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +21 -0
  176. data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +17 -0
  177. data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +14 -0
  178. data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +61 -0
  179. data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +24 -0
  180. data/spec/unit/mongoid/extensions/object/conversions_spec.rb +43 -0
  181. data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +34 -0
  182. data/spec/unit/mongoid/extensions/string/conversions_spec.rb +17 -0
  183. data/spec/unit/mongoid/extensions/string/inflections_spec.rb +208 -0
  184. data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +91 -0
  185. data/spec/unit/mongoid/extensions/time/conversions_spec.rb +70 -0
  186. data/spec/unit/mongoid/factory_spec.rb +31 -0
  187. data/spec/unit/mongoid/field_spec.rb +81 -0
  188. data/spec/unit/mongoid/fields_spec.rb +158 -0
  189. data/spec/unit/mongoid/finders_spec.rb +368 -0
  190. data/spec/unit/mongoid/identity_spec.rb +88 -0
  191. data/spec/unit/mongoid/indexes_spec.rb +93 -0
  192. data/spec/unit/mongoid/matchers/all_spec.rb +27 -0
  193. data/spec/unit/mongoid/matchers/default_spec.rb +27 -0
  194. data/spec/unit/mongoid/matchers/exists_spec.rb +56 -0
  195. data/spec/unit/mongoid/matchers/gt_spec.rb +39 -0
  196. data/spec/unit/mongoid/matchers/gte_spec.rb +49 -0
  197. data/spec/unit/mongoid/matchers/in_spec.rb +27 -0
  198. data/spec/unit/mongoid/matchers/lt_spec.rb +39 -0
  199. data/spec/unit/mongoid/matchers/lte_spec.rb +49 -0
  200. data/spec/unit/mongoid/matchers/ne_spec.rb +27 -0
  201. data/spec/unit/mongoid/matchers/nin_spec.rb +27 -0
  202. data/spec/unit/mongoid/matchers/size_spec.rb +27 -0
  203. data/spec/unit/mongoid/matchers_spec.rb +329 -0
  204. data/spec/unit/mongoid/memoization_spec.rb +75 -0
  205. data/spec/unit/mongoid/named_scope_spec.rb +123 -0
  206. data/spec/unit/mongoid/scope_spec.rb +240 -0
  207. data/spec/unit/mongoid/timestamps_spec.rb +25 -0
  208. data/spec/unit/mongoid/versioning_spec.rb +41 -0
  209. data/spec/unit/mongoid_spec.rb +37 -0
  210. metadata +431 -0
@@ -0,0 +1,70 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::DateTime::Conversions do
4
+
5
+ before do
6
+ Time.zone = "Eastern Time (US & Canada)"
7
+ @time = Time.local(1976, 11, 19)
8
+ end
9
+
10
+ after do
11
+ Time.zone = nil
12
+ end
13
+
14
+ describe "#set" do
15
+
16
+ before do
17
+ @date_time = DateTime.civil(2005, 11, 19).new_offset(1800)
18
+ end
19
+
20
+ context "when value is a string" do
21
+
22
+ it "converts to a utc time" do
23
+ DateTime.set(@date_time.to_s).utc_offset.should == 0
24
+ end
25
+
26
+ end
27
+
28
+ context "when value is a date_time" do
29
+
30
+ it "converts to a utc time" do
31
+ DateTime.set(@date_time).utc_offset.should == 0
32
+ end
33
+
34
+ end
35
+
36
+ context "when value is nil" do
37
+
38
+ it "returns nil" do
39
+ DateTime.set(nil).should be_nil
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+
46
+ describe "#get" do
47
+
48
+ context "when time is provided" do
49
+
50
+ it "returns a DateTime" do
51
+ DateTime.get(@time.dup).should be_a_kind_of(DateTime)
52
+ end
53
+
54
+ it "returns the local date_time" do
55
+ DateTime.get(@time.dup).utc_offset.should == @time.utc_offset
56
+ end
57
+
58
+ end
59
+
60
+ context "when time is nil" do
61
+
62
+ it "returns nil" do
63
+ DateTime.get(nil).should be_nil
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+
70
+ end
@@ -0,0 +1,61 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::Float::Conversions do
4
+
5
+ describe "#set" do
6
+
7
+ context "when the value is a number" do
8
+
9
+ it "converts the number to a float" do
10
+ Float.set(3.45).should == 3.45
11
+ end
12
+
13
+ end
14
+
15
+ context "when the value is not a number" do
16
+
17
+ context "when the value is non numerical" do
18
+
19
+ it "returns the string" do
20
+ Float.set("foo").should == "foo"
21
+ end
22
+
23
+ end
24
+
25
+ context "when the string is numerical" do
26
+
27
+ it "returns the float value for the string" do
28
+ Float.set("3.45").should == 3.45
29
+ end
30
+
31
+ end
32
+
33
+ context "when the string is empty" do
34
+
35
+ it "returns 0.0" do
36
+ Float.set("").should be_nil
37
+ end
38
+
39
+ end
40
+
41
+ context "when the string is nil" do
42
+
43
+ it "returns 0.0" do
44
+ Float.set(nil).should be_nil
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ describe "#get" do
54
+
55
+ it "returns the float" do
56
+ Float.get(3.45).should == 3.45
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -0,0 +1,184 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::Hash::Accessors do
4
+
5
+ before do
6
+ @hash = {
7
+ :_id => 1,
8
+ :title => "value",
9
+ :name => {
10
+ :_id => 2, :first_name => "Test", :last_name => "User"
11
+ },
12
+ :pet => {
13
+ :_id => 6,
14
+ :name => "Fido",
15
+ :vet_visits => [ { :date => Date.new(2007, 1, 1) } ]
16
+ },
17
+ :addresses => [
18
+ { :_id => 3, :street => "First Street" },
19
+ { :_id => 4, :street => "Second Street" }
20
+ ]
21
+ }
22
+ end
23
+
24
+ describe "#klass" do
25
+
26
+ context "when _type exists" do
27
+
28
+ it "returns the class" do
29
+ { "_type" => "Person" }.klass.should == Person
30
+ end
31
+
32
+ end
33
+
34
+ context "when _type does not exist" do
35
+
36
+ it "returns nil" do
37
+ {}.klass.should be_nil
38
+ end
39
+
40
+ end
41
+
42
+ end
43
+
44
+ describe "#remove" do
45
+
46
+ context "when removing from an array" do
47
+
48
+ context "when the elements exist" do
49
+
50
+ it "removes the element from the array" do
51
+ @hash.remove(:addresses, { :_id => 3, :street => "First Street" })
52
+ @hash[:addresses].size.should == 1
53
+ end
54
+
55
+ end
56
+
57
+ context "when the elements do not exist" do
58
+
59
+ it "does not raise an error" do
60
+ @hash.remove(:aliases, { :_id => 3, :street => "First Street" })
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+
67
+ context "when removing a single object" do
68
+
69
+ context "when the element exists" do
70
+
71
+ it "removes the element from the array" do
72
+ @hash.remove(:name, { :_id => 2, :first_name => "Test", :last_name => "User" })
73
+ @hash[:name].should be_nil
74
+ end
75
+
76
+ end
77
+
78
+ context "when the element does not exist" do
79
+
80
+ it "does not raise an error" do
81
+ @hash.remove(:alias, { :_id => 3, :street => "First Street" })
82
+ end
83
+
84
+ end
85
+
86
+ end
87
+
88
+ end
89
+
90
+ describe "#insert" do
91
+
92
+ context "when writing to a hash with a child array" do
93
+
94
+ context "when child attributes not present" do
95
+
96
+ it "does nothing to the children" do
97
+ @hash.insert(:pet, { :name => "Bingo" })
98
+ @hash[:pet].should == {
99
+ :_id => 6,
100
+ :name => "Bingo",
101
+ :vet_visits => [ { :date => Date.new(2007, 1, 1) } ]
102
+ }
103
+ end
104
+
105
+ end
106
+
107
+ context "when child attributes present" do
108
+
109
+ it "overwrites the child attributes" do
110
+ @hash.insert(:pet, { :vet_visits => [ { :date => Date.new(2009, 11, 11) } ] })
111
+ @hash[:pet][:vet_visits].should == [ { :date => Date.new(2009, 11, 11) } ]
112
+ end
113
+
114
+ end
115
+
116
+ end
117
+
118
+ context "when writing a single attribute" do
119
+
120
+ context "when attribute exists" do
121
+
122
+ before do
123
+ @new = { :_id => 2, :first_name => "Test2", :last_name => "User2" }
124
+ end
125
+
126
+ it "updates the existing attribute" do
127
+ @hash.insert(:name, @new)
128
+ @hash[:name].should == @new
129
+ end
130
+
131
+ end
132
+
133
+ context "when attribute does not exist" do
134
+
135
+ before do
136
+ @hash.delete(:name)
137
+ @new = { :_id => 2, :first_name => "Test2", :last_name => "User2" }
138
+ end
139
+
140
+ it "adds the new attribute" do
141
+ @hash.insert(:name, @new)
142
+ @hash[:name].should == @new
143
+ end
144
+
145
+ end
146
+
147
+ end
148
+
149
+ context "when writing to an array of attributes" do
150
+
151
+ context "when matching attribute exists" do
152
+
153
+ before do
154
+ @new = { :_id => 3, :street => "New Street" }
155
+ end
156
+
157
+ it "updates the matching attributes" do
158
+ @hash.insert(:addresses, @new)
159
+ @hash[:addresses].should include({:street => "New Street", :_id => 3})
160
+ end
161
+
162
+ end
163
+
164
+ context "when matching attribute does not exist" do
165
+
166
+ before do
167
+ @new = { :_id => 10, :street => "New Street" }
168
+ end
169
+
170
+ it "updates the matching attributes" do
171
+ @hash.insert(:addresses, @new)
172
+ @hash[:addresses].should == [
173
+ { :_id => 3, :street => "First Street" },
174
+ { :_id => 4, :street => "Second Street" },
175
+ { :_id => 10, :street => "New Street" }
176
+ ]
177
+ end
178
+ end
179
+
180
+ end
181
+
182
+ end
183
+
184
+ end
@@ -0,0 +1,46 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::Hash::Assimilation do
4
+
5
+ describe "#assimilate" do
6
+
7
+ context "when a type is not provided" do
8
+
9
+ before do
10
+ @child = { :first_name => "Hank", :last_name => "Moody" }
11
+ @parent = Person.new(:title => "Mr.")
12
+ @options = Humanoid::Associations::Options.new(:name => :name)
13
+ end
14
+
15
+ it "incorporates the hash into the object graph" do
16
+ @child.assimilate(@parent, @options)
17
+ @parent.name.first_name.should == "Hank"
18
+ @parent.name.last_name.should == "Moody"
19
+ end
20
+
21
+ end
22
+
23
+ context "when a type is provided" do
24
+
25
+ before do
26
+ @child = { :speed => 300 }
27
+ @parent = Canvas.new(:name => "web page")
28
+ @options = Humanoid::Associations::Options.new(:name => :writer)
29
+ end
30
+
31
+ it "incorporates the hash into the object graph with the supplied type" do
32
+ @child.assimilate(@parent, @options, HtmlWriter)
33
+ @parent.writer.should be_a_kind_of(HtmlWriter)
34
+ @parent.writer.speed.should == 300
35
+ end
36
+
37
+ it "adds the _type field to the hash" do
38
+ @child.assimilate(@parent, @options, HtmlWriter)
39
+ @parent.writer._type.should == "HtmlWriter"
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+
46
+ end
@@ -0,0 +1,21 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::Hash::Conversions do
4
+
5
+ describe "#get" do
6
+
7
+ it "returns the hash" do
8
+ Hash.get({ :field => "test" }).should == { :field => "test" }
9
+ end
10
+
11
+ end
12
+
13
+ describe "#set" do
14
+
15
+ it "returns the hash" do
16
+ Hash.set({ :field => "test" }).should == { :field => "test" }
17
+ end
18
+
19
+ end
20
+
21
+ end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::Hash::CriteriaHelpers do
4
+
5
+ describe "#expand_complex_criteria" do
6
+
7
+ before do
8
+ @hash = {:age.gt => 40, :title => "Title"}
9
+ end
10
+
11
+ it "expands complex criteria to form a valid `where` hash" do
12
+ @hash.expand_complex_criteria.should == {:age => {"$gt" => 40}, :title => "Title"}
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,14 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::Hash::Scoping do
4
+
5
+ describe "#scoped" do
6
+
7
+ it "returns self" do
8
+ { :where => { :active => true } }.scoped.should ==
9
+ { :where => { :active => true } }
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,61 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::Integer::Conversions do
4
+
5
+ describe "#set" do
6
+
7
+ context "when the value is a number" do
8
+
9
+ it "converts the number to an integer" do
10
+ Integer.set(3).should == 3
11
+ end
12
+
13
+ end
14
+
15
+ context "when the string is not a number" do
16
+
17
+ context "when the string is non numerical" do
18
+
19
+ it "returns the string" do
20
+ Integer.set("foo").should == "foo"
21
+ end
22
+
23
+ end
24
+
25
+ context "when the string is numerical" do
26
+
27
+ it "returns the integer value for the string" do
28
+ Integer.set("3").should == 3
29
+ end
30
+
31
+ end
32
+
33
+ context "when the string is empty" do
34
+
35
+ it "returns an empty string" do
36
+ Integer.set("").should be_nil
37
+ end
38
+
39
+ end
40
+
41
+ context "when the string is nil" do
42
+
43
+ it "returns nil" do
44
+ Integer.set(nil).should be_nil
45
+ end
46
+
47
+ end
48
+
49
+ end
50
+
51
+ end
52
+
53
+ describe "#get" do
54
+
55
+ it "returns the integer" do
56
+ Integer.get(3).should == 3
57
+ end
58
+
59
+ end
60
+
61
+ end