medjool 0.3 → 0.4
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/medjool/date_range.rb +11 -0
- data/lib/medjool/parser.rb +25 -2
- data/lib/medjool/regexs.rb +4 -1
- data/lib/medjool.rb +3 -2
- data/test/test_medjool.rb +21 -0
- metadata +5 -4
data/lib/medjool/parser.rb
CHANGED
|
@@ -8,7 +8,30 @@ class Medjool::Parser
|
|
|
8
8
|
@context = context
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def
|
|
11
|
+
def is_date_range?(text)
|
|
12
|
+
Medjool::DATE_RANGE_MATCHER.match(text.strip).present?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def parse_date_range(text)
|
|
16
|
+
if bits = Medjool::DATE_RANGE_MATCHER.match(text.strip)
|
|
17
|
+
if bits[15]
|
|
18
|
+
# October
|
|
19
|
+
if month_start = self.parse(text.strip, update_now = false)
|
|
20
|
+
month_end = month_start.end_of_month
|
|
21
|
+
return Medjool::DateRange.new(month_start, month_end)
|
|
22
|
+
end
|
|
23
|
+
elsif bits[2]
|
|
24
|
+
# 12-15 Oct
|
|
25
|
+
# Start is 12 Oct
|
|
26
|
+
range_start = self.parse("#{bits[3]} #{bits[5]}", update_now = false)
|
|
27
|
+
# End is 15 Oct
|
|
28
|
+
range_end = self.parse("#{bits[4]} #{bits[5]}", update_now = false)
|
|
29
|
+
return Medjool::DateRange.new(range_start, range_end)
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def parse(text, update_now = true)
|
|
12
35
|
if Medjool::DATE_MATCHER.match(text)
|
|
13
36
|
base_date = Date.parse(text)
|
|
14
37
|
|
|
@@ -63,7 +86,7 @@ class Medjool::Parser
|
|
|
63
86
|
end
|
|
64
87
|
end
|
|
65
88
|
|
|
66
|
-
@context[:now] = guess_date
|
|
89
|
+
@context[:now] = guess_date if update_now
|
|
67
90
|
return guess_date
|
|
68
91
|
else
|
|
69
92
|
return nil
|
data/lib/medjool/regexs.rb
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
module Medjool
|
|
2
2
|
DAYNAME_MATCHER = /(\s*Mon(day)?,?\s*|\s*Tue(s(day)?)?,?\s*|\s*Wed(nesday)?,?\s*|\s*Thu(r(s(day)?)?)?,?\s*|\s*Fri(day)?,?\s*|\s*Sat(urday)?,?\s*|\s*Sun(day)?,?\s*)/
|
|
3
|
-
|
|
3
|
+
MONTH_NAME_MATCHER = /(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|June?|July?|Aug(ust)?|Sept(ember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)/
|
|
4
|
+
MONTH_MATCHER = /\s*#{MONTH_NAME_MATCHER},?\s*/
|
|
4
5
|
YYYY_MM_DD_MATCHER = /(\s*[0-9]{4}-[0-9]{2}-[0-9]{2}\s*)/
|
|
5
6
|
DM_DM_YYYY_MATCHER = /(\s*[0-9]{2}[-\/][0-9]{2}[-\/][0-9]{2,4}\s*)/
|
|
6
7
|
ORDINAL_MATCHER = /(\s*([0-9]{1,2}(st|rd|nd|th)?),?\s*)/
|
|
7
8
|
YEAR_MATCHER = /(\s*([0-9]{4}\s*|\s*'?[0-9]{2}),?\s*)/
|
|
8
9
|
TEXT_DATE_MATCHER = /(#{DAYNAME_MATCHER}|#{ORDINAL_MATCHER}|#{YEAR_MATCHER}|#{MONTH_MATCHER})/
|
|
9
10
|
DATE_MATCHER = /^[^a-zA-Z0-9]*(#{TEXT_DATE_MATCHER}+|#{DM_DM_YYYY_MATCHER}|#{YYYY_MM_DD_MATCHER})/
|
|
11
|
+
|
|
12
|
+
DATE_RANGE_MATCHER = /^((([0-9]+) ?- ?([0-9]+) #{MONTH_NAME_MATCHER})|#{MONTH_NAME_MATCHER})$/
|
|
10
13
|
end
|
data/lib/medjool.rb
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
module Medjool
|
|
2
|
-
VERSION = 0.
|
|
2
|
+
VERSION = 0.4
|
|
3
3
|
|
|
4
4
|
require 'medjool/parser'
|
|
5
|
+
require 'medjool/date_range'
|
|
5
6
|
require 'medjool/regexs'
|
|
6
7
|
|
|
7
8
|
class << self
|
|
@@ -11,4 +12,4 @@ module Medjool
|
|
|
11
12
|
def self.parse(t, context = {})
|
|
12
13
|
Medjool::Parser.new(context).parse(t)
|
|
13
14
|
end
|
|
14
|
-
end
|
|
15
|
+
end
|
data/test/test_medjool.rb
CHANGED
|
@@ -50,4 +50,25 @@ class TestMedjool < TestCase
|
|
|
50
50
|
assert_equal "2013-07-06".to_date, parser.parse("06/07/2013")
|
|
51
51
|
assert_equal "2013-07-06".to_date, parser.parse("06/07/2013")
|
|
52
52
|
end
|
|
53
|
+
|
|
54
|
+
def test_is_date_range
|
|
55
|
+
parser = Medjool::Parser.new
|
|
56
|
+
assert parser.is_date_range?("October")
|
|
57
|
+
assert parser.is_date_range?("12-15 Jan")
|
|
58
|
+
assert !parser.is_date_range?("October 15")
|
|
59
|
+
assert !parser.is_date_range?("09/12/2012")
|
|
60
|
+
assert !parser.is_date_range?("I am working until next October")
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_parse_date_range
|
|
64
|
+
parser = Medjool::Parser.new
|
|
65
|
+
date_range = parser.parse_date_range("October")
|
|
66
|
+
assert_equal "2013-10-01".to_date, date_range.start_date
|
|
67
|
+
assert_equal "2013-10-31".to_date, date_range.end_date
|
|
68
|
+
date_range = parser.parse_date_range("12-15 Jan")
|
|
69
|
+
assert_equal "2013-01-12".to_date, date_range.start_date
|
|
70
|
+
assert_equal "2013-01-15".to_date, date_range.end_date
|
|
71
|
+
assert parser.parse_date_range("October 15").nil?
|
|
72
|
+
|
|
73
|
+
end
|
|
53
74
|
end
|
metadata
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: medjool
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
hash:
|
|
4
|
+
hash: 3
|
|
5
5
|
prerelease:
|
|
6
6
|
segments:
|
|
7
7
|
- 0
|
|
8
|
-
-
|
|
9
|
-
version: "0.
|
|
8
|
+
- 4
|
|
9
|
+
version: "0.4"
|
|
10
10
|
platform: ruby
|
|
11
11
|
authors:
|
|
12
12
|
- Andy Geers
|
|
@@ -14,7 +14,7 @@ autorequire:
|
|
|
14
14
|
bindir: bin
|
|
15
15
|
cert_chain: []
|
|
16
16
|
|
|
17
|
-
date: 2013-
|
|
17
|
+
date: 2013-10-01 00:00:00 Z
|
|
18
18
|
dependencies:
|
|
19
19
|
- !ruby/object:Gem::Dependency
|
|
20
20
|
name: activesupport
|
|
@@ -77,6 +77,7 @@ files:
|
|
|
77
77
|
- README.md
|
|
78
78
|
- Rakefile
|
|
79
79
|
- lib/medjool.rb
|
|
80
|
+
- lib/medjool/date_range.rb
|
|
80
81
|
- lib/medjool/parser.rb
|
|
81
82
|
- lib/medjool/regexs.rb
|
|
82
83
|
- medjool.gemspec
|