sports-odds-api 1.0.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.
Files changed (158) hide show
  1. checksums.yaml +7 -0
  2. data/.ignore +2 -0
  3. data/CHANGELOG.md +10 -0
  4. data/README.md +186 -0
  5. data/SECURITY.md +27 -0
  6. data/lib/sports_odds_api/client.rb +112 -0
  7. data/lib/sports_odds_api/errors.rb +228 -0
  8. data/lib/sports_odds_api/file_part.rb +55 -0
  9. data/lib/sports_odds_api/internal/next_cursor_page.rb +86 -0
  10. data/lib/sports_odds_api/internal/transport/base_client.rb +580 -0
  11. data/lib/sports_odds_api/internal/transport/pooled_net_requester.rb +201 -0
  12. data/lib/sports_odds_api/internal/type/array_of.rb +168 -0
  13. data/lib/sports_odds_api/internal/type/base_model.rb +534 -0
  14. data/lib/sports_odds_api/internal/type/base_page.rb +55 -0
  15. data/lib/sports_odds_api/internal/type/boolean.rb +77 -0
  16. data/lib/sports_odds_api/internal/type/converter.rb +327 -0
  17. data/lib/sports_odds_api/internal/type/enum.rb +131 -0
  18. data/lib/sports_odds_api/internal/type/file_input.rb +108 -0
  19. data/lib/sports_odds_api/internal/type/hash_of.rb +188 -0
  20. data/lib/sports_odds_api/internal/type/request_parameters.rb +42 -0
  21. data/lib/sports_odds_api/internal/type/union.rb +243 -0
  22. data/lib/sports_odds_api/internal/type/unknown.rb +81 -0
  23. data/lib/sports_odds_api/internal/util.rb +914 -0
  24. data/lib/sports_odds_api/internal.rb +20 -0
  25. data/lib/sports_odds_api/models/account_get_usage_params.rb +14 -0
  26. data/lib/sports_odds_api/models/account_usage.rb +91 -0
  27. data/lib/sports_odds_api/models/event.rb +686 -0
  28. data/lib/sports_odds_api/models/event_get_params.rb +195 -0
  29. data/lib/sports_odds_api/models/league.rb +39 -0
  30. data/lib/sports_odds_api/models/league_get_params.rb +30 -0
  31. data/lib/sports_odds_api/models/league_get_response.rb +8 -0
  32. data/lib/sports_odds_api/models/player.rb +128 -0
  33. data/lib/sports_odds_api/models/player_get_params.rb +58 -0
  34. data/lib/sports_odds_api/models/rate_limit_interval.rb +92 -0
  35. data/lib/sports_odds_api/models/sport.rb +197 -0
  36. data/lib/sports_odds_api/models/sport_get_params.rb +14 -0
  37. data/lib/sports_odds_api/models/sport_get_response.rb +8 -0
  38. data/lib/sports_odds_api/models/stat.rb +144 -0
  39. data/lib/sports_odds_api/models/stat_get_params.rb +43 -0
  40. data/lib/sports_odds_api/models/stat_get_response.rb +8 -0
  41. data/lib/sports_odds_api/models/stream_events_params.rb +38 -0
  42. data/lib/sports_odds_api/models/stream_events_response.rb +120 -0
  43. data/lib/sports_odds_api/models/team.rb +162 -0
  44. data/lib/sports_odds_api/models/team_get_params.rb +58 -0
  45. data/lib/sports_odds_api/models.rb +76 -0
  46. data/lib/sports_odds_api/request_options.rb +78 -0
  47. data/lib/sports_odds_api/resources/account.rb +33 -0
  48. data/lib/sports_odds_api/resources/events.rb +94 -0
  49. data/lib/sports_odds_api/resources/leagues.rb +39 -0
  50. data/lib/sports_odds_api/resources/players.rb +48 -0
  51. data/lib/sports_odds_api/resources/sports.rb +33 -0
  52. data/lib/sports_odds_api/resources/stats.rb +44 -0
  53. data/lib/sports_odds_api/resources/stream.rb +40 -0
  54. data/lib/sports_odds_api/resources/teams.rb +48 -0
  55. data/lib/sports_odds_api/version.rb +5 -0
  56. data/lib/sports_odds_api.rb +82 -0
  57. data/manifest.yaml +15 -0
  58. data/rbi/sports_odds_api/client.rbi +83 -0
  59. data/rbi/sports_odds_api/errors.rbi +205 -0
  60. data/rbi/sports_odds_api/file_part.rbi +37 -0
  61. data/rbi/sports_odds_api/internal/next_cursor_page.rbi +22 -0
  62. data/rbi/sports_odds_api/internal/transport/base_client.rbi +305 -0
  63. data/rbi/sports_odds_api/internal/transport/pooled_net_requester.rbi +80 -0
  64. data/rbi/sports_odds_api/internal/type/array_of.rbi +104 -0
  65. data/rbi/sports_odds_api/internal/type/base_model.rbi +310 -0
  66. data/rbi/sports_odds_api/internal/type/base_page.rbi +43 -0
  67. data/rbi/sports_odds_api/internal/type/boolean.rbi +58 -0
  68. data/rbi/sports_odds_api/internal/type/converter.rbi +225 -0
  69. data/rbi/sports_odds_api/internal/type/enum.rbi +82 -0
  70. data/rbi/sports_odds_api/internal/type/file_input.rbi +59 -0
  71. data/rbi/sports_odds_api/internal/type/hash_of.rbi +104 -0
  72. data/rbi/sports_odds_api/internal/type/request_parameters.rbi +31 -0
  73. data/rbi/sports_odds_api/internal/type/union.rbi +128 -0
  74. data/rbi/sports_odds_api/internal/type/unknown.rbi +58 -0
  75. data/rbi/sports_odds_api/internal/util.rbi +487 -0
  76. data/rbi/sports_odds_api/internal.rbi +18 -0
  77. data/rbi/sports_odds_api/models/account_get_usage_params.rbi +32 -0
  78. data/rbi/sports_odds_api/models/account_usage.rbi +173 -0
  79. data/rbi/sports_odds_api/models/event.rbi +1269 -0
  80. data/rbi/sports_odds_api/models/event_get_params.rbi +286 -0
  81. data/rbi/sports_odds_api/models/league.rbi +74 -0
  82. data/rbi/sports_odds_api/models/league_get_params.rbi +60 -0
  83. data/rbi/sports_odds_api/models/league_get_response.rbi +11 -0
  84. data/rbi/sports_odds_api/models/player.rbi +247 -0
  85. data/rbi/sports_odds_api/models/player_get_params.rbi +95 -0
  86. data/rbi/sports_odds_api/models/rate_limit_interval.rbi +176 -0
  87. data/rbi/sports_odds_api/models/sport.rbi +371 -0
  88. data/rbi/sports_odds_api/models/sport_get_params.rbi +29 -0
  89. data/rbi/sports_odds_api/models/sport_get_response.rbi +11 -0
  90. data/rbi/sports_odds_api/models/stat.rbi +273 -0
  91. data/rbi/sports_odds_api/models/stat_get_params.rbi +72 -0
  92. data/rbi/sports_odds_api/models/stat_get_response.rbi +11 -0
  93. data/rbi/sports_odds_api/models/stream_events_params.rbi +71 -0
  94. data/rbi/sports_odds_api/models/stream_events_response.rbi +247 -0
  95. data/rbi/sports_odds_api/models/team.rbi +305 -0
  96. data/rbi/sports_odds_api/models/team_get_params.rbi +92 -0
  97. data/rbi/sports_odds_api/models.rbi +35 -0
  98. data/rbi/sports_odds_api/request_options.rbi +59 -0
  99. data/rbi/sports_odds_api/resources/account.rbi +21 -0
  100. data/rbi/sports_odds_api/resources/events.rbi +96 -0
  101. data/rbi/sports_odds_api/resources/leagues.rbi +29 -0
  102. data/rbi/sports_odds_api/resources/players.rbi +41 -0
  103. data/rbi/sports_odds_api/resources/sports.rbi +21 -0
  104. data/rbi/sports_odds_api/resources/stats.rbi +34 -0
  105. data/rbi/sports_odds_api/resources/stream.rbi +32 -0
  106. data/rbi/sports_odds_api/resources/teams.rbi +39 -0
  107. data/rbi/sports_odds_api/version.rbi +5 -0
  108. data/sig/sports_odds_api/client.rbs +45 -0
  109. data/sig/sports_odds_api/errors.rbs +117 -0
  110. data/sig/sports_odds_api/file_part.rbs +21 -0
  111. data/sig/sports_odds_api/internal/next_cursor_page.rbs +13 -0
  112. data/sig/sports_odds_api/internal/transport/base_client.rbs +133 -0
  113. data/sig/sports_odds_api/internal/transport/pooled_net_requester.rbs +45 -0
  114. data/sig/sports_odds_api/internal/type/array_of.rbs +48 -0
  115. data/sig/sports_odds_api/internal/type/base_model.rbs +104 -0
  116. data/sig/sports_odds_api/internal/type/base_page.rbs +24 -0
  117. data/sig/sports_odds_api/internal/type/boolean.rbs +26 -0
  118. data/sig/sports_odds_api/internal/type/converter.rbs +79 -0
  119. data/sig/sports_odds_api/internal/type/enum.rbs +32 -0
  120. data/sig/sports_odds_api/internal/type/file_input.rbs +25 -0
  121. data/sig/sports_odds_api/internal/type/hash_of.rbs +48 -0
  122. data/sig/sports_odds_api/internal/type/request_parameters.rbs +19 -0
  123. data/sig/sports_odds_api/internal/type/union.rbs +52 -0
  124. data/sig/sports_odds_api/internal/type/unknown.rbs +26 -0
  125. data/sig/sports_odds_api/internal/util.rbs +185 -0
  126. data/sig/sports_odds_api/internal.rbs +10 -0
  127. data/sig/sports_odds_api/models/account_get_usage_params.rbs +15 -0
  128. data/sig/sports_odds_api/models/account_usage.rbs +116 -0
  129. data/sig/sports_odds_api/models/event.rbs +860 -0
  130. data/sig/sports_odds_api/models/event_get_params.rbs +168 -0
  131. data/sig/sports_odds_api/models/league.rbs +50 -0
  132. data/sig/sports_odds_api/models/league_get_params.rbs +32 -0
  133. data/sig/sports_odds_api/models/league_get_response.rbs +7 -0
  134. data/sig/sports_odds_api/models/player.rbs +162 -0
  135. data/sig/sports_odds_api/models/player_get_params.rbs +56 -0
  136. data/sig/sports_odds_api/models/rate_limit_interval.rbs +67 -0
  137. data/sig/sports_odds_api/models/sport.rbs +241 -0
  138. data/sig/sports_odds_api/models/sport_get_params.rbs +15 -0
  139. data/sig/sports_odds_api/models/sport_get_response.rbs +7 -0
  140. data/sig/sports_odds_api/models/stat.rbs +166 -0
  141. data/sig/sports_odds_api/models/stat_get_params.rbs +38 -0
  142. data/sig/sports_odds_api/models/stat_get_response.rbs +7 -0
  143. data/sig/sports_odds_api/models/stream_events_params.rbs +38 -0
  144. data/sig/sports_odds_api/models/stream_events_response.rbs +151 -0
  145. data/sig/sports_odds_api/models/team.rbs +201 -0
  146. data/sig/sports_odds_api/models/team_get_params.rbs +56 -0
  147. data/sig/sports_odds_api/models.rbs +33 -0
  148. data/sig/sports_odds_api/request_options.rbs +36 -0
  149. data/sig/sports_odds_api/resources/account.rbs +11 -0
  150. data/sig/sports_odds_api/resources/events.rbs +32 -0
  151. data/sig/sports_odds_api/resources/leagues.rbs +13 -0
  152. data/sig/sports_odds_api/resources/players.rbs +16 -0
  153. data/sig/sports_odds_api/resources/sports.rbs +11 -0
  154. data/sig/sports_odds_api/resources/stats.rbs +14 -0
  155. data/sig/sports_odds_api/resources/stream.rbs +14 -0
  156. data/sig/sports_odds_api/resources/teams.rbs +16 -0
  157. data/sig/sports_odds_api/version.rbs +3 -0
  158. metadata +215 -0
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SportsOddsAPI
4
+ module Resources
5
+ class Stream
6
+ # Setup streamed (WebSocket) connection
7
+ #
8
+ # @overload events(event_id: nil, feed: nil, league_id: nil, request_options: {})
9
+ #
10
+ # @param event_id [String] An eventID to stream events for
11
+ #
12
+ # @param feed [String] The feed you would like to subscribe to
13
+ #
14
+ # @param league_id [String] A leagueID to stream events for
15
+ #
16
+ # @param request_options [SportsOddsAPI::RequestOptions, Hash{Symbol=>Object}, nil]
17
+ #
18
+ # @return [SportsOddsAPI::Models::StreamEventsResponse]
19
+ #
20
+ # @see SportsOddsAPI::Models::StreamEventsParams
21
+ def events(params = {})
22
+ parsed, options = SportsOddsAPI::StreamEventsParams.dump_request(params)
23
+ @client.request(
24
+ method: :get,
25
+ path: "stream/events",
26
+ query: parsed.transform_keys(event_id: "eventID", league_id: "leagueID"),
27
+ model: SportsOddsAPI::Models::StreamEventsResponse,
28
+ options: options
29
+ )
30
+ end
31
+
32
+ # @api private
33
+ #
34
+ # @param client [SportsOddsAPI::Client]
35
+ def initialize(client:)
36
+ @client = client
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SportsOddsAPI
4
+ module Resources
5
+ class Teams
6
+ # Some parameter documentations has been truncated, see
7
+ # {SportsOddsAPI::Models::TeamGetParams} for more details.
8
+ #
9
+ # Get a list of Teams by ID or league
10
+ #
11
+ # @overload get(cursor: nil, league_id: nil, limit: nil, sport_id: nil, team_id: nil, request_options: {})
12
+ #
13
+ # @param cursor [String] The cursor for the request. Used to get the next group of Teams. This should be
14
+ #
15
+ # @param league_id [String] A single leagueID or comma-separated list of leagueIDs to get Teams for
16
+ #
17
+ # @param limit [Float] The maximum number of Teams to return
18
+ #
19
+ # @param sport_id [String] A single sportID or comma-separated list of sportIDs to get Teams for
20
+ #
21
+ # @param team_id [String] A single teamID or comma-separated list of teamIDs to get data for
22
+ #
23
+ # @param request_options [SportsOddsAPI::RequestOptions, Hash{Symbol=>Object}, nil]
24
+ #
25
+ # @return [SportsOddsAPI::Internal::NextCursorPage<SportsOddsAPI::Models::Team>]
26
+ #
27
+ # @see SportsOddsAPI::Models::TeamGetParams
28
+ def get(params = {})
29
+ parsed, options = SportsOddsAPI::TeamGetParams.dump_request(params)
30
+ @client.request(
31
+ method: :get,
32
+ path: "teams/",
33
+ query: parsed.transform_keys(league_id: "leagueID", sport_id: "sportID", team_id: "teamID"),
34
+ page: SportsOddsAPI::Internal::NextCursorPage,
35
+ model: SportsOddsAPI::Team,
36
+ options: options
37
+ )
38
+ end
39
+
40
+ # @api private
41
+ #
42
+ # @param client [SportsOddsAPI::Client]
43
+ def initialize(client:)
44
+ @client = client
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SportsOddsAPI
4
+ VERSION = "1.0.0"
5
+ end
@@ -0,0 +1,82 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Standard libraries.
4
+ # rubocop:disable Lint/RedundantRequireStatement
5
+ require "English"
6
+ require "cgi"
7
+ require "date"
8
+ require "erb"
9
+ require "etc"
10
+ require "json"
11
+ require "net/http"
12
+ require "pathname"
13
+ require "rbconfig"
14
+ require "securerandom"
15
+ require "set"
16
+ require "stringio"
17
+ require "time"
18
+ require "uri"
19
+ # rubocop:enable Lint/RedundantRequireStatement
20
+
21
+ # We already ship the preferred sorbet manifests in the package itself.
22
+ # `tapioca` currently does not offer us a way to opt out of unnecessary compilation.
23
+ if Object.const_defined?(:Tapioca) &&
24
+ caller.chain([$PROGRAM_NAME]).chain(ARGV).any?(/tapioca/) &&
25
+ ARGV.none?(/dsl/)
26
+ return
27
+ end
28
+
29
+ # Gems.
30
+ require "connection_pool"
31
+
32
+ # Package files.
33
+ require_relative "sports_odds_api/version"
34
+ require_relative "sports_odds_api/internal/util"
35
+ require_relative "sports_odds_api/internal/type/converter"
36
+ require_relative "sports_odds_api/internal/type/unknown"
37
+ require_relative "sports_odds_api/internal/type/boolean"
38
+ require_relative "sports_odds_api/internal/type/file_input"
39
+ require_relative "sports_odds_api/internal/type/enum"
40
+ require_relative "sports_odds_api/internal/type/union"
41
+ require_relative "sports_odds_api/internal/type/array_of"
42
+ require_relative "sports_odds_api/internal/type/hash_of"
43
+ require_relative "sports_odds_api/internal/type/base_model"
44
+ require_relative "sports_odds_api/internal/type/base_page"
45
+ require_relative "sports_odds_api/internal/type/request_parameters"
46
+ require_relative "sports_odds_api/internal"
47
+ require_relative "sports_odds_api/request_options"
48
+ require_relative "sports_odds_api/file_part"
49
+ require_relative "sports_odds_api/errors"
50
+ require_relative "sports_odds_api/internal/transport/base_client"
51
+ require_relative "sports_odds_api/internal/transport/pooled_net_requester"
52
+ require_relative "sports_odds_api/client"
53
+ require_relative "sports_odds_api/internal/next_cursor_page"
54
+ require_relative "sports_odds_api/models/account_get_usage_params"
55
+ require_relative "sports_odds_api/models/account_usage"
56
+ require_relative "sports_odds_api/models/event"
57
+ require_relative "sports_odds_api/models/event_get_params"
58
+ require_relative "sports_odds_api/models/league"
59
+ require_relative "sports_odds_api/models/league_get_params"
60
+ require_relative "sports_odds_api/models/league_get_response"
61
+ require_relative "sports_odds_api/models/player"
62
+ require_relative "sports_odds_api/models/player_get_params"
63
+ require_relative "sports_odds_api/models/rate_limit_interval"
64
+ require_relative "sports_odds_api/models/sport"
65
+ require_relative "sports_odds_api/models/sport_get_params"
66
+ require_relative "sports_odds_api/models/sport_get_response"
67
+ require_relative "sports_odds_api/models/stat"
68
+ require_relative "sports_odds_api/models/stat_get_params"
69
+ require_relative "sports_odds_api/models/stat_get_response"
70
+ require_relative "sports_odds_api/models/stream_events_params"
71
+ require_relative "sports_odds_api/models/stream_events_response"
72
+ require_relative "sports_odds_api/models/team"
73
+ require_relative "sports_odds_api/models/team_get_params"
74
+ require_relative "sports_odds_api/models"
75
+ require_relative "sports_odds_api/resources/account"
76
+ require_relative "sports_odds_api/resources/events"
77
+ require_relative "sports_odds_api/resources/leagues"
78
+ require_relative "sports_odds_api/resources/players"
79
+ require_relative "sports_odds_api/resources/sports"
80
+ require_relative "sports_odds_api/resources/stats"
81
+ require_relative "sports_odds_api/resources/stream"
82
+ require_relative "sports_odds_api/resources/teams"
data/manifest.yaml ADDED
@@ -0,0 +1,15 @@
1
+ dependencies:
2
+ - English
3
+ - cgi
4
+ - date
5
+ - erb
6
+ - etc
7
+ - json
8
+ - net/http
9
+ - pathname
10
+ - rbconfig
11
+ - securerandom
12
+ - set
13
+ - stringio
14
+ - time
15
+ - uri
@@ -0,0 +1,83 @@
1
+ # typed: strong
2
+
3
+ module SportsOddsAPI
4
+ class Client < SportsOddsAPI::Internal::Transport::BaseClient
5
+ DEFAULT_MAX_RETRIES = 2
6
+
7
+ DEFAULT_TIMEOUT_IN_SECONDS = T.let(60.0, Float)
8
+
9
+ DEFAULT_INITIAL_RETRY_DELAY = T.let(0.5, Float)
10
+
11
+ DEFAULT_MAX_RETRY_DELAY = T.let(8.0, Float)
12
+
13
+ # API key via header
14
+ sig { returns(T.nilable(String)) }
15
+ attr_reader :api_key_header
16
+
17
+ # API key via query param
18
+ sig { returns(T.nilable(String)) }
19
+ attr_reader :api_key_param
20
+
21
+ sig { returns(SportsOddsAPI::Resources::Events) }
22
+ attr_reader :events
23
+
24
+ sig { returns(SportsOddsAPI::Resources::Teams) }
25
+ attr_reader :teams
26
+
27
+ sig { returns(SportsOddsAPI::Resources::Players) }
28
+ attr_reader :players
29
+
30
+ sig { returns(SportsOddsAPI::Resources::Leagues) }
31
+ attr_reader :leagues
32
+
33
+ sig { returns(SportsOddsAPI::Resources::Sports) }
34
+ attr_reader :sports
35
+
36
+ sig { returns(SportsOddsAPI::Resources::Stats) }
37
+ attr_reader :stats
38
+
39
+ sig { returns(SportsOddsAPI::Resources::Account) }
40
+ attr_reader :account
41
+
42
+ sig { returns(SportsOddsAPI::Resources::Stream) }
43
+ attr_reader :stream
44
+
45
+ # @api private
46
+ sig { override.returns(T::Hash[String, String]) }
47
+ private def auth_headers
48
+ end
49
+
50
+ # @api private
51
+ sig { override.returns(T::Hash[String, String]) }
52
+ private def auth_query
53
+ end
54
+
55
+ # Creates and returns a new client for interacting with the API.
56
+ sig do
57
+ params(
58
+ api_key_header: T.nilable(String),
59
+ api_key_param: T.nilable(String),
60
+ base_url: T.nilable(String),
61
+ max_retries: Integer,
62
+ timeout: Float,
63
+ initial_retry_delay: Float,
64
+ max_retry_delay: Float
65
+ ).returns(T.attached_class)
66
+ end
67
+ def self.new(
68
+ # API key via header Defaults to `ENV["SPORTS_ODDS_API_KEY_HEADER"]`
69
+ api_key_header: ENV["SPORTS_ODDS_API_KEY_HEADER"],
70
+ # API key via query param Defaults to `ENV["SPORTS_ODDS_API_KEY_HEADER"]`
71
+ api_key_param: ENV["SPORTS_ODDS_API_KEY_HEADER"],
72
+ # Override the default base URL for the API, e.g.,
73
+ # `"https://api.example.com/v2/"`. Defaults to `ENV["SPORTS_GAME_ODDS_BASE_URL"]`
74
+ base_url: ENV["SPORTS_GAME_ODDS_BASE_URL"],
75
+ # Max number of retries to attempt after a failed retryable request.
76
+ max_retries: SportsOddsAPI::Client::DEFAULT_MAX_RETRIES,
77
+ timeout: SportsOddsAPI::Client::DEFAULT_TIMEOUT_IN_SECONDS,
78
+ initial_retry_delay: SportsOddsAPI::Client::DEFAULT_INITIAL_RETRY_DELAY,
79
+ max_retry_delay: SportsOddsAPI::Client::DEFAULT_MAX_RETRY_DELAY
80
+ )
81
+ end
82
+ end
83
+ end
@@ -0,0 +1,205 @@
1
+ # typed: strong
2
+
3
+ module SportsOddsAPI
4
+ module Errors
5
+ class Error < StandardError
6
+ sig { returns(T.nilable(StandardError)) }
7
+ attr_accessor :cause
8
+ end
9
+
10
+ class ConversionError < SportsOddsAPI::Errors::Error
11
+ sig { returns(T.nilable(StandardError)) }
12
+ def cause
13
+ end
14
+
15
+ # @api private
16
+ sig do
17
+ params(
18
+ on: T::Class[StandardError],
19
+ method: Symbol,
20
+ target: T.anything,
21
+ value: T.anything,
22
+ cause: T.nilable(StandardError)
23
+ ).returns(T.attached_class)
24
+ end
25
+ def self.new(on:, method:, target:, value:, cause: nil)
26
+ end
27
+ end
28
+
29
+ class APIError < SportsOddsAPI::Errors::Error
30
+ sig { returns(URI::Generic) }
31
+ attr_accessor :url
32
+
33
+ sig { returns(T.nilable(Integer)) }
34
+ attr_accessor :status
35
+
36
+ sig { returns(T.nilable(T::Hash[String, String])) }
37
+ attr_accessor :headers
38
+
39
+ sig { returns(T.nilable(T.anything)) }
40
+ attr_accessor :body
41
+
42
+ # @api private
43
+ sig do
44
+ params(
45
+ url: URI::Generic,
46
+ status: T.nilable(Integer),
47
+ headers: T.nilable(T::Hash[String, String]),
48
+ body: T.nilable(Object),
49
+ request: NilClass,
50
+ response: NilClass,
51
+ message: T.nilable(String)
52
+ ).returns(T.attached_class)
53
+ end
54
+ def self.new(
55
+ url:,
56
+ status: nil,
57
+ headers: nil,
58
+ body: nil,
59
+ request: nil,
60
+ response: nil,
61
+ message: nil
62
+ )
63
+ end
64
+ end
65
+
66
+ class APIConnectionError < SportsOddsAPI::Errors::APIError
67
+ sig { returns(NilClass) }
68
+ attr_accessor :status
69
+
70
+ sig { returns(NilClass) }
71
+ attr_accessor :body
72
+
73
+ # @api private
74
+ sig do
75
+ params(
76
+ url: URI::Generic,
77
+ status: NilClass,
78
+ headers: T.nilable(T::Hash[String, String]),
79
+ body: NilClass,
80
+ request: NilClass,
81
+ response: NilClass,
82
+ message: T.nilable(String)
83
+ ).returns(T.attached_class)
84
+ end
85
+ def self.new(
86
+ url:,
87
+ status: nil,
88
+ headers: nil,
89
+ body: nil,
90
+ request: nil,
91
+ response: nil,
92
+ message: "Connection error."
93
+ )
94
+ end
95
+ end
96
+
97
+ class APITimeoutError < SportsOddsAPI::Errors::APIConnectionError
98
+ # @api private
99
+ sig do
100
+ params(
101
+ url: URI::Generic,
102
+ status: NilClass,
103
+ headers: T.nilable(T::Hash[String, String]),
104
+ body: NilClass,
105
+ request: NilClass,
106
+ response: NilClass,
107
+ message: T.nilable(String)
108
+ ).returns(T.attached_class)
109
+ end
110
+ def self.new(
111
+ url:,
112
+ status: nil,
113
+ headers: nil,
114
+ body: nil,
115
+ request: nil,
116
+ response: nil,
117
+ message: "Request timed out."
118
+ )
119
+ end
120
+ end
121
+
122
+ class APIStatusError < SportsOddsAPI::Errors::APIError
123
+ # @api private
124
+ sig do
125
+ params(
126
+ url: URI::Generic,
127
+ status: Integer,
128
+ headers: T.nilable(T::Hash[String, String]),
129
+ body: T.nilable(Object),
130
+ request: NilClass,
131
+ response: NilClass,
132
+ message: T.nilable(String)
133
+ ).returns(T.attached_class)
134
+ end
135
+ def self.for(
136
+ url:,
137
+ status:,
138
+ headers:,
139
+ body:,
140
+ request:,
141
+ response:,
142
+ message: nil
143
+ )
144
+ end
145
+
146
+ sig { returns(Integer) }
147
+ attr_accessor :status
148
+
149
+ # @api private
150
+ sig do
151
+ params(
152
+ url: URI::Generic,
153
+ status: Integer,
154
+ headers: T.nilable(T::Hash[String, String]),
155
+ body: T.nilable(Object),
156
+ request: NilClass,
157
+ response: NilClass,
158
+ message: T.nilable(String)
159
+ ).returns(T.attached_class)
160
+ end
161
+ def self.new(
162
+ url:,
163
+ status:,
164
+ headers:,
165
+ body:,
166
+ request:,
167
+ response:,
168
+ message: nil
169
+ )
170
+ end
171
+ end
172
+
173
+ class BadRequestError < SportsOddsAPI::Errors::APIStatusError
174
+ HTTP_STATUS = 400
175
+ end
176
+
177
+ class AuthenticationError < SportsOddsAPI::Errors::APIStatusError
178
+ HTTP_STATUS = 401
179
+ end
180
+
181
+ class PermissionDeniedError < SportsOddsAPI::Errors::APIStatusError
182
+ HTTP_STATUS = 403
183
+ end
184
+
185
+ class NotFoundError < SportsOddsAPI::Errors::APIStatusError
186
+ HTTP_STATUS = 404
187
+ end
188
+
189
+ class ConflictError < SportsOddsAPI::Errors::APIStatusError
190
+ HTTP_STATUS = 409
191
+ end
192
+
193
+ class UnprocessableEntityError < SportsOddsAPI::Errors::APIStatusError
194
+ HTTP_STATUS = 422
195
+ end
196
+
197
+ class RateLimitError < SportsOddsAPI::Errors::APIStatusError
198
+ HTTP_STATUS = 429
199
+ end
200
+
201
+ class InternalServerError < SportsOddsAPI::Errors::APIStatusError
202
+ HTTP_STATUS = T.let((500..), T::Range[Integer])
203
+ end
204
+ end
205
+ end
@@ -0,0 +1,37 @@
1
+ # typed: strong
2
+
3
+ module SportsOddsAPI
4
+ class FilePart
5
+ sig { returns(T.any(Pathname, StringIO, IO, String)) }
6
+ attr_reader :content
7
+
8
+ sig { returns(T.nilable(String)) }
9
+ attr_reader :content_type
10
+
11
+ sig { returns(T.nilable(String)) }
12
+ attr_reader :filename
13
+
14
+ # @api private
15
+ sig { returns(String) }
16
+ private def read
17
+ end
18
+
19
+ sig { params(a: T.anything).returns(String) }
20
+ def to_json(*a)
21
+ end
22
+
23
+ sig { params(a: T.anything).returns(String) }
24
+ def to_yaml(*a)
25
+ end
26
+
27
+ sig do
28
+ params(
29
+ content: T.any(Pathname, StringIO, IO, String),
30
+ filename: T.nilable(String),
31
+ content_type: T.nilable(String)
32
+ ).returns(T.attached_class)
33
+ end
34
+ def self.new(content, filename: nil, content_type: nil)
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,22 @@
1
+ # typed: strong
2
+
3
+ module SportsOddsAPI
4
+ module Internal
5
+ class NextCursorPage
6
+ include SportsOddsAPI::Internal::Type::BasePage
7
+
8
+ Elem = type_member
9
+
10
+ sig { returns(T.nilable(T::Array[Elem])) }
11
+ attr_accessor :data
12
+
13
+ sig { returns(String) }
14
+ attr_accessor :next_cursor
15
+
16
+ # @api private
17
+ sig { returns(String) }
18
+ def inspect
19
+ end
20
+ end
21
+ end
22
+ end