mlb_stats_api 0.2.4 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,7 +2,6 @@
2
2
 
3
3
  module MLBStatsAPI
4
4
  # Operations pertaining to leagues
5
- # @see https://statsapi.mlb.com/docs/#tag/league
6
5
  module Leagues
7
6
  LEAGUES = {
8
7
  american: 103,
@@ -24,37 +23,31 @@ module MLBStatsAPI
24
23
  }.freeze
25
24
 
26
25
  # View league information.
27
- # @see https://statsapi.mlb.com/docs/#operation/league
28
- def leagues(options = {})
29
- unless options[:sportId] || options[:leagueIds]
30
- raise ArgumentError, '#leagues requires a sportId or leagueIds'
31
- end
26
+ def leagues(**options)
27
+ raise ArgumentError, '#leagues requires a sportId or leagueIds' unless options[:sportId] || options[:leagueIds]
32
28
 
33
- get '/league', options
29
+ get '/league', **options
34
30
  end
35
31
 
36
32
  # View All-Star Ballots per league.
37
- # @see https://statsapi.mlb.com/docs/#operation/allStarBallot
38
- def all_star_ballot(league_id, season = nil, options = {})
33
+ def all_star_ballot(league_id, season = nil, **options)
39
34
  options[:season] = season || Time.now.year
40
35
 
41
- get "/league/#{league_id}/allStarBallot", options
36
+ get "/league/#{league_id}/allStarBallot", **options
42
37
  end
43
38
 
44
39
  # View All-Star Write-ins per league.
45
- # @see https://statsapi.mlb.com/docs/#operation/allStarWriteIns
46
- def all_star_write_ins(league_id, season = nil, options = {})
40
+ def all_star_write_ins(league_id, season = nil, **options)
47
41
  options[:season] = season || Time.now.year
48
42
 
49
- get "/league/#{league_id}/allStarWriteIns", options
43
+ get "/league/#{league_id}/allStarWriteIns", **options
50
44
  end
51
45
 
52
46
  # View All-Star Final Vote per league.
53
- # @see https://statsapi.mlb.com/docs/#operation/allStarFinalVote
54
- def all_star_final_vote(league_id, season = nil, options = {})
47
+ def all_star_final_vote(league_id, season = nil, **options)
55
48
  options[:season] = season || Time.now.year
56
49
 
57
- get "/league/#{league_id}/allStarFinalVote", options
50
+ get "/league/#{league_id}/allStarFinalVote", **options
58
51
  end
59
52
  end
60
53
  end
@@ -5,48 +5,31 @@ module MLBStatsAPI
5
5
  attr_reader :id
6
6
 
7
7
  def initialize(api, data)
8
+ super(data)
9
+
8
10
  @api = api
9
- @data = data
10
11
 
11
12
  # If we need to nuke and start over, keep this piece
12
13
  @id = data['gamePk']
13
14
  end
14
15
 
15
- def boxscore
16
- @data['liveData']['boxscore']
17
- end
16
+ def game_data = @data['gameData']
18
17
 
19
- def decisions
20
- @data['liveData']['decisions']
21
- end
18
+ def live_data = @data['liveData']
22
19
 
23
- def leaders
24
- @data['liveData']['leaders']
25
- end
20
+ def metadata = @data['metaData']
26
21
 
27
- def linescore
28
- @data['liveData']['linescore']
29
- end
22
+ def boxscore = @data.dig('liveData', 'boxscore')
30
23
 
31
- def plays
32
- @data['liveData']['plays']
33
- end
24
+ def decisions = @data.dig('liveData', 'decisions')
34
25
 
35
- def game_data
36
- @data['gameData']
37
- end
26
+ def leaders = @data.dig('liveData', 'leaders')
38
27
 
39
- def live_data
40
- @data['liveData']
41
- end
28
+ def linescore = @data.dig('liveData', 'linescore')
42
29
 
43
- def metadata
44
- @data['metaData']
45
- end
30
+ def plays = @data.dig('liveData', 'plays')
46
31
 
