class NbaStats::Resources::ResourceBase

Attributes

json[R]
name[R]
params[R]
result_sets[R]

Public Class Methods

new(resource_json) click to toggle source

Initialize a new ResourceBase object

@param resource_json [String] @return [NbaStats::Resources::ResourceBase]

# File lib/nba_stats/resources/resource_base.rb, line 16
def initialize(resource_json)
  @json = JSON.parse(resource_json)
  parse_base
end

Public Instance Methods

to_s() click to toggle source

Provide the object JSON as a pretty printed string

@return [String]

# File lib/nba_stats/resources/resource_base.rb, line 24
def to_s
  JSON.pretty_generate(@json)
end
valid_result_sets() click to toggle source

Must be implemented by sub classes

@return [Array]

# File lib/nba_stats/resources/resource_base.rb, line 31
def valid_result_sets
  Array.new
end

Private Instance Methods

parse_base() click to toggle source

Parse the returned API object.do Initialize instance variables and define accessors.

# File lib/nba_stats/resources/resource_base.rb, line 39
def parse_base
  @name = json['resource']
  @params = json['parameters']
  @result_sets = json['resultSets']

  result_sets.each do |result_set|
    result_set_name = result_set['name'].underscore
    if valid_result_sets.include? result_set_name.to_sym
      instance_variable_set "@#{result_set_name}", row_set_to_array_of_hashes(result_set['headers'], result_set['rowSet'])
      singleton_class.class_eval do; attr_accessor result_set_name; end
    else
      raise BadResponseError.new("Unexpected result set name #{result_set_name}.")
    end
  end
end
row_set_to_array_of_hashes(headers, row_set) click to toggle source

Convert a returned API row set into an array of hashes

@param headers [Array] @param row_set [Array] @return [Hash]

# File lib/nba_stats/resources/resource_base.rb, line 60
def row_set_to_array_of_hashes(headers, row_set)
  result = Array.new
  row_set.each do |row|
    if row.count == headers.count
      row_hash = Hash.new
      headers.zip(row).each do |header, value|
        row_hash[header.underscore.to_sym] = value
      end
      result.push row_hash
    else
      raise BadResponseError.new("Row set header count (#{headers.count}) doesn't match row item count (#{row.count}).")
    end
  end
  result
end