medjool 0.5.7 → 0.6.0
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.
- checksums.yaml +5 -13
- data/.ruby-version +1 -0
- data/Gemfile +8 -0
- data/Gemfile.lock +28 -0
- data/lib/medjool.rb +1 -1
- data/lib/medjool/date_range.rb +3 -2
- data/lib/medjool/parser.rb +20 -14
- data/lib/medjool/regexs.rb +2 -2
- data/test/test_medjool.rb +13 -0
- metadata +16 -13
checksums.yaml
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
|
|
5
|
-
data.tar.gz: !binary |-
|
|
6
|
-
ZTViZGZhNTFiYTk3OGJjNTg2M2Y5MGViMzM2ZGNkNTJjMmUwNGZjZA==
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: a2a5ad6b65b1d605fa09dd79190ee80253676122
|
|
4
|
+
data.tar.gz: 5c23b5ab9ed4f9742f23d7b1bcfd9cd233d4a4d3
|
|
7
5
|
SHA512:
|
|
8
|
-
metadata.gz:
|
|
9
|
-
|
|
10
|
-
ZTVjM2Y0NTc2OGEzOTFjZmM0MGQ2NmU1YWZhYmNkNGZlNTJkM2Y3ZjI2M2E0
|
|
11
|
-
ZjExMWE1ZDU4Mzg3ZDYzYjI2Y2E0NjIyMGEzZTNjZDQwNjJlMWI=
|
|
12
|
-
data.tar.gz: !binary |-
|
|
13
|
-
M2Y0N2QwMzNjNzM4MDljMDEyMTBkOGE2NDk4MGFjOWRiNzNhZDkyZTNhZTM4
|
|
14
|
-
OTRjOTMyZjIzYTg1OGM5NTQ1NWRmMTA4Yzk5OTMyMWUyM2MwYTM1MDdlMmVk
|
|
15
|
-
NzA4OWU5ZWUxOWNkYmUxMzg0YTBkOTdlOTViMDIzZGI0NjViYmQ=
|
|
6
|
+
metadata.gz: 50a32aec5bb0bc526b916b7210c987a2853bde5698eaba90c18da714d00be65dd05ddef710db31bb1fcced4947447a48dd89b7c8722ec47c29db8816c5945094
|
|
7
|
+
data.tar.gz: 57afc158ea9759cc9820b5cfa66a3e729ed3deaceb539a91cf11299ce97cfc038a7297c2f510966e7aebdee9b4bb3b83973dd7640c13dba7ecabde9724022765
|
data/.ruby-version
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2.2.0
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
GEM
|
|
2
|
+
remote: https://rubygems.org/
|
|
3
|
+
specs:
|
|
4
|
+
activesupport (4.2.7.1)
|
|
5
|
+
i18n (~> 0.7)
|
|
6
|
+
json (~> 1.7, >= 1.7.7)
|
|
7
|
+
minitest (~> 5.1)
|
|
8
|
+
thread_safe (~> 0.3, >= 0.3.4)
|
|
9
|
+
tzinfo (~> 1.1)
|
|
10
|
+
i18n (0.7.0)
|
|
11
|
+
json (1.8.3)
|
|
12
|
+
minitest (5.9.1)
|
|
13
|
+
rake (11.1.2)
|
|
14
|
+
thread_safe (0.3.5)
|
|
15
|
+
timecop (0.6.3)
|
|
16
|
+
tzinfo (1.2.2)
|
|
17
|
+
thread_safe (~> 0.1)
|
|
18
|
+
|
|
19
|
+
PLATFORMS
|
|
20
|
+
ruby
|
|
21
|
+
|
|
22
|
+
DEPENDENCIES
|
|
23
|
+
activesupport (~> 4.2.4)
|
|
24
|
+
rake (~> 11.1.2)
|
|
25
|
+
timecop (~> 0.6.3)
|
|
26
|
+
|
|
27
|
+
BUNDLED WITH
|
|
28
|
+
1.12.5
|
data/lib/medjool.rb
CHANGED
data/lib/medjool/date_range.rb
CHANGED
|
@@ -3,10 +3,11 @@ require 'active_support/core_ext'
|
|
|
3
3
|
|
|
4
4
|
class Medjool::DateRange
|
|
5
5
|
|
|
6
|
-
attr_accessor :start_date, :end_date
|
|
6
|
+
attr_accessor :start_date, :end_date, :prefix
|
|
7
7
|
|
|
8
|
-
def initialize(start_date, end_date)
|
|
8
|
+
def initialize(start_date, end_date, prefix = nil)
|
|
9
9
|
@start_date = start_date
|
|
10
10
|
@end_date = end_date
|
|
11
|
+
@prefix = prefix
|
|
11
12
|
end
|
|
12
13
|
end
|
data/lib/medjool/parser.rb
CHANGED
|
@@ -15,31 +15,37 @@ class Medjool::Parser
|
|
|
15
15
|
|
|
16
16
|
def parse_date_range(text)
|
|
17
17
|
if bits = Medjool::DATE_RANGE_MATCHER.match(text.strip)
|
|
18
|
-
if bits[
|
|
18
|
+
if bits[1].present?
|
|
19
|
+
prefix = bits[1].strip.sub(/:$/, '')
|
|
20
|
+
else
|
|
21
|
+
prefix = nil
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
if bits[52]
|
|
19
25
|
# October
|
|
20
26
|
if month_start = self.parse(text.strip, update_now = false)
|
|
21
27
|
month_end = month_start.end_of_month
|
|
22
|
-
return Medjool::DateRange.new(month_start, month_end)
|
|
28
|
+
return Medjool::DateRange.new(month_start, month_end, prefix)
|
|
23
29
|
end
|
|
24
|
-
elsif bits[
|
|
30
|
+
elsif bits[3]
|
|
25
31
|
# 12-15 Oct
|
|
26
32
|
# Start is 12 Oct
|
|
27
|
-
end_month = bits[
|
|
28
|
-
start_month = bits[
|
|
29
|
-
range_start = self.parse("#{bits[
|
|
33
|
+
end_month = bits[17]
|
|
34
|
+
start_month = bits[6] || end_month
|
|
35
|
+
range_start = self.parse("#{bits[4]} #{start_month}", update_now = false)
|
|
30
36
|
# End is 15 Oct
|
|
31
|
-
range_end = self.parse("#{bits[
|
|
32
|
-
return Medjool::DateRange.new(range_start, range_end)
|
|
33
|
-
elsif bits[
|
|
37
|
+
range_end = self.parse("#{bits[16]} #{end_month}", update_now = false)
|
|
38
|
+
return Medjool::DateRange.new(range_start, range_end, prefix)
|
|
39
|
+
elsif bits[29]
|
|
34
40
|
# Oct 12-15
|
|
35
41
|
# Start is 12 Oct
|
|
36
|
-
end_month = bits[
|
|
37
|
-
start_month = bits[
|
|
42
|
+
end_month = bits[41]
|
|
43
|
+
start_month = bits[29] || end_month
|
|
38
44
|
|
|
39
|
-
range_start = self.parse("#{bits[
|
|
45
|
+
range_start = self.parse("#{bits[39]} #{start_month}", update_now = false)
|
|
40
46
|
# End is 15 Oct
|
|
41
|
-
range_end = self.parse("#{bits[
|
|
42
|
-
return Medjool::DateRange.new(range_start, range_end)
|
|
47
|
+
range_end = self.parse("#{bits[51]} #{end_month}", update_now = false)
|
|
48
|
+
return Medjool::DateRange.new(range_start, range_end, prefix)
|
|
43
49
|
end
|
|
44
50
|
end
|
|
45
51
|
end
|
data/lib/medjool/regexs.rb
CHANGED
|
@@ -10,8 +10,8 @@ module Medjool
|
|
|
10
10
|
ORDINAL_MATCHER = /(\s*([0-9]{1,2}#{ORDINAL_POSTFIX}?),?\s*)/
|
|
11
11
|
END_OF_MONTH_MATCHER = /^\s*(29|30|31)#{ORDINAL_POSTFIX}?\s*$/
|
|
12
12
|
YEAR_MATCHER = /(\s*([0-9]{4}\s*|\s*'?[0-9]{2}),?\s*)/
|
|
13
|
-
TEXT_DATE_MATCHER = /(#{DAYNAME_MATCHER}|#{ORDINAL_MATCHER}|#{YEAR_MATCHER}|#{MONTH_MATCHER})/
|
|
13
|
+
TEXT_DATE_MATCHER = /(#{DAYNAME_MATCHER}|#{ORDINAL_MATCHER}|#{YEAR_MATCHER}|#{MONTH_MATCHER}([^a-zA-Z]|$))/
|
|
14
14
|
DATE_MATCHER = /^[^a-zA-Z0-9]*(#{TEXT_DATE_MATCHER}+|#{DM_DM_YYYY_MATCHER}|#{YYYY_MM_DD_MATCHER})/
|
|
15
15
|
|
|
16
|
-
DATE_RANGE_MATCHER = /^((([0-9]+)( #{MONTH_NAME_MATCHER})? ?[-–] ?([0-9]+) #{MONTH_NAME_MATCHER}([^a-zA-Z]|$))|(#{MONTH_NAME_MATCHER} ([0-9]+) ?[-–] ?(#{MONTH_NAME_MATCHER} )?([0-9]+))|#{MONTH_NAME_MATCHER}([^a-zA-Z]|$))$/
|
|
16
|
+
DATE_RANGE_MATCHER = /^([^:]+: )?((([0-9]+)( #{MONTH_NAME_MATCHER})? ?[-–] ?([0-9]+) #{MONTH_NAME_MATCHER}([^a-zA-Z]|$))|(#{MONTH_NAME_MATCHER} ([0-9]+) ?[-–] ?(#{MONTH_NAME_MATCHER} )?([0-9]+))|#{MONTH_NAME_MATCHER}([^a-zA-Z]|$))$/
|
|
17
17
|
end
|
data/test/test_medjool.rb
CHANGED
|
@@ -68,6 +68,7 @@ class TestMedjool < TestCase
|
|
|
68
68
|
assert parser.is_date_range?("12–15 Jan")
|
|
69
69
|
assert parser.is_date_range?("12 – 15 Jan")
|
|
70
70
|
assert parser.is_date_range?("28 January – 3 February")
|
|
71
|
+
assert parser.is_date_range?("Hanging out: 28 January – 3 February")
|
|
71
72
|
assert parser.is_date_range?("AUGUST 12-15")
|
|
72
73
|
assert !parser.is_date_range?("October 15")
|
|
73
74
|
assert !parser.is_date_range?("09/12/2012")
|
|
@@ -80,18 +81,30 @@ class TestMedjool < TestCase
|
|
|
80
81
|
assert date_range, "Could not parse input as date range"
|
|
81
82
|
assert_equal "2013-10-01".to_date, date_range.start_date
|
|
82
83
|
assert_equal "2013-10-31".to_date, date_range.end_date
|
|
84
|
+
assert_nil date_range.prefix
|
|
83
85
|
date_range = parser.parse_date_range("12-15 Jan")
|
|
84
86
|
assert date_range, "Could not parse input as date range"
|
|
85
87
|
assert_equal "2014-01-12".to_date, date_range.start_date
|
|
86
88
|
assert_equal "2014-01-15".to_date, date_range.end_date
|
|
89
|
+
assert_nil date_range.prefix
|
|
87
90
|
date_range = parser.parse_date_range("28 Jan-3 Feb")
|
|
88
91
|
assert date_range, "Could not parse input as date range"
|
|
89
92
|
assert_equal "2014-01-28".to_date, date_range.start_date
|
|
90
93
|
assert_equal "2014-02-03".to_date, date_range.end_date
|
|
94
|
+
assert_nil date_range.prefix
|
|
91
95
|
|
|
92
96
|
assert parser.parse_date_range("October 15").nil?
|
|
93
97
|
end
|
|
94
98
|
|
|
99
|
+
def test_parse_date_range_with_prefix
|
|
100
|
+
parser = Medjool::Parser.new(:now => "2013-08-01".to_datetime)
|
|
101
|
+
date_range = parser.parse_date_range("Living the dream: 12-15 Jan")
|
|
102
|
+
assert date_range, "Could not parse input as date range"
|
|
103
|
+
assert_equal "2014-01-12".to_date, date_range.start_date
|
|
104
|
+
assert_equal "2014-01-15".to_date, date_range.end_date
|
|
105
|
+
assert_equal "Living the dream", date_range.prefix
|
|
106
|
+
end
|
|
107
|
+
|
|
95
108
|
def test_lone_numbers
|
|
96
109
|
parser = Medjool::Parser.new
|
|
97
110
|
assert_equal Date.parse("1st"), parser.parse("1")
|
metadata
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: medjool
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.6.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Andy Geers
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2016-
|
|
11
|
+
date: 2016-11-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - ">="
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
19
|
version: 3.2.12
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- -
|
|
24
|
+
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: 3.2.12
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- -
|
|
38
|
+
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: minitest
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- - ~>
|
|
45
|
+
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '5.0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- - ~>
|
|
52
|
+
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '5.0'
|
|
55
55
|
description: Medjool is a date parser written in pure Ruby, which processes dates
|
|
@@ -62,8 +62,11 @@ extra_rdoc_files:
|
|
|
62
62
|
- README.md
|
|
63
63
|
- LICENSE
|
|
64
64
|
files:
|
|
65
|
-
- .gitignore
|
|
65
|
+
- ".gitignore"
|
|
66
|
+
- ".ruby-version"
|
|
66
67
|
- BUILDING.md
|
|
68
|
+
- Gemfile
|
|
69
|
+
- Gemfile.lock
|
|
67
70
|
- LICENSE
|
|
68
71
|
- README.md
|
|
69
72
|
- Rakefile
|
|
@@ -80,22 +83,22 @@ licenses:
|
|
|
80
83
|
metadata: {}
|
|
81
84
|
post_install_message:
|
|
82
85
|
rdoc_options:
|
|
83
|
-
- --charset=UTF-8
|
|
86
|
+
- "--charset=UTF-8"
|
|
84
87
|
require_paths:
|
|
85
88
|
- lib
|
|
86
89
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
87
90
|
requirements:
|
|
88
|
-
- -
|
|
91
|
+
- - ">="
|
|
89
92
|
- !ruby/object:Gem::Version
|
|
90
93
|
version: '0'
|
|
91
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
92
95
|
requirements:
|
|
93
|
-
- -
|
|
96
|
+
- - ">="
|
|
94
97
|
- !ruby/object:Gem::Version
|
|
95
98
|
version: '0'
|
|
96
99
|
requirements: []
|
|
97
100
|
rubyforge_project:
|
|
98
|
-
rubygems_version: 2.
|
|
101
|
+
rubygems_version: 2.4.5
|
|
99
102
|
signing_key:
|
|
100
103
|
specification_version: 4
|
|
101
104
|
summary: Date parsing with context
|