mordor 0.2.9 → 0.2.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/mordor/resource.rb +32 -13
- data/mordor.gemspec +2 -2
- data/spec/mordor/resource_spec.rb +100 -5
- metadata +4 -4
data/lib/mordor/resource.rb
CHANGED
@@ -161,20 +161,16 @@ module Mordor
|
|
161
161
|
Collection.new(self, perform_collection_find(query, options))
|
162
162
|
end
|
163
163
|
|
164
|
-
def find_by_day(
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
end_of_day = (day + 1).to_time
|
172
|
-
when Time
|
173
|
-
start = day.to_datetime.to_date.to_time
|
174
|
-
end_of_day = (day.to_date + 1).to_datetime.to_date.to_time
|
164
|
+
def find_by_day(value, options = {})
|
165
|
+
if value.is_a?(Hash)
|
166
|
+
raise ArgumentError.new(":value missing from complex query hash") unless value.keys.include?(:value)
|
167
|
+
day = value.delete(:value)
|
168
|
+
query = value.merge(day_to_query(day))
|
169
|
+
else
|
170
|
+
query = day_to_query(value)
|
175
171
|
end
|
176
|
-
|
177
|
-
cursor = perform_collection_find(
|
172
|
+
|
173
|
+
cursor = perform_collection_find(query, options)
|
178
174
|
Collection.new(self, cursor)
|
179
175
|
end
|
180
176
|
|
@@ -246,6 +242,29 @@ module Mordor
|
|
246
242
|
def index_types
|
247
243
|
@index_types ||= {}
|
248
244
|
end
|
245
|
+
|
246
|
+
def day_to_range(day)
|
247
|
+
case day
|
248
|
+
when DateTime
|
249
|
+
start = day.to_date.to_time
|
250
|
+
end_of_day = (day.to_date + 1).to_time
|
251
|
+
when Date
|
252
|
+
start = day.to_time
|
253
|
+
end_of_day = (day + 1).to_time
|
254
|
+
when Time
|
255
|
+
start = day.to_datetime.to_date.to_time
|
256
|
+
end_of_day = (day.to_datetime + 1).to_date.to_time
|
257
|
+
end
|
258
|
+
[start, end_of_day]
|
259
|
+
end
|
260
|
+
|
261
|
+
def date_range_to_query(range)
|
262
|
+
{:at => {:$gte => range.first, :$lt => range.last}}
|
263
|
+
end
|
264
|
+
|
265
|
+
def day_to_query(day)
|
266
|
+
date_range_to_query( day_to_range(day) )
|
267
|
+
end
|
249
268
|
end
|
250
269
|
end
|
251
270
|
end
|
data/mordor.gemspec
CHANGED
@@ -2,8 +2,8 @@ Gem::Specification.new do |s|
|
|
2
2
|
s.name = "mordor"
|
3
3
|
|
4
4
|
# Do not set the version and date field manually, this is done by the release script
|
5
|
-
s.version = "0.2.
|
6
|
-
s.date = "2012-01-
|
5
|
+
s.version = "0.2.10"
|
6
|
+
s.date = "2012-01-19"
|
7
7
|
|
8
8
|
s.summary = "mordor"
|
9
9
|
s.description = <<-eos
|
@@ -9,7 +9,8 @@ describe "with respect to resources" do
|
|
9
9
|
attribute :first, :index => true
|
10
10
|
attribute :second, :index => true, :index_type => Mongo::ASCENDING
|
11
11
|
attribute :third, :finder_method => :find_by_third_attribute
|
12
|
-
attribute :at
|
12
|
+
attribute :at
|
13
|
+
attribute :created_at, :timestamp => true
|
13
14
|
|
14
15
|
# Put this in here again to ensure the original method is still here
|
15
16
|
class_eval do
|
@@ -50,7 +51,7 @@ describe "with respect to resources" do
|
|
50
51
|
|
51
52
|
it "should be possible to designate an attribute as a timestamp" do
|
52
53
|
TestResource.timestamped_attribute.should_not be_nil
|
53
|
-
TestResource.timestamped_attribute.should == :
|
54
|
+
TestResource.timestamped_attribute.should == :created_at
|
54
55
|
end
|
55
56
|
|
56
57
|
it "should only be possible to have one attribute as a timestamp" do
|
@@ -103,7 +104,7 @@ describe "with respect to resources" do
|
|
103
104
|
end
|
104
105
|
end
|
105
106
|
|
106
|
-
it "should correctly replace BSON::
|
107
|
+
it "should correctly replace BSON::Timestamps" do
|
107
108
|
options = {
|
108
109
|
"option" => BSON::Timestamp.new(324244, 12)
|
109
110
|
}
|
@@ -117,12 +118,82 @@ describe "with respect to resources" do
|
|
117
118
|
it "should correctly respond to to_hash" do
|
118
119
|
resource = TestResource.new({:first => "first", :second => "second", :third => "third"})
|
119
120
|
hash = resource.to_hash
|
120
|
-
hash.size.should ==
|
121
|
+
hash.size.should == 5
|
121
122
|
hash[:first].should == "first"
|
122
123
|
hash[:second].should == "second"
|
123
124
|
hash[:third].should == "third"
|
125
|
+
hash[:at].should == ""
|
124
126
|
end
|
127
|
+
end
|
128
|
+
|
129
|
+
context "with respect to times and ranges" do
|
130
|
+
context "when DateTime days are given" do
|
131
|
+
it "should return a correct range" do
|
132
|
+
day = DateTime.civil(2012, 1, 19, 10, 0)
|
133
|
+
range = TestResource.send(:day_to_range, day)
|
134
|
+
range.first.should == DateTime.civil(2012, 1, 19).to_time.gmtime
|
135
|
+
range.last.should == DateTime.civil(2012, 1, 20).to_time.gmtime
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should return an Array of 2 Time objects" do
|
139
|
+
day = DateTime.civil(2012, 1, 19, 10, 0)
|
140
|
+
range = TestResource.send(:day_to_range, day)
|
141
|
+
range.first.should be_a Time
|
142
|
+
range.last.should be_a Time
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
context "when Date days are given" do
|
147
|
+
it "should return a correct range" do
|
148
|
+
day = Date.parse("2012-1-19")
|
149
|
+
range = TestResource.send(:day_to_range, day)
|
150
|
+
range.first.should == Date.parse("2012-1-19").to_time.gmtime
|
151
|
+
range.last.should == Date.parse("2012-1-20").to_time.gmtime
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should return an Array of 2 Time objects" do
|
155
|
+
day = Date.parse("2012-1-19")
|
156
|
+
range = TestResource.send(:day_to_range, day)
|
157
|
+
range.first.should be_a Time
|
158
|
+
range.last.should be_a Time
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context "when Time days are given" do
|
163
|
+
it "should return a correct range" do
|
164
|
+
day = DateTime.civil(2012, 1, 19, 10, 0).to_time
|
165
|
+
range = TestResource.send(:day_to_range, day)
|
166
|
+
range.first.should == DateTime.civil(2012, 1, 19).to_time.gmtime
|
167
|
+
range.last.should == DateTime.civil(2012, 1, 20).to_time.gmtime
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should return an Array of 2 Time objects" do
|
171
|
+
day = DateTime.civil(2012, 1, 19, 10, 0).to_time
|
172
|
+
range = TestResource.send(:day_to_range, day)
|
173
|
+
range.first.should be_a Time
|
174
|
+
range.last.should be_a Time
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
context "when ranges are changed to queries" do
|
179
|
+
before :all do
|
180
|
+
@range = TestResource.send(:day_to_range, DateTime.civil(2012, 1, 19))
|
181
|
+
@query = TestResource.send(:date_range_to_query, @range)
|
182
|
+
end
|
183
|
+
|
184
|
+
it "should scope the query to the 'at' attribute" do
|
185
|
+
@query.size.should == 1
|
186
|
+
@query[:at].should be_a Hash
|
187
|
+
end
|
125
188
|
|
189
|
+
it "should use the first of the range for the greater equal part" do
|
190
|
+
@query[:at][:$gte].should == @range.first
|
191
|
+
end
|
192
|
+
|
193
|
+
it "should use the last of the range for the smaller than part" do
|
194
|
+
@query[:at][:$lt].should == @range.last
|
195
|
+
end
|
196
|
+
end
|
126
197
|
end
|
127
198
|
|
128
199
|
context "with respect to indices" do
|
@@ -309,7 +380,7 @@ describe "with respect to resources" do
|
|
309
380
|
describe "with respect to passing extra query parameters to finder methods" do
|
310
381
|
before :each do
|
311
382
|
5.times do |i|
|
312
|
-
TestResource.create({:first => "first", :second => "second-#{i}", :third => "third-#{i}"})
|
383
|
+
TestResource.create({:first => "first", :second => "second-#{i}", :third => "third-#{i}", :at => (Date.today).to_time})
|
313
384
|
end
|
314
385
|
end
|
315
386
|
|
@@ -320,6 +391,30 @@ describe "with respect to resources" do
|
|
320
391
|
lambda{ TestResource.find_by_first({:second => "second-2"})}.should raise_error
|
321
392
|
end
|
322
393
|
|
394
|
+
it "should be possible to add extra query clauses to the find_by_day method" do
|
395
|
+
collection = TestResource.find_by_day(Date.today)
|
396
|
+
collection.size.should == 5
|
397
|
+
|
398
|
+
collection = TestResource.find_by_day({:value => Date.today, :second => "second-1"})
|
399
|
+
collection.size.should == 1
|
400
|
+
resource = collection.first
|
401
|
+
resource.first.should == "first"
|
402
|
+
resource.at.should == Date.today.to_time
|
403
|
+
end
|
404
|
+
|
405
|
+
it "should be possible to add more complex query clauses to the find_by_day method" do
|
406
|
+
collection = TestResource.find_by_day(Date.today)
|
407
|
+
collection.size.should == 5
|
408
|
+
|
409
|
+
collection = TestResource.find_by_day({:value => Date.today, :second => {:$in => ["second-1", "second-2"]}})
|
410
|
+
collection.size.should == 2
|
411
|
+
collection.each do |res|
|
412
|
+
res.at.should == Date.today.to_time
|
413
|
+
["second-1", "second-2"].should include res.second
|
414
|
+
end
|
415
|
+
|
416
|
+
end
|
417
|
+
|
323
418
|
it "should be possible to add extra query clauses to a finder method" do
|
324
419
|
collection = TestResource.find_by_first("first")
|
325
420
|
collection.size.should == 5
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mordor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 3
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 10
|
10
|
+
version: 0.2.10
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Jan-Willem Koelewijn
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2012-01-
|
19
|
+
date: 2012-01-19 00:00:00 +01:00
|
20
20
|
default_executable:
|
21
21
|
dependencies:
|
22
22
|
- !ruby/object:Gem::Dependency
|