emeals 0.0.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c883efc225e72b90fe4943bcce321f9933664452
4
- data.tar.gz: f7b246806d4fc330a5bf42235871ec8ae4615e48
3
+ metadata.gz: 88f64929d0e17e3a429aef954e2508bf354afb6c
4
+ data.tar.gz: 7811beff315cd7d5b8a06720f1b696611f4a1658
5
5
  SHA512:
6
- metadata.gz: 4f3596e65d12aeb0d1a58362eb83b408aa83fa05210b4b53b81fd63ecf921eebf1f39818edf17481bbb3f28cc0c1e39995888ad82cc68c2cbafc88e70586033f
7
- data.tar.gz: 27e5874c713d6de1662e74a9d56cb4d54385eb794ee5369925db7f81e6e447fc9d5986c02153f8fb26c8ee8ba509a03a2b604608b69eb4ac5e2634e8aba1ed5f
6
+ metadata.gz: ba0a4c7c3ea79ba9a535569d33b97ac40429341d4fa219f908e02a35dd068c8852469486d0537e87e2845f521abf33a14b15e0127da7a0dd75849bea44083e1f
7
+ data.tar.gz: 9056e857a31afc51ad2ac0429a26c6f70a3ed51566c7d0097b2dc560c36c3426632a4a0054546d63f949b7e2ac090223d3e3557cd691c9fbebac3729eae1f547
@@ -1 +1 @@
1
- 2.0.0
1
+ 2.0.0-p0
@@ -1,12 +1,12 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  class Emeals::Dish
4
- attr_accessor :name, :ingredients, :instructions
4
+ attr_reader :name, :ingredients, :instructions
5
5
 
6
- def initialize(name)
6
+ def initialize(name, ingredients = [], instructions = [])
7
7
  @name = name
8
- @ingredients = []
9
- @instructions = []
8
+ @ingredients = ingredients
9
+ @instructions = instructions
10
10
  end
11
11
  end
12
12
 
@@ -37,7 +37,7 @@ class Emeals::Quantity
37
37
  end
38
38
 
39
39
  class Emeals::Ingredient
40
- attr_accessor :quantity, :description
40
+ attr_reader :quantity, :description
41
41
 
42
42
  def initialize(amount, unit, description)
43
43
  @quantity = Emeals::Quantity.new(amount, unit)
@@ -58,4 +58,4 @@ class Emeals::Ingredient
58
58
  def ==(other)
59
59
  other.quantity == @quantity && other.description == @description
60
60
  end
61
- end
61
+ end
@@ -5,98 +5,81 @@ require 'emeals/dish'
5
5
  class Emeals::Meal
6
6
  attr_reader :entree, :side, :flags, :times
7
7
 
8
- def initialize(entree = nil, side = nil)
8
+ def initialize(entree = nil, side = nil, flags = [], times = {})
9
9
  @entree = entree
10
10
  @side = side
11
- @flags = []
12
- @times = {}
11
+ @flags = flags
12
+ @times = times
13
13
  end
14
14
 
15
- def parse!(meal_text)
16
- parse_state = :header
17
- names = []
18
- entree_instructions = []
19
- side_instructions = []
20
- meal_text.split("\n").each do |line|
21
- case parse_state
22
- when :header
23
- parse_flags(line)
24
- parse_state = :names
25
- when :names
26
- if line =~ /Prep Cook Total/
27
- entree_name, side_name = separate_entree_and_side_names(names)
28
- @entree = Emeals::Dish.new(entree_name)
29
- @side = Emeals::Dish.new(side_name)
30
- parse_state = :times
31
- else
32
- names << line
33
- end
34
- when :times
35
- parse_times(line)
36
- parse_state = :entree_ingredients
37
- when :entree_ingredients
38
- if line.include? "-------"
39
- parse_state = :side_ingredients
40
- else
41
- add_ingredients_to_dish(line, @entree)
42
- end
43
- when :side_ingredients
44
- if line =~ /^[A-Z]/
45
- entree_instructions << line
46
- parse_state = :entree_instructions
47
- else
48
- add_ingredients_to_dish(line, @side)
49
- end
50
- when :entree_instructions
51
- if line.include? "-------"
52
- add_instructions_to_dish(entree_instructions, @entree)
53
- parse_state = :side_instructions
54
- else
55
- entree_instructions << line
56
- end
57
- when :side_instructions
58
- if line =~ /^Copyright/
59
- side_instructions = side_instructions[0..-3]
60
- break
61
- else
62
- side_instructions << line
63
- end
64
- else
65
-
66
- end
67
- end
68
-
69
- add_instructions_to_dish(side_instructions, @side)
70
- self
15
+ def self.parse(meal_text)
16
+ Emeals::MealParser.new(meal_text).parse
71
17
  end
