Skip to content

Commit

Permalink
add new page finders base class for a few api endpoints to use.
Browse files Browse the repository at this point in the history
  • Loading branch information
matthewshafer committed Jan 9, 2015
1 parent 984bf69 commit 642777f
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 113 deletions.
45 changes: 15 additions & 30 deletions lib/tankard/api/adjuncts.rb
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
require 'hashie'
require 'tankard/api/utils/page_finders'
require 'tankard/api/base/page_finders'

module Tankard
module Api
# Access for the /adjuncts route on brewerydb
#
# @see http://www.brewerydb.com/developers/docs-endpoint/adjunct_index
# @author Matthew Shafer
class Adjuncts
include Tankard::Api::Utils::PageFinders
class Adjuncts < Tankard::Api::Base::PageFinders
# @!parse include ::Enumerable

# Initialize a new object
# @!method initialize(request, options = {})
# Initialize a new object
#
# @param request [Tankard::Request]
# @param options [Hash]
# @return [Tankard::Api::Adjuncts]
def initialize(request, options = {})
@http_client = request
@http_request_parameters = Hashie::Mash.new(options)
end
# @param request [Tankard::Request]
# @param options [Hash]
# @return [Tankard::Api::Adjuncts]

# @!method each(&block)
# Calls the given block once for each adjunct
Expand All @@ -30,31 +26,20 @@ def initialize(request, options = {})
# @raise [Tankard::Error::HttpError] when a status other than 200 or 401 is returned
# @raise [Tankard::Error::LoadError] when multi json is unable to decode json

# page number to query
# @!method page(number)
# page number to query
#
# @param beer_id [String]
# @return [self] returns itself
def page(number)
@http_request_parameters.p = number
self
end
# @param beer_id [String]
# @return [self] returns itself

# Additional parameters to send with the request
# @!method params(options = {})
# Additional parameters to send with the request
#
# @param options [Hash]
# @return [self] returns itself
def params(options = {})
options.each_pair do |key, value|
@http_request_parameters[key] = value
end
self
end
# @param options [Hash]
# @return [self] returns itself

private

attr_reader :http_client
attr_reader :http_request_parameters

def http_request_uri
'adjuncts'
end
Expand Down
36 changes: 36 additions & 0 deletions lib/tankard/api/base/page_finders.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
require 'hashie'
require 'tankard/api/utils/page_finders'

module Tankard
module Api
module Base
# Base class for routes that can look up data across pages
#
# @author Matthew Shafer
class PageFinders
include Tankard::Api::Utils::PageFinders

def initialize(request, options = {})
@http_client = request
@http_request_parameters = Hashie::Mash.new(options)
end

def page(number)
@http_request_parameters.p = number
self
end

def params(options = {})
options.each_pair do |key, value|
@http_request_parameters[key] = value
end
self
end

private

attr_reader :http_client, :http_request_parameters
end
end
end
end
49 changes: 19 additions & 30 deletions lib/tankard/api/beers.rb
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
require 'hashie'
require 'tankard/api/utils/page_finders'
require 'tankard/api/base/page_finders'

module Tankard
module Api
# Access for the /beers route on brewerydb
#
# @see http://www.brewerydb.com/developers/docs-endpoint/beer_index
# @author Matthew Shafer
class Beers
include Tankard::Api::Utils::PageFinders
class Beers < Tankard::Api::Base::PageFinders
# @!parse include ::Enumerable

# Initializes a new object
# @!method initialize(request, options = {})
# Initializes a new object
#
# @param request [Tankard::Request]
# @param options [Hash]
# @return [Tankard::Api::Beers]
def initialize(request, options = {})
@http_client = request
@http_request_parameters = Hashie::Mash.new(options)
end
# @param request [Tankard::Request]
# @param options [Hash]
# @return [Tankard::Api::Beers]

# @!method each(&block)
# Calls the given block once for each beer
Expand Down Expand Up @@ -48,36 +44,29 @@ def abv(beer_abv)
self
end

# Beer ibu to query with
#
# @param beer_ibu [String]
# @return [self] returns itself
def ibu(beer_ibu)
@http_request_parameters.ibu = beer_ibu
self
end

# Page number to request
# @!method page(number)
# Page number to request
#
# @param number [Integer]
# @return [self] returns itself
def page(number)
@http_request_parameters.p = number
self
end
# @param number [Integer]
# @return [self] returns itself

