chronic_between 0.2.0 → 0.2.1

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