class MTG::QueryBuilder

Attributes

query[RW]
type[RW]

Public Class Methods

new(type) click to toggle source
# File lib/mtg_sdk/query_builder.rb, line 6
def initialize(type)
  @type = type
  @query = {}
end

Public Instance Methods

all() click to toggle source

Get all resources from a query by paging through data

@return [Array<Object>] Array of resources

# File lib/mtg_sdk/query_builder.rb, line 37
def all
  list = []
  page = 1
  fetch_all = true

  if @query.has_key?(:page)
    page = @query[:page]
    fetch_all = false
  end

  while true
    response = RestClient.get(@type.Resource, @query)
    data = response.body[@type.Resource]

    raise ArgumentError, 'Unavailable Service' if unavailable_service?(response)

    if !data.empty?
      data.each {|item| list << @type.new.from_json(item.to_json)}

      if !fetch_all
        break
      else
        where(page: page += 1)
      end
    else
      break
    end
  end

  return list
end
find(id) click to toggle source

Find a single resource by the resource id

@param id [String] the resource id @return [Object] the Type object response

# File lib/mtg_sdk/query_builder.rb, line 24
def find(id)
  response = RestClient.get("#{@type.Resource}/#{id}")
  singular_resource = @type.Resource[0...-1]

  raise ArgumentError, 'Resource not found' if response.body[singular_resource].nil?
  raise ArgumentError, 'Unavailable Service' if unavailable_service?(response)

  type.new.from_json(response.body[singular_resource].to_json)
end
where(args) click to toggle source

Adds a parameter to the hash of query parameters

@param args [Hash] the query parameter @return [QueryBuilder] the QueryBuilder

# File lib/mtg_sdk/query_builder.rb, line 15
def where(args)
  @query.merge!(args)
  self
end

Private Instance Methods

unavailable_service?(response) click to toggle source
# File lib/mtg_sdk/query_builder.rb, line 71
def unavailable_service?(response)
  (500..599).include?(response.status)
end