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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- YmY3MGU3YThiMTg2OTE5NjM0OWYyYTVhNGMyMzgzZDQ0YzEwNWZjYg==
5
- data.tar.gz: !binary |-
6
- ZTViZGZhNTFiYTk3OGJjNTg2M2Y5MGViMzM2ZGNkNTJjMmUwNGZjZA==
2
+ SHA1:
3
+ metadata.gz: a2a5ad6b65b1d605fa09dd79190ee80253676122
4
+ data.tar.gz: 5c23b5ab9ed4f9742f23d7b1bcfd9cd233d4a4d3
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MTE4MzU2ZDVjYzkxMDZjZTNkNDJiODE2MjAxM2I0OTM1ZjAyZTUyOThjYjk2
10
- ZTVjM2Y0NTc2OGEzOTFjZmM0MGQ2NmU1YWZhYmNkNGZlNTJkM2Y3ZjI2M2E0
11
- ZjExMWE1ZDU4Mzg3ZDYzYjI2Y2E0NjIyMGEzZTNjZDQwNjJlMWI=
12
- data.tar.gz: !binary |-
13
- M2Y0N2QwMzNjNzM4MDljMDEyMTBkOGE2NDk4MGFjOWRiNzNhZDkyZTNhZTM4
14
- OTRjOTMyZjIzYTg1OGM5NTQ1NWRmMTA4Yzk5OTMyMWUyM2MwYTM1MDdlMmVk
15
- NzA4OWU5ZWUxOWNkYmUxMzg0YTBkOTdlOTViMDIzZGI0NjViYmQ=
6
+ metadata.gz: 50a32aec5bb0bc526b916b7210c987a2853bde5698eaba90c18da714d00be65dd05ddef710db31bb1fcced4947447a48dd89b7c8722ec47c29db8816c5945094
7
+ data.tar.gz: 57afc158ea9759cc9820b5cfa66a3e729ed3deaceb539a91cf11299ce97cfc038a7297c2f510966e7aebdee9b4bb3b83973dd7640c13dba7ecabde9724022765
@@ -0,0 +1 @@
1
+ 2.2.0
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ source 'https://rubygems.org'
2
+
3
+ #ruby '1.9.3'
4
+
5
+ gem 'rake', '~> 11.1.2'
6
+ gem 'activesupport', '~> 4.2.4'
7
+ gem 'timecop', '~> 0.6.3'
8
+
@@ -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
@@ -1,5 +1,5 @@
1
1
  module Medjool
2
- VERSION = '0.5.7'
2
+ VERSION = '0.6.0'
3
3
 
4
4
  require 'medjool/parser'
5
5
  require 'medjool/date_range'
@@ -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
@@ -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[51]
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[2]
30
+ elsif bits[3]
25
31
  # 12-15 Oct
26
32
  # Start is 12 Oct
27
- end_month = bits[16]
28
- start_month = bits[5] || end_month
29
- range_start = self.parse("#{bits[3]} #{start_month}", update_now = false)
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[15]} #{end_month}", update_now = false)
32
- return Medjool::DateRange.new(range_start, range_end)
33
- elsif bits[28]
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[40]
37
- start_month = bits[28] || end_month
42
+ end_month = bits[41]
43
+ start_month = bits[29] || end_month
38
44
 
39
- range_start = self.parse("#{bits[38]} #{start_month}", update_now = false)
45
+ range_start = self.parse("#{bits[39]} #{start_month}", update_now = false)
40
46
  # End is 15 Oct
41
- range_end = self.parse("#{bits[50]} #{end_month}", update_now = false)
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
@@ -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
@@ -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.5.7
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-03-31 00:00:00.000000000 Z
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.2.2
101
+ rubygems_version: 2.4.5
99
102
  signing_key:
100
103
  specification_version: 4
101
104
  summary: Date parsing with context