nickel 0.0.6 → 0.1.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 +7 -0
- data/.gitignore +19 -0
- data/.travis.yml +8 -0
- data/.yardopts +1 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile +3 -0
- data/License.txt +3 -1
- data/README.md +110 -0
- data/Rakefile +10 -18
- data/bin/run_specs.sh +14 -0
- data/lib/nickel.rb +4 -23
- data/lib/nickel/construct.rb +25 -28
- data/lib/nickel/construct_finder.rb +251 -244
- data/lib/nickel/construct_interpreter.rb +68 -69
- data/lib/nickel/nlp.rb +67 -31
- data/lib/nickel/{query.rb → nlp_query.rb} +160 -348
- data/lib/nickel/{query_constants.rb → nlp_query_constants.rb} +2 -6
- data/lib/nickel/occurrence.rb +48 -67
- data/lib/nickel/version.rb +3 -0
- data/lib/nickel/zdate.rb +244 -162
- data/lib/nickel/ztime.rb +152 -72
- data/nickel.gemspec +31 -38
- data/spec/lib/nickel/nlp_spec.rb +14 -0
- data/spec/lib/nickel/occurrence_spec.rb +40 -0
- data/spec/lib/nickel/zdate_spec.rb +94 -0
- data/spec/lib/nickel/ztime_spec.rb +331 -0
- data/spec/lib/nickel_spec.rb +1859 -0
- data/spec/spec_helper.rb +22 -0
- metadata +124 -35
- data/History.txt +0 -11
- data/README.rdoc +0 -69
- data/lib/nickel/instance_from_hash.rb +0 -13
- data/lib/nickel/ruby_ext/calling_method.rb +0 -10
- data/lib/nickel/ruby_ext/to_s2.rb +0 -12
- data/spec/nickel_spec.rb +0 -165
- data/test/compare.rb +0 -109
- data/test/nlp_test.rb +0 -813
- data/test/nlp_tests_helper.rb +0 -55
- data/test/zdate_test.rb +0 -44
- data/test/ztime_test.rb +0 -429
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
if ENV['TRAVIS'] && ENV['COVERALLS'] && RUBY_ENGINE == 'ruby'
|
2
|
+
require 'coveralls'
|
3
|
+
Coveralls.wear!
|
4
|
+
end
|
5
|
+
|
6
|
+
RSpec.configure do |config|
|
7
|
+
config.order = 'random'
|
8
|
+
config.expect_with(:rspec){ |c| c.syntax = :expect }
|
9
|
+
config.mock_with(:rspec){ |c| c.syntax = :expect }
|
10
|
+
config.filter_run_excluding broken: true
|
11
|
+
|
12
|
+
# make sure warnings are not shown when testing deprecated methods
|
13
|
+
config.around(:each, :deprecated) do |example|
|
14
|
+
original_verbose = $VERBOSE
|
15
|
+
begin
|
16
|
+
$VERBOSE = nil
|
17
|
+
example.run
|
18
|
+
ensure
|
19
|
+
$VERBOSE = original_verbose
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
metadata
CHANGED
@@ -1,73 +1,162 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nickel
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Lou Zell
|
8
|
+
- Iain Beeston
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
13
|
-
dependencies:
|
12
|
+
date: 2014-03-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rspec
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - '='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: 3.0.0.beta2
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - '='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 3.0.0.beta2
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: coveralls
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: yard
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: kramdown
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
14
98
|
description: Extracts date, time, and message information from naturally worded text.
|
15
|
-
email:
|
99
|
+
email:
|
16
100
|
executables: []
|
17
101
|
extensions: []
|
18
|
-
extra_rdoc_files:
|
19
|
-
- README.rdoc
|
102
|
+
extra_rdoc_files: []
|
20
103
|
files:
|
21
|
-
-
|
104
|
+
- .gitignore
|
105
|
+
- .travis.yml
|
106
|
+
- .yardopts
|
107
|
+
- CHANGELOG.md
|
108
|
+
- Gemfile
|
22
109
|
- License.txt
|
23
|
-
- README.
|
110
|
+
- README.md
|
24
111
|
- Rakefile
|
25
|
-
-
|
112
|
+
- bin/run_specs.sh
|
26
113
|
- lib/nickel.rb
|
27
114
|
- lib/nickel/construct.rb
|
28
115
|
- lib/nickel/construct_finder.rb
|
29
116
|
- lib/nickel/construct_interpreter.rb
|
30
|
-
- lib/nickel/instance_from_hash.rb
|
31
117
|
- lib/nickel/nlp.rb
|
118
|
+
- lib/nickel/nlp_query.rb
|
119
|
+
- lib/nickel/nlp_query_constants.rb
|
32
120
|
- lib/nickel/occurrence.rb
|
33
|
-
- lib/nickel/
|
34
|
-
- lib/nickel/query_constants.rb
|
121
|
+
- lib/nickel/version.rb
|
35
122
|
- lib/nickel/zdate.rb
|
36
123
|
- lib/nickel/ztime.rb
|
37
|
-
-
|
38
|
-
- lib/nickel/
|
39
|
-
-
|
40
|
-
-
|
41
|
-
-
|
42
|
-
-
|
43
|
-
-
|
44
|
-
|
45
|
-
|
46
|
-
|
124
|
+
- nickel.gemspec
|
125
|
+
- spec/lib/nickel/nlp_spec.rb
|
126
|
+
- spec/lib/nickel/occurrence_spec.rb
|
127
|
+
- spec/lib/nickel/zdate_spec.rb
|
128
|
+
- spec/lib/nickel/ztime_spec.rb
|
129
|
+
- spec/lib/nickel_spec.rb
|
130
|
+
- spec/spec_helper.rb
|
131
|
+
homepage: http://github.com/iainbeeston/nickel
|
132
|
+
licenses:
|
133
|
+
- MIT
|
134
|
+
metadata: {}
|
47
135
|
post_install_message:
|
48
|
-
rdoc_options:
|
49
|
-
- --main
|
50
|
-
- README.rdoc
|
51
|
-
- --title
|
52
|
-
- Nickel
|
136
|
+
rdoc_options: []
|
53
137
|
require_paths:
|
54
138
|
- lib
|
55
139
|
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
-
none: false
|
57
140
|
requirements:
|
58
|
-
- -
|
141
|
+
- - '>='
|
59
142
|
- !ruby/object:Gem::Version
|
60
143
|
version: '0'
|
61
144
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
-
none: false
|
63
145
|
requirements:
|
64
|
-
- -
|
146
|
+
- - '>='
|
65
147
|
- !ruby/object:Gem::Version
|
66
148
|
version: '0'
|
67
149
|
requirements: []
|
68
150
|
rubyforge_project:
|
69
|
-
rubygems_version: 1.
|
151
|
+
rubygems_version: 2.1.11
|
70
152
|
signing_key:
|
71
|
-
specification_version:
|
153
|
+
specification_version: 4
|
72
154
|
summary: Natural language date, time, and message parsing.
|
73
|
-
test_files:
|
155
|
+
test_files:
|
156
|
+
- spec/lib/nickel/nlp_spec.rb
|
157
|
+
- spec/lib/nickel/occurrence_spec.rb
|
158
|
+
- spec/lib/nickel/zdate_spec.rb
|
159
|
+
- spec/lib/nickel/ztime_spec.rb
|
160
|
+
- spec/lib/nickel_spec.rb
|
161
|
+
- spec/spec_helper.rb
|
162
|
+
has_rdoc: true
|
data/History.txt
DELETED
data/README.rdoc
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
=== Nickel extracts date, time, and message information from naturally worded text.
|
2
|
-
|
3
|
-
=== Install
|
4
|
-
|
5
|
-
gem install nickel
|
6
|
-
|
7
|
-
=== Usage
|
8
|
-
|
9
|
-
==== A single occurrence
|
10
|
-
n = Nickel.parse("use the force on july 1st at 9am", Time.now)
|
11
|
-
n.message #=> "use the force"
|
12
|
-
n.occurrences.first.start_date #=> "20110701"
|
13
|
-
|
14
|
-
==== A daily occurrence
|
15
|
-
n = Nickel.parse "wake up everyday at 11am"
|
16
|
-
n.message # => wake up
|
17
|
-
n.occurrences[0].type # => daily
|
18
|
-
n.occurrences[0].start_time # => 11:00:00
|
19
|
-
|
20
|
-
==== A weekly occurrence
|
21
|
-
n = Nickel.parse "guitar lessons every tuesday at 5pm"
|
22
|
-
n.message # => guitar lessons
|
23
|
-
n.occurrences[0].type # => weekly
|
24
|
-
n.occurrences[0].day_of_week # => tue
|
25
|
-
n.occurrences[0].interval # => 1
|
26
|
-
n.occurrences[0].start_time # => 17:00:00
|
27
|
-
|
28
|
-
==== A day monthly occurrence
|
29
|
-
n = Nickel.parse "drink specials on the second thursday of every month"
|
30
|
-
n.message # => drink specials
|
31
|
-
n.occurrences[0].type # => daymonthly
|
32
|
-
n.occurrences[0].day_of_week # => thu
|
33
|
-
n.occurrences[0].week_of_month # => 2
|
34
|
-
n.occurrences[0].interval # => 1
|
35
|
-
|
36
|
-
==== A date monthly occurrence
|
37
|
-
n = Nickel.parse "pay credit card every month on the 22nd"
|
38
|
-
n.message # => pay credit card
|
39
|
-
n.occurrences[0].type # => datemonthly
|
40
|
-
n.occurrences[0].date_of_month # => 22
|
41
|
-
n.occurrences[0].interval # => 1
|
42
|
-
|
43
|
-
==== Multiple occurrences
|
44
|
-
n = Nickel.parse "band meeting every monday and wednesday at 2pm"
|
45
|
-
n.message # => band meeting
|
46
|
-
n.occurrences[0].type # => weekly
|
47
|
-
n.occurrences[0].day_of_week # => mon
|
48
|
-
n.occurrences[0].start_time # => 14:00:00
|
49
|
-
n.occurrences[1].type # => weekly
|
50
|
-
n.occurrences[1].day_of_week # => wed
|
51
|
-
n.occurrences[1].start_time # => 14:00:00
|
52
|
-
|
53
|
-
==== Setting current time
|
54
|
-
|
55
|
-
n = Nickel.parse "lunch 3 days from now", DateTime.new(2010,3,31)
|
56
|
-
n.message # => lunch
|
57
|
-
n.occurrences[0].start_date # => 20100403
|
58
|
-
|
59
|
-
|
60
|
-
Running Tests
|
61
|
-
=======
|
62
|
-
$ rake test
|
63
|
-
|
64
|
-
If you do not have RUBYOPT set:
|
65
|
-
$ RUBYOPT='rubygems' rake test
|
66
|
-
|
67
|
-
|
68
|
-
Copyright (c) 2008-2011 Lou Zell, released under the MIT license
|
69
|
-
|
@@ -1,13 +0,0 @@
|
|
1
|
-
# Ruby Nickel Library
|
2
|
-
# Copyright (c) 2008-2011 Lou Zell, lzell11@gmail.com, http://hazelmade.com
|
3
|
-
# MIT License [http://www.opensource.org/licenses/mit-license.php]
|
4
|
-
|
5
|
-
module InstanceFromHash
|
6
|
-
|
7
|
-
def initialize(h)
|
8
|
-
h.each do |k,v|
|
9
|
-
instance_variable_set("@#{k}", v)
|
10
|
-
end
|
11
|
-
super()
|
12
|
-
end
|
13
|
-
end
|
data/spec/nickel_spec.rb
DELETED
@@ -1,165 +0,0 @@
|
|
1
|
-
# Run with:
|
2
|
-
# ~/dev/nickel(master)$ rspec test/nickel_spec.rb
|
3
|
-
require File.expand_path(File.dirname(__FILE__) + "/../lib/nickel")
|
4
|
-
|
5
|
-
|
6
|
-
describe "A single date" do
|
7
|
-
before(:all) { @n = Nickel.query "oct 15 09" }
|
8
|
-
|
9
|
-
it "should have an empty message" do
|
10
|
-
@n.message.should be_empty
|
11
|
-
end
|
12
|
-
|
13
|
-
it "should have a start date" do
|
14
|
-
@n.occurrences.size.should == 1
|
15
|
-
@n.occurrences.first.start_date.should == "20091015"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe "A daily occurrence" do
|
20
|
-
before(:all) do
|
21
|
-
@n = Nickel.query "wake up everyday at 11am"
|
22
|
-
@occurs = @n.occurrences.first
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should have a message" do
|
26
|
-
@n.message.should == "wake up"
|
27
|
-
end
|
28
|
-
|
29
|
-
it "should be daily" do
|
30
|
-
@occurs.type.should == "daily"
|
31
|
-
end
|
32
|
-
|
33
|
-
it "should have a start time" do
|
34
|
-
@occurs.start_time.should == "11:00:00"
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
|
39
|
-
describe "A weekly occurrence" do
|
40
|
-
before(:all) do
|
41
|
-
@n = Nickel.query "guitar lessons every tuesday at 5pm"
|
42
|
-
@occurs = @n.occurrences.first
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should have a message" do
|
46
|
-
@n.message.should == "guitar lessons"
|
47
|
-
end
|
48
|
-
|
49
|
-
it "should be weekly" do
|
50
|
-
@occurs.type.should == "weekly"
|
51
|
-
end
|
52
|
-
|
53
|
-
|
54
|
-
it "should occur on tuesdays" do
|
55
|
-
@occurs.day_of_week.should == "tue"
|
56
|
-
end
|
57
|
-
|
58
|
-
it "should occur once per week" do
|
59
|
-
@occurs.interval.should == 1
|
60
|
-
end
|
61
|
-
|
62
|
-
it "should start at 5pm" do
|
63
|
-
@occurs.start_time.should == "17:00:00"
|
64
|
-
end
|
65
|
-
|
66
|
-
it "should have a start date" do
|
67
|
-
@occurs.start_date.should_not be_nil
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should not have an end date" do
|
71
|
-
@occurs.end_date.should be_nil
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
|
76
|
-
describe "A day monthly occurrence" do
|
77
|
-
before(:all) do
|
78
|
-
@n = Nickel.query "drink specials on the second thursday of every month"
|
79
|
-
@occurs = @n.occurrences.first
|
80
|
-
end
|
81
|
-
|
82
|
-
it "should have a message" do
|
83
|
-
@n.message.should == "drink specials"
|
84
|
-
end
|
85
|
-
|
86
|
-
it "should be day monthly" do
|
87
|
-
@occurs.type.should == "daymonthly"
|
88
|
-
end
|
89
|
-
|
90
|
-
it "should occur on second thursday of every month" do
|
91
|
-
@occurs.week_of_month.should == 2
|
92
|
-
@occurs.day_of_week.should == "thu"
|
93
|
-
end
|
94
|
-
|
95
|
-
it "should occur once per month" do
|
96
|
-
@occurs.interval.should == 1
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
describe "A date monthly occurrence" do
|
103
|
-
before(:all) do
|
104
|
-
@n = Nickel.query "pay credit card every month on the 22nd"
|
105
|
-
@occurs = @n.occurrences.first
|
106
|
-
end
|
107
|
-
|
108
|
-
it "should have a message" do
|
109
|
-
@n.message.should == "pay credit card"
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should be date monthly" do
|
113
|
-
@occurs.type.should == "datemonthly"
|
114
|
-
end
|
115
|
-
|
116
|
-
it "should occur on the 22nd of every month" do
|
117
|
-
@occurs.date_of_month.should == 22
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should occur once per month" do
|
121
|
-
@occurs.interval.should == 1
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
|
126
|
-
describe "Multiple occurrences" do
|
127
|
-
before(:all) do
|
128
|
-
@n = Nickel.query "band meeting every monday and wednesday at 2pm"
|
129
|
-
end
|
130
|
-
|
131
|
-
it "should have a message" do
|
132
|
-
@n.message.should == "band meeting"
|
133
|
-
end
|
134
|
-
|
135
|
-
it "should have two occurrences" do
|
136
|
-
@n.occurrences.size.should == 2
|
137
|
-
end
|
138
|
-
|
139
|
-
it "should occur on mondays and wednesdays" do
|
140
|
-
days = @n.occurrences.collect {|occ| occ.day_of_week}
|
141
|
-
days.include?("mon").should be_true
|
142
|
-
days.include?("wed").should be_true
|
143
|
-
days.size.should == 2
|
144
|
-
end
|
145
|
-
|
146
|
-
it "should occur at 2pm on both days" do
|
147
|
-
@n.occurrences[0].start_time.should == "14:00:00"
|
148
|
-
@n.occurrences[1].start_time.should == "14:00:00"
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
describe "Setting current time" do
|
153
|
-
|
154
|
-
it "should occur on a date relative to the current time passed in" do
|
155
|
-
n = Nickel.query "lunch 3 days from now", DateTime.new(2009,05,28)
|
156
|
-
n.occurrences.first.start_date.should == "20090531"
|
157
|
-
end
|
158
|
-
|
159
|
-
it "should raise an error if the current time argument is not a datetime or time object" do
|
160
|
-
lambda{
|
161
|
-
Nickel.query "lunch 3 days from now", Date.new(2009,05,28)
|
162
|
-
}.should raise_error("You must pass in a ruby DateTime or Time class object")
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|