sleeper_ff 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2eabd815df1063832834aa7efcfa764631331510fab7a4efe816b6ee149171f
4
- data.tar.gz: e420eb29b532a533e53e8dd38c0357e477d9465f5eda757e24be9991033960ce
3
+ metadata.gz: e7003f4a5b2c10ca28f61fb523031b6191985e36998dd644266c2599c696c983
4
+ data.tar.gz: 4de640ecc50838e96b08b48f76fd7cdd570314ca8fe585f37908d440a1175583
5
5
  SHA512:
6
- metadata.gz: 83b97c33a2122a7d668f8d8c95788f1b2ec80522617bdfb3895db0395c869c454c92e9846f3ddc1a9a7d94a412f71c967a67dbaf5f6f8b62d2e9cfe14c5330cd
7
- data.tar.gz: 5b6d6c0071ddc254bddef7049802dbf19ff98f4362f103f782188a9f56c9ba3e257f00180b6865d662dd285e13f4204343642e7ef31ab6ed81aecac4e876d804
6
+ metadata.gz: 70e4b1ec4e14b3d43bfe9cbdef93d1edc90a3c42e13b27d5911e5f4e905161c128afe35ab8d82ed4d0a63c566d5b1028f369813c69a0c443a42771bdabbd0660
7
+ data.tar.gz: 3fde189ef7e7e4cdc918a37db469182c40f3a90ff153eb128e9bd08eb48f914fc5c3a7d2f719318ec3546d5d95394555457d938d2117dd0b56e97559ce14bc0d
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,9 +102,74 @@ roster.starters # => ["player_id1", "player_id2", ...]
97
102
  roster.settings # => { wins: 10, losses: 4, ... }
98
103
  ```
99
104
 
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
+
100
172
  More endpoints coming soon:
101
- - Players
102
- - Drafts
103
173
  - Matchups
104
174
  - Transactions
105
175
 
@@ -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
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
@@ -4,12 +4,16 @@ 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"
7
9
 
8
10
  module SleeperFF
9
11
  class Client
10
12
  include SleeperFF::Configurable
11
13
  include SleeperFF::Client::Users
12
14
  include SleeperFF::Client::Leagues
15
+ include SleeperFF::Client::Drafts
16
+ include SleeperFF::Client::Players
13
17
 
14
18
  # Header keys that can be passed in options hash
15
19
  CONVENIENCE_HEADERS = Set.new([:accept, :content_type])
@@ -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
@@ -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.0"
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.0
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,21 @@ 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
110
113
  - lib/sleeper_ff/client/users.rb
111
114
  - lib/sleeper_ff/configurable.rb
112
115
  - lib/sleeper_ff/default.rb
116
+ - lib/sleeper_ff/draft.rb
113
117
  - lib/sleeper_ff/error.rb
118
+ - lib/sleeper_ff/league.rb
114
119
  - lib/sleeper_ff/version.rb
115
120
  homepage: https://github.com/jmejia/sleeper_ff
116
121
  licenses:
117
122
  - MIT
118
123
  metadata: {}
124
+ post_install_message:
119
125
  rdoc_options: []
120
126
  require_paths:
121
127
  - lib
@@ -130,7 +136,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
136
  - !ruby/object:Gem::Version
131
137
  version: '0'
132
138
  requirements: []
133
- rubygems_version: 3.6.2
139
+ rubygems_version: 3.4.10
140
+ signing_key:
134
141
  specification_version: 4
135
142
  summary: Ruby toolkit for the Sleeper Fantasy Football API
136
143
  test_files: []