sports-odds-api 1.2.2 → 1.3.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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +38 -0
  3. data/README.md +11 -1
  4. data/lib/sports_odds_api/client.rb +28 -1
  5. data/lib/sports_odds_api/internal/transport/base_client.rb +5 -0
  6. data/lib/sports_odds_api/internal/transport/pooled_net_requester.rb +13 -11
  7. data/lib/sports_odds_api/internal/util.rb +61 -10
  8. data/lib/sports_odds_api/models/event.rb +197 -4
  9. data/lib/sports_odds_api/models/event_get_params.rb +22 -4
  10. data/lib/sports_odds_api/models/market.rb +206 -0
  11. data/lib/sports_odds_api/models/market_get_params.rb +150 -0
  12. data/lib/sports_odds_api/models/player_get_params.rb +3 -3
  13. data/lib/sports_odds_api/models/team.rb +107 -2
  14. data/lib/sports_odds_api/models/team_get_params.rb +3 -3
  15. data/lib/sports_odds_api/models.rb +4 -0
  16. data/lib/sports_odds_api/resources/account.rb +1 -0
  17. data/lib/sports_odds_api/resources/events.rb +11 -3
  18. data/lib/sports_odds_api/resources/leagues.rb +3 -1
  19. data/lib/sports_odds_api/resources/markets.rb +87 -0
  20. data/lib/sports_odds_api/resources/players.rb +4 -2
  21. data/lib/sports_odds_api/resources/sports.rb +1 -0
  22. data/lib/sports_odds_api/resources/stats.rb +3 -1
  23. data/lib/sports_odds_api/resources/stream.rb +3 -1
  24. data/lib/sports_odds_api/resources/teams.rb +4 -2
  25. data/lib/sports_odds_api/version.rb +1 -1
  26. data/lib/sports_odds_api.rb +3 -0
  27. data/rbi/sports_odds_api/client.rbi +12 -0
  28. data/rbi/sports_odds_api/internal/util.rbi +29 -1
  29. data/rbi/sports_odds_api/models/event.rbi +387 -3
  30. data/rbi/sports_odds_api/models/event_get_params.rbi +30 -4
  31. data/rbi/sports_odds_api/models/market.rbi +326 -0
  32. data/rbi/sports_odds_api/models/market_get_params.rbi +224 -0
  33. data/rbi/sports_odds_api/models/player_get_params.rbi +4 -4
  34. data/rbi/sports_odds_api/models/team.rbi +186 -3
  35. data/rbi/sports_odds_api/models/team_get_params.rbi +4 -4
  36. data/rbi/sports_odds_api/models.rbi +4 -0
  37. data/rbi/sports_odds_api/resources/account.rbi +1 -0
  38. data/rbi/sports_odds_api/resources/events.rbi +11 -2
  39. data/rbi/sports_odds_api/resources/leagues.rbi +1 -0
  40. data/rbi/sports_odds_api/resources/markets.rbi +79 -0
  41. data/rbi/sports_odds_api/resources/players.rbi +3 -2
  42. data/rbi/sports_odds_api/resources/sports.rbi +1 -0
  43. data/rbi/sports_odds_api/resources/stats.rbi +1 -0
  44. data/rbi/sports_odds_api/resources/stream.rbi +1 -0
  45. data/rbi/sports_odds_api/resources/teams.rbi +3 -2
  46. data/sig/sports_odds_api/client.rbs +2 -0
  47. data/sig/sports_odds_api/internal/util.rbs +14 -0
  48. data/sig/sports_odds_api/models/event.rbs +246 -3
  49. data/sig/sports_odds_api/models/event_get_params.rbs +14 -0
  50. data/sig/sports_odds_api/models/market.rbs +186 -0
  51. data/sig/sports_odds_api/models/market_get_params.rbs +133 -0
  52. data/sig/sports_odds_api/models/team.rbs +130 -3
  53. data/sig/sports_odds_api/models.rbs +4 -0
  54. data/sig/sports_odds_api/resources/events.rbs +2 -0
  55. data/sig/sports_odds_api/resources/markets.rbs +27 -0
  56. metadata +39 -2
@@ -8,6 +8,12 @@ module SportsOddsAPI
8
8
  T.any(SportsOddsAPI::Team, SportsOddsAPI::Internal::AnyHash)
9
9
  end
10
10
 
