mlb 0.9.0 → 0.10.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6e28a22c9b934399e0edab2d391ef9dacc66209850caae9ad8e70a6bd524e1e
4
- data.tar.gz: dd0f65a56582ec130bf1d46371fdf72cc4c48b6371af994632f0d663a6851c53
3
+ metadata.gz: 7cffb04037de85352415288a1c8756fb223d79181b7051322fa671e60a264580
4
+ data.tar.gz: 141e7eb182d2130fb4906aa9a6d93fdd640562f432004b29ecca505a8c96dd5d
5
5
  SHA512:
6
- metadata.gz: 7b57c8c9eda053930153f421a9447c4cd65f4fd7a55612d027faa9633a61783660a338d0468a752d2666b83223f23b2c9649c9a977e72354cb21c879000e2543
7
- data.tar.gz: 5c866fb121cc4d6972e717b7466474d97d7dd044418d84a573b19f6f94ffd5b65569d66bf2a2eca4997c3b6bfc64f93cadefac7e6501cc659bb256d975ab5d83
6
+ metadata.gz: 98a59eca40923bdeaecb637dbf863282fe9958c554afe15a3e75964745129aec710bcb24c8e2eeacc709190f37ac3a97bc76babc9531432e589985222ab3bfaf
7
+ data.tar.gz: ba7675aab23a6167c94adcb9b554b9f5b1645182d452152a690a1904af9a2af58fb9aec19624e671b3fc14cc23a4ae4ad57e2f366fa4b795905b491733e09775
data/CHANGELOG.md CHANGED
@@ -1,4 +1,10 @@
1
- ## [0.8.0] - 2024-05-22
1
+ ## [0.10.0] - 2025-04-30
2
+ * Drop support for Ruby 3.1
3
+ * Add equalizer for object identity
4
+ * Add Seasons, Conferences, and Awards
5
+ * Add Players.find and Players.find_all
6
+
7
+ ## [0.9.0] - 2024-05-22
2
8
  * Rewrite to use MLB Stats API
3
9
 
4
10
  ## [0.8.0] - 2024-05-06
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020-2024 Erik Berlin, Nilesh Trivedi
3
+ Copyright (c) 2020-2025 Erik Berlin, Nilesh Trivedi
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -37,7 +37,7 @@ mets.first_year_of_play # => 1962
37
37
  mets.location_name # => "Flushing"
38
38
  mets.venue.name # => "Citi Field"
39
39
 
40
- adam = MLB::Players.all(season: 2024).find { |player| player.id == mets.roster.first.player.id }
40
+ adam = MLB::Players.find(mets.roster.first.player)
41
41
 
42
42
  adam.full_name # => "Adam Ottavino"
43
43
  adam.primary_number # => 0
@@ -70,6 +70,82 @@ Building and maintaining an open-source project like this takes a considerable a
70
70
 
