ingreedy 0.0.8 → 0.0.9

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: d6d5071dc7a7febbdfce24e50a444ded4e753e15
4
- data.tar.gz: 7abdbb8f28851cbe697453233c16836e673bb61e
3
+ metadata.gz: 452f17ed3a15ae973346ea074ee682bf173d1663
4
+ data.tar.gz: 6face6a2f60f6506160d815c69cd0546107fb787
5
5
  SHA512:
6
- metadata.gz: a8840fc397fdb630a9456deb5aa97b5b8777179e3b6b2d4ec9c10c05cb6e01868bbdbdd1e20740fcc141fec214e9a0ebc83790f6cb0cdcf1da6f8a6f6013d621
7
- data.tar.gz: 2dfd59ee0da0fc7d4b9e882cebf1f218fa94fa97bcfbb41c5dd68eff4235cce7512b584185bb7f72d3c2c13eda45c3ff8ad993c9ba8257c47aab75063ce65174
6
+ metadata.gz: acdc3c1f4f4c135188c9c92e4a83441d569539f4a9b0af31cdfd08e8ca653ce81689dff985d72814d8b71f10f59b4d1eb936cf46f6d35e99aeb1a0b31cc42275
7
+ data.tar.gz: b0801f2d7eb26f02eb14cd615102b00dfe5eb695ed03f3b53dd32bf2f62c2df1cc70ae5cebcd552634403de39dc94c3d859d1271b31ba8f3930ad77d03668421
@@ -1,14 +1,9 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 1.9.3
5
4
  - 2.0.0
6
5
  - 2.1.7
7
6
  - 2.2.3
7
+ - 2.3.0
8
8
  - ruby-head
9
- - jruby-19mode
10
9
  - jruby-head
11
- matrix:
12
- allow_failures:
13
- - rvm: rbx-19mode
14
- - rvm: rbx-2.1.1
@@ -5,6 +5,8 @@ require File.join(path, "ingreedy_parser")
5
5
  require File.join(path, "dictionary_collection")
6
6
 
7
7
  module Ingreedy
8
+ ParseFailed = Class.new(StandardError)
9
+
8
10
  def self.locale
9
11
  @locale ||= nil
10
12
  end
@@ -16,6 +18,8 @@ module Ingreedy
16
18
  def self.parse(query)
17
19
  parser = Parser.new(query)
18
20
  parser.parse
21
+ rescue Parslet::ParseFailed => e
22
+ fail ParseFailed.new(e.message), e.backtrace
19
23
  end
20
24
 
21
25
  def self.dictionaries
@@ -47,15 +47,11 @@ module Ingreedy
47
47
  word_digits.map { |d| stri(d) }.inject(:|) || any
48
48
  end
49
49
 
50
- rule(:amount_unit_separator) do
51
- whitespace | str("-")
52
- end
53
-
54
50
  rule(:amount) do
55
51
  fraction |
56
52
  float.as(:float_amount) |
57
53
  integer.as(:integer_amount) |
58
- word_digit.as(:word_integer_amount) >> amount_unit_separator
54
+ word_digit.as(:word_integer_amount) >> whitespace
59
55
  end
60
56
 
61
57
  root(:amount)
@@ -3,11 +3,15 @@ module Ingreedy
3
3
  rule(:range) do
4
4
  AmountParser.new.as(:amount) >>
5
5
  whitespace.maybe >>
6
- str("-") >>
6
+ range_separator >>
7
7
  whitespace.maybe >>
8
8
  AmountParser.new.as(:amount_end)
9
9
  end
10
10
 
11
+ rule(:range_separator) do
12
+ str("-") | str("~")
13
+ end
14
+
11
15
  rule(:amount) do
12
16
  AmountParser.new.as(:amount)
13
17
  end
@@ -1,3 +1,3 @@
1
1
  module Ingreedy
2
- VERSION = "0.0.8"
2
+ VERSION = "0.0.9"
3
3
  end
@@ -1,46 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require "spec_helper"
3
3
 
4
- describe Ingreedy do
5
- context "amount parsing" do
6
- {
7
- "1 cup flour" => 1,
8
- "one cup flour" => 1,
9
- "1 1/2 cups flour" => "3/2",
10
- "¼ cups flour" => "1/4",
11
- "1 ½ cups flour" => "3/2",
12
- "1½ cups flour" => "3/2",
13
- "1.0 cup flour" => 1,
14
- "1.5 cups flour" => "3/2",
15
- "1,5 cups flour" => "3/2",
16
- "1 2/3 cups flour" => "5/3",
17
- "1 (28 ounce) can crushed tomatoes" => 1,
18
- "2 (28 ounce) can crushed tomatoes" => 2,
19
- "3 28 ounce can crushed tomatoes" => 3,
20
- "one 28 ounce can crushed tomatoes" => 1,
21
- "two five-ounce can crushed tomatoes" => 2,
22
- "two 28 ounce cans crushed tomatoes" => 2,
23
- "three 28 ounce cans crushed tomatoes" => 3,
24
- "1/2 cups flour" => "1/2",
25
- ".25 cups flour" => "1/4",
26
- "12oz tequila" => 12,
27
- "1 banana" => 1,
28
- }.each do |query, expected|
29
- it "parses the correct amount as a rational" do
30
- expect(Ingreedy.parse(query)).to parse_the_amount(expected.to_r)
31
- end
32
- end
33
- end
34
-
35
- context "unit parsing" do
36
- context "(english)" do
37
- end
38
- context "(metric)" do
39
- end
40
- context "(nonstandard)" do
41
- end
42
- end
43
-
4
+ describe Ingreedy, ".parse" do
44
5
  it "parses a simple example correctly" do
45
6
  result = Ingreedy.parse("1 lb potatoes")
46
7
 
@@ -50,7 +11,37 @@ describe Ingreedy do
50
11
  end
51
12
  end
52
13
 
53
- describe "english units" do
14
+ describe Ingreedy, "amount parsing" do
15
+ {
16
+ "1 cup flour" => 1,
17
+ "one cup flour" => 1,
18
+ "1 1/2 cups flour" => "3/2",
19
+ "¼ cups flour" => "1/4",
20
+ "1 ½ cups flour" => "3/2",
21
+ "1½ cups flour" => "3/2",
22
+ "1.0 cup flour" => 1,
23
+ "1.5 cups flour" => "3/2",
24
+ "1,5 cups flour" => "3/2",
25
+ "1 2/3 cups flour" => "5/3",
26
+ "1 (28 ounce) can crushed tomatoes" => 1,
27
+ "2 (28 ounce) can crushed tomatoes" => 2,
28
+ "3 28 ounce can crushed tomatoes" => 3,
29
+ "one 28 ounce can crushed tomatoes" => 1,
30
+ "two five-ounce can crushed tomatoes" => 2,
31
+ "two 28 ounce cans crushed tomatoes" => 2,
32
+ "three 28 ounce cans crushed tomatoes" => 3,
33
+ "1/2 cups flour" => "1/2",
34
+ ".25 cups flour" => "1/4",
35
+ "12oz tequila" => 12,
36
+ "1 banana" => 1,
37
+ }.each do |query, expected|
38
+ it "parses the correct amount as a rational" do
39
+ expect(Ingreedy.parse(query)).to parse_the_amount(expected.to_r)
40
+ end
41
+ end
42
+ end
43
+
44
+ describe Ingreedy, "english units" do
54
45
  context "abbreviated" do
55
46
  {
56
47
  "1 c flour" => :cup,
@@ -88,7 +79,7 @@ describe "english units" do
88
79
  "1 LB flour" => :pound,
89
80
  "1 tSP sugar" => :teaspoon,
90
81
  }.each do |query, expected|
91
- it "parses the units correctly" do
82
+ it "parses the #{expected} unit correctly" do
92
83
  expect(Ingreedy.parse(query)).to parse_the_unit(expected)
93
84
  end
94
85
  end
@@ -118,7 +109,7 @@ describe "english units" do
118
109
  end
119
110
  end
120
111
 
121
- describe "metric units" do
112
+ describe Ingreedy, "metric units" do
122
113
  context "abbreviated" do
123
114
  {
124
115
  "1 g flour" => :gram,
@@ -160,7 +151,7 @@ describe "metric units" do
160
151
  end
161
152
  end
162
153
 
163
- describe "nonstandard units" do
154
+ describe Ingreedy, "nonstandard units" do
164
155
  {
165
156
  "1 pinch pepper" => :pinch,
166
157
  "2 pinches pepper" => :pinch,
@@ -180,7 +171,7 @@ describe "nonstandard units" do
180
171
  end
181
172
  end
182
173
 
183
- describe "without units" do
174
+ describe Ingreedy, "without units" do
184
175
  it "parses correctly" do
185
176
  result = Ingreedy.parse "3 eggs, lightly beaten"
186
177
 
@@ -190,7 +181,7 @@ describe "without units" do
190
181
  end
191
182
  end
192
183
 
193
- describe "container as part of quantity" do
184
+ describe Ingreedy, "container as part of quantity" do
194
185
  it "parses correctly" do
195
186
  result = Ingreedy.parse "160g (2 cans) of tomatoes"
196
187
 
@@ -229,7 +220,7 @@ describe "container as part of quantity" do
229
220
  end
230
221
  end
231
222
 
232
- describe "with 'a' as quantity and preposition 'of'" do
223
+ describe Ingreedy, "with 'a' as quantity and preposition 'of'" do
233
224
  it "parses correctly" do
234
225
  result = Ingreedy.parse "a dash of ginger"
235
226
 
@@ -239,7 +230,7 @@ describe "with 'a' as quantity and preposition 'of'" do
239
230
  end
240
231
  end
241
232
 
242
- describe "with 'reverse format'" do
233
+ describe Ingreedy, "with 'reverse format'" do
243
234
  it "works with words containing a 'word digit'" do
244
235
  result = Ingreedy.parse "salt 200g"
245
236
 
@@ -265,7 +256,7 @@ describe "with 'reverse format'" do
265
256
  end
266
257
  end
267
258
 
268
- describe "Given a range" do
259
+ describe Ingreedy, "Given a range" do
269
260
  it "works with simple ranges" do
270
261
  result = Ingreedy.parse "1-2 tbsp salt"
271
262
 
@@ -281,9 +272,17 @@ describe "Given a range" do
281
272
  expect(result.unit).to eq(:tablespoon)
282
273
  expect(result.ingredient).to eq("salt")
283
274
  end
275
+
276
+ it "works with tilde" do
277
+ result = Ingreedy.parse "1~2 tbsp salt"
278
+
279
+ expect(result.amount).to eq([1, 2])
280
+ expect(result.unit).to eq(:tablespoon)
281
+ expect(result.ingredient).to eq("salt")
282
+ end
284
283
  end
285
284
 
286
- describe "parsing in language with no prepositions" do
285
+ describe Ingreedy, "parsing in language with no prepositions" do
287
286
  before(:all) do
288
287
  Ingreedy.dictionaries[:id] = {
289
288
  units: {
@@ -307,7 +306,7 @@ describe "parsing in language with no prepositions" do
307
306
  end
308
307
  end
309
308
 
310
- describe "custom dictionaries" do
309
+ describe Ingreedy, "custom dictionaries" do
311
310
  context "using Ingreedy.locale=" do
312
311
  before(:all) do
313
312
  Ingreedy.dictionaries[:fr] = {
@@ -371,8 +370,16 @@ describe "custom dictionaries" do
371
370
  end
372
371
  end
373
372
 
374
- describe "ingredient formatting" do
373
+ describe Ingreedy, "ingredient formatting" do
375
374
  it "strips preceding or trailing whitespace" do
376
375
  expect(Ingreedy.parse("1 cup flour ").ingredient).to eq("flour")
377
376
  end
378
377
  end
378
+
379
+ describe Ingreedy, "error handling" do
380
+ it "wraps Parslet exceptions in a custom exception" do
381
+ expect do
382
+ Ingreedy.parse("nonsense")
383
+ end.to raise_error Ingreedy::ParseFailed
384
+ end
385
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ingreedy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.8
4
+ version: 0.0.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ian C. Anderson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-18 00:00:00.000000000 Z
11
+ date: 2016-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parslet
@@ -116,7 +116,6 @@ files:
116
116
  - ".gitignore"
117
117
  - ".rspec"
118
118
  - ".rubocop.yml"
119
- - ".rvmrc"
120
119
  - ".travis.yml"
121
120
  - Gemfile
122
121
  - README.md
@@ -158,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
157
  version: '0'
159
158
  requirements: []
160
159
  rubyforge_project:
161
- rubygems_version: 2.4.5.1
160
+ rubygems_version: 2.4.8
162
161
  signing_key:
163
162
  specification_version: 4
164
163
  summary: Recipe parser
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm --create 1.9.3@ingreedy