11
+ sig { returns(T.nilable(SportsOddsAPI::Team::Coach)) }
12
+ attr_reader :coach
13
+
14
+ sig { params(coach: SportsOddsAPI::Team::Coach::OrHash).void }
15
+ attr_writer :coach
16
+
11
17
  sig { returns(T.nilable(SportsOddsAPI::Team::Colors)) }
12
18
  attr_reader :colors
13
19
 
@@ -38,6 +44,12 @@ module SportsOddsAPI
38
44
  sig { params(names: SportsOddsAPI::Team::Names::OrHash).void }
39
45
  attr_writer :names
40
46
 
47
+ sig { returns(T.nilable(SportsOddsAPI::Team::Owner)) }
48
+ attr_reader :owner
49
+
50
+ sig { params(owner: SportsOddsAPI::Team::Owner::OrHash).void }
51
+ attr_writer :owner
52
+
41
53
  sig { returns(T.nilable(String)) }
42
54
  attr_reader :sport_id
43
55
 
@@ -56,47 +68,83 @@ module SportsOddsAPI
56
68
  sig { params(team_id: String).void }
57
69
  attr_writer :team_id
58
70
 
71
+ sig { returns(T.nilable(SportsOddsAPI::Team::Venue)) }
72
+ attr_reader :venue
73
+
74
+ sig { params(venue: SportsOddsAPI::Team::Venue::OrHash).void }
75
+ attr_writer :venue
76
+
59
77
  sig do
60
78
  params(
79
+ coach: SportsOddsAPI::Team::Coach::OrHash,
61
80
  colors: SportsOddsAPI::Team::Colors::OrHash,
62
81
  league_id: String,
63
82
  logo: String,
64
83
  lookups: SportsOddsAPI::Team::Lookups::OrHash,
65
84
  names: SportsOddsAPI::Team::Names::OrHash,
85
+ owner: SportsOddsAPI::Team::Owner::OrHash,
66
86
  sport_id: String,
67
87
  standings: SportsOddsAPI::Team::Standings::OrHash,
68
- team_id: String
88
+ team_id: String,
89
+ venue: SportsOddsAPI::Team::Venue::OrHash
69
90
  ).returns(T.attached_class)
70
91
  end
71
92
  def self.new(
93
+ coach: nil,
72
94
  colors: nil,
73
95
  league_id: nil,
74
96
  logo: nil,
75
97
  lookups: nil,
76
98
  names: nil,
99
+ owner: nil,
77
100
  sport_id: nil,
78
101
  standings: nil,
79
- team_id: nil
102
+ team_id: nil,
103
+ venue: nil
80
104
  )
81
105
  end
82
106
 
83
107
  sig do
84
108
  override.returns(
85
109
  {
110
+ coach: SportsOddsAPI::Team::Coach,
86
111
  colors: SportsOddsAPI::Team::Colors,
87
112
  league_id: String,
88
113
  logo: String,
89
114
  lookups: SportsOddsAPI::Team::Lookups,
90
115
  names: SportsOddsAPI::Team::Names,
116
+ owner: SportsOddsAPI::Team::Owner,
91
117
  sport_id: String,
92
118
  standings: SportsOddsAPI::Team::Standings,
93
- team_id: String
119
+ team_id: String,
120
+ venue: SportsOddsAPI::Team::Venue
94
121
  }
95
122
  )
96
123
  end
97
124
  def to_hash
98
125
  end
99
126
 
127
+ class Coach < SportsOddsAPI::Internal::Type::BaseModel
128
+ OrHash =
129
+ T.type_alias do
130
+ T.any(SportsOddsAPI::Team::Coach, SportsOddsAPI::Internal::AnyHash)
131
+ end
132
+
133
+ sig { returns(T.nilable(String)) }
134
+ attr_reader :name
135
+
136
+ sig { params(name: String).void }
137
+ attr_writer :name
138
+
139
+ sig { params(name: String).returns(T.attached_class) }
140
+ def self.new(name: nil)
141
+ end
142
+
143
+ sig { override.returns({ name: String }) }
144
+ def to_hash
145
+ end
146
+ end
147
+
100
148
  class Colors < SportsOddsAPI::Internal::Type::BaseModel
101
149
  OrHash =
102
150
  T.type_alias do
@@ -220,6 +268,27 @@ module SportsOddsAPI
220
268
  end
221
269
  end
222
270
 