72
18
 
73
19
  FLAGS = {
74
- "Slow Cooker" => :slow_cooker,
75
- "On the Grill" => :on_the_grill,
76
- "Super Fast" => :super_fast,
77
- "Marinate Ahead" => :marinate_ahead
20
+ "Slow Cooker" => :slow_cooker,
21
+ "On the Grill" => :on_the_grill,
22
+ "Super Fast" => :super_fast,
23
+ "Marinate Ahead" => :marinate_ahead
78
24
  }
79
25
 
80
- %w(slow_cooker on_the_grill super_fast marinate_ahead).each do |flag|
26
+ FLAGS.values.each do |flag|
81
27
  define_method "#{flag}?" do
82
- @flags.include? flag.to_sym
28
+ @flags.include? flag
83
29
  end
84
30
  end
31
+ end
32
+
33
+ class Emeals::MealParser
34
+ def initialize(meal_text)
35
+ @meal_text = meal_text
36
+ end
37
+
38
+ def parse
39
+ entree_name = side_name = flags = times = nil
40
+ names = entree_ingredients = side_ingredients = []
41
+ parse_state = :header
42
+ entree_instructions = []
43
+ side_instructions = []
44
+ @meal_text.split("\n").each do |line|
45
+ case parse_state
46
+ when :header
47
+ flags, parse_state = parse_flags(line)
48
+ when :names
49
+ entree_name, side_name, names, parse_state = parse_names(line, names)
50
+ when :times
51
+ times, parse_state = parse_times(line)
52
+ when :entree_ingredients
53
+ entree_ingredients, parse_state = parse_entree_ingredients(line, entree_ingredients)
54
+ when :side_ingredients
55
+ side_ingredients, entree_instructions, parse_state = parse_side_ingredients(line, side_ingredients)
56
+ when :entree_instructions
57
+ entree_instructions, parse_state = parse_entree_instructions(line, entree_instructions)
58
+ when :side_instructions
59
+ side_instructions, parse_state = parse_side_instructions(line, side_instructions)
60
+ else
61
+ break
62
+ end
63
+ end
64
+ entree = Emeals::Dish.new(entree_name, entree_ingredients, format_instructions(entree_instructions))
65
+ side = Emeals::Dish.new(side_name, side_ingredients, format_instructions(side_instructions))
66
+ Emeals::Meal.new(entree, side, flags, times)
67
+ end
85
68
 
86
69
  private
87
70
 
88
71
  def separate_entree_and_side_names(names)
89
72
  case names.size
90
- when 2
91
- names
92
- when 3
93
- if names[1].length < names[0].length
94
- [join_names(names[0..1]), names[2]]
95
- else
96
- [names[0], join_names(names[1..2])]
97
- end
73
+ when 2
74
+ names
75
+ when 3
76
+ if names[1].length < names[0].length
77
+ [join_names(names[0..1]), names[2]]
98
78
  else
99
- [join_names(names[0..1]), join_names(names[2..-1])]
79
+ [names[0], join_names(names[1..2])]
80
+ end
81
+ else
82
+ [join_names(names[0..1]), join_names(names[2..-1])]
100
83
  end
101
84
  end
102
85
 
@@ -105,31 +88,70 @@ class Emeals::Meal
105
88
  end
106
89
 
107
90
  def parse_flags(line)
108
- FLAGS.each do |flag, sym|
109
- @flags << sym if line.include? flag
91
+ [Emeals::Meal::FLAGS.select {|flag, sym| line.include? flag }.values, :names]
92
+ end
93
+
94
+ def parse_names(line, names)
95
+ if line =~ /Prep Cook Total/
96
+ entree_name, side_name = separate_entree_and_side_names(names)
97
+ [entree_name, side_name, nil, :times]
98
+ else
99
+ [nil, nil, names + [line], :names]
110
100
  end
111
101
  end
112
102
 
113
103
  def parse_times(line)
114
104
  times = line.split(" ")
