class GunBroker::User::ItemsAsPagesDelegate

Used to scope {ItemsAsPage} actions by {User}.

Public Class Methods

new(user, options = {}) click to toggle source

@param user [User] A {User} instance to scope item pages by. @param options [Hash] { items_per_page => <number of desired items per page> (Integer) }.

# File lib/gun_broker/user/items_as_pages_delegate.rb, line 12
def initialize(user, options = {})
  max_page_size = GunBroker::API::PAGE_SIZE
  @user = user
  @items_per_page = options.fetch(:items_per_page, max_page_size)

  if @items_per_page > max_page_size
    raise ArgumentError.new("`items_per_page` may not exceed #{max_page_size}")
  end
end

Public Instance Methods

all() click to toggle source

Returns pages for all the the User's items (both selling and not selling). @note {API#get! GET} /Items @return [Array<ItemsAsPage>]

# File lib/gun_broker/user/items_as_pages_delegate.rb, line 25
def all
  # NOTE: this endpoint will not return items that were sold
  @all ||= build_pages_for(:Items, params_for(:sellername))
end
bid_on() click to toggle source

Returns pages for all items the User has bid on. @note {API#get! GET} /ItemsBidOn @return [Array<ItemsAsPage>]

# File lib/gun_broker/user/items_as_pages_delegate.rb, line 33
def bid_on
  @bid_on ||= build_pages_for(:ItemsBidOn)
end
not_won(options = {}) click to toggle source

Returns pages for items the User has bid on, but not won. @note {API#get! GET} /ItemsNotWon @return [Array<ItemsAsPage>]

# File lib/gun_broker/user/items_as_pages_delegate.rb, line 40
def not_won(options = {})
  @not_won ||= build_pages_for(:ItemsNotWon, params_for(:timeframe, options))
end
selling() click to toggle source

Returns pages for items that are currently selling. @note {API#get! GET} /Items @return [Array<ItemsAsPage>]

# File lib/gun_broker/user/items_as_pages_delegate.rb, line 47
def selling
  @selling ||= build_pages_for(:ItemsSelling)
end
sold(options = {}) click to toggle source

Returns pages for items the User has sold. @note {API#get! GET} /ItemsSold @return [Array<ItemsAsPage>]

# File lib/gun_broker/user/items_as_pages_delegate.rb, line 54
def sold(options = {})
  @sold ||= build_pages_for(:ItemsSold, params_for(:timeframe, options))
end
unsold(options = {}) click to toggle source

Returns pages for items that were listed, but not sold. @note {API#get! GET} /ItemsUnsold @return [Array<ItemsAsPage>]

# File lib/gun_broker/user/items_as_pages_delegate.rb, line 61
def unsold(options = {})
  @unsold ||= build_pages_for(:ItemsUnsold, params_for(:timeframe, options))
end
won(options = {}) click to toggle source

Returns pages for items the User has won. @note {API#get! GET} /ItemsWon @return [Array<ItemsAsPage>]

# File lib/gun_broker/user/items_as_pages_delegate.rb, line 68
def won(options = {})
  @won ||= build_pages_for(:ItemsWon, params_for(:timeframe, options))
end

Private Instance Methods

build_pages_for(endpoint, params = {}) click to toggle source
# File lib/gun_broker/user/items_as_pages_delegate.rb, line 74
def build_pages_for(endpoint, params = {})
  endpoint = ['/', endpoint.to_s].join
  _token_header = token_header(@user.token)
  response = GunBroker::API.get(endpoint, params.merge({ 'PageSize' => 1 }), _token_header)
  number_of_pages = (response['count'] / @items_per_page.to_f).ceil
  items_as_pages = []

  number_of_pages.times do |page_number|
    page_number += 1
    attrs = {
      page_size:    @items_per_page,
      page_index:   page_number,
      endpoint:     endpoint,
      params:       params,
      token_header: _token_header
    }

    items_as_pages << GunBroker::ItemsAsPage.new(attrs)
  end

  items_as_pages
end
params_for(key, options = {}) click to toggle source
# File lib/gun_broker/user/items_as_pages_delegate.rb, line 97
def params_for(key, options = {})
  case key
  when :sellername
    { 'SellerName' => @user.username }
  when :timeframe
    { 'TimeFrame' => (options[:timeframe] || GunBroker::API::MAX_ITEMS_TIME_FRAME) }
  else
    raise GunBroker::Error.new 'Unrecognized `params_for` key.'
  end
end