pot_of_coffee 0.0.2 → 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 +4 -4
- data/README.md +4 -0
- data/bin/pot_of_coffee +6 -2
- data/lib/pot_of_coffee.rb +29 -22
- data/lib/pot_of_coffee/errors.rb +16 -0
- data/lib/pot_of_coffee/units.rb +43 -0
- data/lib/pot_of_coffee/version.rb +1 -1
- data/test/helper.rb +3 -0
- data/test/test_brewer.rb +28 -0
- data/test/test_units.rb +21 -0
- data/test/whatever_unit.rb +17 -0
- metadata +13 -5
- data/test/test_pot_of_coffee.rb +0 -26
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 59a334e469e37a0e133e778526d8a8b38ef395da
|
4
|
+
data.tar.gz: 461e37e68c299d442826130f84d1079f9577184c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84cb6d8a8e2a5559369f59d06a4b92c9d804f3219bcc117c8c89d8cec5aac4acfba105f7a251dc28aa86cb83ce2b471e7b033d2625be205169086f06af66821f
|
7
|
+
data.tar.gz: c89fe94927ddce0d9604b44a427dc45be34c10c4dcaa521760e5b86dd75e2caadee92291822ad65b1854a6d0d4f43512d935ef4ff66df0d6768b1bed2e466640
|
data/README.md
CHANGED
@@ -32,6 +32,10 @@ pot_of_coffee = PotOfCoffee::Brewer.new(quantity: 12, strength: 'weak')
|
|
32
32
|
pot_of_coffee.scoops # 6.0
|
33
33
|
```
|
34
34
|
|
35
|
+
## Tests
|
36
|
+
|
37
|
+
Clone the repo and run `rake test`. The test coverage is *very basic*.
|
38
|
+
|
35
39
|
## Contributing
|
36
40
|
|
37
41
|
1. Fork it ( https://github.com/[my-github-username]/pot_of_coffee/fork )
|
data/bin/pot_of_coffee
CHANGED
@@ -7,5 +7,9 @@ unless ARGV[0] && ARGV[1]
|
|
7
7
|
exit 1
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
quantity = ARGV[0].to_i
|
11
|
+
strength = ARGV[1].to_sym
|
12
|
+
units = PotOfCoffee::MetricUnit.new
|
13
|
+
|
14
|
+
pot_of_coffee = PotOfCoffee::Brewer.new(quantity: quantity, strength: strength, units: units)
|
15
|
+
puts pot_of_coffee.instructions
|
data/lib/pot_of_coffee.rb
CHANGED
@@ -1,38 +1,45 @@
|
|
1
1
|
require 'pot_of_coffee/version'
|
2
|
+
require 'pot_of_coffee/units'
|
3
|
+
require 'pot_of_coffee/errors'
|
4
|
+
require 'forwardable'
|
2
5
|
|
3
6
|
module PotOfCoffee
|
4
7
|
class Brewer
|
5
|
-
|
6
|
-
|
7
|
-
weak: 0.5,
|
8
|
-
normal: 0.675,
|
9
|
-
extra: 0.875,
|
10
|
-
turbo: 1,
|
11
|
-
starbucks: 2, # This is really how strong Starbucks expects someone to brew their coffe
|
12
|
-
wtf: 3.8
|
13
|
-
}
|
8
|
+
extend Forwardable
|
9
|
+
attr_reader :units
|
14
10
|
|
15
|
-
|
11
|
+
def_delegator :@units, :table, :ratios
|
16
12
|
|
17
|
-
def initialize(
|
18
|
-
@quantity = quantity
|
19
|
-
@strength = strength
|
20
|
-
@
|
13
|
+
def initialize(args = {})
|
14
|
+
@quantity = args[:quantity] || 12
|
15
|
+
@strength = args[:strength] || :normal
|
16
|
+
@units = args[:units] || ImperialUnit.new
|
21
17
|
end
|
22
18
|
|
23
|
-
def
|
24
|
-
@
|
19
|
+
def quantity
|
20
|
+
if @quantity > 0
|
21
|
+
@quantity
|
22
|
+
else
|
23
|
+
raise NegativeNumberError
|
24
|
+
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def
|
28
|
-
|
27
|
+
def strength
|
28
|
+
if ratios.include?(@strength.to_sym)
|
29
|
+
@strength
|
30
|
+
else
|
31
|
+
raise WrongStrengthError
|
32
|
+
end
|
29
33
|
end
|
30
34
|
|
31
|
-
def
|
35
|
+
def amount
|
32
36
|
(quantity * ratios.fetch(strength)).round(2)
|
33
|
-
rescue KeyError
|
34
|
-
"I don't know how to make '#{strength}' strength coffee, sorry. Available options are #{ratios.keys.join(', ')}"
|
35
37
|
end
|
36
38
|
|
39
|
+
def instructions
|
40
|
+
"To make #{quantity} cups of of #{strength} coffee, use #{amount} #{units.abbreviation} of grounds."
|
41
|
+
rescue NegativeNumberError, WrongStrengthError => e
|
42
|
+
print e.message
|
43
|
+
end
|
37
44
|
end
|
38
|
-
end
|
45
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module PotOfCoffee
|
2
|
+
class CoffeeError < StandardError
|
3
|
+
end
|
4
|
+
|
5
|
+
class NegativeNumberError < CoffeeError
|
6
|
+
def message
|
7
|
+
'Sorry: coffee quantity must be greater than 0'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class WrongStrengthError < CoffeeError
|
12
|
+
def message
|
13
|
+
'Sorry: coffee strength must be strong, normal, or weak'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module PotOfCoffee
|
2
|
+
class Unit
|
3
|
+
def name; raise NotImplementedError; end
|
4
|
+
def abbreviation; raise NotImplementedError; end
|
5
|
+
def table; raise NotImplementedError; end
|
6
|
+
end
|
7
|
+
|
8
|
+
class ImperialUnit < Unit
|
9
|
+
def name
|
10
|
+
'tablespoon'
|
11
|
+
end
|
12
|
+
|
13
|
+
def abbreviation
|
14
|
+
'tbsp'
|
15
|
+
end
|
16
|
+
|
17
|
+
def table
|
18
|
+
{
|
19
|
+
weak: 0.5,
|
20
|
+
normal: 0.675,
|
21
|
+
strong: 0.875,
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class MetricUnit < Unit
|
27
|
+
def name
|
28
|
+
'gram'
|
29
|
+
end
|
30
|
+
|
31
|
+
def abbreviation
|
32
|
+
'g'
|
33
|
+
end
|
34
|
+
|
35
|
+
def table
|
36
|
+
{
|
37
|
+
weak: 12,
|
38
|
+
normal: 20,
|
39
|
+
strong: 28,
|
40
|
+
}
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/test/helper.rb
ADDED
data/test/test_brewer.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestBrewer < Minitest::Test
|
4
|
+
def test_gives_instructions_with_no_arguments
|
5
|
+
@pot_of_coffee = PotOfCoffee::Brewer.new
|
6
|
+
assert_equal @pot_of_coffee.instructions, "To make 12 cups of of normal coffee, use 8.1 tbsp of grounds."
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_has_correct_properties_when_created_with_no_arguments
|
10
|
+
@pot_of_coffee = PotOfCoffee::Brewer.new
|
11
|
+
assert_equal @pot_of_coffee.quantity, 12
|
12
|
+
assert_equal @pot_of_coffee.strength, :normal
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_quantity_must_be_positive
|
16
|
+
@pot_of_coffee = PotOfCoffee::Brewer.new(quantity: -1)
|
17
|
+
assert_raises PotOfCoffee::NegativeNumberError do
|
18
|
+
@pot_of_coffee.quantity
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_strength_must_be_strong_normal_or_weak
|
23
|
+
@pot_of_coffee = PotOfCoffee::Brewer.new(quantity: rand(24), strength: :ultra)
|
24
|
+
assert_raises PotOfCoffee::WrongStrengthError do
|
25
|
+
@pot_of_coffee.strength
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/test/test_units.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'whatever_unit'
|
3
|
+
|
4
|
+
class TestUnits < Minitest::Test
|
5
|
+
def test_can_use_metric_units
|
6
|
+
@pot_of_coffee = PotOfCoffee::Brewer.new(units: PotOfCoffee::MetricUnit.new)
|
7
|
+
assert_equal @pot_of_coffee.instructions, 'To make 12 cups of of normal coffee, use 240.0 g of grounds.'
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_can_provide_your_own_units
|
11
|
+
@pot_of_coffee = PotOfCoffee::Brewer.new(units: WhateverUnit.new)
|
12
|
+
assert_equal @pot_of_coffee.instructions, 'To make 12 cups of of normal coffee, use 3349.2 gb of grounds.'
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_units_must_respond_to_correct_things
|
16
|
+
@whatever_unit = WhateverUnit.new
|
17
|
+
assert_respond_to @whatever_unit, :name
|
18
|
+
assert_respond_to @whatever_unit, :abbreviation
|
19
|
+
assert_respond_to @whatever_unit, :table
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pot_of_coffee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dave Shaffer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -68,9 +68,14 @@ files:
|
|
68
68
|
- Rakefile
|
69
69
|
- bin/pot_of_coffee
|
70
70
|
- lib/pot_of_coffee.rb
|
71
|
+
- lib/pot_of_coffee/errors.rb
|
72
|
+
- lib/pot_of_coffee/units.rb
|
71
73
|
- lib/pot_of_coffee/version.rb
|
72
74
|
- pot_of_coffee.gemspec
|
73
|
-
- test/
|
75
|
+
- test/helper.rb
|
76
|
+
- test/test_brewer.rb
|
77
|
+
- test/test_units.rb
|
78
|
+
- test/whatever_unit.rb
|
74
79
|
homepage: http://daveshaffer.co/coffee
|
75
80
|
licenses:
|
76
81
|
- MIT
|
@@ -91,9 +96,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
91
96
|
version: '0'
|
92
97
|
requirements: []
|
93
98
|
rubyforge_project:
|
94
|
-
rubygems_version: 2.4.
|
99
|
+
rubygems_version: 2.4.5.1
|
95
100
|
signing_key:
|
96
101
|
specification_version: 4
|
97
102
|
summary: Coffee brew strength calculator
|
98
103
|
test_files:
|
99
|
-
- test/
|
104
|
+
- test/helper.rb
|
105
|
+
- test/test_brewer.rb
|
106
|
+
- test/test_units.rb
|
107
|
+
- test/whatever_unit.rb
|
data/test/test_pot_of_coffee.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'minitest/autorun' # Because testing should happen
|
2
|
-
require 'minitest/pride' # Because testing should be fabulous
|
3
|
-
require 'pot_of_coffee'
|
4
|
-
|
5
|
-
class PotOfCoffeeTest < Minitest::Test
|
6
|
-
def setup
|
7
|
-
options = { quantity: rand(24), strength: PotOfCoffee::Brewer.ratios.keys.sample }
|
8
|
-
@pot_of_coffee = PotOfCoffee::Brewer.new(options)
|
9
|
-
end
|
10
|
-
|
11
|
-
def test_ratios
|
12
|
-
assert_kind_of Hash, PotOfCoffee::Brewer.ratios
|
13
|
-
end
|
14
|
-
|
15
|
-
def test_strength
|
16
|
-
assert_includes @pot_of_coffee.ratios, @pot_of_coffee.strength
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_quantity
|
20
|
-
assert_kind_of Integer, @pot_of_coffee.quantity
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_scoops
|
24
|
-
assert_kind_of Float, @pot_of_coffee.scoops
|
25
|
-
end
|
26
|
-
end
|