271
+ class Owner < SportsOddsAPI::Internal::Type::BaseModel
272
+ OrHash =
273
+ T.type_alias do
274
+ T.any(SportsOddsAPI::Team::Owner, SportsOddsAPI::Internal::AnyHash)
275
+ end
276
+
277
+ sig { returns(T.nilable(String)) }
278
+ attr_reader :name
279
+
280
+ sig { params(name: String).void }
281
+ attr_writer :name
282
+
283
+ sig { params(name: String).returns(T.attached_class) }
284
+ def self.new(name: nil)
285
+ end
286
+
287
+ sig { override.returns({ name: String }) }
288
+ def to_hash
289
+ end
290
+ end
291
+
223
292
  class Standings < SportsOddsAPI::Internal::Type::BaseModel
224
293
  OrHash =
225
294
  T.type_alias do
@@ -229,6 +298,12 @@ module SportsOddsAPI
229
298
  )
230
299
  end
231
300
 
301
+ sig { returns(T.nilable(String)) }
302
+ attr_reader :last5
303
+
304
+ sig { params(last5: String).void }
305
+ attr_writer :last5
306
+
232
307
  sig { returns(T.nilable(Float)) }
233
308
  attr_reader :losses
234
309
 
@@ -253,6 +328,12 @@ module SportsOddsAPI
253
328
  sig { params(record: String).void }
254
329
  attr_writer :record
255
330
 
331
+ sig { returns(T.nilable(Float)) }
332
+ attr_reader :streak
333
+
334
+ sig { params(streak: Float).void }
335
+ attr_writer :streak
336
+
256
337
  sig { returns(T.nilable(Float)) }
257
338
  attr_reader :ties
258
339
 
@@ -267,19 +348,23 @@ module SportsOddsAPI
267
348
 
268
349
  sig do
269
350
  params(
351
+ last5: String,
270
352
  losses: Float,
271
353
  played: Float,
272
354
  position: String,
273
355
  record: String,
356
+ streak: Float,
274
357
  ties: Float,
275
358
  wins: Float
276
359
  ).returns(T.attached_class)
277
360
  end
278
361
  def self.new(
362
+ last5: nil,
279
363
  losses: nil,
280
364
  played: nil,
281
365
  position: nil,
282
366
  record: nil,
367
+ streak: nil,
283
368
  ties: nil,
284
369
  wins: nil
285
370
  )
@@ -288,10 +373,12 @@ module SportsOddsAPI
288
373
  sig do
