chronic_between 0.2.4 → 0.2.5
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/chronic_between.rb +39 -27
- metadata +2 -2
data/lib/chronic_between.rb
CHANGED
@@ -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
|
-
|
30
|
+
inside_range = dates.detect {|d1, d2| date.between? d1, d2}
|
31
|
+
|
29
32
|
neg_dates = build closed_times
|
30
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 =
|
120
|
-
date2 = DateTime.parse(
|
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 =
|
128
|
-
date1 = DateTime.parse(
|
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 =
|
139
|
-
datetime_range(x
|
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)
|
173
|
-
datetime_range(x
|
185
|
+
x = (cdate2.to_date - n)
|
186
|
+
datetime_range(x, t1, t2)
|
174
187
|
end
|
175
188
|
end
|
176
189
|
|
177
|
-
def
|
178
|
-
x = Chronic.parse(d1, now: (date - 1))
|
179
|
-
datetime_range(x
|
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.
|
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-
|
13
|
+
date: 2011-04-02 00:00:00 +01:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|