47
- def timestamps
48
- @api.live_feed_timestamps(@id)
49
- end
32
+ def timestamps = @api.live_feed_timestamps(@id)
50
33
 
51
34
  def reload!
52
35
  @data = @api.get("/game/#{@id}/feed/live", version: '1.1')
@@ -61,7 +44,7 @@ module MLBStatsAPI
61
44
 
62
45
  diffs = @api.live_feed_diff(
63
46
  @data['gamePk'],
64
- timecode: @data['metaData']['timeStamp']
47
+ timecode: @data.dig('metaData', 'timeStamp')
65
48
  )
66
49
 
67
50
  return process_diffs(diffs) if diffs.is_a?(Array)
@@ -2,14 +2,12 @@
2
2
 
3
3
  module MLBStatsAPI
4
4
  # Operations pertaining to players, umpires, and coaches
5
- # @see https://statsapi.mlb.com/docs/#tag/person
6
5
  module People
7
6
  # View one or more person's stats and biographical information.
8
- # @see https://statsapi.mlb.com/docs/#operation/person
9
- def person(person_ids, options = {})
7
+ def person(person_ids, **options)
10
8
  ids = Array(person_ids)
11
9
 
12
- result = get('/people', options.merge(personIds: ids)).dig('people')
10
+ result = get('/people', **options.merge(personIds: ids))['people']
13
11
 
14
12
  return result.first if ids.length == 1
15
13
 
@@ -18,11 +16,10 @@ module MLBStatsAPI
18
16
  alias people person
19
17
 
20
18
  # View a player's stats for a specific game.
21
- # @see https://statsapi.mlb.com/docs/#operation/currentGameStats
22
- def person_game_stats(person_id, options = {})
19
+ def person_game_stats(person_id, **options)
23
20
  game = options.delete(:gamePk) || 'current'
24
21
 
25
- get("/people/#{person_id}/stats/game/#{game}", options).dig('stats')
22
+ get("/people/#{person_id}/stats/game/#{game}", **options)['stats']
26
23
  end
27
24
  end
28
25
  end
@@ -10,15 +10,12 @@ module MLBStatsAPI
10
10
  tune_in: '/schedule/postseason/tuneIn'
11
11
  }.freeze
12
12
 
13
- def schedule(type = :default, options = {})
14
- if type.is_a?(Hash) && options.empty?
15
- options = type
16
- type = :default
17
- end
13
+ def schedule(**options)
14
+ endpoint = SCHEDULE_TYPES[options.delete(:type) || :default]
18
15
 
19
- raise ArgumentError, 'invalid schedule type' unless SCHEDULE_TYPES[type]
16
+ raise ArgumentError, 'Invalid schedule type.' unless endpoint
20
17
 
21
- get SCHEDULE_TYPES[type], { sportId: 1 }.merge(options)
18
+ get endpoint, **{ sportId: 1 }.merge(options)
22
19
  end
23
20
  end
24
21
  end
@@ -2,18 +2,11 @@
2
2
 
3
3
  module MLBStatsAPI
4
4
  # Operations pertaining to seasons
5
- # @see https://statsapi.mlb.com/docs/#tag/season
6
5
  module Seasons
7
6
  # View current season info.
8
- # @see https://statsapi.mlb.com/docs/#operation/seasons
9
- def seasons(options = {})
10
- get '/seasons', { sportId: 1 }.merge(options)
11
- end
7
+ def seasons(**options) = get('/seasons', **{ sportId: 1 }.merge(options))
12
8
 
13
9
  # View information on an individual season.
14
- # @see https://statsapi.mlb.com/docs/#operation/seasons
15
- def season(year, options = {})
16
- get "/seasons/#{year}", { sportId: 1 }.merge(options)
17
- end
10
+ def season(year, **options) = get("/seasons/#{year}", **{ sportId: 1 }.merge(options))
18
11
  end
19
12
  end
@@ -2,26 +2,14 @@
2
2
 
3
3
  module MLBStatsAPI
4
4
  # Operations pertaining to sports
5
- # @see https://statsapi.mlb.com/docs/#tag/sports
6
5
  module Sports