115
- @times[:prep] = times.first
116
- @times[:cook] = times[1]
117
- @times[:total] = times[2..-1].join(" ")
105
+ [{prep: times.first, cook: times[1], total: times[2..-1].join(" ")}, :entree_ingredients]
106
+ end
107
+
108
+ def parse_entree_ingredients(line, ingredients)
109
+ if line.include? "-------"
110
+ [ingredients, :side_ingredients]
111
+ else
112
+ [find_ingredients(ingredients, line), :entree_ingredients]
113
+ end
114
+ end
115
+
116
+ def parse_side_ingredients(line, ingredients)
117
+ if line =~ /^[A-Z]/
118
+ [ingredients, [line], :entree_instructions]
119
+ else
120
+ [find_ingredients(ingredients, line), nil, :side_ingredients]
121
+ end
122
+ end
123
+
124
+ def parse_entree_instructions(line, instructions)
125
+ if line.include? "-------"
126
+ [instructions, :side_instructions]
127
+ else
128
+ [instructions + [line], :entree_instructions]
129
+ end
130
+ end
131
+
132
+ def parse_side_instructions(line, instructions)
133
+ if line =~ /^Copyright/
134
+ [instructions[0..-3], nil]
135
+ else
136
+ [instructions + [line], :side_instructions]
137
+ end
118
138
  end
119
139
 
120
140
  INGREDIENT_REGEX = /(?:\d|\xC2\xBC|\xC2\xBD)+ .+?(?=, (?:\d|\xC2\xBC|\xC2\xBD)+|$)/
121
141
 
122
- def add_ingredients_to_dish(line, dish)
142
+ def find_ingredients(ingredients, line)
123
143
  if line =~ /^\d|\xC2\xBC|\xC2\xBD/
124
- line.scan(INGREDIENT_REGEX).each do |match|
125
- dish.ingredients << Emeals::Ingredient.parse(match)
144
+ ingredients + line.scan(INGREDIENT_REGEX).map do |match|
145
+ Emeals::Ingredient.parse(match)
126
146
  end
127
147
  else
128
- dish.ingredients.last.description << " #{line}"
148
+ # TODO we shouldn't be modifying this in-place
149
+ ingredients.last.description << " #{line}"
150
+ ingredients
129
151
  end
130
152
  end
131
153
 
132
- def add_instructions_to_dish(lines, dish)
133
- dish.instructions = lines.join(" ").split(/\. ?/)
154
+ def format_instructions(instructions)
155
+ instructions.join(" ").split(/\. ?/)
134
156
  end
135
157
  end
@@ -1,34 +1,46 @@
1
1
  require 'emeals/meal'
2
2
 
3
3
  class Emeals::Menu
4
- attr_reader :count, :meals
4
+ attr_reader :meals
5
5
 
6
- def initialize
7
- @count = 0
8
- @meals = []
6
+ def initialize(meals)
7
+ @meals = meals
9
8
  end
10
9
 
11
- def parse!(menu_text)
10
+ def count
11
+ @meals.size
12
+ end
13
+
14
+ def self.parse(menu_text)
15
+ Emeals::MenuParser.new(menu_text).parse
16
+ end
17
+ end
18
+
19
+ class Emeals::MenuParser
20
+ def initialize(menu_text)
21
+ @menu_text = menu_text
22
+ end
23
+
24
+ def parse
12
25
  buffer = []
26
+ meals = []
13
27
  add_to_buffer = false
14
- menu_text.split("\n").each do |line|
28
+
29
+ @menu_text.split("\n").each do |line|
15
30
  if line =~ /Meal (\d+)/
16
- unless buffer.empty? and !add_to_buffer
17
- @count = @count + 1
18
- @meals << Emeals::Meal.new.parse!(buffer.join("\n"))
31
+ if add_to_buffer and !buffer.empty?
32
+ meals << Emeals::Meal.parse(buffer.join("\n"))
19
33
  end
20
34
 
21
- add_to_buffer = @count < $1.to_i
35
+ add_to_buffer = meals.size < $1.to_i
22
36
  buffer = add_to_buffer ? [line] : []
23
37
  next unless add_to_buffer
24
38
  else
25
39
  buffer << line if add_to_buffer
26
40
  end
27
41
  end
28
- self
29
- end
30
42
 
31
- def self.parse(menu_text)
32
- new.parse!(menu_text)
43
+ Emeals::Menu.new(meals)
33
44
  end
34
- end
45
+ end
46
+
@@ -1,3 +1,3 @@
1
1
  module Emeals
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -22,80 +22,7 @@ describe Emeals::Client do
22
22
  expect(@menu.count).to eq 7
