tickle 1.1.1 → 1.2.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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a728255bc9bd0d6f7bac246cfd6970b1e7dcbf62
4
- data.tar.gz: 7001178b3e3e47fe21d6797380a15f4a47ff20f0
3
+ metadata.gz: 6c9f24bf840e38c2196e61c1428caa9d84eeb7b5
4
+ data.tar.gz: 6e8111fb7b6098f3c285d537b2adb529ede9ad36
5
5
  SHA512:
6
- metadata.gz: da19d5f7cc11c2311197671418d055f52fcfaa243bc2836cf8a90a0e84786fd6de50aa0906f949c8de6b2847d8b2e0f399fd3f6ecf26a96bce94609043b2f38c
7
- data.tar.gz: d98ec40a885d1378e745600c707a3293d0c273616738e151221936657b05e3dbb49924e6d08bb242348f68ba8cf8556420aaca4925d7c9d0ee1d3e4641e309e7
6
+ metadata.gz: 84a13f5b64bd9e49327bca5456bbcb197b7d66b90b0f349ea035f842ffe8aa440a263aefc690d163c5023ac24e13b398b395da9e6d7240e9a89220c7c4ca9433
7
+ data.tar.gz: 2514f63b04e43ec3610932dc115ad127b29b9a384e9b99fe6c52606982ebb2537cb20ac06beccf2cfcc25630a5c2f7c5021870119ab39395b7fe9f4361af5a1b
@@ -0,0 +1,12 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.7
4
+ - jruby
5
+ - truffleruby
6
+
7
+ # whitelist
8
+ branches:
9
+ only:
10
+ - master
11
+ - develop
12
+ - v1-branch
data/CHANGES.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # CH CH CH CH CHANGES! #
2
2
 
3
+ ## Friday the 18th of September 2020, v1.2.0
4
+
5
+ - Changed the dependency from chronic to gitlab-chronic
6
+ - Required numerizer explicitly to stop a bug
7
+ - Formatted the regex for legibility
8
+ - Fixed bug with "today and" in the tests
9
+ - Fixed a bug previously fixed on the v2 branch in 2f2a32ce9 with @start
10
+ - Added Timecop because we're beyond the date chosen in the tests. Tempus fugit!
11
+
12
+ ----
13
+
3
14
  ## Wednesday the 15th of March 2017, v1.1.1 ##
4
15
 
5
16
  * Bit of easier debugging added in.
@@ -7,7 +18,6 @@
7
18
 
8
19
  ----
9
20
 
10
-
11
21
  ## Wednesday the 22nd of February 2017, v1.1.0 ##
12
22
 
13
23
  * Numerizer duplication removed. Thanks to https://github.com/bjonord.
data/README.md CHANGED
@@ -407,7 +407,7 @@ or if you're using Bundler, add this to the Gemfile:
407
407
 
408
408
  Chronic gem:
409
409
 
410
- `gem install chronic`
410
+ `gem install gitlab-chronic`
411
411
 
412
412
  thoughtbot's [shoulda](https://rubygems.org/gems/shoulda):
413
413
 
@@ -18,7 +18,7 @@ end
18
18
 
19
19
  require 'date'
20
20
  require 'time'
21
- require 'chronic'
21
+ require 'gitlab-chronic'
22
22
 
23
23
  require 'tickle/tickle'
24
24
  require 'tickle/handler'
@@ -19,6 +19,8 @@
19
19
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
20
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
21
 
22
+ require 'numerizer'
23
+
22
24
  module Tickle
23
25
  class << self
24
26
  # == Configuration options
@@ -105,9 +107,25 @@ module Tickle
105
107
  def scan_expression(text, options)
106
108
  starting = ending = nil
107
109
 
108
- start_every_regex = /^(start(?:s|ing)?)\s(.*)(\s(?:every|each|\bon\b|repeat)(?:s|ing)?)(.*)/i
110
+ start_every_regex = /^
111
+ (start(?:s|ing)?) # 0
112
+ \s
113
+ (.*)
114
+ (\s(?:every|each|\bon\b|repeat) # 1
115
+ (?:s|ing)?) # 2
116
+ (.*) # 3
117
+ /ix
109
118
  every_start_regex = /^(every|each|\bon\b|repeat(?:the)?)\s(.*)(\s(?:start)(?:s|ing)?)(.*)/i
