timespan 0.4.9 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.9
1
+ 0.5.0
@@ -3,6 +3,40 @@ module Mongoid
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  module ClassMethods
6
+ attr_writer :max_asap, :min_asap
7
+
8
+ def max_asap time = nil
9
+ @max_asap ||= (time || 10.days.from_now).to_i
10
+ end
11
+
12
+ def min_asap time = nil
13
+ @min_asap ||= (time || 1.day.ago).to_i
14
+ end
15
+
16
+ def asap_method path
17
+ define_singleton_method :asap do
18
+ {:"#{path}.from".gte => min_asap, :"#{path}.from".lte => max_asap}
19
+ end
20
+ end
21
+
22
+ def duration_methods path
23
+ define_singleton_method :exactly do |period|
24
+ [{:"#{path}.from" => period.to_i}, {:"#{path}.to" => period.to_i}]
25
+ end
26
+
27
+ define_singleton_method :in_between do |range|
28
+ [{:"#{path}.from" => range.min.to_i}, {:"#{path}.to" => range.max.to_i}]
29
+ end
30
+
31
+ define_singleton_method :at_least do |period|
32
+ {:"#{path}.to".gte => period.to_i }
33
+ end
34
+
35
+ define_singleton_method :at_most do |period|
36
+ {:"#{path}.to".lte => period.to_i }
37
+ end
38
+ end
39
+
6
40
  # fx Account.timespan_container_delegates :period, :dates, :start, :end
7
41
  # start_date= -> period.dates_start=
8
42
  # end_date= -> period.dates_end=
@@ -54,35 +54,11 @@ describe TimeSpan do
54
54
  time_period: TimePeriod.new(flex: (3..6).minutes)
55
55
  end
56
56
 
57
- def yesterday
58
- 1.day.ago.to_i
59
- end
60
-
61
- def where_hash
62
- {:'period.from'.gte => yesterday, :'period.from'.lte => max_asap}
63
- end
64
-
65
- def exactly
66
- [{:'time_period.flex.from' => period}, {:'time_period.flex.to' => period}]
67
- end
68
-
69
- def in_between
70
- [{:'time_period.flex.from' => min_period}, {:'time_period.flex.to' => max_period}]
71
- end
72
-
73
- def at_least type = :min
74
- {:'time_period.flex.to'.gte => send("#{type}_period") }
75
- end
76
-
77
- def at_most type = :max
78
- {:'time_period.flex.to'.lte => send("#{type}_period") }
79
- end
80
-
81
57
  describe 'ASAP 2 minutes' do
82
58
  let(:period) { 2.minutes.to_i }
83
59
 
84
60
  let(:criteria) do
85
- Account.where(where_hash).or(exactly)
61
+ Account.where(TimePeriod.asap).or(TimePeriod.exactly period)
86
62
  end
87
63
 
88
64
  # it 'should have a nice criteria' do
@@ -90,6 +66,14 @@ describe TimeSpan do
90
66
  # criteria.selector["period.from"].should be_a Hash
91
67
  # end
92
68
 
69
+ it 'should have custom max_asap' do
70
+ TimePeriod.max_asap.should == 14.days.from_now.to_i
71
+ end
72
+
73
+ it 'should have custom min_asap' do
74
+ TimePeriod.min_asap.should == 2.days.ago.to_i
75
+ end
76
+
93
77
  it 'should find #1, #2, #3, #4, #5' do
94
78
  criteria.to_a.map(&:name).should include '1', '2', '5', '7'
95
79
  end
@@ -107,7 +91,7 @@ describe TimeSpan do
107
91
  let(:period) { 3.minutes.to_i }
108
92
 
109
93
  let(:criteria) do
110
- Account.where(where_hash).or(exactly)
94
+ Account.where(TimePeriod.asap).or(TimePeriod.exactly period)
111
95
  end
112
96
 
113
97
  it 'should find #4, #10' do
@@ -120,7 +104,7 @@ describe TimeSpan do
120
104
  let(:period) { 4.minutes.to_i }
121
105
 
122
106
  let(:criteria) do
123
- Account.where(where_hash).or(exactly)
107
+ Account.where(TimePeriod.asap).or(TimePeriod.exactly period)
124
108
  end
