datesplit 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/datesplit.rb +18 -16
- data/spec/datesplit_spec.rb +28 -12
- metadata +3 -3
data/lib/datesplit.rb
CHANGED
@@ -1,41 +1,43 @@
|
|
1
1
|
require 'date'
|
2
2
|
class Datesplit
|
3
|
+
include Enumerable
|
3
4
|
def initialize(date_string)
|
4
5
|
@date_string = String.new(date_string)
|
5
6
|
end
|
6
7
|
|
7
8
|
def start_date
|
8
|
-
|
9
|
-
m = @date_string.match(expression)
|
10
|
-
if m
|
11
|
-
@start_date = Date.parse("#{m.captures[returns.index(:month_only) || returns.index(:month_one)]} #{m.captures[returns.index(:day_one)]} #{m.captures[returns.index(:year_only) || returns.index(:year_one)]}")
|
12
|
-
break
|
13
|
-
end
|
14
|
-
end
|
15
|
-
raise "Can't process #{@date_string}" unless @start_date
|
16
|
-
return @start_date
|
9
|
+
range.begin
|
17
10
|
end
|
18
11
|
|
19
12
|
def end_date
|
13
|
+
range.end
|
14
|
+
end
|
15
|
+
|
16
|
+
def range
|
17
|
+
return if @range
|
20
18
|
expressions.each do |expression, returns|
|
21
19
|
m = @date_string.match(expression)
|
22
20
|
if m
|
23
|
-
@
|
21
|
+
@start = Date.parse("#{m.captures[returns.index(:month_only) || returns.index(:month_one)]} #{m.captures[returns.index(:day_one)]} #{m.captures[returns.index(:year_only) || returns.index(:year_one)]}")
|
22
|
+
@end = Date.parse("#{m.captures[returns.index(:month_only) || returns.index(:month_two) ]} #{m.captures[returns.index(:day_two)]} #{m.captures[returns.index(:year_only) || returns.index(:year_two)]}")
|
24
23
|
break
|
25
24
|
end
|
26
25
|
end
|
27
|
-
raise "Can't process #{@date_string}" unless @
|
28
|
-
|
29
|
-
end
|
30
|
-
|
26
|
+
raise "Can't process #{@date_string}" unless @start && @end
|
27
|
+
@start..@end
|
28
|
+
end
|
29
|
+
|
31
30
|
def number_of_days
|
32
|
-
|
31
|
+
range.to_a.size
|
33
32
|
end
|
34
33
|
|
34
|
+
def each(&blk)
|
35
|
+
range.each(&blk)
|
36
|
+
end
|
37
|
+
|
35
38
|
private
|
36
39
|
def expressions
|
37
40
|
{
|
38
|
-
|
39
41
|
/(\w+)\.*(?:\t|\s)*(\d+)\w*(?:\t|\s)*(?:\-|to)(?:\t|\s)*(\d+)\w*,*(?:\t|\s)*(\d*)/ => [:month_only, :day_one, :day_two, :year_only], # September 13-15, 2011 (Year Optional)
|
40
42
|
/(\w+)\.*(?:\t|\s)*(\d+)\w*(?:\t|\s)*(?:\-|to)(?:\t|\s)*(\w+)\.*(?:\t|\s)*(\d+)\w*,*(?:\t|\s)*(\d*)/ => [:month_one, :day_one, :month_two, :day_two, :year_only], # September 13 to October 15, 2011 (Year Optional)
|
41
43
|
/(\w+)\.*(?:\t|\s)*(\d{1,2})\w*,*(?:\t|\s)*(\d{4})(?:\t|\s)*(?:\-|to)(?:\t|\s)*(\w+)\.*(?:\t|\s)*(\d+)\w*,*(?:\t|\s)*(\d{4})/ => [:month_one, :day_one, :year_one, :month_two, :day_two, :year_two] # September 13, 2012 to October 15 2013 (Year Required)
|
data/spec/datesplit_spec.rb
CHANGED
@@ -1,46 +1,62 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Datesplit do
|
4
|
-
it "
|
4
|
+
it "handles a format of '<Month> <Day> to <Month> <Day>, <Year>'" do
|
5
5
|
d = Datesplit.new('April 11 to April 20, 2012')
|
6
6
|
d.start_date.to_s.should == Date.parse('April 11, 2012').to_s
|
7
7
|
d.end_date.to_s.should == Date.parse('April 20, 2012').to_s
|
8
8
|
end
|
9
9
|
|
10
|
-
it "
|
10
|
+
it "handles a format of '<Month> <Day> to <Month> <Day>'" do
|
11
11
|
d = Datesplit.new('April 11 to April 20')
|
12
12
|
d.start_date.to_s.should == Date.parse('April 11').to_s
|
13
13
|
d.end_date.to_s.should == Date.parse('April 20').to_s
|
14
14
|
end
|
15
15
|
|
16
|
-
it "
|
16
|
+
it "handles a format of '<Month> <Day>-<Day> <Year>'" do
|
17
17
|
d = Datesplit.new('April 11th-20th 2012')
|
18
18
|
d.start_date.to_s.should == Date.parse('April 11 2012').to_s
|
19
19
|
d.end_date.to_s.should == Date.parse('April 20 2012').to_s
|
20
20
|
end
|
21
21
|
|
22
|
-
it "
|
22
|
+
it "handles a format of '<Month> <Day>-<Day>'" do
|
23
|
+
d = Datesplit.new('April 11th-20th')
|
24
|
+
d.start_date.to_s.should == Date.parse('April 11').to_s
|
25
|
+
d.end_date.to_s.should == Date.parse('April 20').to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
it "handles a format of '<Month> <Day> to <Day> <Year>'" do
|
23
29
|
d = Datesplit.new('April 11 to 20 2012')
|
24
30
|
d.start_date.to_s.should == Date.parse('April 11 2012').to_s
|
25
31
|
d.end_date.to_s.should == Date.parse('April 20 2012').to_s
|
26
32
|
end
|
27
33
|
|
28
34
|
|
29
|
-
it "
|
35
|
+
it "handles a format of '<Month> <Day>-<Month> <Day>, <Year>'" do
|
30
36
|
d = Datesplit.new('March 30-April 1, 2012')
|
31
37
|
d.start_date.to_s.should == Date.parse('March 30 2012').to_s
|
32
38
|
d.end_date.to_s.should == Date.parse('April 1 2012').to_s
|
33
39
|
end
|
34
40
|
|
35
|
-
it "
|
36
|
-
d = Datesplit.new('Apr 27 to April 29, 2012')
|
37
|
-
d.start_date.to_s.should == Date.parse('Apr 27 2012').to_s
|
38
|
-
d.end_date.to_s.should == Date.parse('April 29, 2012').to_s
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should return dates for 'April 9, 2012 to January 1st 2013'" do
|
41
|
+
it "handles a format of '<Month> <Day>, <Year> to <Month> <Day> <Year>'" do
|
42
42
|
d = Datesplit.new('April 9, 2012 to January 1st 2013')
|
43
43
|
d.start_date.to_s.should == Date.parse('April 9 2012').to_s
|
44
44
|
d.end_date.to_s.should == Date.parse('January 1 2013').to_s
|
45
45
|
end
|
46
|
+
|
47
|
+
it "returns the correct number of days" do
|
48
|
+
d = Datesplit.new('April 9 to 13')
|
49
|
+
d.number_of_days.should == 5
|
50
|
+
end
|
51
|
+
|
52
|
+
it "responds properly to each" do
|
53
|
+
d = Datesplit.new('April 9 to 13')
|
54
|
+
total = 0
|
55
|
+
d.each_with_index do |date, i|
|
56
|
+
date.should be_a(Date)
|
57
|
+
total = i
|
58
|
+
end
|
59
|
+
total.should == 4
|
60
|
+
end
|
61
|
+
|
46
62
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 4
|
9
|
+
version: 0.0.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Sean Roberts
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-09-
|
17
|
+
date: 2011-09-15 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|