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.
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