sleeper_ff 0.1.0 → 0.2.1

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: d2eabd815df1063832834aa7efcfa764631331510fab7a4efe816b6ee149171f
4
- data.tar.gz: e420eb29b532a533e53e8dd38c0357e477d9465f5eda757e24be9991033960ce
3
+ metadata.gz: a97d8c902244a9e09489087d8b57dde3c801f8337de4a99dfa2f66d4ff434a1b
4
+ data.tar.gz: a3fab5a3020426f0f30481e869264aed57d3630a716c20f5836e5699eeed4fb9
5
5
  SHA512:
6
- metadata.gz: 83b97c33a2122a7d668f8d8c95788f1b2ec80522617bdfb3895db0395c869c454c92e9846f3ddc1a9a7d94a412f71c967a67dbaf5f6f8b62d2e9cfe14c5330cd
7
- data.tar.gz: 5b6d6c0071ddc254bddef7049802dbf19ff98f4362f103f782188a9f56c9ba3e257f00180b6865d662dd285e13f4204343642e7ef31ab6ed81aecac4e876d804
6
+ metadata.gz: faa1c93017e5cc0d9eabe72b28521a165cb849f5bef1c05ac1eec77b1bb68ba20ebc222184ed8566e59f56b3b8c47cc7c84f0d622e98930dd092d36791b53bda
7
+ data.tar.gz: 0c702a452ce0673937c56eab5e42d040b905568f83728da8139ebab11a0424100ba43a512f0b226067bdc3c4a7f0b8709bd50318c6ee7c3e1ff04726976ffbea
data/README.md CHANGED
@@ -79,6 +79,11 @@ rosters = client.league_rosters("league_id")
79
79
 
80
80
  # Get all users in a league
81
81
  users = client.league_users("league_id")
82
+
83
+ # Get all drafts for a league
84
+ drafts = client.league_drafts("league_id")
85
+ # or via the league object
86
+ drafts = league.drafts
82
87
  ```
83
88
 
84
89
  You can access various attributes on the returned objects:
@@ -97,11 +102,84 @@ roster.starters # => ["player_id1", "player_id2", ...]
97
102
  roster.settings # => { wins: 10, losses: 4, ... }
98
103
  ```
99
104
 
100
- More endpoints coming soon:
101
- - Players
102
- - Drafts
103
- - Matchups
104
- - Transactions
105
+ ### Drafts
106
+
107
+ ```ruby
108
+ # Get all drafts for a user in a season
109
+ drafts = client.user_drafts("user_id", 2023)
110
+
111
+ # Get a specific draft
112
+ draft = client.draft("draft_id")
113
+
114
+ # Get all picks in a draft
115
+ picks = client.draft_picks("draft_id")
116
+ # or via the draft object
117
+ picks = draft.picks
118
+
119
+ # Get all traded picks in a draft
120
+ traded_picks = client.draft_traded_picks("draft_id")
121
+ # or via the draft object
122
+ traded_picks = draft.traded_picks
123
+ ```
124
+
125
+ You can access various attributes on draft objects:
126
+
127
+ ```ruby
128
+ # Draft attributes
129
+ draft.draft_id # => "917001170459361281"
130
+ draft.league_id # => "917001170459361280"
131
+ draft.type # => "snake"
132
+ draft.status # => "complete"
133
+ draft.season # => "2023"
134
+ draft.settings # => { teams: 12, rounds: 15, ... }
135
+ draft.draft_order # => { "user_id" => slot, ... }
136
+
137
+ # Pick attributes
138
+ pick.player_id # => "4046"
139
+ pick.picked_by # => "user_id"
140
+ pick.round # => 1
141
+ pick.pick_no # => 1
142
+ pick.metadata # => { first_name: "Kareem", last_name: "Hunt", ... }
143
+
144
+ # Traded pick attributes
145
+ traded_pick.season # => "2023"
146
+ traded_pick.round # => 3
147
+ traded_pick.roster_id # => 1
148
+ traded_pick.previous_owner_id # => 3
149
+ traded_pick.owner_id # => 5
150
+ ```
151
+
152
+ ### Players
153
+
154
+ ```ruby
155
+ # Fetch all NFL players (response is ~5MB, cache locally and call sparingly)
156
+ players = client.players
157
+
158
+ # Get trending players by add or drop activity
159
+ trending = client.trending_players("add")
160
+ trending = client.trending_players("drop")
161
+
162
+ # Optional parameters
163
+ trending = client.trending_players("add", lookback_hours: 48, limit: 10)
164
+ ```
165
+
166
+ ```ruby
167
+ # Trending player attributes
168
+ trending.first.player_id # => "4046"
169
+ trending.first.count # => 1842
170
+ ```
171
+
172
+ ### Sport State
173
+
174
+ ```ruby
175
+ # Get the current NFL season state
176
+ state = client.nfl_state
177
+
178
+ state.week # => 1
179
+ state.season # => "2024"
180
+ state.season_type # => "regular"
181
+ state.display_week # => 1
182
+ ```
105
183
 