23
23
  end
24
24
 
25
- describe "entree names" do
26
- it "reads the names of entrees when the side wraps to two lines" do
27
- expect(@meals[5].entree.name).to eq "Baked Cod Provencal"
28
- end
29
-
30
- it "reads the names of entrees which wrap to two lines" do
31
- expect(@meals.first.entree.name).to eq "Spicy Sausage and Egg Scramble"
32
- end
33
-
34
- it "reads the names of entrees when both the side and entree wrap to two lines" do
35
- expect(@meals.last.entree.name).to eq "Peppery Grilled Ribeye Steaks"
36
- end
37
- end
38
-
39
- describe "side names" do
40
- it "reads the names of sides that are a single line" do
41
- expect(@meals.first.side.name).to eq "Oregano Roasted Zucchini"
42
- end
43
-
44
- it "reads the names of sides that wrap to two lines" do
45
- expect(@meals[5].side.name).to eq "Roasted Asparagus with Sun-Dried Tomatoes"
46
- end
47
-
48
- it "reads the names of sides when both the side and entree wrap to two lines" do
49
- expect(@meals.last.side.name).to eq "Heirloom Tomato and Spinach Salad"
50
- end
51
- end
52
-
53
- describe "flags" do
54
- it "reads a meal with no flags correctly" do
55
- expect(@meals.first.flags).to be_empty
56
- end
57
-
58
- it "reads the slow cooker flag correctly" do
59
- expect(@meals[1].flags).to eq [:slow_cooker]
60
- expect(@meals[1]).to be_slow_cooker
61
- end
62
-
63
- it "reads the on the grill flag correctly" do
64
- expect(@meals[3].flags).to eq [:on_the_grill]
65
- expect(@meals[3]).to be_on_the_grill
66
- end
67
-
68
- it "reads the super fast flag correctly" do
69
- expect(@meals[5].flags).to eq [:super_fast]
70
- expect(@meals[5]).to be_super_fast
71
- end
72
-
73
- it "reads the marinate ahead flag correctly" do
74
- expect(@meals[6].flags).to eq [:marinate_ahead]
75
- expect(@meals[6]).to be_marinate_ahead
76
- end
77
- end
78
-
79
- describe "times" do
80
- it "reads prep times correctly" do
81
- expect(@meals.first.times[:prep]).to eq "10m"
82
- expect(@meals[5].times[:prep]).to eq "15m"
83
- end
84
-
85
- it "reads cook times correctly" do
86
- expect(@meals.first.times[:cook]).to eq "20m"
87
- expect(@meals[1].times[:cook]).to eq "4h"
88
- end
89
-
90
- it "reads total times correctly" do
91
- expect(@meals.first.times[:total]).to eq "30m"
92
- expect(@meals[1].times[:total]).to eq "4h 10m"
93
- end
94
- end
95
-
96
25
  describe "entree ingredients" do
97
- include Emeals
98
-
99
26
  let(:dish) { @meals.first.entree }
100
27
 
101
28
  it "reads the correct number of ingredients" do
@@ -116,8 +43,6 @@ describe Emeals::Client do
116
43
  end
117
44
 
118
45
  describe "side ingredients" do
119
- include Emeals
120
-
121
46
  let(:dish) { @meals[3].side }
122
47
 
123
48
  it "reads the correct number of ingredients" do
@@ -176,4 +101,4 @@ describe Emeals::Client do
176
101
  end
177
102
  end
178
103
  end