71
71
  [Click here to sponsor this project.](https://github.com/sponsors/sferik)
72
72
 
73
+ ## TODO
74
+
75
+ Many of the MLB Stats API endpoints have not yet been implemented in this library. You can contribute to this library by implementing one or more of these endpoinds. If you are financially unable to sponsor this project, you can contribute code instead.
76
+
77
+ - [ ] /attendance
78
+ - [ ] /baseballStats
79
+ - [ ] /draft{prospects}{year}{latest}
80
+ - [ ] /eventTypes
81
+ - [ ] /game/changes
82
+ - [ ] /game/{gamePk}/boxscore
83
+ - [ ] /game/{gamePk}/content
84
+ - [ ] /game/{gamePk}/contextMetrics
85
+ - [ ] /game/{gamePk}/feed/color
86
+ - [ ] /game/{gamePk}/feed/color/diffPatch
87
+ - [ ] /game/{gamePk}/feed/color/timestamps
88
+ - [ ] /game/{gamePk}/feed/live
89
+ - [ ] /game/{gamePk}/feed/live/diffPatch
90
+ - [ ] /game/{gamePk}/feed/live/timestamps
91
+ - [ ] /game/{gamePk}/linescore
92
+ - [ ] /game/{gamePk}/playByPlay
93
+ - [ ] /game/{gamePk}/winProbability
94
+ - [ ] /gamePace
95
+ - [ ] /gameStatus
96
+ - [ ] /gameTypes
97
+ - [ ] /highLow/{orgType}
98
+ - [ ] /hitTrajectories
99
+ - [ ] /homeRunDerby/{gamePk}{bracket}{pool}
100
+ - [ ] /jobTypes
101
+ - [ ] /jobs
102
+ - [ ] /jobs/datacasters
103
+ - [ ] /jobs/officialScorers
104
+ - [ ] /jobs/umpires
105
+ - [ ] /jobs/umpires/games/{umpireId}
106
+ - [ ] /languages
107
+ - [ ] /league/{leagueId}/allStarBallot
108
+ - [ ] /league/{leagueId}/allStarFinalVote
109
+ - [ ] /league/{leagueId}/allStarWriteIns
110
+ - [ ] /leagueLeaderTypes
111
+ - [ ] /logicalEvents
112
+ - [ ] /metrics
113
+ - [ ] /people/changes
114
+ - [ ] /people/freeAgents
115
+ - [ ] /people/{personId}
116
+ - [ ] /people/{personId}/stats/game/{gamePk}
117
+ - [ ] /pitchCodes
118
+ - [ ] /pitchTypes
119
+ - [ ] /platforms
120
+ - [ ] /positions
121
+ - [ ] /reviewReasons
122
+ - [ ] /rosterTypes
123
+ - [ ] /schedule
124
+ - [ ] /schedule/games/tied
125
+ - [ ] /schedule/postseason
126
+ - [ ] /schedule/postseason/series
127
+ - [ ] /schedule/postseason/tuneIn
128
+ - [ ] /scheduleEventTypes
129
+ - [ ] /situationCodes
130
+ - [ ] /sky
131
+ - [ ] /standings
132
+ - [ ] /standingsTypes
133
+ - [ ] /statGroups
134
+ - [ ] /statTypes
135
+ - [ ] /stats
136
+ - [ ] /stats/leaders
137
+ - [ ] /stats/streaks
138
+ - [ ] /teams/affiliates
139
+ - [ ] /teams/history
140
+ - [ ] /teams/stats
141
+ - [ ] /teams/{teamId}/alumni
142
+ - [ ] /teams/{teamId}/coaches
143
+ - [ ] /teams/{teamId}/leaders
144
+ - [ ] /teams/{teamId}/personnel
145
+ - [ ] /teams/{teamId}/roster
146
+ - [ ] /teams/{teamId}/stats
147
+ - [ ] /windDirection
148
+
73
149
  ## Development
74
150
 
75
151
  1. Checkout and repo:
data/lib/mlb/award.rb ADDED
@@ -0,0 +1,48 @@
1
+ require "equalizer"
2
+ require "shale"
3
+ require "uri"
4
+ require_relative "league"
5
+ require_relative "sport"
6
+ require_relative "player"
7
+
8
+ module MLB
9
+ class Award < Shale::Mapper
10
+ include Comparable
11
+ include Equalizer.new(:id, :player, :season)
12
+
13
+ attribute :id, Shale::Type::String
14
+ attribute :name, Shale::Type::String
15
+ attribute :notes, Shale::Type::String
16
+ attribute :votes, Shale::Type::Integer
17
+ attribute :date, Shale::Type::Date
18
+ attribute :season, Shale::Type::Integer
19
+ attribute :sport, Sport
20
+ attribute :player, Player
21
+ attribute :league, League
22
+ attribute :sort_order, Shale::Type::Integer
23
+
24
+ json do
25
+ map "id", to: :id
26
+ map "name", to: :name
27
+ map "sport", to: :sport
28
+ map "league", to: :league
29
+ map "player", to: :player
30
+ map "sortOrder", to: :sort_order
31
+ map "season", to: :season
32
+ map "notes", to: :notes
33
+ map "votes", to: :votes
34
+ end
35
+
36
+ def <=>(other)
37
+ sort_order <=> other.sort_order
38
+ end
39
+
40
+ def recipients(season: Time.now.year)
41
+ params = {season:}
42
+ query_string = URI.encode_www_form(params)
43
+ response = CLIENT.get("awards/#{id}/recipients?#{query_string}")
44
+ awards = Awards.from_json(response)
45
+ awards.awards
46
+ end
47
+ end
48
+ end
data/lib/mlb/awards.rb ADDED
@@ -0,0 +1,22 @@
1
+ require "shale"
2
+ require_relative "award"
3
+
4
+ module MLB
5
+ class Awards < Shale::Mapper
6
+ attribute :copyright, Shale::Type::String
7
+ attribute :awards, Award, collection: true
8
+
9
+ def self.all
10
+ response = CLIENT.get("awards")
11
+ awards = from_json(response)
12
+ awards.awards.sort!
13
+ end
14
+
15
+ def self.find(award)
16
+ id = award.respond_to?(:id) ? award.id : award
17
+ response = CLIENT.get("awards")
18
+ awards = from_json(response)
19
+ awards.awards.find { |a| a.id.eql?(id) }
20
+ end
21
+ end
22
+ end
data/lib/mlb/client.rb CHANGED
@@ -24,7 +24,6 @@ module MLB
24
24
  debug_output: Connection::DEFAULT_DEBUG_OUTPUT,
25
25
  proxy_url: nil,
26
26
  max_redirects: RedirectHandler::DEFAULT_MAX_REDIRECTS)
27
-
28
27
  @base_url = base_url
29
28
  @connection = Connection.new(open_timeout:, read_timeout:, write_timeout:, debug_output:, proxy_url:)
30
29
  @request_builder = RequestBuilder.new
@@ -0,0 +1,32 @@
1
+ require "equalizer"
2
+ require "shale"
3
+ require_relative "league"
4
+ require_relative "sport"
5
+
6
+ module MLB
7
+ class Conference < Shale::Mapper
8
+ include Equalizer.new(:id)
9
+
10
+ attribute :id, Shale::Type::Integer
11
+ attribute :name, Shale::Type::String
12
+ attribute :link, Shale::Type::String
13
+ attribute :abbreviation, Shale::Type::String
14
+ attribute :has_wildcard, Shale::Type::Boolean
15
+ attribute :league, League
16
+ attribute :sport, Sport
17
+ attribute :name_short, Shale::Type::String
18
+
19
+ alias_method :wildcard?, :has_wildcard
20
+
21
+ json do
22
+ map "id", to: :id
23
+ map "name", to: :name
24
+ map "link", to: :link
25
+ map "abbreviation", to: :abbreviation
26
+ map "hasWildcard", to: :has_wildcard
27
+ map "league", to: :league
28
+ map "sport", to: :sport
29
+ map "nameShort", to: :name_short
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,25 @@
1
+ require "shale"
2
+ require "uri"
3
+ require_relative "conference"
4
+
5
+ module MLB
6
+ class Conferences < Shale::Mapper
7
+ attribute :copyright, Shale::Type::String
8
+ attribute :conferences, Conference, collection: true
9
+
10
+ def self.all
11
+ response = CLIENT.get("conferences")
12
+ conferences = from_json(response)
13
+ conferences.conferences
14
+ end
15
+
16
+ def self.find(conference)
17
+ id = conference.respond_to?(:id) ? conference.id : conference
18
+ params = {conferenceId: id}
19
+ query_string = URI.encode_www_form(params)
20
+ response = CLIENT.get("conferences?#{query_string}")
21
+ conferences = from_json(response)
22
+ conferences.conferences.first
23
+ end
24
+ end
25
+ end
data/lib/mlb/division.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
  require_relative "league"
3
4
  require_relative "sport"
@@ -5,6 +6,7 @@ require_relative "sport"
5
6
  module MLB
6
7
  class Division < Shale::Mapper
7
8
  include Comparable
9
+ include Equalizer.new(:id)
8
10
 
9
11
  attribute :id, Shale::Type::Integer
10
12
  attribute :name, Shale::Type::String
data/lib/mlb/divisions.rb CHANGED
@@ -24,7 +24,7 @@ module MLB
24
24
  query_string = URI.encode_www_form(params)
25
25
  response = CLIENT.get("divisions/#{id}?#{query_string}")
26
26
  divisions = from_json(response)
27
- divisions.divisions.first
27
+ divisions.divisions.sort!.first
28
28
  end
29
29
  end
30
30
  end
@@ -1,7 +1,10 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
 
3
4
  module MLB
4
5
  class Handedness < Shale::Mapper
6
+ include Equalizer.new(:code)
7
+
5
8
  attribute :code, Shale::Type::String
6
9
  attribute :description, Shale::Type::String
7
10
 
data/lib/mlb/league.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
  require_relative "season_date_info"
3
4
  require_relative "sport"
@@ -5,6 +6,7 @@ require_relative "sport"
5
6
  module MLB
6
7
  class League < Shale::Mapper
7
8
  include Comparable
9
+ include Equalizer.new(:id)
8
10
 
9
11
  attribute :id, Shale::Type::Integer
10
12
  attribute :name, Shale::Type::String
data/lib/mlb/leagues.rb CHANGED
@@ -24,7 +24,7 @@ module MLB
24
24
  query_string = URI.encode_www_form(params)
25
25
  response = CLIENT.get("leagues/#{id}?#{query_string}")
26
26
  leagues = from_json(response)
27
- leagues.leagues.first
27
+ leagues.leagues.sort!.first
28
28
  end
29
29
  end
30
30
  end
data/lib/mlb/player.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
  require_relative "position"
3
4
  require_relative "handedness"
@@ -5,6 +6,8 @@ require_relative "team"
5
6
 
6
7
  module MLB
7
8
  class Player < Shale::Mapper
9
+ include Equalizer.new(:id)
10
+
8
11
  attribute :id, Shale::Type::Integer
9
12
  attribute :full_name, Shale::Type::String
10
13
  attribute :link, Shale::Type::String
@@ -39,6 +42,7 @@ module MLB
39
42
  json do
40
43
  map "id", to: :id
41
44
  map "fullName", to: :full_name
45
+ map "nameFirstLast", to: :full_name
42
46
  map "link", to: :link
43
47
  map "firstName", to: :first_name
44
48
  map "lastName", to: :last_name
data/lib/mlb/players.rb CHANGED
@@ -21,5 +21,25 @@ module MLB
21
21
  players = from_json(response)
22
22
  players.players
23
23
  end
24
+
25
+ def self.find(player)
26
+ player_id = player.respond_to?(:id) ? player.id : player
27
+ params = {personIds: player_id}
28
+ query_string = URI.encode_www_form(params)
29
+ response = CLIENT.get("people?#{query_string}")
30
+ players = from_json(response)
31
+ players.players.first
32
+ end
33
+
34
+ def self.find_all(*players)
35
+ return all if players.empty?
36
+
37
+ player_ids = players.map { |player| player.respond_to?(:id) ? player.id : player }.join(",")
38
+ params = {personIds: player_ids}
39
+ query_string = URI.encode_www_form(params)
40
+ response = CLIENT.get("people?#{query_string}")
41
+ players = from_json(response)
42
+ players.players
43
+ end
24
44
  end
25
45
  end
data/lib/mlb/position.rb CHANGED
@@ -1,7 +1,10 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
 
3
4
  module MLB
4
5
  class Position < Shale::Mapper
6
+ include Equalizer.new(:code)
7
+
5
8
  attribute :code, Shale::Type::String
6
9
  attribute :name, Shale::Type::String
7
10
  attribute :type, Shale::Type::String
@@ -46,7 +46,7 @@ module MLB
46
46
  in 307 | 308
47
47
  [request.method.downcase.to_sym, request.body]
48
48
  else
49
- [:get, nil]
49
+ :get
50
50
  end
51
51
 
52
52
  request_builder.build(http_method:, uri:, body:)
@@ -1,3 +1,4 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
  require_relative "player"
3
4
  require_relative "position"
@@ -5,6 +6,8 @@ require_relative "status"
5
6
 
6
7
  module MLB
7
8
  class RosterEntry < Shale::Mapper
9
+ include Equalizer.new(:team_id, :player)
10
+
8
11
  attribute :player, Player
9
12
  attribute :jersey_number, Shale::Type::Integer
10
13
  attribute :position, Position
data/lib/mlb/season.rb ADDED
@@ -0,0 +1,63 @@
1
+ require "equalizer"
2
+ require "shale"
3
+ require_relative "league"
4
+ require_relative "sport"
5
+
6
+ module MLB
7
+ class Season < Shale::Mapper
8
+ include Comparable
9
+ include Equalizer.new(:id)
10
+
11
+ attribute :id, Shale::Type::Integer
12
+ attribute :has_wildcard, Shale::Type::Boolean
13
+ attribute :preseason_start_date, Shale::Type::Date
14
+ attribute :preseason_end_date, Shale::Type::Date
15
+ attribute :season_start_date, Shale::Type::Date
16
+ attribute :spring_start_date, Shale::Type::Date
17
+ attribute :spring_end_date, Shale::Type::Date
18
+ attribute :regular_season_start_date, Shale::Type::Date
19
+ attribute :last_date_first_half, Shale::Type::Date
20
+ attribute :all_star_date, Shale::Type::Date
21
+ attribute :first_date_second_half, Shale::Type::Date
22
+ attribute :regular_season_end_date, Shale::Type::Date
23
+ attribute :postseason_start_date, Shale::Type::Date
24
+ attribute :postseason_end_date, Shale::Type::Date
25
+ attribute :season_end_date, Shale::Type::Date
26
+ attribute :offseason_start_date, Shale::Type::Date
27
+ attribute :offseason_end_date, Shale::Type::Date
28
+ attribute :season_level_gameday_type, Shale::Type::String
29
+ attribute :game_level_gameday_type, Shale::Type::String
30
+ attribute :qualifier_plate_appearances, Shale::Type::Float
31
+ attribute :qualifier_outs_pitched, Shale::Type::Float
32
+
33
+ alias_method :wildcard?, :has_wildcard
34
+
35
+ json do
36
+ map "seasonId", to: :id
37
+ map "hasWildcard", to: :has_wildcard
38
+ map "preSeasonStartDate", to: :preseason_start_date
39
+ map "preSeasonEndDate", to: :preseason_end_date
40
+ map "seasonStartDate", to: :season_start_date
41
+ map "springStartDate", to: :spring_start_date
42
+ map "springEndDate", to: :spring_end_date
43
+ map "regularSeasonStartDate", to: :regular_season_start_date
44
+ map "lastDate1stHalf", to: :last_date_first_half
45
+ map "allStarDate", to: :all_star_date
46
+ map "firstDate2ndHalf", to: :first_date_second_half
47
+ map "regularSeasonEndDate", to: :regular_season_end_date
48
+ map "postSeasonStartDate", to: :postseason_start_date
49
+ map "postSeasonEndDate", to: :postseason_end_date
50
+ map "seasonEndDate", to: :season_end_date
51
+ map "offseasonStartDate", to: :offseason_start_date
52
+ map "offSeasonEndDate", to: :offseason_end_date
53
+ map "seasonLevelGamedayType", to: :season_level_gameday_type
54
+ map "gameLevelGamedayType", to: :game_level_gameday_type
55
+ map "qualifierPlateAppearances", to: :qualifier_plate_appearances
56
+ map "qualifierOutsPitched", to: :qualifier_outs_pitched
57
+ end
58
+
59
+ def <=>(other)
60
+ id <=> other.id
61
+ end
62
+ end
63
+ end
@@ -1,7 +1,10 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
 
3
4
  module MLB
4
5
  class SeasonDateInfo < Shale::Mapper
6
+ include Equalizer.new(:season_id)
7
+
5
8
  attribute :season_id, Shale::Type::String
6
9
  attribute :pre_season_start_date, Shale::Type::Date
7
10
  attribute :pre_season_end_date, Shale::Type::Date
@@ -0,0 +1,30 @@
1
+ require "shale"
2
+ require "uri"
3
+ require_relative "sport"
4
+ require_relative "season"
5
+
6
+ module MLB
7
+ class Seasons < Shale::Mapper
8
+ attribute :copyright, Shale::Type::String
9
+ attribute :seasons, Season, collection: true
10
+
11
+ def self.all(sport: Sport.new(id: 1))
12
+ sport_id = sport.respond_to?(:id) ? sport.id : sport
13
+ params = {sportId: sport_id}
14
+ query_string = URI.encode_www_form(params)
15
+ response = CLIENT.get("seasons?#{query_string}")
16
+ seasons = from_json(response)
17
+ seasons.seasons.sort!
18
+ end
19
+
20
+ def self.find(season, sport: Sport.new(id: 1))
21
+ id = season.respond_to?(:id) ? season.id : season
22
+ sport_id = sport.respond_to?(:id) ? sport.id : sport
23
+ params = {sportId: sport_id}
24
+ query_string = URI.encode_www_form(params)
25
+ response = CLIENT.get("seasons/#{id}?#{query_string}")
26
+ seasons = from_json(response)
27
+ seasons.seasons.sort!.first
28
+ end
29
+ end
30
+ end
data/lib/mlb/sky.rb ADDED
@@ -0,0 +1,11 @@
1
+ require "equalizer"
2
+ require "shale"
3
+
4
+ module MLB
5
+ class Sky < Shale::Mapper
6
+ include Equalizer.new(:code)
7
+
8
+ attribute :code, Shale::Type::String
9
+ attribute :description, Shale::Type::String
10
+ end
11
+ end
data/lib/mlb/sport.rb CHANGED
@@ -1,8 +1,10 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
 
3
4
  module MLB
4
5
  class Sport < Shale::Mapper
5
6
  include Comparable
7
+ include Equalizer.new(:id)
6
8
 
7
9
  attribute :id, Shale::Type::Integer
8
10
  attribute :code, Shale::Type::String
data/lib/mlb/sports.rb CHANGED
@@ -16,7 +16,7 @@ module MLB
16
16
  id = sport.respond_to?(:id) ? sport.id : sport
17
17
  response = CLIENT.get("sports/#{id}")
18
18
  sports = from_json(response)
19
- sports.sports.first
19
+ sports.sports.sort!.first
20
20
  end
21
21
  end
22
22
  end
data/lib/mlb/status.rb CHANGED
@@ -1,7 +1,10 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
 
3
4
  module MLB
4
5
  class Status < Shale::Mapper
6
+ include Equalizer.new(:code)
7
+
5
8
  attribute :code, Shale::Type::String
6
9
  attribute :description, Shale::Type::String
7
10
  end
data/lib/mlb/team.rb CHANGED
@@ -1,4 +1,6 @@
1
+ require "equalizer"
1
2
  require "shale"
3
+ require "uri"
2
4
  require_relative "division"
3
5
  require_relative "league"
4
6
  require_relative "sport"
@@ -6,9 +8,11 @@ require_relative "venue"
6
8
 
7
9
  module MLB
8
10
  class Team < Shale::Mapper
11
+ include Equalizer.new(:id)
12
+
13
+ attribute :id, Shale::Type::Integer
9
14
  attribute :spring_league, League
10
15
  attribute :all_star_status, Shale::Type::String
11
- attribute :id, Shale::Type::Integer
12
16
  attribute :name, Shale::Type::String
13
17
  attribute :link, Shale::Type::String
14
18
  attribute :season, Shale::Type::Integer
@@ -1,9 +1,12 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
  require_relative "player"
3
4
  require_relative "team"
4
5
 
5
6
  module MLB
6
7
  class Transaction < Shale::Mapper
8
+ include Equalizer.new(:id)
9
+
7
10
  attribute :id, Shale::Type::Integer
8
11
  attribute :player, Player
9
12
  attribute :from_team, Team, default: nil
data/lib/mlb/venue.rb CHANGED
@@ -1,7 +1,10 @@
1
+ require "equalizer"
1
2
  require "shale"
2
3
 
3
4
  module MLB
4
5
  class Venue < Shale::Mapper
6
+ include Equalizer.new(:id)
7
+
5
8
  attribute :id, Shale::Type::Integer
6
9
  attribute :name, Shale::Type::String
7
10
  attribute :link, Shale::Type::String
data/lib/mlb/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require "rubygems/version"
2
2
 
3
3
  module MLB
4
- VERSION = Gem::Version.create("0.9.0")
4
+ VERSION = Gem::Version.create("0.10.0")
5
5
  end
@@ -0,0 +1,11 @@
1
+ require "equalizer"
2
+ require "shale"
3
+
4
+ module MLB
5
+ class WindDirection < Shale::Mapper
6
+ include Equalizer.new(:code)
7
+
8
+ attribute :code, Shale::Type::String
9
+ attribute :description, Shale::Type::String
10
+ end
11
+ end
data/lib/mlb.rb CHANGED
@@ -1,8 +1,11 @@
1
1
  require_relative "mlb/client"
2
+ require_relative "mlb/awards"
3
+ require_relative "mlb/conferences"
2
4
  require_relative "mlb/divisions"
3
5
  require_relative "mlb/leagues"
4
6
  require_relative "mlb/players"
5
7
  require_relative "mlb/roster"
8
+ require_relative "mlb/seasons"
6
9
  require_relative "mlb/sports"
7
10
  require_relative "mlb/teams"
8
11
  require_relative "mlb/transactions"
metadata CHANGED
@@ -1,30 +1,42 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mlb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Berlin
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-05-21 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: equalizer
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 0.0.11
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 0.0.11
13
26
  - !ruby/object:Gem::Dependency
14
27
  name: shale
15
28
  requirement: !ruby/object:Gem::Requirement
16
29
  requirements:
17
30
  - - "~>"
18
31
  - !ruby/object:Gem::Version
19
- version: '1.1'
32
+ version: '1.2'
20
33
  type: :runtime
21
34
  prerelease: false
22
35
  version_requirements: !ruby/object:Gem::Requirement
23
36
  requirements:
24
37
  - - "~>"
25
38
  - !ruby/object:Gem::Version
26
- version: '1.1'
27
- description:
39
+ version: '1.2'
28
40
  email: sferik@gmail.com
29
41
  executables: []
30
42
  extensions: []
@@ -36,7 +48,11 @@ files:
36
48
  - bin/console
37
49
  - bin/setup
38
50
  - lib/mlb.rb
51
+ - lib/mlb/award.rb
52
+ - lib/mlb/awards.rb
39
53
  - lib/mlb/client.rb
54
+ - lib/mlb/conference.rb
55
+ - lib/mlb/conferences.rb
40
56
  - lib/mlb/connection.rb
41
57
  - lib/mlb/division.rb
42
58
  - lib/mlb/divisions.rb
@@ -71,7 +87,10 @@ files:
71
87
  - lib/mlb/request_builder.rb
72
88
  - lib/mlb/roster.rb
73
89
  - lib/mlb/roster_entry.rb
90
+ - lib/mlb/season.rb
74
91
  - lib/mlb/season_date_info.rb
92
+ - lib/mlb/seasons.rb
93
+ - lib/mlb/sky.rb
75
94
  - lib/mlb/sport.rb
76
95
  - lib/mlb/sports.rb
77
96
  - lib/mlb/status.rb
@@ -82,19 +101,19 @@ files:
82
101
  - lib/mlb/venue.rb
83
102
  - lib/mlb/venues.rb
84
103
  - lib/mlb/version.rb
85
- - sig/mlb.rbs
104
+ - lib/mlb/wind_direction.rb
86
105
  homepage: https://sferik.github.io/mlb-ruby
87
106
  licenses:
88
107
  - MIT
89
108
  metadata:
90
109
  allowed_push_host: https://rubygems.org
91
- rubygems_mfa_required: 'true'
92
- homepage_uri: https://sferik.github.io/mlb-ruby
93
- source_code_uri: https://github.com/sferik/mlb-ruby
94
- changelog_uri: https://github.com/sferik/mlb-ruby/blob/master/CHANGELOG.md
95
110
  bug_tracker_uri: https://github.com/sferik/mlb-ruby/issues
111
+ changelog_uri: https://github.com/sferik/mlb-ruby/blob/master/CHANGELOG.md
96
112
  documentation_uri: https://rubydoc.info/gems/mlb/