106
184
  ## Development
107
185
 
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "sleeper_ff/draft"
4
+
5
+ module SleeperFF
6
+ class Client
7
+ module Drafts
8
+ # Get all drafts for a user in a season
9
+ #
10
+ # @param user_id [String] User ID
11
+ # @param season [Integer] NFL season year (e.g., 2023)
12
+ # @return [Array<SleeperFF::Draft>] Array of draft objects
13
+ def user_drafts(user_id, season)
14
+ data = get "user/#{user_id}/drafts/nfl/#{season}"
15
+ return [] if data.nil?
16
+
17
+ data.map { |d| SleeperFF::Draft.new(d, self) }
18
+ end
19
+
20
+ # Get a specific draft
21
+ #
22
+ # @param draft_id [String] Draft ID
23
+ # @return [SleeperFF::Draft] Draft object
24
+ def draft(draft_id)
25
+ data = get "draft/#{draft_id}"
26
+ return nil if data.nil?
27
+
28
+ SleeperFF::Draft.new(data, self)
29
+ end
30
+
31
+ # Get all picks in a draft
32
+ #
33
+ # @param draft_id [String] Draft ID
34
+ # @return [Array<Sawyer::Resource>] Array of pick objects
35
+ def draft_picks(draft_id)
36
+ get "draft/#{draft_id}/picks"
37
+ end
38
+
39
+ # Get all traded picks in a draft
40
+ #
41
+ # @param draft_id [String] Draft ID
42
+ # @return [Array<Sawyer::Resource>] Array of traded pick objects
43
+ def draft_traded_picks(draft_id)
44
+ get "draft/#{draft_id}/traded_picks"
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,5 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "sleeper_ff/league"
4
+ require "sleeper_ff/draft"
5
+
3
6
  module SleeperFF
4
7
  class Client
5
8
  module Leagues
@@ -15,9 +18,12 @@ module SleeperFF
15
18
  # Get a specific league
16
19
  #
17
20
  # @param league_id [String] League ID
18
- # @return [Sawyer::Resource] League information
21
+ # @return [SleeperFF::League] League object
19
22
  def league(league_id)
20
- get "league/#{league_id}"
23
+ data = get "league/#{league_id}"
24
+ return nil if data.nil?
25
+
26
+ SleeperFF::League.new(data, self)
21
27
  end
22
28
 
23
29
  # Get all rosters in a league
@@ -35,6 +41,59 @@ module SleeperFF
35
41
  def league_users(league_id)
36
42
  get "league/#{league_id}/users"
37
43
  end
44
+
45
+ # Get transactions for a specific round (week) in a league
46
+ #
47
+ # @param league_id [String] League ID
48
+ # @param round [Integer] Week/round number
49
+ # @return [Array<Sawyer::Resource>] Array of transaction objects
50
+ def league_transactions(league_id, round)
51
+ get "league/#{league_id}/transactions/#{round}"
52
+ end
53
+
54
+ # Get all traded picks in a league
55
+ #
56
+ # @param league_id [String] League ID
57
+ # @return [Array<Sawyer::Resource>] Array of traded pick objects
58
+ def league_traded_picks(league_id)
59
+ get "league/#{league_id}/traded_picks"
60
+ end
61
+
62
+ # Get the winners playoff bracket for a league
63
+ #
64
+ # @param league_id [String] League ID
65
+ # @return [Array<Sawyer::Resource>] Array of bracket matchup objects
66
+ def league_winners_bracket(league_id)
67
+ get "league/#{league_id}/winners_bracket"
68
+ end
69
+
70
+ # Get the losers playoff bracket for a league
71
+ #
72
+ # @param league_id [String] League ID
73
+ # @return [Array<Sawyer::Resource>] Array of bracket matchup objects
74
+ def league_losers_bracket(league_id)
75
+ get "league/#{league_id}/losers_bracket"
76
+ end
77
+
78
+ # Get matchups for a specific week in a league
79
+ #
80
+ # @param league_id [String] League ID
81
+ # @param week [Integer] Week number
82
+ # @return [Array<Sawyer::Resource>] Array of matchup objects
83
+ def league_matchups(league_id, week)
84
+ get "league/#{league_id}/matchups/#{week}"
85
+ end
86
+
87
+ # Get all drafts for a league
88
+ #
89
+ # @param league_id [String] League ID
90
+ # @return [Array<SleeperFF::Draft>] Array of draft objects
91
+ def league_drafts(league_id)
92
+ data = get "league/#{league_id}/drafts"
93
+ return [] if data.nil?
94
+
95
+ data.map { |d| SleeperFF::Draft.new(d, self) }
96
+ end
38
97
  end
39
98
  end
40
- end
99
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SleeperFF
4
+ class Client
5
+ module Players
6
+ # Get all NFL players
7
+ #
8
+ # @return [Hash] Hash of player information keyed by player ID
9
+ def players
10
+ get "players/nfl"
11
+ end
12
+
13
+ # Get trending NFL players by add or drop activity
14
+ #
15
+ # @param type [String] "add" or "drop"
16
+ # @param lookback_hours [Integer] Hours to look back (default 24)
17
+ # @param limit [Integer] Number of results to return (default 25)
18
+ # @return [Array<Sawyer::Resource>] Array of trending player objects
19
+ def trending_players(type, lookback_hours: 24, limit: 25)
20
+ get "players/nfl/trending/#{type}", query: {lookback_hours: lookback_hours, limit: limit}
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SleeperFF
4
+ class Client
5
+ module Sport
6
+ # Get the current state of an NFL season
7
+ #
8
+ # @return [Sawyer::Resource] Current NFL state including week, season, and season type
9
+ def nfl_state
10
+ get "state/nfl"
11
+ end
12
+ end
13
+ end
14
+ end
@@ -12,4 +12,4 @@ module SleeperFF
12
12
  end
13
13
  end
14
14
  end
15
- end
15
+ end
@@ -4,12 +4,18 @@ require "sawyer"
4
4
  require "sleeper_ff/configurable"
5
5
  require "sleeper_ff/client/users"
6
6
  require "sleeper_ff/client/leagues"
7
+ require "sleeper_ff/client/drafts"
8
+ require "sleeper_ff/client/players"
9
+ require "sleeper_ff/client/sport"
7
10
 
8
11
  module SleeperFF
9
12
  class Client
10
13
  include SleeperFF::Configurable
11
14
  include SleeperFF::Client::Users
12
15
  include SleeperFF::Client::Leagues
16
+ include SleeperFF::Client::Drafts
17
+ include SleeperFF::Client::Players
18
+ include SleeperFF::Client::Sport
13
19
 
14
20
  # Header keys that can be passed in options hash
15
21
  CONVENIENCE_HEADERS = Set.new([:accept, :content_type])
@@ -34,14 +40,14 @@ module SleeperFF
34
40
 
35
41
  def request(method, path, data, options = {})
36
42
  if data.is_a?(Hash)
37
- options[:query] = data.delete(:query) || {}
43
+ options[:query] = data.delete(:query) || {}
38
44
  options[:headers] = data.delete(:headers) || {}
39
- if accept = data.delete(:accept)
45
+ if (accept = data.delete(:accept))
40
46
  options[:headers][:accept] = accept
41
47
  end
42
48
  end
43
49
 
44
- @last_response = response = agent.call(method, URI::Parser.new.escape(path.to_s), data, options)
50
+ @last_response = response = agent.call(method, URI::DEFAULT_PARSER.escape(path.to_s), data, options)
45
51
  response.data
46
52
  end
47
53
 
@@ -52,4 +58,4 @@ module SleeperFF
52
58
  end
53
59
  end
54
60
  end
55
- end
61
+ end
@@ -27,4 +27,4 @@ module SleeperFF
27
27
  self
28
28
  end
29
29
  end
30
- end
30
+ end
@@ -2,9 +2,9 @@
2
2
 
3
3
  module SleeperFF
4
4
  module Default
5
- API_ENDPOINT = "https://api.sleeper.app/v1".freeze
5
+ API_ENDPOINT = "https://api.sleeper.app/v1"
6
6
  USER_AGENT = "SleeperFF Ruby Gem #{SleeperFF::VERSION}".freeze
7
- MEDIA_TYPE = "application/json".freeze
7
+ MEDIA_TYPE = "application/json"
8
8
 
9
9
  class << self
10
10
  def api_endpoint
@@ -20,4 +20,4 @@ module SleeperFF
20
20
  end
21
21
  end
22
22
  end
23
- end
23
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SleeperFF
4
+ class Draft
5
+ def initialize(data, client)
6
+ @data = data
7
+ @client = client
8
+ end
9
+
10
+ def picks
11
+ @client.draft_picks(@data.draft_id)
12
+ end
13
+
14
+ def traded_picks
15
+ @client.draft_traded_picks(@data.draft_id)
16
+ end
17
+
18
+ def respond_to_missing?(method_name, include_private = false)
19
+ @data.respond_to?(method_name) || super
20
+ end
21
+
22
+ def method_missing(method_name, *args, &block)
23
+ if @data.respond_to?(method_name)
24
+ @data.send(method_name, *args, &block)
25
+ else
26
+ super
27
+ end
28
+ end
29
+ end
30
+ end
@@ -27,4 +27,4 @@ module SleeperFF
27
27
 
28
28
  # Raised when Sleeper returns a 503 HTTP status code
29
29
  class ServiceUnavailable < Error; end
30
- end
30
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SleeperFF
4
+ class League
5
+ def initialize(data, client)
6
+ @data = data
7
+ @client = client
8
+ end
9
+
10
+ def transactions(round)
11
+ @client.league_transactions(@data.league_id, round)
12
+ end
13
+
14
+ def traded_picks
15
+ @client.league_traded_picks(@data.league_id)
16
+ end
17
+
18
+ def winners_bracket
19
+ @client.league_winners_bracket(@data.league_id)
20
+ end
21
+
22
+ def losers_bracket
23
+ @client.league_losers_bracket(@data.league_id)
24
+ end
25
+
26
+ def matchups(week)
27
+ @client.league_matchups(@data.league_id, week)
28
+ end
29
+
30
+ def drafts
31
+ @client.league_drafts(@data.league_id)
32
+ end
33
+
34
+ def respond_to_missing?(method_name, include_private = false)
35
+ @data.respond_to?(method_name) || super
36
+ end
37
+
38
+ def method_missing(method_name, *args, &block)
39
+ if @data.respond_to?(method_name)
40
+ @data.send(method_name, *args, &block)
41
+ else
42
+ super
43
+ end
44
+ end
45
+ end
46
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SleeperFF
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.1"
5
5
  end
metadata CHANGED
@@ -1,13 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sleeper_ff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Mejia
8
+ autorequire:
8
9
  bindir: bin
9
10
  cert_chain: []
10
- date: 2025-04-03 00:00:00.000000000 Z
11
+ date: 2026-02-22 00:00:00.000000000 Z
11
12
  dependencies:
12
13
  - !ruby/object:Gem::Dependency
13
14
  name: faraday
@@ -106,16 +107,22 @@ files:
106
107
  - bin/setup
107
108
  - lib/sleeper_ff.rb
108
109
  - lib/sleeper_ff/client.rb
110
+ - lib/sleeper_ff/client/drafts.rb
109
111
  - lib/sleeper_ff/client/leagues.rb
112
+ - lib/sleeper_ff/client/players.rb
113
+ - lib/sleeper_ff/client/sport.rb
110
114
  - lib/sleeper_ff/client/users.rb
111
115
  - lib/sleeper_ff/configurable.rb
112
116
  - lib/sleeper_ff/default.rb
117
+ - lib/sleeper_ff/draft.rb
113
118
  - lib/sleeper_ff/error.rb
119
+ - lib/sleeper_ff/league.rb
114
120
  - lib/sleeper_ff/version.rb
115
121
  homepage: https://github.com/jmejia/sleeper_ff
116
122
  licenses:
117
123
  - MIT
118
124
  metadata: {}
125
+ post_install_message:
119
126
  rdoc_options: []
120
127
  require_paths:
121
128
  - lib
@@ -130,7 +137,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
137
  - !ruby/object:Gem::Version
131
138
  version: '0'
132
139
  requirements: []
133
- rubygems_version: 3.6.2
140
+ rubygems_version: 3.4.10
141
+ signing_key:
134
142
  specification_version: 4
135
143
  summary: Ruby toolkit for the Sleeper Fantasy Football API
136
144
  test_files: []