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.
@@ -0,0 +1,11 @@
1
+ require 'active_support/core_ext'
2
+
3
+ class Medjool::DateRange
4
+
5
+ attr_accessor :start_date, :end_date
6
+
7
+ def initialize(start_date, end_date)
8
+ @start_date = start_date
9
+ @end_date = end_date
10
+ end
11
+ end
@@ -8,7 +8,30 @@ class Medjool::Parser
8
8
  @context = context
9
9
  end
10
10
 
11
- def parse(text)
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
@@ -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
- MONTH_MATCHER = /\s*(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|June?|July?|Aug(ust)?|Sept(ember)?|Oct(ober)?|Nov(ember)?|Dec(ember)?),?\s*/
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.3
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: 13
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
9
- version: "0.3"
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-09-17 00:00:00 Z
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