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 +4 -4
- data/CHANGELOG.md +7 -1
- data/LICENSE.txt +1 -1
- data/README.md +77 -1
- data/lib/mlb/award.rb +48 -0
- data/lib/mlb/awards.rb +22 -0
- data/lib/mlb/client.rb +0 -1
- data/lib/mlb/conference.rb +32 -0
- data/lib/mlb/conferences.rb +25 -0
- data/lib/mlb/division.rb +2 -0
- data/lib/mlb/divisions.rb +1 -1
- data/lib/mlb/handedness.rb +3 -0
- data/lib/mlb/league.rb +2 -0
- data/lib/mlb/leagues.rb +1 -1
- data/lib/mlb/player.rb +4 -0
- data/lib/mlb/players.rb +20 -0
- data/lib/mlb/position.rb +3 -0
- data/lib/mlb/redirect_handler.rb +1 -1
- data/lib/mlb/roster_entry.rb +3 -0
- data/lib/mlb/season.rb +63 -0
- data/lib/mlb/season_date_info.rb +3 -0
- data/lib/mlb/seasons.rb +30 -0
- data/lib/mlb/sky.rb +11 -0
- data/lib/mlb/sport.rb +2 -0
- data/lib/mlb/sports.rb +1 -1
- data/lib/mlb/status.rb +3 -0
- data/lib/mlb/team.rb +5 -1
- data/lib/mlb/transaction.rb +3 -0
- data/lib/mlb/venue.rb +3 -0
- data/lib/mlb/version.rb +1 -1
- data/lib/mlb/wind_direction.rb +11 -0
- data/lib/mlb.rb +3 -0
- metadata +33 -15
- data/sig/mlb.rbs +0 -186
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7cffb04037de85352415288a1c8756fb223d79181b7051322fa671e60a264580
|
4
|
+
data.tar.gz: 141e7eb182d2130fb4906aa9a6d93fdd640562f432004b29ecca505a8c96dd5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98a59eca40923bdeaecb637dbf863282fe9958c554afe15a3e75964745129aec710bcb24c8e2eeacc709190f37ac3a97bc76babc9531432e589985222ab3bfaf
|
7
|
+
data.tar.gz: ba7675aab23a6167c94adcb9b554b9f5b1645182d452152a690a1904af9a2af58fb9aec19624e671b3fc14cc23a4ae4ad57e2f366fa4b795905b491733e09775
|
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
## [0.
|
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-
|
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.
|
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
data/lib/mlb/handedness.rb
CHANGED
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
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
data/lib/mlb/redirect_handler.rb
CHANGED
data/lib/mlb/roster_entry.rb
CHANGED
@@ -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
|
data/lib/mlb/season_date_info.rb
CHANGED
@@ -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
|
data/lib/mlb/seasons.rb
ADDED
@@ -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
data/lib/mlb/sport.rb
CHANGED
data/lib/mlb/sports.rb
CHANGED
data/lib/mlb/status.rb
CHANGED
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
|
data/lib/mlb/transaction.rb
CHANGED
@@ -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
data/lib/mlb/version.rb
CHANGED
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.
|
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:
|
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.
|
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.
|
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
|
-
-
|
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
|
-
|
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.
|
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.
|
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
|