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