179
- end
104
+ end
@@ -0,0 +1,31 @@
1
+ Meal 1 <%= @flags %>
2
+ <%= @entree %>
3
+ <%= @side %>
4
+ Prep Cook Total
5
+ <%= [@prep_time, @cook_time, @total_time].join(" ") %>
6
+ ¼ lb ground pork sausage
7
+ ½ small onion, minced
8
+ <%= "#{@entree_ingredients}\n" unless @entree_ingredients == "" -%>
9
+ 4 large eggs, lightly beaten
10
+ ¼ teaspoon kosher salt, ¼ teaspoon pepper
11
+ ---------------------------------------------------------------
12
+ 1 lb fresh zucchini, trimmed and thinly sliced
13
+ 1 tablespoon chopped fresh oregano
14
+ <%= "#{@side_ingredients}\n" unless @side_ingredients == "" -%>
15
+ 1 tablespoon olive oil
16
+ ¼ teaspoon kosher salt, ¼ teaspoon pepper
17
+ Heat a nonstick skillet over medium-high heat.
18
+ Add sausage to pan; cook 6 minutes or until
19
+ done. Drain on a paper towel-lined plate,
20
+ reserving 1 tablespoon drippings in pan. <%= "#{@entree_instructions} " unless @entree_instructions == "" %>Add
21
+ onion to pan over medium heat. Cook 3
22
+ minutes or until lightly browned. Add eggs; cook
23
+ 2 minutes, stirring constantly. Stir in sausage,
24
+ salt and pepper; cook until eggs are thickened
25
+ and set. Note: Remaining pork sausage can be
26
+ frozen for up to 2 months.
27
+ ---------------------------------------------------------------
28
+ Preheat oven to 425 degrees. Toss zucchini,
29
+ oregano, oil, salt and pepper in a large roasting
30
+ pan. <%= "#{@side_instructions} " unless @side_instructions == "" %>Bake 20 minutes or until just tender.
31
+
@@ -0,0 +1,103 @@
1
+ require 'spec_helper'
2
+
3
+ require 'emeals/meal'
4
+
5
+ describe Emeals::MealParser do
6
+ describe "entree names" do
7
+ let(:entree1) { make_meal(entree: 'Baked Cod Provencal').entree.name }
8
+ let(:entree2) { make_meal(entree: 'Baked Cod Provencal',
9
+ side: "A Side That Wraps Onto\nTwo Lines").entree.name }
10
+ let(:entree3) { make_meal.entree.name }
11
+ let(:entree4) { make_meal(side: "A Side That Wraps Onto\nTwo Lines").entree.name }
12
+
13
+ it "reads the names of entrees when entree and side are single-line" do
14
+ expect(entree1).to eq "Baked Cod Provencal"
15
+ end
16
+
17
+ it "reads the names of entrees when the side wraps to two lines" do
18
+ expect(entree2).to eq "Baked Cod Provencal"
19
+ end
20
+
21
+ it "reads the names of entrees which wrap to two lines" do
22
+ expect(entree3).to eq "Spicy Sausage and Egg Scramble"
23
+ end
24
+
25
+ it "reads the names of entrees when both the side and entree wrap to two lines" do
26
+ expect(entree4).to eq "Spicy Sausage and Egg Scramble"
27
+ end
28
+ end
29
+
30
+ describe "side names" do
31
+ let(:side1) { make_meal(entree: 'Baked Cod Provencal').side.name }
32
+ let(:side2) { make_meal.side.name }
33
+ let(:side3) { make_meal(entree: 'Baked Cod Provencal',
34
+ side: "A Side That Wraps Onto\nTwo Lines").side.name }
35
+ let(:side4) { make_meal(side: "A Side That Wraps Onto\nTwo Lines").side.name }
36
+
37
+ it "reads the names of sides when entree and side are single-line" do
38
+ expect(side1).to eq "Oregano Roasted Zucchini"
39
+ end
40
+
41
+ it "reads the names of sides when the side wraps to two lines" do
42
+ expect(side2).to eq "Oregano Roasted Zucchini"
43
+ end
44
+
45
+ it "reads the names of sides which wrap to two lines" do
46
+ expect(side3).to eq "A Side That Wraps Onto Two Lines"
47
+ end
48
+
49
+ it "reads the names of sides when both the side and entree wrap to two lines" do
50
+ expect(side4).to eq "A Side That Wraps Onto Two Lines"
51
+ end
52
+ end
53
+
54
+ describe "flags" do
55
+ let(:slow_cooker) { make_meal flags: "Slow Cooker" }
56
+ let(:on_the_grill) { make_meal flags: "On the Grill" }
57
+ let(:super_fast) { make_meal flags: "Super Fast" }
58
+ let(:marinate_ahead) { make_meal flags: "Marinate Ahead" }
59
+
60
+ it "reads the slow cooker flag correctly" do
61
+ expect(slow_cooker.flags).to eq [:slow_cooker]
62
+ expect(slow_cooker).to be_slow_cooker
63
+ end
64
+
65
+ it "reads the on the grill flag correctly" do
66
+ expect(on_the_grill.flags).to eq [:on_the_grill]
67
+ expect(on_the_grill).to be_on_the_grill
68
+ end
69
+
70
+ it "reads the super fast flag correctly" do
71
+ expect(super_fast.flags).to eq [:super_fast]
72
+ expect(super_fast).to be_super_fast
73
+ end
74
+
75
+ it "reads the marinate ahead flag correctly" do
76
+ expect(marinate_ahead.flags).to eq [:marinate_ahead]
77
+ expect(marinate_ahead).to be_marinate_ahead
78
+ end
79
+
80
+ it "reads a meal with no flags correctly" do
81
+ expect(make_meal.flags).to eq []
82
+ expect(make_meal).to_not be_slow_cooker
83
+ end
84
+ end
85
+
86
+ describe "times" do
87
+ it "reads prep times correctly" do
88
+ expect(make_meal.times[:prep]).to eq "10m"
89
+ expect(make_meal(prep_time: "15m").times[:prep]).to eq "15m"
90
+ end
91
+
92
+ it "reads cook times correctly" do
93
+ expect(make_meal.times[:cook]).to eq "20m"
94
+ expect(make_meal(cook_time: "4h").times[:cook]).to eq "4h"
95
+ end
96
+
97
+ it "reads total times correctly" do
98
+ expect(make_meal.times[:total]).to eq "30m"
99
+ expect(make_meal(total_time: "4h 10m").times[:total]).to eq "4h 10m"
100
+ end
101
+ end
102
+ end
103
+
@@ -4,6 +4,9 @@
4
4
  # loaded once.