289
374
  override.returns(
290
375
  {
376
+ last5: String,
291
377
  losses: Float,
292
378
  played: Float,
293
379
  position: String,
294
380
  record: String,
381
+ streak: Float,
295
382
  ties: Float,
296
383
  wins: Float
297
384
  }
@@ -300,6 +387,102 @@ module SportsOddsAPI
300
387
  def to_hash
301
388
  end
302
389
  end
390
+
391
+ class Venue < SportsOddsAPI::Internal::Type::BaseModel
392
+ OrHash =
393
+ T.type_alias do
394
+ T.any(SportsOddsAPI::Team::Venue, SportsOddsAPI::Internal::AnyHash)
395
+ end
396
+
397
+ sig { returns(T.nilable(String)) }
398
+ attr_reader :address
399
+
400
+ sig { params(address: String).void }
401
+ attr_writer :address
402
+
403
+ sig { returns(T.nilable(Float)) }
404
+ attr_reader :capacity
405
+
406
+ sig { params(capacity: Float).void }
407
+ attr_writer :capacity
408
+
409
+ sig { returns(T.nilable(String)) }
410
+ attr_reader :city
411
+
412
+ sig { params(city: String).void }
413
+ attr_writer :city
414
+
415
+ sig { returns(T.nilable(String)) }
416
+ attr_reader :country_code
417
+
418
+ sig { params(country_code: String).void }
419
+ attr_writer :country_code
420
+
421
+ sig { returns(T.nilable(String)) }
422
+ attr_reader :country_name
423
+
424
+ sig { params(country_name: String).void }
425
+ attr_writer :country_name
426
+
427
+ sig { returns(T.nilable(String)) }
428
+ attr_reader :name
429
+
430
+ sig { params(name: String).void }
431
+ attr_writer :name
432
+
433
+ sig { returns(T.nilable(String)) }
434
+ attr_reader :region_code
435
+
436
+ sig { params(region_code: String).void }
437
+ attr_writer :region_code
438
+
439
+ sig { returns(T.nilable(String)) }
440
+ attr_reader :region_name
441
+
442
+ sig { params(region_name: String).void }
443
+ attr_writer :region_name
444
+
445
+ sig do
446
+ params(
447
+ address: String,
448
+ capacity: Float,
449
+ city: String,
450
+ country_code: String,
451
+ country_name: String,
452
+ name: String,
453
+ region_code: String,
454
+ region_name: String
455
+ ).returns(T.attached_class)
456
+ end
457
+ def self.new(
458
+ address: nil,
459
+ capacity: nil,
460
+ city: nil,
461
+ country_code: nil,
462
+ country_name: nil,
463
+ name: nil,
464
+ region_code: nil,
465
+ region_name: nil
466
+ )
467
+ end
468
+
469
+ sig do
470
+ override.returns(
471
+ {
472
+ address: String,
473
+ capacity: Float,
474
+ city: String,
475
+ country_code: String,
476
+ country_name: String,
477
+ name: String,
478
+ region_code: String,
479
+ region_name: String
480
+ }
481
+ )
482
+ end
483
+ def to_hash
484
+ end
485
+ end
303
486
  end
304
487
  end
305
488
  end
@@ -11,8 +11,8 @@ module SportsOddsAPI
11
11
  T.any(SportsOddsAPI::TeamGetParams, SportsOddsAPI::Internal::AnyHash)
12
12
  end
13
13
 
14
- # The cursor for the request. Used to get the next group of Teams. This should be
15
- # the nextCursor from the prior response.
14
+ # The cursor for the request. Used to get the next group of Teams. This is an
15
+ # opaque token — pass the nextCursor value from the prior response unchanged.
16
16
  sig { returns(T.nilable(String)) }
17
17
  attr_reader :cursor
18
18
 
@@ -58,8 +58,8 @@ module SportsOddsAPI
58
58
  ).returns(T.attached_class)
59
59
  end
60
60
  def self.new(
61
- # The cursor for the request. Used to get the next group of Teams. This should be
62
- # the nextCursor from the prior response.
61
+ # The cursor for the request. Used to get the next group of Teams. This is an
62
+ # opaque token — pass the nextCursor value from the prior response unchanged.
63
63
  cursor: nil,
64
64
  # A single leagueID or comma-separated list of leagueIDs to get Teams for
65
65
  league_id: nil,
@@ -13,6 +13,10 @@ module SportsOddsAPI
13
13
 
14
14
  LeagueGetParams = SportsOddsAPI::Models::LeagueGetParams
15
15
 
16
+ Market = SportsOddsAPI::Models::Market
17
+
18
+ MarketGetParams = SportsOddsAPI::Models::MarketGetParams
19
+
16
20
  Player = SportsOddsAPI::Models::Player
17
21
 
18
22
  PlayerGetParams = SportsOddsAPI::Models::PlayerGetParams
@@ -2,6 +2,7 @@
2
2
 
3
3
  module SportsOddsAPI
4
4
  module Resources
5
+ # Get data related to your Account & API key
5
6
  class Account
6
7
  # Get rate-limits and usage data about your API key
7
8
  sig do
@@ -2,6 +2,7 @@
2
2
 
3
3
  module SportsOddsAPI
4
4
  module Resources
5
+ # Get info about Events (includes odds, results, teams, and other metadata)
5
6
  class Events
6
7
  # Get a list of Events
7
8
  sig do
@@ -12,8 +13,10 @@ module SportsOddsAPI
12
13
  ended: T::Boolean,
13
14
  event_id: String,
14
15
  event_ids: String,
16
+ expand_results: T::Boolean,
15
17
  finalized: T::Boolean,
16
18
  include_alt_lines: T::Boolean,
19
+ include_open_close_odds: T::Boolean,
17
20
  include_opposing_odds: T::Boolean,
18
21
  league_id: String,
19
22
  limit: Float,
@@ -37,8 +40,8 @@ module SportsOddsAPI
37
40
  # Only include cancelled Events (true), only non-cancelled Events (false) or all
38
41
  # Events (omit)
39
42
  cancelled: nil,
40
- # The cursor for the request. Used to get the next group of Events. This should be
41
- # the nextCursor from the prior response.
43
+ # The cursor for the request. Used to get the next group of Events. This is an
44
+ # opaque token — pass the nextCursor value from the prior response unchanged.
42
45
  cursor: nil,
43
46
  # Only include Events which have have ended (true), only Events which have not
44
47
  # ended (false) or all Events (omit)
@@ -47,11 +50,17 @@ module SportsOddsAPI
47
50
  event_id: nil,
48
51
  # A comma separated list of eventIDs to get Event data for
49
52
  event_ids: nil,
53
+ # Whether to expand the results object to include all stat values rather than just
54
+ # the base set
55
+ expand_results: nil,
50
56
  # Only include finalized Events (true), exclude unfinalized Events (false) or all
51
57
  # Events (omit)
52
58
  finalized: nil,
53
59
  # Whether to include alternate lines in the odds byBookmaker data
54
60
  include_alt_lines: nil,
61
+ # Whether to include open and close odds values (openOdds, closeOdds, openSpread,
62
+ # closeSpread, openOverUnder, closeOverUnder) in the odds byBookmaker data
63
+ include_open_close_odds: nil,
55
64
  # Whether to include opposing odds for each included oddID
56
65
  include_opposing_odds: nil,
57
66
  # A leagueID or comma-separated list of leagueIDs to get Events for
@@ -2,6 +2,7 @@
2
2
 
3
3
  module SportsOddsAPI
4
4
  module Resources
5
+ # Get League-related data
5
6
  class Leagues
6
7
  # Get a list of Leagues
7
8
  sig do
@@ -0,0 +1,79 @@
1
+ # typed: strong
2
+
3
+ module SportsOddsAPI
4
+ module Resources
5
+ # Get metadata on supported Markets
6
+ class Markets
7
+ # Get a list of Markets
8
+ sig do
9
+ params(
10
+ bet_type_id: String,
11
+ bookmaker_id: String,
12
+ cursor: String,
13
+ is_main_market: T::Boolean,
14
+ is_prop: T::Boolean,
15
+ is_sub_period: T::Boolean,
16
+ is_supported: T::Boolean,
17
+ league_id: String,
18
+ limit: Float,
19
+ odd_id: String,
20
+ period_id: String,
21
+ prop_type: String,
22
+ side_id: String,
23
+ sport_id: String,
24
+ stat_entity_id: String,
25
+ stat_id: String,
26
+ request_options: SportsOddsAPI::RequestOptions::OrHash
27
+ ).returns(
28
+ SportsOddsAPI::Internal::NextCursorPage[SportsOddsAPI::Market]
29
+ )
30
+ end
31
+ def get(
32
+ # A single betTypeID or comma-separated list of betTypeIDs to filter Markets by
33
+ bet_type_id: nil,
34
+ # A single bookmakerID or comma-separated list of bookmakerIDs to filter Markets
35
+ # by
36
+ bookmaker_id: nil,
37
+ # The cursor for pagination. Use nextCursor from prior response.
38
+ cursor: nil,
39
+ # Filter to only include main markets (main period moneyline, spread, and
40
+ # over/under)
41
+ is_main_market: nil,
42
+ # Filter by whether it is any type of prop bet market
43
+ is_prop: nil,
44
+ # Filter by whether it tracks a sub/non-main period
45
+ is_sub_period: nil,
46
+ # Filter whether this market is fully supported by at least 1 bookmaker in at
47
+ # least 1 league. Defaults to true if not specified.
48
+ is_supported: nil,
49
+ # A single leagueID or comma-separated list of leagueIDs to filter Markets by
50
+ league_id: nil,
51
+ # The maximum number of Markets to return (default: 100, max: 10000)
52
+ limit: nil,
53
+ # A single oddID or comma-separated list of oddIDs. Used to specify specific
54
+ # Markets to return.
55
+ odd_id: nil,
56
+ # A single periodID or comma-separated list of periodIDs to filter Markets by
57
+ period_id: nil,
58
+ # Filter by prop type (game_prop, team_prop, player_prop, other_prop)
59
+ prop_type: nil,
60
+ # A single sideID or comma-separated list of sideIDs to filter Markets by
61
+ side_id: nil,
62
+ # A single sportID or comma-separated list of sportIDs to filter Markets by
63
+ sport_id: nil,
64
+ # A single statEntityID or comma-separated list of statEntityIDs to filter Markets
65
+ # by
66
+ stat_entity_id: nil,
67
+ # A single statID or comma-separated list of statIDs to filter Markets by
68
+ stat_id: nil,
69
+ request_options: {}
70
+ )
71
+ end
72
+
73
+ # @api private
74
+ sig { params(client: SportsOddsAPI::Client).returns(T.attached_class) }
75
+ def self.new(client:)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -2,6 +2,7 @@
2
2
 
3
3
  module SportsOddsAPI
4
4
  module Resources
5
+ # Get Player-related data
5
6
  class Players
6
7
  # Get a list of Players for a specific Team or Event
7
8
  sig do
@@ -17,8 +18,8 @@ module SportsOddsAPI
17
18
  )