125
109
 
126
110
  it 'should find #2, #3' do
@@ -129,11 +113,10 @@ describe TimeSpan do
129
113
  end
130
114
 
131
115
  describe 'ASAP 1-4 minutes' do
132
- let(:min_period) { 1.minute }
133
- let(:max_period) { 4.minutes }
116
+ let(:period) { 1.minute..4.minutes }
134
117
 
135
118
  let(:criteria) do
136
- Account.where(where_hash).or(in_between)
119
+ Account.where(TimePeriod.asap).or(TimePeriod.in_between period)
137
120
  end
138
121
 
139
122
  it 'should find #2, #3' do
@@ -146,8 +129,7 @@ describe TimeSpan do
146
129
  end
147
130
 
148
131
  describe 'ASAP 3-5 minutes' do
149
- let(:min_period) { 3.minutes }
150
- let(:max_period) { 5.minutes }
132
+ let(:period) { 3.minutes..5.minutes }
151
133
 
152
134
  it 'should have a nice criteria' do
153
135
  # puts "ASAP 3-5 minutes"
@@ -158,7 +140,7 @@ describe TimeSpan do
158
140
  end
159
141
 
160
142
  let(:criteria) do
161
- Account.where(where_hash).or(in_between)
143
+ Account.where(TimePeriod.asap).or(TimePeriod.in_between period)
162
144
  end
163
145
 
164
146
  it 'should find #2, #3' do
@@ -169,11 +151,10 @@ describe TimeSpan do
169
151
  end
170
152
 
171
153
  describe 'ASAP 5-7 minutes' do
172
- let(:min_period) { 5.minutes }
173
- let(:max_period) { 7.minutes }
154
+ let(:period) { 5.minutes..7.minutes }
174
155
 
175
156
  let(:criteria) do
176
- Account.where(where_hash).or(in_between)
157
+ Account.where(TimePeriod.asap).or(TimePeriod.in_between period)
177
158
  end
178
159
 
179
160
  it 'should find #2, #3' do
@@ -184,10 +165,10 @@ describe TimeSpan do
184
165
  end
185
166
 
186
167
  describe 'ASAP at least 4 minutes' do
187
- let(:min_period) { 4.minutes }
168
+ let(:period) { 4.minutes }
188
169
 
189
170
  let(:criteria) do
190
- Account.where where_hash.merge(at_least)
171
+ Account.where TimePeriod.asap.merge(TimePeriod.at_least period)
191
172
  end
192
173
 
193
174
  it 'should find #2, #3' do
@@ -199,10 +180,10 @@ describe TimeSpan do
199
180
  end
200
181
 
201
182
  describe 'ASAP at most 3 minutes' do
202
- let(:max_period) { 3.minutes }
183
+ let(:period) { 3.minutes }
203
184
 
204
185
  let(:criteria) do
205
- Account.where where_hash.merge(at_most)
186
+ Account.where TimePeriod.asap.merge(TimePeriod.at_most period)
206
187
  end
207
188
 
208
189
  it 'should find #2, #3' do
@@ -8,4 +8,11 @@ class TimePeriod
8
8
  embedded_in :account
9
9
 
10
10
  timespan_methods :dates
11
+
12
+ # override defaults
13
+ max_asap 14.days.from_now
14
+ min_asap 2.days.ago
15
+
16
+ asap_method :period
17
+ duration_methods 'time_period.flex'
11
18
  end
data/timespan.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "timespan"
8
- s.version = "0.4.9"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kristian Mandrup"]
12
- s.date = "2012-09-25"
12
+ s.date = "2012-09-26"
13
13
  s.description = "Makes it easy to calculate time distance in different units"
14
14
  s.email = "kmandrup@gmail.com"
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: timespan
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.9
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-25 00:00:00.000000000 Z
12
+ date: 2012-09-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: chronic
@@ -302,7 +302,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
302
302
  version: '0'
303
303
  segments:
304
304
  - 0
305
- hash: -4405468294374256560
305
+ hash: 3316997137060640016
306
306
  required_rubygems_version: !ruby/object:Gem::Requirement
307
307
  none: false
308
308
  requirements: