mlb_stats_api 0.2.5 → 0.4.0

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.
@@ -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.5'
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.5
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-03-28 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.0.3
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