110
- start_ending_regex = /^(start(?:s|ing)?)\s(.*)(\s(?:\bend|until)(?:s|ing)?)(.*)/i
119
+ start_ending_regex = /^
120
+ (start(?:s|ing)?) # 0
121
+ \s+
122
+ (.*?)(?:\s+and)? # 1
123
+ (\s
124
+ (?:\bend|until)
125
+ (?:s|ing)?
126
+ ) # 2
127
+ (.*) # 3
128
+ /ix
111
129
  if text =~ start_every_regex
112
130
  starting = text.match(start_every_regex)[2].strip
113
131
  text = text.match(start_every_regex)[4].strip
@@ -117,8 +135,9 @@ module Tickle
117
135
  text = text.match(every_start_regex)[4].strip
118
136
  starting, ending = process_for_ending(text)
119
137
  elsif text =~ start_ending_regex
120
- starting = text.match(start_ending_regex)[2].strip
121
- ending = text.match(start_ending_regex)[4].strip
138
+ md = text.match start_ending_regex
139
+ starting = md.captures[1]
140
+ ending = md.captures.last.strip
122
141
  event = 'day'
123
142
  else
124
143
  event, ending = process_for_ending(text)
@@ -127,6 +146,7 @@ module Tickle
127
146
  # they gave a phrase so if we can't interpret then we need to raise an error
128
147
  if starting
129
148
  Tickle.dwrite("starting: #{starting}")
149
+ @start ||= nil # initialize the variable to quell warnings
130
150
  @start = chronic_parse(pre_filter(starting))
131
151
  if @start
132
152
  @start.to_time
@@ -172,8 +192,7 @@ module Tickle
172
192
  text.gsub!(/repeat(s|ing)?(\s)?/, '')
173
193
  text.gsub!(/on the(\s)?/, '')
174
194
  text.gsub!(/([^\w\d\s])+/, '')
175
- text.downcase.strip
176
- text = normalize_us_holidays(text)
195
+ normalize_us_holidays(text.downcase.strip)
177
196
  end
178
197
 
179
198
  # Split the text on spaces and convert each word into
@@ -1,5 +1,5 @@
1
1
  module Tickle
2
2
 
3
3
  # This library's current version.
4
- VERSION = "1.1.1"
4
+ VERSION = "1.2.0"
5
5
  end
@@ -6,6 +6,8 @@ end
6
6
 
7
7
  require 'test/unit'
8
8
  require 'shoulda'
9
+ require 'timecop'
10
+
9
11
 
10
12
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
11
13
  $LOAD_PATH.unshift(File.dirname(__FILE__))
@@ -4,16 +4,22 @@ require 'test/unit'
4
4
 
5
5
  class TestParsing < Test::Unit::TestCase
6
6
 
7
+ Time_now = Time.parse "2010-05-09 20:57:36 +0000"
7
8
  def setup
8
9
  Tickle.debug = (ARGV.detect {|a| a == '--d'})
9
10
  @verbose = (ARGV.detect {|a| a == '--v'})
10
-
11
- puts "Time.now"
12
- p Time.now
11
+ Timecop.freeze Time_now
12
+ ENV["TZ"] = "UTC"
13
13
 
14
14
  @date = Date.today
15
+ @tz = ENV["TZ"]
15
16
  end
16
17
 
18
+ def teardown
19
+ Timecop.return
20
+ ENV["TZ"] = @tz
21
+ end
22
+
17
23
  def test_parse_best_guess_simple
18
24
  start = Date.new(2020, 04, 01)
19
25
 
@@ -85,11 +91,14 @@ class TestParsing < Test::Unit::TestCase
85
91
  assert_date_match(Date.new(2020, 04, 21), 'the twenty first of the month', {:start => start, :now => start})
86
92
  end
87
93
 