18
19
  end
19
20
  def get(
20
- # The cursor for the request. Used to get the next group of Players. This should
21
- # be the nextCursor from the prior response.
21
+ # The cursor for the request. Used to get the next group of Players. This is an
22
+ # opaque token — pass the nextCursor value from the prior response unchanged.
22
23
  cursor: nil,
23
24
  # EventID to get Players data for
24
25
  event_id: nil,
@@ -2,6 +2,7 @@
2
2
 
3
3
  module SportsOddsAPI
4
4
  module Resources
5
+ # Get Sport-related data
5
6
  class Sports
6
7
  # Get a list of sports
7
8
  sig do
@@ -2,6 +2,7 @@
2
2
 
3
3
  module SportsOddsAPI
4
4
  module Resources
5
+ # Get data on specific Stats
5
6
  class Stats
6
7
  # Get a list of StatIDs
7
8
  sig do
@@ -2,6 +2,7 @@
2
2
 
3
3
  module SportsOddsAPI
4
4
  module Resources
5
+ # Get info about Events (includes odds, results, teams, and other metadata)
5
6
  class Stream
6
7
  # Setup streamed (WebSocket) connection
7
8
  sig do
@@ -2,6 +2,7 @@
2
2
 
3
3
  module SportsOddsAPI
4
4
  module Resources
5
+ # Get Team-related data
5
6
  class Teams
6
7
  # Get a list of Teams by ID or league
7
8
  sig do
@@ -15,8 +16,8 @@ module SportsOddsAPI
15
16
  ).returns(SportsOddsAPI::Internal::NextCursorPage[SportsOddsAPI::Team])
16
17
  end
17
18
  def get(
18
- # The cursor for the request. Used to get the next group of Teams. This should be
19
- # the nextCursor from the prior response.
19
+ # The cursor for the request. Used to get the next group of Teams. This is an
20
+ # opaque token — pass the nextCursor value from the prior response unchanged.
20
21
  cursor: nil,
21
22
  # A single leagueID or comma-separated list of leagueIDs to get Teams for
22
23
  league_id: nil,
@@ -14,6 +14,8 @@ module SportsOddsAPI
14
14
 
15
15
  attr_reader events: SportsOddsAPI::Resources::Events
16
16
 
17
+ attr_reader markets: SportsOddsAPI::Resources::Markets
18
+
17
19
  attr_reader teams: SportsOddsAPI::Resources::Teams
18
20
 
19
21
  attr_reader players: SportsOddsAPI::Resources::Players
@@ -45,8 +45,12 @@ module SportsOddsAPI
45
45
  -> top?
46
46
  } -> top?
47
47
 
48
+ RFC_3986_NOT_PCHARS: Regexp
49
+
48
50
  def self?.uri_origin: (URI::Generic uri) -> String
49
51
 
52
+ def self?.encode_path: (String | Integer path) -> String
53
+
50
54
  def self?.interpolate_path: (String | ::Array[String] path) -> String
51
55
 
52
56
  def self?.decode_query: (String? query) -> ::Hash[String, ::Array[String]]
@@ -106,6 +110,16 @@ module SportsOddsAPI
106
110
  JSON_CONTENT: Regexp
107
111
  JSONL_CONTENT: Regexp
108
112
 
113
+ def encode_query_params: (
114
+ ::Hash[Symbol, top] query
115
+ ) -> ::Hash[Symbol, top]
116
+
117
+ private def write_query_param_element!: (
118
+ ::Hash[Symbol, top] collection,
119
+ String key,
120
+ top element
121
+ ) -> nil
122
+
109
123
  def self?.write_multipart_content: (
110
124
  Enumerator::Yielder y,
111
125
  val: top,