chronic_between 0.2.0 → 0.2.1

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 +35 -22
  2. metadata +2 -2
@@ -4,41 +4,43 @@
4
4
 
5
5
  require 'chronic'
6
6
  require 'date'
7
+ require 'app-routes'
7
8
 
8
9
  class ChronicBetween
9
10
 
10
11
  def initialize(s)
11
12
  @s = s
12
- @date_ranges = []
13
13
  end
14
14
 
15
15
  def within?(date)
16
- params = {}
16
+
17
+ params = {}; @date_ranges = []
17
18
  @app = AppRoutes.new(params)
18
- ranges(params, date)
19
- build_range date
20
19
 
21
- d = @date_ranges.detect do |d1, d2|
22
- date.between? d1, d2
23
- end
20
+ set_ranges(params, date)
21
+ @s.split(',').each {|x| @app.run(x.strip)}
22
+ d = @date_ranges.detect {|d1, d2| date.between? d1, d2}
23
+
24
24
  d ? true : false
25
25
  end
26
26
 
27
27
  private
28
28
 
29
- def ranges(params, date)
29
+ def set_ranges(params, date)
30
30
 
31
31
  @app.routes do
32
32
 
33
33
  # e.g. Mon-Fri 9:00-16:30
34
- get %r{(\w+)-(\w+)\s+([^-]+)-(.*)} do
34
+ get %r{(\w+)-(\w+)\s+(\d+:\d+)-(\d+:\d+)$} do
35
35
 
36
- d1, d2, rt1, rt2 = params[:captures]
37
-
38
- @date_ranges << [[d1,rt1], [d2,rt2]].map do |d,r|
39
- cdate = Chronic.parse(d, :now => (date - 1))
40
- DateTime.parse(cdate.strftime("%d-%b-%y") + ' ' + r)
41
- end
36
+ d1, d2, t1, t2 = params[:captures]
37
+ cdate1, cdate2 = [d1,d2].map {|d| Chronic.parse(d)}
38
+ n_days = (cdate2 - cdate1) / 86400
39
+
40
+ 0.upto(n_days.to_i).each do |n|
41
+ x = (cdate1.to_date + n).strftime("%d-%b-%y ")
42
+ @date_ranges << [DateTime.parse(x + t1), DateTime.parse(x + t2)]
43
+ end
42
44
 
43
45
  end
44
46
 
@@ -52,11 +54,28 @@ class ChronicBetween
52
54
  end
53
55
 
54
56
  # e.g. 3:45-5:15
55
- get %r{(\d+:\d+)-(\d+:\d+)} do
57
+ get %r{^(\d+:\d+)-(\d+:\d+)$} do
56
58
  t1, t2 = params[:captures]
57
59
  @date_ranges << [t1,t2].map {|t| DateTime.parse(t)}
58
60
  end
59
61
 
62
+ # e.g. Mon 3:45-5:15
63
+ get %r{^(\w+)\s+(\d+:\d+)-(\d+:\d+)$} do
64
+ d, t1, t2 = params[:captures]
65
+ x = Chronic.parse(d, :now => (date - 1)).strftime("%d-%b-%y ")
66
+ @date_ranges << [DateTime.parse(x + t1), DateTime.parse(x + t2)]
67
+ end
68
+
69
+ # e.g. Mon-Wed
70
+ get %r{^(\w+)-(\w+)$} do
71
+ d1, d2 = params[:captures]
72
+ cdate1, cdate2 = [d1,d2].map {|d| Chronic.parse(d)}
73
+ n_days = (cdate2 - cdate1) / 86400
74
+
75
+ date = DateTime.parse(cdate1.strftime("%d-%b-%y") + ' 00:00')
76
+ @date_ranges << [date, date + n_days.to_i]
77
+ end
78
+
60
79
  end
61
80
 
62
81
  end
@@ -65,10 +84,4 @@ class ChronicBetween
65
84
  @app.get(arg, &block)
66
85
  end
67
86
 
68
- def build_range(date)
69
- # parse the days
70
- raw_days = @s.split(',')
71
- raw_days.each {|d| @app.run(d.strip)}
72
- end
73
-
74
87
  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.0
5
+ version: 0.2.1
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-03-26 00:00:00 +00:00
13
+ date: 2011-03-26 23:00:00 +00:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency