class NBA::Team

Constants

ADJUST_WIDTH

Attributes

championships[R]
coach[R]
conference[R]
division[R]
founded[R]
head_coach[R]
name[R]
players[R]
team_stats[R]

Public Class Methods

all() click to toggle source

Returns an array of Team objects

@example

NBA::Team.all.first.name                    # => "Atlanta Hawks"
NBA::Team.all.first.division                # => "Southeast Division"
NBA::Team.all.first.founded                 # => 1946
NBA::Team.all.first.players.first.name      # => "Al Horford"
NBA::Team.all.first.players.first.number    # => 15
NBA::Team.all.first.players.first.position  # => ["Forward-center"]
# File lib/nba/team.rb, line 19
def self.all
  # Attempt to fetch the result from the Freebase API unless there is a
  # connection error, in which case read from a fixture file
  @all ||= begin
    results_to_team(results_from_freebase)
  rescue Errno::EHOSTUNREACH, Faraday::Error::ConnectionFailed, Faraday::Error::TimeoutError
    results_to_team(results_from_cache)
  end
end
new(attributes = {}) click to toggle source
# File lib/nba/team.rb, line 46
def initialize(attributes = {})
  attributes.each do |key, value|
    instance_variable_set("@#{key}", value) if self.respond_to?(key)
  end
end
reset() click to toggle source
# File lib/nba/team.rb, line 29
def self.reset
  @all = nil
end

Private Class Methods

file_from_cache(file_name) click to toggle source
# File lib/nba/team.rb, line 79
def self.file_from_cache(file_name)
  File.new(File.expand_path('../../../cache', __FILE__) + '/' + file_name)
end
mql_query() click to toggle source

Returns the MQL query for teams, as a Ruby hash

# File lib/nba/team.rb, line 101
      def self.mql_query
        query = <<-eos
          [{
            "name":          null,
            "mid":           null,
            "/basketball/basketball_team/head_coach": null,
            "/basketball/basketball_team/conference": null,
            "/basketball/basketball_team/division": null,
            "/sports/sports_team/founded": null,
            "/sports/sports_team/championships": [],
            "/sports/sports_team/roster": [{
              "number":   null,
              "player":   null,
              "from":     null,
              "to":       null,
              "position": [],
              "sort": "player"
            }],
            "/basketball/basketball_team/team_stats": [{
              "optional": true,
              "season": null,
              "wins": null,
              "losses": null
            }],
            "sort":          "name",
            "type":          "/basketball/basketball_team",
            "/sports/sports_team/league": [{
              "league": "National Basketball Association"
            }]
          }]
          eos
        query.gsub!("\n", '')
      end
results_from_cache() click to toggle source
# File lib/nba/team.rb, line 75
def self.results_from_cache
  JSON.load(file_from_cache('teams.json').read)
end
results_from_freebase() click to toggle source
# File lib/nba/team.rb, line 70
def self.results_from_freebase
  options = {:query => mql_query}
  Request.get_teams('/freebase/v1/mqlread', options)
end
results_to_team(results) click to toggle source
# File lib/nba/team.rb, line 83
def self.results_to_team(results)
  results['result'].map do |result|
    players       = result['/sports/sports_team/roster']

    new(
      :name          => result['name'],
      :conference    => result['/basketball/basketball_team/conference'],
      :division      => result['/basketball/basketball_team/division'],
      :head_coach    => result['/basketball/basketball_team/head_coach'],
      :team_stats    => result['/basketball/basketball_team/team_stats'],
      :founded       => result['/sports/sports_team/founded'].to_i,
      :championships => result['/sports/sports_team/championships'],
      :players       => (players ? Player.all_from_roster(players) : [])
    )
  end
end

Public Instance Methods

pretty_print() click to toggle source
# File lib/nba/team.rb, line 34
def pretty_print
  puts "%#{ADJUST_WIDTH}s: #{self.name}" % "Name"
  puts "%#{ADJUST_WIDTH}s: #{self.founded}" % "Founded"
  puts "%#{ADJUST_WIDTH}s: #{self.conference}" % "Conference"
  puts "%#{ADJUST_WIDTH}s: #{self.division}" % "Division"
  puts "%#{ADJUST_WIDTH}s: #{self.coach}" % "Coach"
  puts "%#{ADJUST_WIDTH}s: #{pretty_print_championships}" % "Championships"
  puts "%#{ADJUST_WIDTH}s: #{pretty_print_players}" % "Players"
end

Private Instance Methods

pretty_print_championships() click to toggle source
# File lib/nba/team.rb, line 52
def pretty_print_championships
  idx = 0

  self.championships.sort.reverse.each_slice(2).inject("") do |string, chams|
    string << "\n" +  (" " * (ADJUST_WIDTH + 2)) if (idx += 1) != 1
    string << chams.join(", ")
  end
end
pretty_print_players() click to toggle source
# File lib/nba/team.rb, line 61
def pretty_print_players
  idx = 0

  self.players.sort_by{|p| -p.number}.reverse.inject("") do |string, player|
    string << "\n" +  (" " * (ADJUST_WIDTH + 2)) if (idx += 1) != 1
    string << player.pretty_print
  end
end