7
- # View information for all sportIds.
8
- # @see https://statsapi.mlb.com/docs/#operation/sports
9
- def sports
10
- get '/sports'
11
- end
6
+ # View information for all sports.
7
+ def sports = get('/sports')
12
8
 
13
- # View information for any given sportId.
14
- # @see https://statsapi.mlb.com/docs/#operation/sports
15
- def sport(sport_id, options = {})
16
- get "/sports/#{sport_id}", options
17
- end
9
+ # View information for any given sport ID.
10
+ def sport(sport_id, **options) = get("/sports/#{sport_id}", **options)
18
11
 
19
- # View information on a players for a given sportId.
20
- # @see https://statsapi.mlb.com/docs/#operation/sportPlayers
21
- def sport_players(sport_id, season, options = {})
22
- options[:season] = season
23
-
24
- get "/sports/#{sport_id}/players", options
25
- end
12
+ # View information on all players for a given sport ID, optionally filtered by season.
13
+ def sport_players(sport_id, season, **options) = get("/sports/#{sport_id}/players", **options.merge(season:))
26
14
  end
27
15
  end
@@ -2,11 +2,9 @@
2
2
 
3
3
  module MLBStatsAPI
4
4
  # Operations pertaining to standings
5
- # @see https://statsapi.mlb.com/docs/#tag/standings
6
5
  module Standings
7
6
  # View standings for a league.
8
- # @see https://statsapi.mlb.com/docs/#operation/standings
9
- def standings(options = {})
7
+ def standings(**options)
10
8
  options[:hydrate] = 'team' unless options.key?(:hydrate)
11
9
 
12
10
  if options[:leagues] && !options[:leagueId]
@@ -17,7 +15,7 @@ module MLBStatsAPI
17
15
 
18
16
  options[:leagueId] = [103, 104] unless Array(options[:leagueId])&.any?
19
17
 
20
- get '/standings', options
18
+ get '/standings', **options
21
19
  end
22
20
  end
23
21
  end
@@ -2,25 +2,20 @@
2
2
 
3
3
  module MLBStatsAPI
4
4
  # Operations pertaining to stats
5
- # @see https://statsapi.mlb.com/docs/#tag/stats
6
5
  module Stats
7
6
  # View statistics based on statType, group, season, and organization.
8
- # @see https://statsapi.mlb.com/docs/#operation/stats
9
- def stats(options = {})
7
+ def stats(**options)
10
8
  raise ArgumentError, '#stats requires a stats arg' unless options[:stats]
11
9
  raise ArgumentError, '#stats requires a group arg' unless options[:group]
12
10
 
13
- get '/stats', options
11
+ get '/stats', **options
14
12
  end
15
13
 
16
14
  # View leaders for a statistic.
17
- # @see https://statsapi.mlb.com/docs/#operation/leaders
18
- def stats_leaders(options = {})
19
- unless options[:leaderCategories]
20
- raise ArgumentError, '#stats_leaders requires a leaderCategories arg'
21
- end
15
+ def stats_leaders(**options)
16
+ raise ArgumentError, '#stats_leaders requires a leaderCategories arg' unless options[:leaderCategories]
22
17
 
23
- get '/stats/leaders', options
18
+ get '/stats/leaders', **options
24
19
  end
25
20
  end
26
21
  end
@@ -2,46 +2,26 @@
2
2
 
3
3
  module MLBStatsAPI
4
4
  class Team < Base
5
- def id
6
- @data['id']
7
- end
5
+ def id = @data['id']
8
6
 
9
- def name
10
- @data['teamName']
11
- end
7
+ def name = @data['teamName']
12
8
 
13
- def location
14
- @data['locationName']
15
- end
9
+ def location = @data['locationName']
16
10
 
17
- def abbreviation
18
- @data['abbreviation']
19
- end
11
+ def abbreviation = @data['abbreviation']
20
12
  alias code abbreviation
21
13
 
22
- def file_code
23
- @data['fileCode']
24
- end
14
+ def file_code = @data['fileCode']
25
15
 
