tankard 0.0.1 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/README.md +49 -2
- data/lib/tankard/api/beer.rb +77 -28
- data/lib/tankard/api/beers.rb +45 -31
- data/lib/tankard/api/search.rb +132 -0
- data/lib/tankard/api/style.rb +80 -0
- data/lib/tankard/api/styles.rb +48 -0
- data/lib/tankard/api/utils/find.rb +35 -0
- data/lib/tankard/api/utils/page_finders.rb +67 -0
- data/lib/tankard/client.rb +15 -0
- data/lib/tankard/configuration.rb +5 -6
- data/lib/tankard/error.rb +1 -1
- data/lib/tankard/version.rb +1 -1
- data/lib/tankard.rb +4 -0
- data/spec/shared_examples_for_find.rb +30 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/tankard/api/beer_spec.rb +81 -57
- data/spec/tankard/api/beers_spec.rb +24 -60
- data/spec/tankard/api/search_spec.rb +232 -0
- data/spec/tankard/api/style_spec.rb +61 -0
- data/spec/tankard/api/styles_spec.rb +18 -0
- data/spec/tankard/api/utils/find_spec.rb +27 -0
- data/spec/tankard/api/utils/page_finders_spec.rb +116 -0
- data/spec/tankard/client_spec.rb +59 -0
- data/tankard.gemspec +1 -1
- metadata +20 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: caf2e4adbd1c27dad9227737cec3b9ccb7947d4d
|
4
|
+
data.tar.gz: ce3dbc3b145c38afdcb37c80472ac042d121269d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4734b1c05ec5529b9af9105c70308aacf74a5cdd04b76e570c461beb2775ff2a430ec1a3947f64b37d7a065bae75500e91b13e17d42aa233276080d4ff597b72
|
7
|
+
data.tar.gz: 1b27b4d244bb37e09453d9908d8fd91667244f47a5b22de60fe9f36ca89d68aa4128f127795574596811f960aa30740b23dae2b99aea8e7d40f4eb9c360a1575
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## v0.1.0 (05/15/2013)
|
2
|
+
* Add params method to beers. Allows passing additional parameters in an additional way.
|
3
|
+
* Add params method to beer. Allows passing additional parameters in an additional way.
|
4
|
+
* Add styles method & class. Allows querying of the /styles route
|
5
|
+
* Add style method & class. Allows querying of the /style/:id route
|
6
|
+
* Add search method & class. Allows querying of the /search route
|
7
|
+
* Add documentation for beer
|
8
|
+
* Add documentation for beers
|
9
|
+
* Add documentation for search
|
10
|
+
* Add documentation for style
|
11
|
+
* Add documentation for styles
|
12
|
+
|
1
13
|
## v0.0.1
|
2
14
|
* Support for querying a beer
|
3
15
|
* Support for querying a list of beers
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
[![Dependency Status](https://gemnasium.com/matthewshafer/tankard.png)](https://gemnasium.com/matthewshafer/tankard)
|
4
4
|
[![Code Climate](https://codeclimate.com/github/matthewshafer/tankard.png)](https://codeclimate.com/github/matthewshafer/tankard)
|
5
5
|
[![Coverage Status](https://coveralls.io/repos/matthewshafer/tankard/badge.png?branch=master)](https://coveralls.io/r/matthewshafer/tankard)
|
6
|
+
[![Gem Version](https://badge.fury.io/rb/tankard.png)](http://rubygems.org/gems/tankard)
|
6
7
|
|
7
8
|
Allows easy quering of the BreweryDB Api
|
8
9
|
|
@@ -14,11 +15,18 @@ I've also been pretty interested in Jruby as of late and wanted to make Tankard
|
|
14
15
|
|
15
16
|
## Installation
|
16
17
|
|
17
|
-
|
18
|
+
```ruby
|
19
|
+
gem install "tankard"
|
20
|
+
```
|
21
|
+
|
22
|
+
or add it to your gemfile
|
18
23
|
|
19
24
|
## Documentation
|
20
25
|
|
21
|
-
|
26
|
+
Everytime a commit is pushed to github the documentation regenerates.
|
27
|
+
You can find this at http://rubydoc.info/github/matthewshafer/tankard/frames
|
28
|
+
|
29
|
+
If you visit rubygems you can find the documentation for a specific gem release.
|
22
30
|
|
23
31
|
## Usage
|
24
32
|
|
@@ -42,6 +50,45 @@ Tankard.beer.id("some_id").breweries.each { |x| p x}
|
|
42
50
|
beer = Tankard.beer.find(["first_id", "second_id"])
|
43
51
|
```
|
44
52
|
|
53
|
+
Alternatively you can send parameters to the request in two ways. Here are examples:
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
Tankard.beer(id: "some_id", endpoint: "breweries", anotherParam: "something").each { |x| p x }
|
57
|
+
|
58
|
+
Tankard.beer.id("some_id").breweries.params(anotherParam: "something").each { |x| p x }
|
59
|
+
```
|
60
|
+
|
61
|
+
### Beers
|
62
|
+
|
63
|
+
This would return an array with all beers greater than 10% (to_a comes from enumerable in this case)
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
Tankard.beers.params(abv: "+10").to_a
|
67
|
+
```
|
68
|
+
### Search
|
69
|
+
|
70
|
+
Here is how we could search for everything that matches "stone".
|
71
|
+
We would get results that contain more than just beer (EX I would probably get a result for Stone Brewing)
|
72
|
+
|
73
|
+
```ruby
|
74
|
+
Tankard.search.query("stone").each { |x| p x }
|
75
|
+
```
|
76
|
+
### Style
|
77
|
+
|
78
|
+
This works similiar to Beer, it just has less options
|
79
|
+
|
80
|
+
```ruby
|
81
|
+
Tankard.style.id("some_id").each { |x| p x }
|
82
|
+
```
|
83
|
+
|
84
|
+
### Styles
|
85
|
+
|
86
|
+
Styles don't have any options so if I would like an array with all styles I can do something like
|
87
|
+
|
88
|
+
```ruby
|
89
|
+
Tankard.styles.to_a
|
90
|
+
```
|
91
|
+
|
45
92
|
## Contributing
|
46
93
|
|
47
94
|
### Issues
|
data/lib/tankard/api/beer.rb
CHANGED
@@ -1,87 +1,136 @@
|
|
1
1
|
require 'hashie'
|
2
2
|
require 'tankard/api/request/get'
|
3
|
+
require 'tankard/api/utils/page_finders'
|
4
|
+
require 'tankard/api/utils/find'
|
3
5
|
|
4
6
|
module Tankard
|
5
7
|
module Api
|
8
|
+
# Access for the /beer route on brewerydb
|
9
|
+
#
|
10
|
+
# @see http://www.brewerydb.com/developers/docs-endpoint/beer_index
|
11
|
+
# @author Matthew Shafer
|
6
12
|
class Beer
|
7
|
-
include ::Enumerable
|
8
13
|
include Tankard::Api::Request::Get
|
9
|
-
|
14
|
+
include Tankard::Api::Utils::PageFinders
|
15
|
+
include Tankard::Api::Utils::Find
|
16
|
+
# @!parse include ::Enumerable
|
17
|
+
|
18
|
+
# Initialize a new object
|
19
|
+
#
|
20
|
+
# @param request [Tankard::Request]
|
21
|
+
# @param options [Hash]
|
22
|
+
# @return [Tankard::Api::Beer]
|
10
23
|
def initialize(request, options={})
|
11
24
|
@request = request
|
12
25
|
@options = Hashie::Mash.new(options)
|
13
26
|
end
|
14
27
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
28
|
+
# @!method find(id_or_array, options={})
|
29
|
+
# Find a single or multiple beers by their id
|
30
|
+
#
|
31
|
+
# @param id_or_array [String, Array]
|
32
|
+
# @param options [Hash]
|
33
|
+
# @return [Hash, Array] if a string with a beer id is passed to find then the hash of the beer is returned.
|
34
|
+
# if an array is passed to find an array containing hashes with each beer is returned.
|
35
|
+
# if a beer is not found nothing for that beer is returned.
|
36
|
+
|
37
|
+
# @!method each(&block)
|
38
|
+
# Calls the given block once for each beer
|
39
|
+
#
|
40
|
+
# @yieldparam [Hash] hash containing individual beer information
|
41
|
+
# @raise [Tankard::Error::MissingParameter] when the id is not set
|
42
|
+
# @raise [Tankard::Error::ApiKeyUnauthorized] when an api key is not valid
|
43
|
+
# @raise [Tankard::Error::InvalidResponse] when no data is returned fron the api
|
44
|
+
# @raise [Tankard::Error::HttpError] when a status other than 200 or 401 is returned
|
45
|
+
# @raise [Tankard::Error::LoadError] when multi json is unable to decode json
|
46
|
+
|
47
|
+
# BeerID to query
|
48
|
+
#
|
49
|
+
# @param beer_id [String]
|
50
|
+
# @return [self] returns itself
|
29
51
|
def id(beer_id)
|
30
52
|
@options.id = beer_id
|
31
53
|
self
|
32
54
|
end
|
33
55
|
|
56
|
+
# Sets the request to beer/:id/breweries
|
57
|
+
#
|
58
|
+
# @return [self] returns itself
|
34
59
|
def breweries
|
35
60
|
@options.endpoint = "breweries"
|
36
61
|
self
|
37
62
|
end
|
38
63
|
|
64
|
+
# Sets the request to beer/:id/events
|
65
|
+
#
|
66
|
+
# @return [self] returns itself
|
39
67
|
def events
|
40
68
|
@options.endpoint = "events"
|
41
69
|
self
|
42
70
|
end
|
43
71
|
|
72
|
+
# Sets the request to beer/:id/ingredients
|
73
|
+
#
|
74
|
+
# @return [self] returns itself
|
44
75
|
def ingredients
|
45
76
|
@options.endpoint = "ingredients"
|
46
77
|
self
|
47
78
|
end
|
48
79
|
|
80
|
+
# Sets the request to beer/:id/socialaccounts
|
81
|
+
#
|
82
|
+
# @return [self] returns itself
|
49
83
|
def social_accounts
|
50
84
|
@options.endpoint = "socialaccounts"
|
51
85
|
self
|
52
86
|
end
|
53
87
|
|
88
|
+
# Sets the request to beer/:id/variations
|
89
|
+
#
|
90
|
+
# @return [self] returns itself
|
54
91
|
def variations
|
55
92
|
@options.endpoint = "variations"
|
56
93
|
self
|
57
94
|
end
|
58
95
|
|
96
|
+
# Additional parameters to send with the request
|
97
|
+
#
|
98
|
+
# @param options [Hash]
|
99
|
+
# @return [self] returns itself
|
100
|
+
def params(options={})
|
101
|
+
options.each_pair do |key,value|
|
102
|
+
@options[key] = value
|
103
|
+
end
|
104
|
+
self
|
105
|
+
end
|
106
|
+
|
59
107
|
private
|
60
108
|
|
61
|
-
def
|
62
|
-
endpoint = "
|
109
|
+
def http_request_uri
|
110
|
+
endpoint = "#{route}/#{raise_if_no_id_in_options}"
|
63
111
|
|
64
112
|
if @options.endpoint?
|
65
113
|
endpoint += "/#{@options.delete(:endpoint)}"
|
66
114
|
end
|
67
115
|
|
68
|
-
|
116
|
+
endpoint
|
69
117
|
end
|
70
118
|
|
71
119
|
def raise_if_no_id_in_options
|
72
|
-
raise Tankard::Error::
|
120
|
+
raise Tankard::Error::MissingParameter, "No Beer ID is set" unless @options.id?
|
73
121
|
@options.delete(:id)
|
74
122
|
end
|
75
123
|
|
76
|
-
def
|
77
|
-
|
78
|
-
|
124
|
+
def route
|
125
|
+
"beer"
|
126
|
+
end
|
79
127
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
128
|
+
def http_client
|
129
|
+
@request
|
130
|
+
end
|
131
|
+
|
132
|
+
def http_request_parameters
|
133
|
+
@options
|
85
134
|
end
|
86
135
|
end
|
87
136
|
end
|
data/lib/tankard/api/beers.rb
CHANGED
@@ -1,64 +1,78 @@
|
|
1
1
|
require 'hashie'
|
2
2
|
require 'tankard/api/request/get'
|
3
|
+
require 'tankard/api/utils/page_finders'
|
3
4
|
|
4
5
|
module Tankard
|
5
6
|
module Api
|
7
|
+
# Access for the /beers route on brewerydb
|
8
|
+
#
|
9
|
+
# @see http://www.brewerydb.com/developers/docs-endpoint/beer_index
|
10
|
+
# @author Matthew Shafer
|
6
11
|
class Beers
|
7
|
-
include ::Enumerable
|
8
12
|
include Tankard::Api::Request::Get
|
13
|
+
include Tankard::Api::Utils::PageFinders
|
14
|
+
# @!parse include ::Enumerable
|
9
15
|
|
16
|
+
# Initializes a new object
|
17
|
+
#
|
18
|
+
# @param request [Tankard::Request]
|
19
|
+
# @param options [Hash]
|
20
|
+
# @return [Tankard::Api::Beers]
|
10
21
|
def initialize(request, options={})
|
11
22
|
@request = request
|
12
23
|
@options = Hashie::Mash.new(options)
|
13
24
|
end
|
14
25
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
26
|
+
# @!method each(&block)
|
27
|
+
# Calls the given block once for each beer
|
28
|
+
#
|
29
|
+
# @yieldparam [Hash] hash containing individual beer information
|
30
|
+
# @raise [Tankard::Error::ApiKeyUnauthorized] when an api key is not valid
|
31
|
+
# @raise [Tankard::Error::InvalidResponse] when no data is returned fron the api
|
32
|
+
# @raise [Tankard::Error::HttpError] when a status other than 200 or 401 is returned
|
33
|
+
# @raise [Tankard::Error::LoadError] when multi json is unable to decode json
|
22
34
|
|
35
|
+
# Beer name to query with
|
36
|
+
#
|
37
|
+
# @param beer_name [String]
|
38
|
+
# @return [self] returns itself
|
23
39
|
def name(beer_name)
|
24
40
|
@options[:name] = beer_name
|
25
41
|
self
|
26
42
|
end
|
27
43
|
|
44
|
+
# Page number to request
|
45
|
+
#
|
46
|
+
# @param number [Integer]
|
47
|
+
# @return [self] returns itself
|
28
48
|
def page(number)
|
29
49
|
@options[:p] = number
|
30
50
|
self
|
31
51
|
end
|
32
52
|
|
53
|
+
# Additional parameters to send with the request
|
54
|
+
#
|
55
|
+
# @param options [Hash]
|
56
|
+
# @return [self] returns itself
|
57
|
+
def params(options={})
|
58
|
+
options.each_pair do |key,value|
|
59
|
+
@options[key] = value
|
60
|
+
end
|
61
|
+
self
|
62
|
+
end
|
63
|
+
|
33
64
|
private
|
34
65
|
|
35
|
-
def
|
36
|
-
|
66
|
+
def http_request_uri
|
67
|
+
"beers"
|
37
68
|
end
|
38
69
|
|
39
|
-
def
|
40
|
-
|
41
|
-
options = @options.clone
|
42
|
-
begin
|
43
|
-
page += 1
|
44
|
-
options[:p] = page
|
45
|
-
response = get_request(@request, "beers", options)
|
46
|
-
total_pages = response["numberOfPages"].to_i
|
47
|
-
data = response["data"]
|
48
|
-
raise Tankard::Error::InvalidResponse unless data
|
49
|
-
data.each { |beer| block.call(beer) }
|
50
|
-
end while page < total_pages
|
70
|
+
def http_client
|
71
|
+
@request
|
51
72
|
end
|
52
73
|
|
53
|
-
def
|
54
|
-
|
55
|
-
raise Tankard::Error::InvalidResponse unless data
|
56
|
-
|
57
|
-
if data.is_a?(Hash)
|
58
|
-
block.call(data)
|
59
|
-
else
|
60
|
-
data.each { |beer| block.call(beer) }
|
61
|
-
end
|
74
|
+
def http_request_parameters
|
75
|
+
@options
|
62
76
|
end
|
63
77
|
end
|
64
78
|
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
require 'hashie'
|
2
|
+
require 'tankard/api/utils/page_finders'
|
3
|
+
|
4
|
+
module Tankard
|
5
|
+
module Api
|
6
|
+
# Access for the /search route on brewerydb
|
7
|
+
#
|
8
|
+
# @see http://www.brewerydb.com/developers/docs-endpoint/search_index
|
9
|
+
# @author Matthew Shafer
|
10
|
+
class Search
|
11
|
+
include ::Enumerable
|
12
|
+
include Tankard::Api::Utils::PageFinders
|
13
|
+
# @!parse include ::Enumerable
|
14
|
+
|
15
|
+
# Initializes a new object
|
16
|
+
#
|
17
|
+
# @param request [Tankard::Request]
|
18
|
+
# @param options [Hash]
|
19
|
+
# @return [Tankard::Api::Search]
|
20
|
+
def initialize(request, options={})
|
21
|
+
@request = request
|
22
|
+
@options = Hashie::Mash.new(options)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Calls the given block once for each result
|
26
|
+
#
|
27
|
+
# @yieldparam [Hash] hash containing individual beer information
|
28
|
+
# @raise [Tankard::Error::MissingParameter] when the id is not set
|
29
|
+
# @raise [Tankard::Error::ApiKeyUnauthorized] when an api key is not valid
|
30
|
+
# @raise [Tankard::Error::InvalidResponse] when no data is returned fron the api
|
31
|
+
# @raise [Tankard::Error::HttpError] when a status other than 200 or 401 is returned
|
32
|
+
# @raise [Tankard::Error::LoadError] when multi json is unable to decode json
|
33
|
+
def each(&block)
|
34
|
+
raise_if_required_options_not_set
|
35
|
+
super(&block)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Query to search for
|
39
|
+
#
|
40
|
+
# @param search_query [String]
|
41
|
+
# @return [self] returns itself
|
42
|
+
def query(search_query)
|
43
|
+
@options.q = search_query
|
44
|
+
self
|
45
|
+
end
|
46
|
+
|
47
|
+
# Page number to request
|
48
|
+
#
|
49
|
+
# @param number [Integer]
|
50
|
+
# @return [self] returns itself
|
51
|
+
def page(number)
|
52
|
+
@options.p = number
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
# Additional parameters to send with the request
|
57
|
+
#
|
58
|
+
# @param options [Hash]
|
59
|
+
# @return [self] returns itself
|
60
|
+
def params(options={})
|
61
|
+
options.each_pair do |key,value|
|
62
|
+
@options[key] = value
|
63
|
+
end
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
# Type of search to perform
|
68
|
+
#
|
69
|
+
# @param search_type [String]
|
70
|
+
# @return [self] returns itself
|
71
|
+
def type(search_type)
|
72
|
+
@options.type = search_type
|
73
|
+
self
|
74
|
+
end
|
75
|
+
|
76
|
+
# search for a specific upc.
|
77
|
+
# sets the endpoint to upc and passes upc_code as a parameter
|
78
|
+
#
|
79
|
+
# @param upc_code [Integer]
|
80
|
+
# @return [self] returns itself
|
81
|
+
def upc(upc_code)
|
82
|
+
@options.code = upc_code
|
83
|
+
@options.endpoint = "upc"
|
84
|
+
self
|
85
|
+
end
|
86
|
+
|
87
|
+
# search for berweries around a specific point.
|
88
|
+
# sets the endpoint to geo/point and passes lat/lng as parameters
|
89
|
+
#
|
90
|
+
# @param latitude [Float]
|
91
|
+
# @param longitude [Float]
|
92
|
+
# @return [self] returns itself
|
93
|
+
def geo_point(latitude, longitude)
|
94
|
+
@options.lat = latitude
|
95
|
+
@options.lng = longitude
|
96
|
+
@options.endpoint = "geo/point"
|
97
|
+
self
|
98
|
+
end
|
99
|
+
|
100
|
+
private
|
101
|
+
|
102
|
+
def http_request_uri
|
103
|
+
endpoint = "search"
|
104
|
+
|
105
|
+
if @options.endpoint?
|
106
|
+
endpoint += "/#{@options.delete(:endpoint)}"
|
107
|
+
end
|
108
|
+
|
109
|
+
endpoint
|
110
|
+
end
|
111
|
+
|
112
|
+
def http_client
|
113
|
+
@request
|
114
|
+
end
|
115
|
+
|
116
|
+
def http_request_parameters
|
117
|
+
@options
|
118
|
+
end
|
119
|
+
|
120
|
+
def raise_if_required_options_not_set
|
121
|
+
case @options.endpoint
|
122
|
+
when nil
|
123
|
+
raise Tankard::Error::MissingParameter, "No search query set" unless @options.q?
|
124
|
+
when "upc"
|
125
|
+
raise Tankard::Error::MissingParameter, "missing parameter: code" unless @options.code?
|
126
|
+
when "geo/point"
|
127
|
+
raise Tankard::Error::MissingParameter, "missing Parameters: lat, lng" unless @options.lat? && @options.lng?
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'hashie'
|
2
|
+
require 'tankard/api/request/get'
|
3
|
+
require 'tankard/api/utils/page_finders'
|
4
|
+
require 'tankard/api/utils/find'
|
5
|
+
|
6
|
+
module Tankard
|
7
|
+
module Api
|
8
|
+
# Access for the /style route on brewerydb
|
9
|
+
#
|
10
|
+
# @see http://www.brewerydb.com/developers/docs-endpoint/style_index
|
11
|
+
# @author Matthew Shafer
|
12
|
+
class Style
|
13
|
+
include Tankard::Api::Request::Get
|
14
|
+
include Tankard::Api::Utils::PageFinders
|
15
|
+
include Tankard::Api::Utils::Find
|
16
|
+
# @!parse include ::Enumerable
|
17
|
+
|
18
|
+
# Initializes a new object
|
19
|
+
#
|
20
|
+
# @param request [Tankard::Request]
|
21
|
+
# @param options [Hash]
|
22
|
+
# @return [Tankard::Api::Style]
|
23
|
+
def initialize(request, options={})
|
24
|
+
@request = request
|
25
|
+
@options = Hashie::Mash.new(options)
|
26
|
+
end
|
27
|
+
|
28
|
+
# @!method find(id_or_array, options={})
|
29
|
+
# Find a single or multiple styles by their id
|
30
|
+
#
|
31
|
+
# @param id_or_array [String, Array]
|
32
|
+
# @param options [Hash]
|
33
|
+
# @return [Hash, Array] if a string with a style id is passed to find then the hash of the style is returned.
|
34
|
+
# if an array is passed to find an array containing hashes with each style is returned.
|
35
|
+
# if a style is not found nothing for that style is returned.
|
36
|
+
|
37
|
+
# @!method each(&block)
|
38
|
+
# Calls the given block once for each style
|
39
|
+
#
|
40
|
+
# @yieldparam [Hash] hash containing individual style information
|
41
|
+
# @raise [Tankard::Error::MissingParameter] when the id is not set
|
42
|
+
# @raise [Tankard::Error::ApiKeyUnauthorized] when an api key is not valid
|
43
|
+
# @raise [Tankard::Error::InvalidResponse] when no data is returned fron the api
|
44
|
+
# @raise [Tankard::Error::HttpError] when a status other than 200 or 401 is returned
|
45
|
+
# @raise [Tankard::Error::LoadError] when multi json is unable to decode json
|
46
|
+
|
47
|
+
# Style id to query
|
48
|
+
#
|
49
|
+
# @param style_id [String]
|
50
|
+
# @return [self] returns itself
|
51
|
+
def id(style_id)
|
52
|
+
@options.id = style_id
|
53
|
+
self
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def raise_if_no_id_in_options
|
59
|
+
raise Tankard::Error::MissingParameter, "No style id set" unless @options.id?
|
60
|
+
@options.delete(:id)
|
61
|
+
end
|
62
|
+
|
63
|
+
def route
|
64
|
+
"style"
|
65
|
+
end
|
66
|
+
|
67
|
+
def http_request_uri
|
68
|
+
"#{route}/#{raise_if_no_id_in_options}"
|
69
|
+
end
|
70
|
+
|
71
|
+
def http_client
|
72
|
+
@request
|
73
|
+
end
|
74
|
+
|
75
|
+
def http_request_parameters
|
76
|
+
@options
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'hashie'
|
2
|
+
require 'tankard/api/request/get'
|
3
|
+
require 'tankard/api/utils/page_finders'
|
4
|
+
|
5
|
+
module Tankard
|
6
|
+
module Api
|
7
|
+
# Access for the /styles route on brewerydb
|
8
|
+
#
|
9
|
+
# @see http://www.brewerydb.com/developers/docs-endpoint/style_index
|
10
|
+
# @author Matthew Shafer
|
11
|
+
class Styles
|
12
|
+
include Tankard::Api::Request::Get
|
13
|
+
include Tankard::Api::Utils::PageFinders
|
14
|
+
# @!parse include ::Enumerable
|
15
|
+
|
16
|
+
# @!method each(&block)
|
17
|
+
# Calls the given block once for each style
|
18
|
+
#
|
19
|
+
# @yieldparam [Hash] hash containing individual style information
|
20
|
+
# @raise [Tankard::Error::ApiKeyUnauthorized] when an api key is not valid
|
21
|
+
# @raise [Tankard::Error::InvalidResponse] when no data is returned fron the api
|
22
|
+
# @raise [Tankard::Error::HttpError] when a status other than 200 or 401 is returned
|
23
|
+
# @raise [Tankard::Error::LoadError] when multi json is unable to decode json
|
24
|
+
|
25
|
+
# Initializes a new object
|
26
|
+
#
|
27
|
+
# @param request [Tankard::Request]
|
28
|
+
# @return [Tankard::Api::Styles]
|
29
|
+
def initialize(request)
|
30
|
+
@request = request
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def http_request_uri
|
36
|
+
"styles"
|
37
|
+
end
|
38
|
+
|
39
|
+
def http_client
|
40
|
+
@request
|
41
|
+
end
|
42
|
+
|
43
|
+
def http_request_parameters
|
44
|
+
{}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'tankard/api/request/get'
|
2
|
+
|
3
|
+
module Tankard
|
4
|
+
module Api
|
5
|
+
module Utils
|
6
|
+
module Find
|
7
|
+
include Tankard::Api::Request::Get
|
8
|
+
|
9
|
+
def find(id_or_array, options={})
|
10
|
+
options = http_request_parameters.merge!(options)
|
11
|
+
|
12
|
+
if id_or_array.is_a?(Array)
|
13
|
+
id_or_array.map { |id| request_data_with_nil_on_http_error(http_client, "#{route}/#{id}", options) }.compact
|
14
|
+
else
|
15
|
+
request_data_with_nil_on_http_error(http_client, "#{route}/#{id_or_array}", options)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def route
|
22
|
+
raise NoMethodError.new("Must implement and return the base route")
|
23
|
+
end
|
24
|
+
|
25
|
+
def http_client
|
26
|
+
raise NoMethodError.new("Must return the http object to make requests with")
|
27
|
+
end
|
28
|
+
|
29
|
+
def http_request_parameters
|
30
|
+
raise NoMethodError.new("Must return a hash like structure with request parameters")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|