5
5
  #
6
6
  # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+
8
+ Dir[File.join(File.dirname(__FILE__), "support/**/*.rb")].each {|f| require f}
9
+
7
10
  RSpec.configure do |config|
8
11
  config.treat_symbols_as_metadata_keys_with_true_values = true
9
12
  config.run_all_when_everything_filtered = true
@@ -0,0 +1,29 @@
1
+ require 'emeals'
2
+
3
+ TEMPLATE_DIR = File.join(File.dirname(__FILE__), '..', 'fixtures')
4
+
5
+ DEFAULT_MEAL_OPTIONS = {
6
+ entree: "Spicy Sausage and Egg\nScramble",
7
+ side: "Oregano Roasted Zucchini",
8
+ flags: "",
9
+ prep_time: '10m',
10
+ cook_time: '20m',
11
+ total_time: '30m',
12
+ entree_ingredients: "",
13
+ side_ingredients: "",
14
+ entree_instructions: "",
15
+ side_instructions: "",
16
+ before: "",
17
+ after: ""
18
+ }
19
+
20
+ def make_meal(options = {})
21
+ options = DEFAULT_MEAL_OPTIONS.merge(options)
22
+
23
+ ctx = Object.new
24
+ def ctx.evaluate(options)
25
+ options.each {|k,v| instance_variable_set("@#{k}", v) }
26
+ ERB.new(File.read(File.join(TEMPLATE_DIR, 'meal.erb')), nil, '-').result(binding)
27
+ end
28
+ Emeals::MealParser.new(ctx.evaluate(options)).parse
29
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: emeals
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Moriarity
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-04 00:00:00.000000000 Z
11
+ date: 2013-07-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A client for interpreting eMeals menus.
14
14
  email:
@@ -33,10 +33,13 @@ files:
33
33
  - lib/emeals/menu.rb
34
34
  - lib/emeals/version.rb
35
35
  - spec/client_spec.rb
36
+ - spec/fixtures/meal.erb
36
37
  - spec/fixtures/menu.pdf
37
38
  - spec/fixtures/menu.txt
38
39
  - spec/ingredient_spec.rb
40
+ - spec/meal_parser_spec.rb
39
41
  - spec/spec_helper.rb
42
+ - spec/support/templates.rb
40
43
  homepage: ''
41
44
  licenses: []
42
45
  metadata: {}
@@ -56,13 +59,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
56
59
  version: '0'
57
60
  requirements: []
58
61
  rubyforge_project:
59
- rubygems_version: 2.0.3
62
+ rubygems_version: 2.0.0
60
63
  signing_key:
61
64
  specification_version: 4
62
65
  summary: eMeals Client
63
66
  test_files:
64
67
  - spec/client_spec.rb
68
+ - spec/fixtures/meal.erb
65
69
  - spec/fixtures/menu.pdf
66
70
  - spec/fixtures/menu.txt
67
71
  - spec/ingredient_spec.rb
72
+ - spec/meal_parser_spec.rb
68
73
  - spec/spec_helper.rb
74
+ - spec/support/templates.rb