# Additional parameters to send with the request
# @!method params(options = {})
# Additional parameters to send with the request
#
# @param options [Hash]
# @return [self] returns itself
def params(options = {})
options.each_pair do |key, value|
@http_request_parameters[key] = value
end
self
end
# @param options [Hash]
# @return [self] returns itself

private

attr_reader :http_client
attr_reader :http_request_parameters

def http_request_uri
'beers'
end
Expand Down
46 changes: 15 additions & 31 deletions lib/tankard/api/search.rb
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
require 'hashie'
require 'tankard/api/utils/page_finders'
require 'tankard/api/base/page_finders'

module Tankard
module Api
# Access for the /search route on brewerydb
#
# @see http://www.brewerydb.com/developers/docs-endpoint/search_index
# @author Matthew Shafer
class Search
include ::Enumerable
include Tankard::Api::Utils::PageFinders
class Search < Tankard::Api::Base::PageFinders
# @!parse include ::Enumerable

# Initializes a new object
# @!method initialize(request, options = {})
# Initializes a new object
#
# @param request [Tankard::Request]
# @param options [Hash]
# @return [Tankard::Api::Search]
def initialize(request, options = {})
@http_client = request
@http_request_parameters = Hashie::Mash.new(options)
end
# @param request [Tankard::Request]
# @param options [Hash]
# @return [Tankard::Api::Search]

# Calls the given block once for each result
#
Expand All @@ -44,25 +39,17 @@ def query(search_query)
self
end

# Page number to request
# @!method page(number)
# Page number to request
#
# @param number [Integer]
# @return [self] returns itself
def page(number)
@http_request_parameters.p = number
self
end
# @param number [Integer]
# @return [self] returns itself

# Additional parameters to send with the request
# @!method params(options = {})
# Additional parameters to send with the request
#
# @param options [Hash]
# @return [self] returns itself
def params(options = {})
options.each_pair do |key, value|
@http_request_parameters[key] = value
end
self
end
# @param options [Hash]
# @return [self] returns itself

# Type of search to perform
#
Expand Down Expand Up @@ -110,9 +97,6 @@ def geo_point(latitude, longitude)

private

attr_reader :http_client
attr_reader :http_request_parameters

def http_request_uri
@request_endpoint = "/#{@http_request_parameters.delete(:endpoint)}" if @http_request_parameters.endpoint?
endpoint = 'search'
Expand Down
42 changes: 20 additions & 22 deletions lib/tankard/api/yeasts.rb
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
require 'hashie'
require 'tankard/api/utils/page_finders'
require 'tankard/api/base/page_finders'

module Tankard
module Api
# Access for the /yeasts route on brewerydb
#
# @see http://www.brewerydb.com/developers/docs-endpoint/yeast_index
# @author Matthew Shafer
class Yeasts
include Tankard::Api::Utils::PageFinders
class Yeasts < Tankard::Api::Base::PageFinders
# @!parse include ::Enumerable

# Initializes a new object
# @!method initialize(request, options = {})
# Initializes a new object
#
# @param request [Tankard::Request]
# @param options [Hash]
# @return [Tankard::Api::Yeasts]
def initialize(request, options = {})
@http_client = request
@http_request_parameters = Hashie::Mash.new(options)
@http_request_uri = 'yeasts'
end
# @param request [Tankard::Request]
# @param options [Hash]
# @return [Tankard::Api::Yeasts]

# @!method each(&block)
# Calls the given block once for each yeast
Expand All @@ -31,20 +26,23 @@ def initialize(request, options = {})
# @raise [Tankard::Error::HttpError] when a status other than 200 or 401 is returned
# @raise [Tankard::Error::LoadError] when multi json is unable to decode json

# Specific page to request
# @!method page(number)
# Specific page to request
#
# @param number [Integer]
# @return [self] returns itself
def page(number)
@http_request_parameters[:p] = number
self
end
# @param number [Integer]
# @return [self] returns itself

# @!method params(options = {})
# Additional parameters to send with the request
#
# @param options [Hash]
# @return [self] returns itself

private

attr_reader :http_client
attr_reader :http_request_parameters
attr_reader :http_request_uri
def http_request_uri
'yeasts'
end

end
end
Expand Down

0 comments on commit 642777f

Please sign in to comment.