tankard 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 +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
|
[](https://gemnasium.com/matthewshafer/tankard)
|
4
4
|
[](https://codeclimate.com/github/matthewshafer/tankard)
|
5
5
|
[](https://coveralls.io/r/matthewshafer/tankard)
|
6
|
+
[](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
|