26
- def short_name
27
- @data['shortName']
28
- end
16
+ def short_name = @data['shortName']
29
17
 
30
- def league_id
31
- @data.dig('league', 'id')
32
- end
18
+ def league_id = @data.dig('league', 'id')
33
19
 
34
- def division_id
35
- @data.dig('division', 'id')
36
- end
20
+ def division_id = @data.dig('division', 'id')
37
21
 
38
- def full_name
39
- @data['name']
40
- end
22
+ def full_name = @data['name']
41
23
 
42
24
  # So we don't get huge printouts
43
- def inspect
44
- %(#<MLBGameday::Team @name="#{name}">)
45
- end
25
+ def inspect = %(#<MLBGameday::Team @name="#{name}">)
46
26
  end
47
27
  end
@@ -26,36 +26,24 @@ module MLBStatsAPI
26
26
  teams.concat load_teams_by_id(ids)
27
27
  end
28
28
 
29
- def affiliates(team_id, season: nil)
30
- get "/teams/#{team_id}/affiliates", season: season
31
- end
32
-
33
- def coaches(team_id, date: nil)
34
- date ||= Date.today
29
+ def affiliates(team_id, season: nil) = get("/teams/#{team_id}/affiliates", season:)
35
30
 
36
- get "/teams/#{team_id}/coaches", date: date.strftime('%m/%d/%Y')
37
- end
31
+ def coaches(team_id, date: nil) = get("/teams/#{team_id}/coaches", date: (date || Date.today).strftime('%m/%d/%Y'))
38
32
 
39
- # def leaders(team_id)
40
- # get("/teams/#{team_id}/leaders")
41
- # end
33
+ # def leaders(team_id) = get("/teams/#{team_id}/leaders")
42
34
 
43
- def roster(team_id, type:, date: nil)
44
- get "/teams/#{team_id}/roster/#{type}", date: date.strftime('%m/%d/%Y')
45
- end
35
+ def roster(team_id, type:, date: nil) = get("/teams/#{team_id}/roster/#{type}", date: date.strftime('%m/%d/%Y'))
46
36
 
47
37
  protected
48
38
 
49
39
  def load_teams_by_id(ids)
50
40
  return [] if ids.none?
51
41
 
52
- get('/teams', teamId: ids.join(','), hydrate: 'venue(timezone)')
53
- .dig('teams')
54
- .map do |data|
55
- @cache.store("mlb_stats_api:teams:#{data['id']}", data)
42
+ get('/teams', teamId: ids.join(','), hydrate: 'venue(timezone)')['teams'].map do |data|
43
+ @cache.store("mlb_stats_api:teams:#{data['id']}", data)
56
44
 
57
- MLBStatsAPI::Team.new(data)
58
- end
45
+ MLBStatsAPI::Team.new(data)
46
+ end
59
47
  end
60
48
  end
61
49
  end
@@ -2,12 +2,8 @@
2
2
 
3
3
  module MLBStatsAPI
4
4
  # Operations pertaining to venues
5
- # @see https://statsapi.mlb.com/docs/#tag/venue
6
5
  module Venues
7
- # View information for a venue based on venueId.
8
- # @see https://statsapi.mlb.com/docs/#operation/venues
9
- def venue(venue_id)
10
- get("/venues/#{venue_id}").dig('venues', 0)
11
- end
6
+ # View information for a venue based on venue ID.
7
+ def venue(venue_id) = get("/venues/#{venue_id}").dig('venues', 0)
12
8
  end
13
9
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MLBStatsAPI
4
- VERSION = '0.2.4'
4
+ VERSION = '0.4.0'
5
5
  end
@@ -9,24 +9,27 @@ Gem::Specification.new do |spec|
9
9
  spec.version = MLBStatsAPI::VERSION
10
10
  spec.authors = ['Steven Hoffman']
11
11
  spec.email = ['git@fustrate.com']
12
+ spec.metadata = {
13
+ 'rubygems_mfa_required' => 'true'
14
+ }
12
15
 
13
16
  spec.summary = %(MLB has a new Stats API!)
14
17
  spec.homepage = 'http://github.com/fustrate/mlb_stats_api'
15
18
  spec.license = 'MIT'
19
+ spec.required_ruby_version = '>= 3.1.0'
16
20
 
17
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
- f.match(%r{^(test|spec|features)/})
19
- end
21
+ spec.files = `git ls-files -z`.split("\x0").reject { _1.match(%r{^(test|spec|features)/}) }
20
22
  spec.bindir = 'exe'
21
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.executables = spec.files.grep(%r{^exe/}) { File.basename(_1) }
22
24
  spec.require_paths = ['lib']
23
25
 
24
- spec.add_development_dependency 'bundler', '> 1.16'
25
- spec.add_development_dependency 'rake', '> 10.0'
26
- spec.add_development_dependency 'rspec', '~> 3.8'
27
- spec.add_development_dependency 'webmock', '~> 3.4'
26
+ spec.add_development_dependency 'bundler', '> 2.3'
27
+ spec.add_development_dependency 'rake', '> 13.0'
28
+ spec.add_development_dependency 'rspec', '~> 3.11'
29
+ spec.add_development_dependency 'rubocop', '~> 1.37'
30
+ spec.add_development_dependency 'webmock', '~> 3.18'
28
31
 
29
32
  spec.add_dependency 'hana', '~> 1.3'
30
- spec.add_dependency 'httparty', '~> 0.16'
31
- spec.add_dependency 'moneta', '~> 1.0'
33
+ spec.add_dependency 'httparty', '~> 0.20'
34
+ spec.add_dependency 'moneta', '~> 1.5'
32
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mlb_stats_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Steven Hoffman
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-01-19 00:00:00.000000000 Z
11
+ date: 2022-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,56 +16,70 @@ dependencies:
16
16
  requirements:
17
17
  - - ">"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '2.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.16'
26
+ version: '2.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '3.8'
47
+ version: '3.11'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '3.8'
54
+ version: '3.11'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.37'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.37'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: webmock
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '3.4'
75
+ version: '3.18'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '3.4'
82
+ version: '3.18'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: hana
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -86,38 +100,39 @@ dependencies:
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '0.16'
103
+ version: '0.20'
90
104
  type: :runtime
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '0.16'
110
+ version: '0.20'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: moneta
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: '1.0'
117
+ version: '1.5'
104
118
  type: :runtime
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: '1.0'
111
- description:
124
+ version: '1.5'
125
+ description:
112
126
  email:
113
127
  - git@fustrate.com
114
128
  executables: []
115
129
  extensions: []
116
130
  extra_rdoc_files: []
117
131
  files:
132
+ - ".github/workflows/rspec.yml"
118
133
  - ".gitignore"
119
134
  - ".rubocop.yml"
120
- - ".travis.yml"
135
+ - ".vscode/settings.json"
121
136
  - Gemfile
122
137
  - Gemfile.lock
123
138
  - LICENSE.txt
@@ -152,8 +167,9 @@ files:
152
167
  homepage: http://github.com/fustrate/mlb_stats_api
153
168
  licenses:
154
169
  - MIT
155
- metadata: {}
156
- post_install_message:
170
+ metadata:
171
+ rubygems_mfa_required: 'true'
172
+ post_install_message:
157
173
  rdoc_options: []
158
174
  require_paths:
159
175
  - lib
@@ -161,15 +177,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
161
177
  requirements:
162
178
  - - ">="
163
179
  - !ruby/object:Gem::Version
164
- version: '0'
180
+ version: 3.1.0
165
181
  required_rubygems_version: !ruby/object:Gem::Requirement
166
182
  requirements:
167
183
  - - ">="
168
184
  - !ruby/object:Gem::Version
169
185
  version: '0'
170
186
  requirements: []
171
- rubygems_version: 3.1.2
172
- signing_key:
187
+ rubygems_version: 3.3.23
188
+ signing_key:
173
189
  specification_version: 4
174
190
  summary: MLB has a new Stats API!
175
191
  test_files: []
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- script: bundle exec rake
4
- rvm:
5
- - 2.5.1
6
- before_install: gem install bundler -v 1.16.6