mlb 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +0 -3
- data/Rakefile +1 -0
- data/VERSION +1 -1
- data/db/mlb.sqlite3 +0 -0
- data/lib/mlb/player.rb +7 -11
- data/lib/mlb/team.rb +126 -58
- data/mlb.gemspec +6 -2
- metadata +13 -2
data/.gitignore
CHANGED
data/Rakefile
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/db/mlb.sqlite3
ADDED
Binary file
|
data/lib/mlb/player.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
module MLB
|
2
2
|
class Player
|
3
|
-
|
4
|
-
|
3
|
+
attr_accessor :name, :number, :position
|
4
|
+
|
5
|
+
def initialize(attributes={})
|
6
|
+
attributes.each_pair do |key, value|
|
7
|
+
self.send("#{key}=", value) if self.respond_to?("#{key}=")
|
8
|
+
end
|
9
|
+
end
|
5
10
|
|
6
11
|
protected
|
7
12
|
|
@@ -16,14 +21,5 @@ module MLB
|
|
16
21
|
end
|
17
22
|
end
|
18
23
|
|
19
|
-
private
|
20
|
-
|
21
|
-
def initialize(attributes={})
|
22
|
-
super unless attributes.is_a?(Hash)
|
23
|
-
@name = attributes[:name]
|
24
|
-
@number = attributes[:number]
|
25
|
-
@position = attributes[:position]
|
26
|
-
end
|
27
|
-
|
28
24
|
end
|
29
25
|
end
|
data/lib/mlb/team.rb
CHANGED
@@ -6,8 +6,7 @@ module MLB
|
|
6
6
|
include HTTParty
|
7
7
|
format :json
|
8
8
|
base_uri 'http://www.freebase.com/api'
|
9
|
-
|
10
|
-
private_class_method :new
|
9
|
+
attr_accessor :name, :league, :division, :manager, :wins, :losses, :founded, :mascot, :ballpark, :logo_url, :players
|
11
10
|
|
12
11
|
# Returns an array of Team objects
|
13
12
|
#
|
@@ -25,73 +24,110 @@ module MLB
|
|
25
24
|
# MLB::Team.all.first.players.first.number # => 28
|
26
25
|
# MLB::Team.all.first.players.first.position # => "Right fielder"
|
27
26
|
def self.all
|
28
|
-
@
|
29
|
-
@response ||= execute(@query)
|
30
|
-
@results ||= []
|
31
|
-
if @response && @results.empty?
|
32
|
-
@response['result'].each do |result|
|
33
|
-
league = result['league']
|
34
|
-
division = result['division']
|
35
|
-
manager = result['current_manager']
|
36
|
-
stats = result['team_stats'].first
|
37
|
-
founded = result['/sports/sports_team/founded'].first
|
38
|
-
mascot = result['/sports/sports_team/team_mascot'].first
|
39
|
-
ballpark = result['/sports/sports_team/arena_stadium'].first
|
40
|
-
logo_prefix = 'http://img.freebase.com/api/trans/image_thumb'
|
41
|
-
logo_suffix = result['/common/topic/image'].first
|
42
|
-
players = result['current_roster']
|
43
|
-
|
44
|
-
@results << new(
|
45
|
-
:name => result['name'],
|
46
|
-
:league => (league ? league['name'] : nil),
|
47
|
-
:division => (division ? division['name'] : nil),
|
48
|
-
:manager => (manager ? manager['name'] : nil),
|
49
|
-
:wins => (stats ? stats['wins'].to_i : nil),
|
50
|
-
:losses => (stats ? stats['losses'].to_i : nil),
|
51
|
-
:founded => (founded ? founded['value'].to_i : nil),
|
52
|
-
:mascot => (mascot ? mascot['name'] : nil),
|
53
|
-
:ballpark => (ballpark ? ballpark['name'] : nil),
|
54
|
-
:logo_url => (logo_suffix ? logo_prefix + logo_suffix['id'] : nil),
|
55
|
-
:players => (players ? Player.all_from_roster(players) : [])
|
56
|
-
)
|
57
|
-
|
58
|
-
end
|
59
|
-
end
|
60
|
-
@results
|
27
|
+
@results ||= run
|
61
28
|
end
|
62
29
|
|
63
|
-
private
|
64
|
-
|
65
30
|
def initialize(attributes={})
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
@division = attributes[:division]
|
70
|
-
@manager = attributes[:manager]
|
71
|
-
@wins = attributes[:wins]
|
72
|
-
@losses = attributes[:losses]
|
73
|
-
@founded = attributes[:founded]
|
74
|
-
@mascot = attributes[:mascot]
|
75
|
-
@ballpark = attributes[:ballpark]
|
76
|
-
@logo_url = attributes[:logo_url]
|
77
|
-
@players = attributes[:players]
|
31
|
+
attributes.each_pair do |key, value|
|
32
|
+
self.send("#{key}=", value) if self.respond_to?("#{key}=")
|
33
|
+
end
|
78
34
|
end
|
79
35
|
|
80
|
-
|
81
|
-
|
36
|
+
private
|
37
|
+
|
38
|
+
# Attempt to fetch the result from the Freebase API
|
39
|
+
# unless there is a connection error, in which case
|
40
|
+
# query a static SQLite3 database.
|
41
|
+
def self.run
|
82
42
|
begin
|
83
|
-
|
84
|
-
if response['code'] != '/api/status/ok'
|
85
|
-
raise Exception, "#{response['status']} (Transaction: #{response['transaction_id']})"
|
86
|
-
end
|
43
|
+
run_team_mql
|
87
44
|
rescue SocketError, Errno::ECONNREFUSED
|
88
|
-
|
45
|
+
run_team_sql
|
89
46
|
end
|
90
|
-
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.run_team_mql
|
50
|
+
query = team_mql_query
|
51
|
+
results = get('/service/mqlread?', :query => {:query => query.to_json})
|
52
|
+
raise(Exception, "#{results['status']} (Transaction: #{results['transaction_id']})") unless results['code'] == '/api/status/ok'
|
53
|
+
|
54
|
+
teams = []
|
55
|
+
results['result'].each do |result|
|
56
|
+
league = result['league']
|
57
|
+
division = result['division']
|
58
|
+
manager = result['current_manager']
|
59
|
+
stats = result['team_stats'].first
|
60
|
+
founded = result['/sports/sports_team/founded'].first
|
61
|
+
mascot = result['/sports/sports_team/team_mascot'].first
|
62
|
+
ballpark = result['/sports/sports_team/arena_stadium'].first
|
63
|
+
logo_prefix = 'http://img.freebase.com/api/trans/image_thumb'
|
64
|
+
logo_suffix = result['/common/topic/image'].first
|
65
|
+
players = result['current_roster']
|
66
|
+
|
67
|
+
teams << new(
|
68
|
+
:name => result['name'],
|
69
|
+
:league => (league ? league['name'] : nil),
|
70
|
+
:division => (division ? division['name'] : nil),
|
71
|
+
:manager => (manager ? manager['name'] : nil),
|
72
|
+
:wins => (stats ? stats['wins'].to_i : nil),
|
73
|
+
:losses => (stats ? stats['losses'].to_i : nil),
|
74
|
+
:founded => (founded ? founded['value'].to_i : nil),
|
75
|
+
:mascot => (mascot ? mascot['name'] : nil),
|
76
|
+
:ballpark => (ballpark ? ballpark['name'] : nil),
|
77
|
+
:logo_url => (logo_suffix ? logo_prefix + logo_suffix['id'] : nil),
|
78
|
+
:players => (players ? Player.all_from_roster(players) : [])
|
79
|
+
)
|
80
|
+
end
|
81
|
+
teams
|
82
|
+
end
|
83
|
+
|
84
|
+
def self.setup_db
|
85
|
+
require 'sqlite3'
|
86
|
+
@db ||= SQLite3::Database.new(File.join(File.dirname(__FILE__), "..", "..", "db", "mlb.sqlite3"), :type_translation => true, :results_as_hash => true)
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.run_team_sql
|
90
|
+
db = setup_db
|
91
|
+
query = team_sql_query
|
92
|
+
results = db.execute(query)
|
93
|
+
|
94
|
+
teams = []
|
95
|
+
results.each do |result|
|
96
|
+
teams << new(
|
97
|
+
:name => result['name'],
|
98
|
+
:league => result['league'],
|
99
|
+
:division => result['division'],
|
100
|
+
:manager => result['manager'],
|
101
|
+
:wins => result['wins'],
|
102
|
+
:losses => result['losses'],
|
103
|
+
:founded => result['founded'],
|
104
|
+
:mascot => result['mascot'],
|
105
|
+
:ballpark => result['ballpark'],
|
106
|
+
:logo_url => result['logo_url'],
|
107
|
+
:players => run_player_sql(result['name'])
|
108
|
+
)
|
109
|
+
end
|
110
|
+
teams
|
111
|
+
end
|
112
|
+
|
113
|
+
def self.run_player_sql(team_name)
|
114
|
+
db = setup_db
|
115
|
+
query = player_sql_query(team_name)
|
116
|
+
results = db.execute(query)
|
117
|
+
|
118
|
+
players = []
|
119
|
+
results.each do |result|
|
120
|
+
players << Player.new(
|
121
|
+
:name => result['name'],
|
122
|
+
:position => result['position'],
|
123
|
+
:number => result['number']
|
124
|
+
)
|
125
|
+
end
|
126
|
+
players
|
91
127
|
end
|
92
128
|
|
93
129
|
# Returns the MQL query for teams, as a Ruby hash
|
94
|
-
def self.
|
130
|
+
def self.team_mql_query
|
95
131
|
{
|
96
132
|
:query => [
|
97
133
|
{
|
@@ -139,5 +175,37 @@ module MLB
|
|
139
175
|
}
|
140
176
|
end
|
141
177
|
|
178
|
+
def self.team_sql_query
|
179
|
+
<<-eos
|
180
|
+
SELECT teams.name AS name
|
181
|
+
, leagues.name AS league
|
182
|
+
, divisions.name AS division
|
183
|
+
, teams.manager AS manager
|
184
|
+
, teams.wins AS wins
|
185
|
+
, teams.losses AS losses
|
186
|
+
, teams.founded AS founded
|
187
|
+
, teams.mascot AS mascot
|
188
|
+
, teams.ballpark AS ballpark
|
189
|
+
, teams.logo_url AS logo_url
|
190
|
+
FROM teams
|
191
|
+
, divisions
|
192
|
+
, leagues
|
193
|
+
WHERE teams.division_id = divisions.id
|
194
|
+
AND divisions.league_id = leagues.id
|
195
|
+
eos
|
196
|
+
end
|
197
|
+
|
198
|
+
def self.player_sql_query(team_name)
|
199
|
+
<<-eos
|
200
|
+
SELECT players.name AS name
|
201
|
+
, players.position AS position
|
202
|
+
, players.number AS number
|
203
|
+
FROM players
|
204
|
+
, teams
|
205
|
+
WHERE players.team_id = teams.id
|
206
|
+
AND teams.name = "#{team_name}"
|
207
|
+
eos
|
208
|
+
end
|
209
|
+
|
142
210
|
end
|
143
211
|
end
|
data/mlb.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mlb}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Erik Michaels-Ober"]
|
12
|
-
s.date = %q{2009-11-
|
12
|
+
s.date = %q{2009-11-27}
|
13
13
|
s.description = %q{MLB.rb is a Ruby library for retrieving current Major League Baseball players, managers, teams, divisions, and leagues.}
|
14
14
|
s.email = %q{sferik@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
|
|
22
22
|
"README.rdoc",
|
23
23
|
"Rakefile",
|
24
24
|
"VERSION",
|
25
|
+
"db/mlb.sqlite3",
|
25
26
|
"lib/mlb.rb",
|
26
27
|
"lib/mlb/player.rb",
|
27
28
|
"lib/mlb/team.rb",
|
@@ -40,13 +41,16 @@ Gem::Specification.new do |s|
|
|
40
41
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
41
42
|
s.add_runtime_dependency(%q<httparty>, [">= 0.4.5"])
|
42
43
|
s.add_runtime_dependency(%q<json>, [">= 1.1.9"])
|
44
|
+
s.add_runtime_dependency(%q<sqlite3-ruby>, [">= 1.2.5"])
|
43
45
|
else
|
44
46
|
s.add_dependency(%q<httparty>, [">= 0.4.5"])
|
45
47
|
s.add_dependency(%q<json>, [">= 1.1.9"])
|
48
|
+
s.add_dependency(%q<sqlite3-ruby>, [">= 1.2.5"])
|
46
49
|
end
|
47
50
|
else
|
48
51
|
s.add_dependency(%q<httparty>, [">= 0.4.5"])
|
49
52
|
s.add_dependency(%q<json>, [">= 1.1.9"])
|
53
|
+
s.add_dependency(%q<sqlite3-ruby>, [">= 1.2.5"])
|
50
54
|
end
|
51
55
|
end
|
52
56
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mlb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Michaels-Ober
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-11-
|
12
|
+
date: 2009-11-27 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -32,6 +32,16 @@ dependencies:
|
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.1.9
|
34
34
|
version:
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: sqlite3-ruby
|
37
|
+
type: :runtime
|
38
|
+
version_requirement:
|
39
|
+
version_requirements: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 1.2.5
|
44
|
+
version:
|
35
45
|
description: MLB.rb is a Ruby library for retrieving current Major League Baseball players, managers, teams, divisions, and leagues.
|
36
46
|
email: sferik@gmail.com
|
37
47
|
executables: []
|
@@ -47,6 +57,7 @@ files:
|
|
47
57
|
- README.rdoc
|
48
58
|
- Rakefile
|
49
59
|
- VERSION
|
60
|
+
- db/mlb.sqlite3
|
50
61
|
- lib/mlb.rb
|
51
62
|
- lib/mlb/player.rb
|
52
63
|
- lib/mlb/team.rb
|