88
- def test_parse_best_guess_complex
89
- start = Date.new(2020, 04, 01)
90
-
94
+ def test_parse_best_guess_complex_and
91
95
  assert_tickle_match(@date.bump(:day, 1), @date, @date.bump(:week, 1), 'day', 'starting today and ending one week from now') if Time.now.hour < 21 # => demonstrates leaving out the actual time period and implying it as daily
92
96
  assert_tickle_match(@date.bump(:day, 1), @date.bump(:day, 1), @date.bump(:week, 1), 'day','starting tomorrow and ending one week from now') # => demonstrates leaving out the actual time period and implying it as daily.
97
+ end
98
+
99
+
100
+ def test_parse_best_guess_complex
101
+ start = Date.new(2020, 04, 01)
93
102
 
94
103
  assert_tickle_match(@date.bump(:wday, 'Mon'), @date.bump(:wday, 'Mon'), nil, 'month', 'starting Monday repeat every month')
95
104
 
@@ -20,14 +20,15 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.require_paths = ["lib"]
22
22
 
23
- s.add_dependency "chronic", "~> 0.2.3"
23
+ s.add_dependency "gitlab-chronic", "~> 0.10.6"
24
+ s.add_dependency "numerizer", "~> 0.2.0"
24
25
  s.add_development_dependency "shoulda", "~> 2.10.3"
25
26
  s.add_development_dependency "simplecov"
26
27
  s.add_development_dependency "test-unit"
27
-
28
- s.add_development_dependency "bundler", "~> 1.2"
28
+ s.add_development_dependency "bundler"
29
29
  s.add_development_dependency "rake"
30
30
  s.add_development_dependency "yard"
31
31
  s.add_development_dependency "maruku"
32
+ s.add_development_dependency "timecop"
32
33
  end
33
34
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tickle
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joshua Lippiner
@@ -9,22 +9,36 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-03-15 00:00:00.000000000 Z
12
+ date: 2020-09-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: chronic
15
+ name: gitlab-chronic
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.2.3
20
+ version: 0.10.6
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.2.3
27
+ version: 0.10.6
28
+ - !ruby/object:Gem::Dependency
29
+ name: numerizer
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: 0.2.0
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: 0.2.0
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: shoulda
30
44
  requirement: !ruby/object:Gem::Requirement
@@ -71,16 +85,16 @@ dependencies:
71
85
  name: bundler
72
86
  requirement: !ruby/object:Gem::Requirement
73
87
  requirements:
74
- - - "~>"
88
+ - - ">="
75
89
  - !ruby/object:Gem::Version
76
- version: '1.2'
90
+ version: '0'
77
91
  type: :development
78
92
  prerelease: false
79
93
  version_requirements: !ruby/object:Gem::Requirement
80
94
  requirements:
81
- - - "~>"
95
+ - - ">="
82
96
  - !ruby/object:Gem::Version
83
- version: '1.2'
97
+ version: '0'
84
98
  - !ruby/object:Gem::Dependency
85
99
  name: rake
86
100
  requirement: !ruby/object:Gem::Requirement
@@ -123,6 +137,20 @@ dependencies:
123
137
  - - ">="
124
138
  - !ruby/object:Gem::Version
125
139
  version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: timecop
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
126
154
  description: Tickle is a date/time helper gem to help parse natural language into
127
155
  a recurring pattern. Tickle is designed to be a compliment of Chronic and can interpret
128
156
  things such as "every 2 days, every Sunday, Sundays, Weekly, etc.
@@ -133,6 +161,7 @@ extra_rdoc_files: []
133
161
  files:
134
162
  - ".document"
135
163
  - ".gitignore"
164
+ - ".travis.yml"
136
165
  - CHANGES.md
137
166
  - Gemfile
138
167
  - LICENCE
@@ -171,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
200
  version: '0'
172
201
  requirements: []
173
202
  rubyforge_project:
174
- rubygems_version: 2.6.8
203
+ rubygems_version: 2.5.2.3
175
204
  signing_key:
176
205
  specification_version: 4
177
206
  summary: natural language parser for recurring events