nba 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/Gemfile +13 -0
- data/LICENSE.md +22 -0
- data/LICENSE.txt +22 -0
- data/README.md +32 -0
- data/Rakefile +1 -0
- data/cache/teams.json +16529 -0
- data/lib/nba.rb +3 -0
- data/lib/nba/player.rb +26 -0
- data/lib/nba/request.rb +25 -0
- data/lib/nba/team.rb +100 -0
- data/lib/nba/version.rb +3 -0
- data/nba.gemspec +27 -0
- metadata +134 -0
data/lib/nba.rb
ADDED
data/lib/nba/player.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
module NBA
|
2
|
+
class Player
|
3
|
+
attr_reader :name, :number, :position, :from, :to
|
4
|
+
|
5
|
+
def initialize(attributes = {})
|
6
|
+
attributes.each do |key, value|
|
7
|
+
instance_variable_set("@#{key}", value) if self.respond_to?(key)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# Returns an array of Player objects given a team roster
|
12
|
+
def self.all_from_roster(players)
|
13
|
+
players.map do |player|
|
14
|
+
next if player['to'] != nil
|
15
|
+
|
16
|
+
new(
|
17
|
+
:name => player['player'],
|
18
|
+
:number => player['number'],
|
19
|
+
:position => player['position'],
|
20
|
+
:from => player['from'],
|
21
|
+
:to => player['to']
|
22
|
+
)
|
23
|
+
end.compact
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/nba/request.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'faraday_middleware'
|
3
|
+
|
4
|
+
module NBA
|
5
|
+
# @private
|
6
|
+
class Request
|
7
|
+
# Perform an HTTP GET request
|
8
|
+
def self.get(path, options = {}, raw = false)
|
9
|
+
response = connection(raw).get do |request|
|
10
|
+
request.url(path, options)
|
11
|
+
end
|
12
|
+
raw ? response : response.body
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def self.connection(raw = false)
|
18
|
+
Faraday.new(:url => 'https://www.googleapis.com', :ssl => {:verify => false}) do |builder|
|
19
|
+
builder.request :url_encoded
|
20
|
+
builder.use FaradayMiddleware::ParseJson unless raw
|
21
|
+
builder.adapter Faraday.default_adapter
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/nba/team.rb
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require 'multi_json'
|
3
|
+
|
4
|
+
module NBA
|
5
|
+
class Team
|
6
|
+
attr_reader :name, :founded, :conference, :division, :championships, :players
|
7
|
+
|
8
|
+
# Returns an array of Team objects
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# NBA::Team.all.first.name # => "Atlanta Hawks"
|
12
|
+
# NBA::Team.all.first.division # => "Southeast Division"
|
13
|
+
# NBA::Team.all.first.founded # => 1946
|
14
|
+
# NBA::Team.all.first.players.first.name # => "Al Horford"
|
15
|
+
# NBA::Team.all.first.players.first.number # => 15
|
16
|
+
# NBA::Team.all.first.players.first.position # => ["Forward-center"]
|
17
|
+
def self.all
|
18
|
+
# Attempt to fetch the result from the Freebase API unless there is a
|
19
|
+
# connection error, in which case read from a fixture file
|
20
|
+
@all ||= begin
|
21
|
+
results_to_team(results_from_freebase)
|
22
|
+
rescue Faraday::Error::ConnectionFailed, Faraday::Error::TimeoutError
|
23
|
+
results_to_team(results_from_cache)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.reset
|
28
|
+
@all = nil
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def initialize(attributes = {})
|
34
|
+
attributes.each do |key, value|
|
35
|
+
instance_variable_set("@#{key}", value) if self.respond_to?(key)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.results_from_freebase(raw = false)
|
40
|
+
options = {:query => mql_query}
|
41
|
+
Request.get('/freebase/v1/mqlread', options, raw)
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.results_from_cache
|
45
|
+
JSON.load(file_from_cache('teams.json').read)
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.file_from_cache(file_name)
|
49
|
+
File.new(File.expand_path('../../../cache', __FILE__) + '/' + file_name)
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.results_to_team(results)
|
53
|
+
results['result'].map do |result|
|
54
|
+
founded = result['/sports/sports_team/founded']
|
55
|
+
conference = result['/basketball/basketball_team/conference']
|
56
|
+
division = result['/basketball/basketball_team/division']
|
57
|
+
championships = result['/sports/sports_team/championships']
|
58
|
+
players = result['/sports/sports_team/roster']
|
59
|
+
|
60
|
+
new(
|
61
|
+
:name => result['name'],
|
62
|
+
:founded => founded,
|
63
|
+
:conference => conference,
|
64
|
+
:division => division,
|
65
|
+
:championships => championships,
|
66
|
+
:players => (players ? Player.all_from_roster(players) : [])
|
67
|
+
)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Returns the MQL query for teams, as a Ruby hash
|
72
|
+
def self.mql_query
|
73
|
+
query = <<-eos
|
74
|
+
[{
|
75
|
+
"name": null,
|
76
|
+
"mid": null,
|
77
|
+
"/sports/sports_team/founded": null,
|
78
|
+
"/common/topic/image": [],
|
79
|
+
"/basketball/basketball_team/head_coach": null,
|
80
|
+
"/basketball/basketball_team/conference": null,
|
81
|
+
"/basketball/basketball_team/division": null,
|
82
|
+
"/sports/sports_team/championships": [],
|
83
|
+
"/sports/sports_team/roster": [{
|
84
|
+
"number": null,
|
85
|
+
"player": null,
|
86
|
+
"from": null,
|
87
|
+
"to": null,
|
88
|
+
"position": []
|
89
|
+
}],
|
90
|
+
"sort": "name",
|
91
|
+
"type": "/basketball/basketball_team",
|
92
|
+
"/sports/sports_team/league": [{
|
93
|
+
"league": "National Basketball Association"
|
94
|
+
}]
|
95
|
+
}]
|
96
|
+
eos
|
97
|
+
query.gsub!("\n", '')
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/lib/nba/version.rb
ADDED
data/nba.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'nba/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "nba"
|
8
|
+
spec.version = Nba::VERSION
|
9
|
+
spec.authors = ["Larry Lv"]
|
10
|
+
spec.email = ["larrylv1990@gmail.com"]
|
11
|
+
spec.summary = %q{NBA.rb is a Ruby library for retrieving NBA League players, teams and divisions}
|
12
|
+
spec.description = spec.summary
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_runtime_dependency 'faraday', ['~> 0.8', '< 0.10']
|
22
|
+
spec.add_runtime_dependency 'faraday_middleware', '~> 0.9'
|
23
|
+
spec.add_runtime_dependency 'multi_json', '~> 1.8'
|
24
|
+
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
26
|
+
spec.add_development_dependency "rake"
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nba
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Larry Lv
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-01-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.8'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '0.10'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0.8'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0.10'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: faraday_middleware
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0.9'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0.9'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: multi_json
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '1.8'
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '1.8'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: bundler
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '1.5'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '1.5'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rake
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
description: NBA.rb is a Ruby library for retrieving NBA League players, teams and
|
90
|
+
divisions
|
91
|
+
email:
|
92
|
+
- larrylv1990@gmail.com
|
93
|
+
executables: []
|
94
|
+
extensions: []
|
95
|
+
extra_rdoc_files: []
|
96
|
+
files:
|
97
|
+
- ".gitignore"
|
98
|
+
- Gemfile
|
99
|
+
- LICENSE.md
|
100
|
+
- LICENSE.txt
|
101
|
+
- README.md
|
102
|
+
- Rakefile
|
103
|
+
- cache/teams.json
|
104
|
+
- lib/nba.rb
|
105
|
+
- lib/nba/player.rb
|
106
|
+
- lib/nba/request.rb
|
107
|
+
- lib/nba/team.rb
|
108
|
+
- lib/nba/version.rb
|
109
|
+
- nba.gemspec
|
110
|
+
homepage: ''
|
111
|
+
licenses:
|
112
|
+
- MIT
|
113
|
+
metadata: {}
|
114
|
+
post_install_message:
|
115
|
+
rdoc_options: []
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
requirements: []
|
129
|
+
rubyforge_project:
|
130
|
+
rubygems_version: 2.2.0
|
131
|
+
signing_key:
|
132
|
+
specification_version: 4
|
133
|
+
summary: NBA.rb is a Ruby library for retrieving NBA League players, teams and divisions
|
134
|
+
test_files: []
|