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,24 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::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 = Humanoid::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
+
22
+ end
23
+
24
+ end
@@ -0,0 +1,43 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::Object::Conversions do
4
+
5
+ describe "#humanoidize" do
6
+
7
+ it "returns its attributes" do
8
+ Person.new(:_id => 1, :title => "Sir").humanoidize.should ==
9
+ { "_id" => 1, "title" => "Sir", "age" => 100, "_type" => "Person", "blood_alcohol_content" => 0.0, "pets" => false}
10
+ end
11
+
12
+ end
13
+
14
+ describe "#get" do
15
+
16
+ before do
17
+ @attributes = { :_id => "test", :title => "Sir", :age => 100 }
18
+ end
19
+
20
+ it "instantiates a new class from the attributes" do
21
+ Person.get(@attributes).should == Person.new(@attributes)
22
+ end
23
+
24
+ end
25
+
26
+ describe "#set" do
27
+
28
+ context "when object has attributes" do
29
+
30
+ before do
31
+ @attributes = { "_id" => "test", "title" => "Sir", "age" => 100, "_type" => "Person", "blood_alcohol_content" => 0.0, "pets" => false }
32
+ @person = Person.new(@attributes)
33
+ end
34
+
35
+ it "converts the object to a hash" do
36
+ Person.set(@person).should == @attributes
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,34 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::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,17 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::String::Conversions do
4
+
5
+ describe "#set" do
6
+ it "returns the object to_s" do
7
+ String.set(1).should == "1"
8
+ end
9
+ end
10
+
11
+ describe "#get" do
12
+ it "returns the string" do
13
+ String.get("test").should == "test"
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,208 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::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
+ Humanoid.parameterize_keys = false
39
+ end
40
+
41
+ after do
42
+ Humanoid.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,91 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::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
+
89
+ end
90
+
91
+ end
@@ -0,0 +1,70 @@
1
+ require "spec_helper"
2
+
3
+ describe Humanoid::Extensions::Time::Conversions do
4
+
5
+ before do
6
+ Time.zone = "Canberra"
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
+ context "when value is a string" do
17
+
18
+ it "converts to a utc time" do
19
+ Time.set(@time.to_s).utc_offset.should == 0
20
+ end
21
+
22
+ end
23
+
24
+ context "when value is a time" do
25
+
26
+ it "converts to a utc time" do
27
+ Time.set(@time).utc_offset.should == 0
28
+ end
29
+
30
+ end
31
+
32
+ context "when value is already a utc time" do
33
+
34
+ it "returns the time" do
35
+ Time.set(@time.utc).should == @time.utc
36
+ end
37
+
38
+ end
39
+
40
+ context "when value is nil" do
41
+
42
+ it "returns nil" do
43
+ Time.set(nil).should be_nil
44
+ end
45
+
46
+ end
47
+
48
+ end
49
+
50
+ describe "#get" do
51
+
52
+ context "when time is provided" do
53
+
54
+ it "returns the local time" do
55
+ Time.get(@time.dup.utc).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
+ Time.get(nil).should be_nil
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+
70
+ end