97
- post_install_message:
113
+ funding_uri: https://github.com/sponsors/sferik/
114
+ homepage_uri: https://sferik.github.io/mlb-ruby
115
+ rubygems_mfa_required: 'true'
116
+ source_code_uri: https://github.com/sferik/mlb-ruby
98
117
  rdoc_options: []
99
118
  require_paths:
100
119
  - lib
@@ -102,15 +121,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
121
  requirements:
103
122
  - - ">="
104
123
  - !ruby/object:Gem::Version
105
- version: 3.1.2
124
+ version: '3.2'
106
125
  required_rubygems_version: !ruby/object:Gem::Requirement
107
126
  requirements:
108
127
  - - ">="
109
128
  - !ruby/object:Gem::Version
110
129
  version: '0'
111
130
  requirements: []
112
- rubygems_version: 3.5.10
113
- signing_key:
131
+ rubygems_version: 3.6.8
114
132
  specification_version: 4
115
133
  summary: A Ruby interface to the MLB Stats API.
116
134
  test_files: []
data/sig/mlb.rbs DELETED
@@ -1,186 +0,0 @@
1
- module MLB
2
- CLIENT: Client
3
- VERSION: Gem::Version
4
-
5
- class Error < StandardError
6
- end
7
-
8
- class ClientError < HTTPError
9
- end
10
-
11
- class BadGateway < ClientError
12
- end
13
-
14
- class BadRequest < ClientError
15
- end
16
-
17
- class ConnectionException < ClientError
18
- end
19
-
20
- class HTTPError < Error
21
- attr_reader response : Net::HTTPResponse
22
- attr_reader code : String
23
-
24
- def initialize: (response: Net::HTTPResponse) -> void
25
- end
26
-
27
- class Forbidden < ClientError
28
- end
29
-
30
- class GatewayTimeout < ClientError
31
- end
32
-
33
- class Gone < ClientError
34
- end
35
-
36
- class InternalServerError < ServerError
37
- end
38
-
39
- class NetworkError < Error
40
- end
41
-
42
- class NotAcceptable < ClientError
43
- end
44
-
45
- class NotFound < ClientError
46
- end
47
-
48
- class PayloadTooLarge < ClientError
49
- end
50
-
51
- class ServerError < HTTPError
52
- end
53
-
54
- class ServiceUnavailable < ServerError
55
- end
56
-
57
- class TooManyRedirects < Error
58
- end
59
-
60
- class TooManyRequests < ClientError
61
- end
62
-
63
- class Unauthorized < ClientError
64
- end
65
-
66
- class UnprocessableEntity < ClientError
67
- end
68
-
69
- class Connection
70
- DEFAULT_HOST: String
71
- DEFAULT_PORT: Integer
72
- DEFAULT_OPEN_TIMEOUT: Integer
73
- DEFAULT_READ_TIMEOUT: Integer
74
- DEFAULT_WRITE_TIMEOUT: Integer
75
- DEFAULT_DEBUG_OUTPUT: IO
76
- NETWORK_ERRORS: Array[(singleton(Errno::ECONNREFUSED) | singleton(Errno::ECONNRESET) | singleton(Net::OpenTimeout) | singleton(Net::ReadTimeout) | singleton(OpenSSL::SSL::SSLError))]
77
-
78
- @proxy_url: URI::Generic | String
79
-
80
- extend Forwardable
81
-
82
- attr_accessor open_timeout : Float | Integer
83
- attr_accessor read_timeout : Float | Integer
84
- attr_accessor write_timeout : Float | Integer
85
- attr_accessor debug_output : IO
86
-
87
- attr_reader proxy_uri: URI::Generic?
88
- attr_reader proxy_host : String?
89
- attr_reader proxy_port : Integer?
90
- attr_reader proxy_user : String?
91
- attr_reader proxy_pass : String?
92
-
93
- def initialize: (?open_timeout: Float | Integer, ?read_timeout: Float | Integer, ?write_timeout: Float | Integer, ?proxy_url: URI::Generic? | String?, ?debug_output: IO) -> void
94
- def proxy_url=: (URI::Generic | String proxy_url) -> void
95
- def perform: (request: Net::HTTPRequest) -> Net::HTTPResponse
96
-
97
- private
98
- def build_http_client: (?String host, ?Integer port) -> Net::HTTP
99
- def configure_http_client: (Net::HTTP http_client) -> Net::HTTP
100
- end
101
-
102
- class RequestBuilder
103
- HTTP_METHODS: Hash[Symbol, (singleton(Net::HTTP::Get) | singleton(Net::HTTP::Post) | singleton(Net::HTTP::Put) | singleton(Net::HTTP::Delete))]
104
- DEFAULT_HEADERS: Hash[String, String]
105
-
106
- def initialize: (?content_type: String, ?user_agent: String) -> void
107
- def build: (http_method: Symbol, uri: URI::Generic, ?body: String?, ?headers: Hash[String, String]) -> (Net::HTTPRequest)
108
-
109
- private
110
- def create_request: (http_method: Symbol, uri: URI::Generic, body: String?) -> (Net::HTTPRequest)
111
- def add_headers: (request: Net::HTTPRequest, headers: Hash[String, String]) -> void
112
- def escape_query_params: (URI::Generic uri) -> URI::Generic
113
- end
114
-
115
- class RedirectHandler
116
- DEFAULT_MAX_REDIRECTS: Integer
117
-
118
- attr_reader connection: Connection
119
- attr_reader request_builder: RequestBuilder
120
- attr_reader max_redirects: Integer
121
- def initialize: (?connection: Connection, ?request_builder: RequestBuilder, ?max_redirects: Integer) -> void
122
- def handle: (response: Net::HTTPResponse, request: Net::HTTPRequest, base_url: String, ?redirect_count: Integer) -> Net::HTTPResponse
123
-
124
- private
125
- def build_new_uri: (Net::HTTPResponse response, String base_url) -> URI::Generic
126
- def build_request: (Net::HTTPRequest request, URI::Generic new_uri, Integer response_code) -> Net::HTTPRequest
127
- def send_new_request: (URI::Generic new_uri, Net::HTTPRequest new_request) -> Net::HTTPResponse
128
- end
129
-
130
- class ErrorHandler
131
- ERROR_MAP: Hash[Integer, singleton(BadGateway) | singleton(BadRequest) | singleton(ConnectionException) | singleton(Forbidden) | singleton(GatewayTimeout) | singleton(Gone) | singleton(InternalServerError) | singleton(NotAcceptable) | singleton(NotFound) | singleton(PayloadTooLarge) | singleton(ServiceUnavailable) | singleton(TooManyRequests) | singleton(Unauthorized) | singleton(UnprocessableEntity)]
132
- JSON_CONTENT_TYPE_REGEXP: Regexp
133
-
134
- def parse: (response: Net::HTTPResponse) -> untyped
135
-
136
- private
137
- def error: (Net::HTTPResponse response) -> HTTPError
138
- def error_class: (Net::HTTPResponse response) -> (singleton(BadGateway) | singleton(BadRequest) | singleton(ConnectionException) | singleton(Forbidden) | singleton(GatewayTimeout) | singleton(Gone) | singleton(InternalServerError) | singleton(NotAcceptable) | singleton(NotFound) | singleton(PayloadTooLarge) | singleton(ServiceUnavailable) | singleton(TooManyRequests) | singleton(Unauthorized) | singleton(UnprocessableEntity))
139
- def json?: (Net::HTTPResponse response) -> bool
140
- end
141
-
142
- class Client
143
- DEFAULT_BASE_URL: String
144
- extend Forwardable
145
- @connection: Connection
146
- @request_builder: RequestBuilder
147
- @redirect_handler: RedirectHandler
148
- @error_handler: ErrorHandler
149
-
150
- attr_accessor base_url: String
151
- def initialize: (?base_url: String, ?open_timeout: Integer, ?read_timeout: Integer, ?write_timeout: Integer, ?debug_output: untyped, ?proxy_url: nil, ?max_redirects: Integer) -> void
152
- def get: (String endpoint, ?headers: Hash[String, String]) -> untyped
153
- def post: (String endpoint, ?String? body, ?headers: Hash[String, String]) -> untyped
154
- def put: (String endpoint, ?String? body, ?headers: Hash[String, String]) -> untyped
155
- def delete: (String endpoint, ?headers: Hash[String, String]) -> untyped
156
-
157
- private
158
- def execute_request: (:delete | :get | :post | :put http_method, String endpoint, ?body: String?, ?headers: Hash[String, String]) -> nil
159
- end
160
-
161
- attr_accessor effective_date: String
162
- attr_accessor player_id: String
163
- attr_accessor team_id: String
164
-
165
- class Team < Struct[untyped]
166
- attr_accessor team_id: String
167
- def self.new: -> void
168
- def self.all: (?season: Integer, ?sort_order: String, ?all_star: false) -> Array[Team]
169
- def roster: -> Array[Player]
170
- end
171
-
172
- class Transaction < Struct[untyped]
173
- attr_accessor player_id: String
174
- attr_accessor team_id: String
175
- def self.new: -> void
176
- def self.all: (?season: Integer, ?sort_order: String, ?all_star: false) -> Array[Team]
177
- def team: -> Team
178
- def player: -> Player
179
- end
180
-
181
- class Player < Struct[untyped]
182
- attr_accessor player_id: String
183
- def self.new: -> void
184
- def team: -> Team
185
- end
186
- end