chronic_between 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/chronic_between.rb +39 -27
  2. metadata +2 -2
@@ -6,12 +6,13 @@ require 'chronic'
6
6
  require 'date'
7
7
  require 'app-routes'
8
8
 
9
+
9
10
  class ChronicBetween
10
11
  include AppRoutes
11
12
 
12
13
  def initialize(x)
13
14
 
14
- @times = x.is_a?(String) ? x.split(/[,;&]/) : x
15
+ @times = x.is_a?(String) ? x.split(/[,;&]/).map(&:strip) : x
15
16
  @route = {}; @params = {}
16
17
  end
17
18
 
@@ -20,16 +21,27 @@ class ChronicBetween
20
21
  dates = []
21
22
 
22
23
  ranges(@params, date)
24
+
23
25
  negatives = '(not|except)\s+'
24
26
  times, closed_times = @times.partition {|x| !x[/^#{negatives}/]}
25
27
  closed_times.map!{|x| x[/^#{negatives}(.*)/,2]}
26
28
 
27
29
  dates = build times
28
- positive_flag = dates.any? {|d1, d2| date.between? d1, d2}
30
+ inside_range = dates.detect {|d1, d2| date.between? d1, d2}
31
+
29
32
  neg_dates = build closed_times
30
- negative_flag = neg_dates.any? {|d1, d2| date.between? d1, d2}
33
+ inside_restrictions = neg_dates.detect {|d1, d2| date.between? d1, d2}
34
+
35
+ if inside_restrictions then
36
+ return false
37
+ elsif closed_times.any? and times.empty? then
38
+ return true
39
+ elsif inside_range then
40
+ return true
41
+ else
42
+ return false
43
+ end
31
44
 
32
- positive_flag and not negative_flag
33
45
  end
34
46
 
35
47
  private
@@ -69,39 +81,39 @@ class ChronicBetween
69
81
  end
70
82
 
71
83
  # e.g. 3:45-5:15
72
- get %r{^(\d[\w:]*)-(\d[\w:]*)(?=\s+(daily|every day))} do
84
+ get %r{^(\d[\w:]*)-(\d[\w:]*)(?=\s+(daily|every day))?} do
73
85
  t1, t2 = params[:captures]
74
- time_range(t1, t2)
86
+ time_range(date, t1, t2)
75
87
  end
76
88
 
77
89
  # e.g. 3:45 to 5:15
78
- get %r{^(\d[\w:]*)\s+to\s+(\d[\w:]*)(?=\s+(daily|every day))} do
90
+ get %r{^(\d[\w:]*)\s+to\s+(\d[\w:]*)(?=\s+(daily|every day))?} do
79
91
  t1, t2 = params[:captures]
80
- time_range(t1, t2)
92
+ time_range(date, t1, t2)
81
93
  end
82
94
 
83
95
  # e.g. Mon 3:45-5:15
84
96
  get %r{^(\w+)\s+(\d[\w:]*)-(\d[\w:]*)$} do
85
97
  d1, t1, t2 = params[:captures]
86
- date_with_time_range(date, d1, t1, t2)
98
+ cdatetime_range(date, d1, t1, t2)
87
99
  end
88
100
 
89
101
  # e.g. Mon 3:45 to 5:15
90
102
  get %r{^(\w+)\s+(\d[\w:]*)\s+to\s+(\d[\w:]*)$} do
91
103
  d1, t1, t2 = params[:captures]
92
- date_with_time_range(date, d1, t1, t2)
104
+ cdatetime_range(date, d1, t1, t2)
93
105
  end
94
106
 
95
107
  # e.g. 3:45-5:15 Mon
96
108
  get %r{^(\d[\w:]*)-(\d[\w:]*)\s+(\w+)$} do
97
109
  t1, t2, d1 = params[:captures]
98
- date_with_time_range(date, d1, t1, t2)
110
+ cdatetime_range(date, d1, t1, t2)
99
111
  end
100
112
 
101
113
  # e.g. 3:45 to 5:15 Mon
102
114
  get %r{^(\d[\w:]*)\s+to\s+(\d[\w:]*)\s+(\w+)$} do
103
115
  t1, t2, d1 = params[:captures]
104
- date_with_time_range(date, d1, t1, t2)
116
+ cdatetime_range(date, d1, t1, t2)
105
117
  end
106
118
 
107
119
  # e.g. Mon-Wed
@@ -116,16 +128,16 @@ class ChronicBetween
116
128
  # e.g. after 6pm
117
129
  get %r{^after\s+(\d[\w:]*)$} do
118
130
  t1 = params[:captures].first
119
- date1 = Chronic.parse(t1).to_datetime
120
- date2 = DateTime.parse(date1.strftime("%d-%b-%y") + ' 00:00') + 1
131
+ date1 = DateTime.parse(date.strftime("%d-%b-%y ") + t1)
132
+ date2 = DateTime.parse((date + 1).strftime("%d-%b-%y ") + '00:00')
121
133
  [date1, date2]
122
134
  end
123
135
 
124
136
  # e.g. before 9pm
125
137
  get %r{^before\s+(\d[\w:]*)$} do
126
138
  t1 = params[:captures].first
127
- date2 = Chronic.parse(t1).to_datetime
128
- date1 = DateTime.parse(date2.strftime("%d-%b-%y") + ' 00:00') - 1
139
+ date2 = DateTime.parse(date.strftime("%d-%b-%y ") + t1)
140
+ date1 = DateTime.parse(date.strftime("%d-%b-%y") + ' 00:00')
129
141
  [date1, date2]
130
142
  end
131
143
 
@@ -135,8 +147,8 @@ class ChronicBetween
135
147
  cdate1, cdate2 = [d1,d2].map {|d| Chronic.parse(d)}
136
148
  n_days = ((cdate2 - cdate1) / 86400).to_i
137
149
  dates = 0.upto(n_days).map do |n|
138
- x = (cdate1.to_date + n).strftime("%d-%b-%y ")
139
- datetime_range(x+t1, x+t2)
150
+ x = cdate1.to_datetime + n
151
+ datetime_range(x, t1, t2)
140
152
  end
141
153
  end
142
154
 
@@ -147,7 +159,7 @@ class ChronicBetween
147
159
  n_days = ((cdate2 - cdate1) / 86400).to_i
148
160
 
149
161
  date1 = DateTime.parse(cdate1.strftime("%d-%b-%y") + ' 00:00')
150
- [date1, date1 + n_days]
162
+ [date1, date1 + n_days + 1]
151
163
  end
152
164
 
153
165
  # e.g. April 5th
@@ -157,6 +169,7 @@ class ChronicBetween
157
169
  date1 = DateTime.parse(cdate1.strftime("%d-%b-%y") + ' 00:00')
158
170
  [date1, date1 + 1]
159
171
  end
172
+
160
173
  end
161
174
 
162
175
  def build(times)
@@ -169,14 +182,14 @@ class ChronicBetween
169
182
  def date_range_time_range(date, d1, d2, t1, t2)
170
183
  cdate2, n_days = latest_date_and_ndays(date, d1, d2)
171
184
  dates = (n_days).downto(0).map do |n|
172
- x = (cdate2.to_date - n).strftime("%d-%b-%y ")
173
- datetime_range(x+t1, x+t2)
185
+ x = (cdate2.to_date - n)
186
+ datetime_range(x, t1, t2)
174
187
  end
175
188
  end
176
189
 
177
- def date_with_time_range(date, d1, t1, t2)
178
- x = Chronic.parse(d1, now: (date - 1)).strftime("%d-%b-%y ")
179
- datetime_range(x+t1, x+t2)
190
+ def cdatetime_range(date, d1, t1, t2)
191
+ x = Chronic.parse(d1, now: (date - 1))
192
+ datetime_range(x, t1, t2)
180
193
  end
181
194
 
182
195
  def latest_date_and_ndays(date, d1, d2)
@@ -187,11 +200,10 @@ class ChronicBetween
187
200
  [cdate2, n_days]
188
201
  end
189
202
 
190
- def time_range(t1, t2)
191
- [t1,t2].map {|t| DateTime.parse(t)}
203
+ def time_range(date, t1, t2)
204
+ [t1,t2].map {|t| DateTime.parse(date.strftime("%d-%b-%y ") + t)}
192
205
  end
193
206
 
194
207
  alias datetime_range time_range
195
208
 
196
-
197
209
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: chronic_between
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.4
5
+ version: 0.2.5
6
6
  platform: ruby
7
7
  authors: []
8
8
 
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-01 00:00:00 +01:00
13
+ date: 2011-04-02 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency