punky_brewster 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6e187dcc2018f36ac897f7811ec2a7b7c0f050f6
4
- data.tar.gz: c05be65d61dd21aa6429ad4dcb318c4b843fe41a
3
+ metadata.gz: e8a9177571a0dcd323267ab86c302822074fad2f
4
+ data.tar.gz: 47417879ff9929663329a0833e93a2b240b6c3b6
5
5
  SHA512:
6
- metadata.gz: 85e4ba0f90358f7911a59a2243d075476288d2967a2d7b5a0d9efe4a7a90c0ed39c98902ebb6bb3ff70227f25e505b7b2e4ad460ae4a71599dc4bfcb2e5da2fc
7
- data.tar.gz: dbbbe17d5cf17ec03f79b81a8b1ffe5b87d275df07f02f36f65acce8f36987f139735bc7f4f43ea459182f619cfdc70c436dd8402f3962e07c6d6a661580c726
6
+ metadata.gz: 440fe7236b3791f5c252ade1d65aebdbde2e5688a907c564a3dcd5c8e9fc07e148eee268f6974d0716252170456f0bdba25bcb5f60137b3e4bfb0c79834c8a9b
7
+ data.tar.gz: 59b547292fbfb7b3f619d7e2e85d1f02d739baf4dcc09ddae74c852d14cc478ace63e095ac019ab6b48a4b65bfe632c3f558274b20e2b9a03fb47c3b29935e58
data/README.md CHANGED
@@ -8,6 +8,8 @@ What's on tap?
8
8
 
9
9
  ## Command line tool
10
10
 
11
+ List beers:
12
+
11
13
  $ punky_brewster
12
14
  8  WIRED  HOPWIRED $16.00/L 7.3%
13
15
  ALL  CHIEFS , NO  INDIANS $14.00/L 6.0%
@@ -15,19 +17,24 @@ What's on tap?
15
17
  DALES  ESB  (EXTRA  SPECIAL  BITTER) $14.00/L 5.6%
16
18
  ...
17
19
 
20
+ Sort beers (can be sorted by `price`, `abv`, or `abv_per_dollar`):
21
+
18
22
  $ punky_brewster --sort price
19
23
  CROUCHER LOW RIDER IPA $12.00/L 2.7%
20
24
  TUATARA ITI AMERICAN PALE ALE $12.50/L 5.8%
21
25
  MUSSEL INN CAPTAIN COOKER $12.50/L 5.7%
22
26
  VALKYRIE FRIGG RED PILSENER $13.50/L 5.0%
27
+ ...
23
28
 
29
+ List beers sorted by most ABV per dollar:
30
+
31
+ $ punky_brewster --holla-for-dollar
32
+ MIKE'S VANILLA COFFEE PORTER $16.00/L 8.0% 0.50%/$
33
+ RAINDOGS OXYMORON BLACK IPA $14.50/L 7.0% 0.48%/$
34
+ GOLDEN EAGLE BIG YANK $16.00/L 7.5% 0.47%/$
35
+ MUSSEL INN CAPTAIN COOKER $12.50/L 5.7% 0.46%/$
36
+ ...
24
37
 
25
- $ punky_brewster --sort abv
26
- CROUCHER LOW RIDER IPA $12.00/L 2.7%
27
- RENAISSANCE PARADOX PILSENER $14.00/L 4.0%
28
- GARAGE PROJECT HAPI DAZE $14.00/L 4.2%
29
- GOLDEN ALE FRESH HOP $16.00/L 4.5%
30
- INVERCARGILL PITCHBLACK STOUT $13.50/L 4.5%
31
38
 
32
39
  ## Ruby Library
33
40
 
@@ -45,18 +52,6 @@ require 'punky_brewster/server'
45
52
  run PunkyBrewster::Server
46
53
  ```
47
54
 
48
- ```http
49
- $ curl -i localhost:9292
50
-
51
- HTTP/1.1 200 OK
52
- Content-Type: application/json
53
- Transfer-Encoding: chunked
54
- Connection: close
55
- Server: thin
56
-
57
- [{"name":"EPIC PALE ALE","price":14.0,"abv":5.4},{"name":"8 WIRED HOPWIRED","price":16.0,"abv":7.3},{"name":"MUSSEL INN CAPTAIN COOKER","price":12.5,"abv":5.7},{"name":"FUNK ESTATE NZPA FRESH HOP","price":16.0,"abv":5.5},{"name":"INVERCARGILL PITCHBLACK STOUT","price":13.5,"abv":4.5},{"name":"GOLDEN EAGLE BIG YANK","price":16.0,"abv":7.5},{"name":"RENAISSANCE PARADOX PILSENER","price":14.0,"abv":4.0}]
58
- ```
59
-
60
55
  Mount alongside other Rack apps (Rails, Sinatra, etc.):
61
56
 
62
57
  ```ruby
@@ -73,6 +68,20 @@ use Rack::JSONP
73
68
  run PunkyBrewster::Server
74
69
  ```
75
70
 
71
+ Response:
72
+
73
+ ```json
74
+ [
75
+ {
76
+ "name": "EPIC PALE ALE",
77
+ "price": 14.0,
78
+ "abv": 5.4,
79
+ "image_url": "http://www.punkybrewster.co.nz/uploads/..."
80
+ },
81
+ ...
82
+ ]
83
+ ```
84
+
76
85
  ## Development
77
86
 
78
87
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -0,0 +1,7 @@
1
+ module PunkyBrewster
2
+ class Beer < Struct.new(:name, :price, :abv, :image_url)
3
+ def abv_per_dollar
4
+ (abv.to_f / price).round(2)
5
+ end
6
+ end
7
+ end
@@ -2,6 +2,8 @@ require "nokogiri"
2
2
 
3
3
  module PunkyBrewster
4
4
  class BeerListResponse
5
+ IMAGE_URL_BASE = 'http://www.punkybrewster.co.nz'
6
+
5
7
  def initialize(raw_response)
6
8
  @raw_response = raw_response
7
9
  end
@@ -21,6 +23,8 @@ module PunkyBrewster
21
23
  beer_list << Beer.new
22
24
  # Includes non-breaking spaces
23
25
  beer_list.last.name = node.text.upcase.gsub(/[\s\u00A0]+/, ' ')
26
+ elsif node.name == 'img'
27
+ beer_list.last.image_url = IMAGE_URL_BASE + node[:src]
24
28
  elsif price = node.text.scan(/^\$(\d+\.\d+)\/L$/).flatten.first
25
29
  beer_list.last.price = price.to_f
26
30
  elsif abv = node.text.scan(/(\d+\.\d+)\s*%/).flatten.first
@@ -11,13 +11,24 @@ module PunkyBrewster
11
11
  end
12
12
 
13
13
  desc "list", "Show current beer list"
14
- method_option :sort, default: "name", enum: %w( name price abv )
14
+ method_option :sort, default: "name", enum: %w( name price abv abv_per_dollar )
15
+ method_option :cheapskate, type: :boolean, default: false
16
+ method_option :holla_for_dollar, type: :boolean, default: false
15
17
  def list
18
+ show_abv_per_dollar = options[:holla_for_dollar] || options[:cheapskate]
19
+
16
20
  beers = BeerListRequest.new.beers
17
- sorted = beers.sort_by { |beer| beer.send(options[:sort]) }
21
+
22
+ if options[:holla_for_dollar]
23
+ sorted = beers.sort { |a, b| b.abv_per_dollar <=> a.abv_per_dollar }
24
+ else
25
+ sorted = beers.sort_by { |beer| beer.send(options[:sort]) }
26
+ end
18
27
 
19
28
  rows = sorted.map do |beer|
20
- [beer.name, "$%0.2f/L" % beer.price, "%0.1f%" % beer.abv]
29
+ row = [beer.name, "$%0.2f/L" % beer.price, "%0.1f%" % beer.abv]
30
+ row << ("%0.2f%%/$" % beer.abv_per_dollar) if show_abv_per_dollar
31
+ row
21
32
  end
22
33
 
23
34
  print_table rows
@@ -1,3 +1,3 @@
1
1
  module PunkyBrewster
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -1,7 +1,4 @@
1
1
  require "punky_brewster/version"
2
+ require "punky_brewster/beer"
2
3
  require "punky_brewster/beer_list_request"
3
4
  require "punky_brewster/beer_list_response"
4
-
5
- module PunkyBrewster
6
- Beer = Struct.new(:name, :price, :abv)
7
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: punky_brewster
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pete Nicholls
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-21 00:00:00.000000000 Z
11
+ date: 2015-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -155,6 +155,7 @@ files:
155
155
  - bin/setup
156
156
  - exe/punky_brewster
157
157
  - lib/punky_brewster.rb
158
+ - lib/punky_brewster/beer.rb
158
159
  - lib/punky_brewster/beer_list_request.rb
159
160
  - lib/punky_brewster/beer_list_response.rb
160
161
  - lib/punky_brewster/cli.rb