sleeper_rb 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.
Files changed (140) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +3 -0
  4. data/.rubocop.yml +18 -0
  5. data/.travis.yml +8 -0
  6. data/CHANGELOG.md +9 -0
  7. data/CODE_OF_CONDUCT.md +84 -0
  8. data/Gemfile +14 -0
  9. data/Gemfile.lock +91 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +92 -0
  12. data/Rakefile +24 -0
  13. data/bin/console +15 -0
  14. data/bin/setup +8 -0
  15. data/docs/SleeperRb/BadRequest.html +106 -0
  16. data/docs/SleeperRb/Client.html +354 -0
  17. data/docs/SleeperRb/NotFound.html +106 -0
  18. data/docs/SleeperRb/RateLimitExceeded.html +106 -0
  19. data/docs/SleeperRb/Resources/Avatar.html +231 -0
  20. data/docs/SleeperRb/Resources/Draft/Metadata.html +419 -0
  21. data/docs/SleeperRb/Resources/Draft/Pick/Metadata.html +346 -0
  22. data/docs/SleeperRb/Resources/Draft/Pick.html +430 -0
  23. data/docs/SleeperRb/Resources/Draft/PickArray.html +108 -0
  24. data/docs/SleeperRb/Resources/Draft/Settings.html +361 -0
  25. data/docs/SleeperRb/Resources/Draft.html +560 -0
  26. data/docs/SleeperRb/Resources/DraftArray.html +198 -0
  27. data/docs/SleeperRb/Resources/League/Matchup.html +349 -0
  28. data/docs/SleeperRb/Resources/League/MatchupArray.html +108 -0
  29. data/docs/SleeperRb/Resources/League/Roster/Settings.html +415 -0
  30. data/docs/SleeperRb/Resources/League/Roster.html +409 -0
  31. data/docs/SleeperRb/Resources/League/RosterArray.html +108 -0
  32. data/docs/SleeperRb/Resources/League/ScoringSettings.html +808 -0
  33. data/docs/SleeperRb/Resources/League/Settings.html +648 -0
  34. data/docs/SleeperRb/Resources/League/Transaction/Metadata.html +119 -0
  35. data/docs/SleeperRb/Resources/League/Transaction/Settings.html +140 -0
  36. data/docs/SleeperRb/Resources/League/Transaction/WaiverBudget.html +292 -0
  37. data/docs/SleeperRb/Resources/League/Transaction.html +679 -0
  38. data/docs/SleeperRb/Resources/League/TransactionArray.html +272 -0
  39. data/docs/SleeperRb/Resources/League.html +688 -0
  40. data/docs/SleeperRb/Resources/LeagueArray.html +272 -0
  41. data/docs/SleeperRb/Resources/NflState.html +252 -0
  42. data/docs/SleeperRb/Resources/Player.html +860 -0
  43. data/docs/SleeperRb/Resources/PlayerArray.html +108 -0
  44. data/docs/SleeperRb/Resources/TradedPick.html +345 -0
  45. data/docs/SleeperRb/Resources/TradedPickArray.html +108 -0
  46. data/docs/SleeperRb/Resources/User/Metadata.html +140 -0
  47. data/docs/SleeperRb/Resources/User.html +406 -0
  48. data/docs/SleeperRb/Resources/UserArray.html +108 -0
  49. data/docs/SleeperRb/Resources.html +99 -0
  50. data/docs/SleeperRb/ServerError.html +106 -0
  51. data/docs/SleeperRb/Utilities/ArrayProxy.html +184 -0
  52. data/docs/SleeperRb/Utilities/Cache/ClassMethods.html +326 -0
  53. data/docs/SleeperRb/Utilities/Cache.html +253 -0
  54. data/docs/SleeperRb/Utilities/Request.html +120 -0
  55. data/docs/SleeperRb/Utilities/RosterPosition.html +239 -0
  56. data/docs/SleeperRb/Utilities.html +99 -0
  57. data/docs/SleeperRb.html +113 -0
  58. data/docs/created.rid +38 -0
  59. data/docs/css/fonts.css +167 -0
  60. data/docs/css/rdoc.css +619 -0
  61. data/docs/fonts/Lato-Light.ttf +0 -0
  62. data/docs/fonts/Lato-LightItalic.ttf +0 -0
  63. data/docs/fonts/Lato-Regular.ttf +0 -0
  64. data/docs/fonts/Lato-RegularItalic.ttf +0 -0
  65. data/docs/fonts/SourceCodePro-Bold.ttf +0 -0
  66. data/docs/fonts/SourceCodePro-Regular.ttf +0 -0
  67. data/docs/images/add.png +0 -0
  68. data/docs/images/arrow_up.png +0 -0
  69. data/docs/images/brick.png +0 -0
  70. data/docs/images/brick_link.png +0 -0
  71. data/docs/images/bug.png +0 -0
  72. data/docs/images/bullet_black.png +0 -0
  73. data/docs/images/bullet_toggle_minus.png +0 -0
  74. data/docs/images/bullet_toggle_plus.png +0 -0
  75. data/docs/images/date.png +0 -0
  76. data/docs/images/delete.png +0 -0
  77. data/docs/images/find.png +0 -0
  78. data/docs/images/loadingAnimation.gif +0 -0
  79. data/docs/images/macFFBgHack.png +0 -0
  80. data/docs/images/package.png +0 -0
  81. data/docs/images/page_green.png +0 -0
  82. data/docs/images/page_white_text.png +0 -0
  83. data/docs/images/page_white_width.png +0 -0
  84. data/docs/images/plugin.png +0 -0
  85. data/docs/images/ruby.png +0 -0
  86. data/docs/images/tag_blue.png +0 -0
  87. data/docs/images/tag_green.png +0 -0
  88. data/docs/images/transparent.png +0 -0
  89. data/docs/images/wrench.png +0 -0
  90. data/docs/images/wrench_orange.png +0 -0
  91. data/docs/images/zoom.png +0 -0
  92. data/docs/index.html +171 -0
  93. data/docs/js/darkfish.js +84 -0
  94. data/docs/js/navigation.js +105 -0
  95. data/docs/js/navigation.js.gz +0 -0
  96. data/docs/js/search.js +110 -0
  97. data/docs/js/search_index.js +1 -0
  98. data/docs/js/search_index.js.gz +0 -0
  99. data/docs/js/searcher.js +229 -0
  100. data/docs/js/searcher.js.gz +0 -0
  101. data/docs/table_of_contents.html +770 -0
  102. data/lib/sleeper_rb/client.rb +80 -0
  103. data/lib/sleeper_rb/resources/avatar.rb +43 -0
  104. data/lib/sleeper_rb/resources/draft/metadata.rb +83 -0
  105. data/lib/sleeper_rb/resources/draft/pick/metadata.rb +64 -0
  106. data/lib/sleeper_rb/resources/draft/pick.rb +85 -0
  107. data/lib/sleeper_rb/resources/draft/pick_array.rb +11 -0
  108. data/lib/sleeper_rb/resources/draft/settings.rb +73 -0
  109. data/lib/sleeper_rb/resources/draft.rb +129 -0
  110. data/lib/sleeper_rb/resources/draft_array.rb +25 -0
  111. data/lib/sleeper_rb/resources/league/matchup.rb +66 -0
  112. data/lib/sleeper_rb/resources/league/matchup_array.rb +11 -0
  113. data/lib/sleeper_rb/resources/league/roster/settings.rb +76 -0
  114. data/lib/sleeper_rb/resources/league/roster.rb +73 -0
  115. data/lib/sleeper_rb/resources/league/roster_array.rb +11 -0
  116. data/lib/sleeper_rb/resources/league/scoring_settings.rb +172 -0
  117. data/lib/sleeper_rb/resources/league/settings.rb +148 -0
  118. data/lib/sleeper_rb/resources/league/transaction/metadata.rb +22 -0
  119. data/lib/sleeper_rb/resources/league/transaction/settings.rb +22 -0
  120. data/lib/sleeper_rb/resources/league/transaction/waiver_budget.rb +52 -0
  121. data/lib/sleeper_rb/resources/league/transaction.rb +153 -0
  122. data/lib/sleeper_rb/resources/league/transaction_array.rb +43 -0
  123. data/lib/sleeper_rb/resources/league.rb +197 -0
  124. data/lib/sleeper_rb/resources/league_array.rb +41 -0
  125. data/lib/sleeper_rb/resources/nfl_state.rb +51 -0
  126. data/lib/sleeper_rb/resources/player.rb +189 -0
  127. data/lib/sleeper_rb/resources/player_array.rb +16 -0
  128. data/lib/sleeper_rb/resources/traded_pick.rb +63 -0
  129. data/lib/sleeper_rb/resources/traded_pick_array.rb +9 -0
  130. data/lib/sleeper_rb/resources/user/metadata.rb +20 -0
  131. data/lib/sleeper_rb/resources/user.rb +104 -0
  132. data/lib/sleeper_rb/resources/user_array.rb +9 -0
  133. data/lib/sleeper_rb/utilities/array_proxy.rb +47 -0
  134. data/lib/sleeper_rb/utilities/cache.rb +132 -0
  135. data/lib/sleeper_rb/utilities/request.rb +42 -0
  136. data/lib/sleeper_rb/utilities/roster_position.rb +30 -0
  137. data/lib/sleeper_rb/version.rb +5 -0
  138. data/lib/sleeper_rb.rb +15 -0
  139. data/sleeper_rb.gemspec +35 -0
  140. metadata +185 -0
@@ -0,0 +1,153 @@
1
+ # frozen-string-literal: true
2
+
3
+ require_relative "transaction/metadata"
4
+ require_relative "transaction/settings"
5
+ require_relative "transaction/waiver_budget"
6
+
7
+ module SleeperRb
8
+ module Resources
9
+ class League
10
+ ##
11
+ # Represents a waiver move, free agent transaction, or trade.
12
+ class Transaction
13
+ include SleeperRb::Utilities::Cache
14
+
15
+ ##
16
+ # :attr_reader: transaction_id
17
+
18
+ ##
19
+ # :attr_reader: type
20
+
21
+ ##
22
+ # :attr_reader: status
23
+
24
+ ##
25
+ # :attr_reader: roster_ids
26
+
27
+ ##
28
+ # :attr_reader: week
29
+
30
+ ##
31
+ # :attr_reader: drops
32
+
33
+ ##
34
+ # :attr_reader: creator
35
+
36
+ ##
37
+ # :attr_reader: consenter_ids
38
+
39
+ ##
40
+ # :attr_reader: adds
41
+
42
+ ##
43
+ # :attr_reader: created
44
+
45
+ ##
46
+ # :attr_reader: status_updated
47
+
48
+ # rubocop:disable Layout/LineLength
49
+
50
+ ##
51
+ # :method: waiver_budget
52
+ #
53
+ # @return [Array<{SleeperRb::Resources::League::Transaction::WaiverBudget}[rdoc-ref:SleeperRb::Resources::League::Transaction::WaiverBudget]>]
54
+
55
+ ##
56
+ # :method: settings
57
+ #
58
+ # @return [{SleeperRb::Resources::League::Transaction::Settings}[rdoc-ref:SleeperRb::Resources::League::Transaction::Settings]]
59
+
60
+ ##
61
+ # :method: metadata
62
+ #
63
+ # @return [{SleeperRb::Resources::League::Transaction::Metadata}[rdoc-ref:SleeperRb::Resources::League::Transaction::Metadata]]
64
+
65
+ ## :method: league
66
+ # The league this transaction is a part of.
67
+ #
68
+ # @return [{SleeperRb::Resources::League}[rdoc-ref:SleeperRb::Resources::League]]
69
+
70
+ ##
71
+ # :method: draft_picks
72
+ # Any draft picks traded as part of this transaction.
73
+ #
74
+ # @return [{SleeperRb::Resources::TradedPickArray}[rdoc-ref:SleeperRb::Resources::TradedPickArray]]
75
+
76
+ # rubocop:enable Layout/LineLength
77
+
78
+ cached_attr :league, :transaction_id, :type, :status, :roster_ids, :leg, :drops, :creator, :consenter_ids,
79
+ :adds, created: :timestamp, status_updated: :timestamp,
80
+ waiver_budget: ->(array) { array&.map { |hash| WaiverBudget.new(hash.merge(transaction: self)) } },
81
+ settings: ->(hash) { Settings.new(hash || {}) },
82
+ metadata: ->(hash) { Metadata.new(hash || {}) },
83
+ draft_picks: ->(array) { TradedPickArray.new(array&.map { |hash| TradedPick.new(hash) }) }
84
+
85
+ delegate(*Settings.cached_attrs.keys, to: :settings)
86
+ delegate(*Metadata.cached_attrs.keys, to: :settings)
87
+
88
+ alias week leg
89
+
90
+ skip_refresh :all
91
+
92
+ ##
93
+ # :method: rosters
94
+ # Returns rosters participating in this transaction.
95
+ #
96
+ # @return [{SleeperRb::Resources::League::RosterArray}[rdoc-ref:SleeperRb::Resources::League::RosterArray]]
97
+ cached_association :rosters do
98
+ league.rosters.where(roster_id: { in: roster_ids })
99
+ end
100
+
101
+ ##
102
+ # :method: user
103
+ # Returns the User who created this transaction.
104
+ #
105
+ # @return [{SleeperRb::Resources::User}[rdoc-ref:SleeperRb::Resources::User]]
106
+ cached_association :user do
107
+ league.users.detect { |user| user.user_id == creator }
108
+ end
109
+
110
+ ##
111
+ # :method: consenting_rosters
112
+ # Returns the rosters who consented to this transaction.
113
+ #
114
+ # @return [{SleeperRb::Resources::League::RosterArray}[rdoc-ref:SleeperRb::Resources::League::RosterArray]]
115
+ cached_association :consenting_rosters do
116
+ league.rosters.where(roster_id: { in: consenter_ids })
117
+ end
118
+
119
+ ##
120
+ # Returns true if the transaction is a trade.
121
+ #
122
+ # @return [Boolean]
123
+ def trade?
124
+ type == "trade"
125
+ end
126
+
127
+ ##
128
+ # Returns true if the transaction is for a free agent.
129
+ #
130
+ # @return [Boolean]
131
+ def free_agent?
132
+ type == "free_agent"
133
+ end
134
+
135
+ ##
136
+ # Returns true if the transaction is for a free agent acquired with FAAB.
137
+ #
138
+ # @return [Boolean]
139
+ def faab?
140
+ free_agent? && !waiver_bid.nil?
141
+ end
142
+
143
+ ##
144
+ # Returns true if the transaction is for a free agent acquired via the waiver wire.
145
+ #
146
+ # @return [Boolean]
147
+ def waiver?
148
+ free_agent? && !waiver_bid
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
@@ -0,0 +1,43 @@
1
+ # frozen-string-literal: true
2
+
3
+ module SleeperRb
4
+ module Resources
5
+ class League
6
+ ##
7
+ # Implements {SleeperRb::Utilities::ArrayProxy} and wraps Transaction objects.
8
+ class TransactionArray < SleeperRb::Utilities::ArrayProxy
9
+ ##
10
+ # Returns transactions which are trades.
11
+ #
12
+ # @return [{SleeperRb::Resources::League::TransactionArray}[rdoc-ref:SleeperRb::Resources::League::TransactionArray]]
13
+ def trade
14
+ where(type: "trade")
15
+ end
16
+
17
+ ##
18
+ # Returns transactions which are free agent acquisitions.
19
+ #
20
+ # @return [{SleeperRb::Resources::League::TransactionArray}[rdoc-ref:SleeperRb::Resources::League::TransactionArray]]
21
+ def free_agent
22
+ where(type: "free_agent")
23
+ end
24
+
25
+ ##
26
+ # Returns transactions which are free agent acquisitions made with FAAB.
27
+ #
28
+ # @return [{SleeperRb::Resources::League::TransactionArray}[rdoc-ref:SleeperRb::Resources::League::TransactionArray]]
29
+ def faab
30
+ where(type: "free_agent", waiver_bid: { not: nil })
31
+ end
32
+
33
+ ##
34
+ # Returns transactions which are free agent acquisitions made via the waiver wire.
35
+ #
36
+ # @return [{SleeperRb::Resources::League::TransactionArray}[rdoc-ref:SleeperRb::Resources::League::TransactionArray]]
37
+ def waiver
38
+ where(type: "free_agent", waiver_bid: nil)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,197 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "league/matchup"
4
+ require_relative "league/matchup_array"
5
+ require_relative "league/roster"
6
+ require_relative "league/roster_array"
7
+ require_relative "league/scoring_settings"
8
+ require_relative "league/settings"
9
+ require_relative "league/transaction"
10
+ require_relative "league/transaction_array"
11
+
12
+ module SleeperRb
13
+ module Resources
14
+ ##
15
+ # This class represents a Fantasy Football League and is the access point for associated resources.
16
+ # All attributes are lazily loaded and cache their value based on the API response.
17
+ class League
18
+ include SleeperRb::Utilities::Request
19
+ include SleeperRb::Utilities::Cache
20
+
21
+ ##
22
+ # :attr_reader: total_rosters
23
+
24
+ ##
25
+ # :attr_reader: status
26
+
27
+ ##
28
+ # :attr_reader: sport
29
+
30
+ ##
31
+ # :attr_reader: season_type
32
+
33
+ ##
34
+ # :attr_reader: season
35
+
36
+ ##
37
+ # :attr_reader: previous_league_id
38
+
39
+ ##
40
+ # :attr_reader: name
41
+
42
+ ##
43
+ # :attr_reader: league_id
44
+
45
+ ##
46
+ # :attr_reader: draft_id
47
+
48
+ ##
49
+ # :method: avatar
50
+ # Retrieves the Avatar instance for the league.
51
+ #
52
+ # @return [{SleeperRb::Resources::Avatar}[rdoc-ref:SleeperRb::Resources::Avatar]]
53
+
54
+ ##
55
+ # :method: scoring_settings
56
+ # Retrieves the scoring settings for the league.
57
+ #
58
+ # @return [{SleeperRb::Resources::League::ScoringSettings}[rdoc-ref:SleeperRb::Resources::League::ScoringSettings]]
59
+
60
+ ##
61
+ # :method: roster_positions
62
+ # Retrieves the available roster positions for the league.
63
+ #
64
+ # @return [Array<{SleeperRb::Utilities::RosterPosition}[rdoc-ref:SleeperRb::Utilities::RosterPosition]>]
65
+
66
+ ##
67
+ # :method: settings
68
+ # Returns the non-scoring settings for the league.
69
+ #
70
+ # @return [{SleeperRb::Resources::League::Settings}[rdoc-ref:SleeperRb::Resources::League::Settings]]
71
+ cached_attr :total_rosters, :status, :sport, :season_type, :season, :previous_league_id, :name, :league_id,
72
+ :draft_id, avatar: ->(id) { Resources::Avatar.new(avatar_id: id) },
73
+ scoring_settings: ->(settings) { ScoringSettings.new(settings) },
74
+ roster_positions: lambda { |array|
75
+ array.map do |pos|
76
+ SleeperRb::Utilities::RosterPosition.new(pos)
77
+ end
78
+ },
79
+ settings: ->(settings) { Settings.new(settings) }
80
+
81
+ delegate(*Settings.cached_attrs.keys, to: :settings)
82
+ delegate(*ScoringSettings.cached_attrs.keys, to: :scoring_settings)
83
+ delegate :ppr?, :half_ppr?, :standard?, to: :scoring_settings
84
+
85
+ ##
86
+ # :method: rosters
87
+ # Retrieves rosters for the League.
88
+ #
89
+ # @return [{SleeperRb::Resources::League::RosterArray}[rdoc-ref:SleeperRb::Resources::League::RosterArray]]
90
+ cached_association :rosters do
91
+ retrieve_rosters!
92
+ end
93
+
94
+ ##
95
+ # :method: users
96
+ # Retrieves users for the League.
97
+ #
98
+ # @return [{SleeperRb::Resources::UserArray}[rdoc-ref:SleeperRb::Resources::UserArray]]
99
+ cached_association :users do
100
+ retrieve_users!
101
+ end
102
+
103
+ ##
104
+ # :method: matchups
105
+ # Returns matchups for the League for the given week.
106
+ # :call-seq:
107
+ # matchups(week_number)
108
+ #
109
+ # @return [{SleeperRb::Resources::League::MatchupArray}[rdoc-ref:SleeperRb::Resources::League::MatchupArray]]
110
+ cached_association :matchups do |week|
111
+ retrieve_matchups!(week)
112
+ end
113
+
114
+ ##
115
+ # :method: traded_picks
116
+ # Returns all traded draft picks for the League.
117
+ #
118
+ # @return [{SleeperRb::Resources::TradedPickArray}[rdoc-ref:SleeperRb::Resources::TradedPickArray]]
119
+ cached_association :traded_picks do
120
+ retrieve_traded_picks!
121
+ end
122
+
123
+ ##
124
+ # :method: drafts
125
+ # Returns all drafts for the league
126
+ #
127
+ # @return [{SleeperRb::Resources::DraftArray}[rdoc-ref:SleeperRb::Resources::DraftArray]]
128
+ cached_association :drafts do
129
+ retrieve_drafts!
130
+ end
131
+
132
+ ##
133
+ # :method: transactions
134
+ # Returns all transactions for the League for a given week.
135
+ # :call-seq:
136
+ # transactions(week_number)
137
+ #
138
+ # @return [{SleeperRb::Resources::League::TransactionArray}[rdoc-ref:SleeperRb::Resources::League::TransactionArray]]
139
+ cached_association :transactions do |week|
140
+ retrieve_transactions!(week)
141
+ end
142
+
143
+ def initialize(opts = {})
144
+ raise ArgumentError unless opts[:league_id]
145
+
146
+ super
147
+ end
148
+
149
+ SleeperRb::Utilities::RosterPosition::VALID_ROSTER_POSITIONS.each do |pos|
150
+ define_method(pos) { roster_positions.select(&:"#{pos}?").size }
151
+ end
152
+
153
+ private
154
+
155
+ def retrieve_values!
156
+ url = "#{BASE_URL}/league/#{league_id}"
157
+ execute_request(url)
158
+ end
159
+
160
+ def retrieve_rosters!
161
+ url = "#{BASE_URL}/league/#{league_id}/rosters"
162
+ response = execute_request(url)
163
+ RosterArray.new(response.map { |hash| Roster.new(hash.merge(league: self)) })
164
+ end
165
+
166
+ def retrieve_users!
167
+ url = "#{BASE_URL}/league/#{league_id}/users"
168
+ response = execute_request(url)
169
+ UserArray.new(response.map { |hash| User.new(hash) })
170
+ end
171
+
172
+ def retrieve_matchups!(week)
173
+ url = "#{BASE_URL}/league/#{league_id}/matchups/#{week}"
174
+ response = execute_request(url)
175
+ MatchupArray.new(response.map { |hash| Matchup.new(hash.merge(league: self)) })
176
+ end
177
+
178
+ def retrieve_traded_picks!
179
+ url = "#{BASE_URL}/league/#{league_id}/traded_picks"
180
+ response = execute_request(url)
181
+ TradedPickArray.new(response.map { |hash| TradedPick.new(hash.merge(league: self)) })
182
+ end
183
+
184
+ def retrieve_drafts!
185
+ url = "#{BASE_URL}/league/#{league_id}/drafts"
186
+ response = execute_request(url)
187
+ DraftArray.new(response.map { |hash| Draft.new(hash.merge(league: self)) })
188
+ end
189
+
190
+ def retrieve_transactions!(week)
191
+ url = "#{BASE_URL}/league/#{league_id}/transactions/#{week}"
192
+ response = execute_request(url)
193
+ TransactionArray.new(response.map { |hash| Transaction.new(hash.merge(league: self)) })
194
+ end
195
+ end
196
+ end
197
+ end
@@ -0,0 +1,41 @@
1
+ # frozen-string-literal: true
2
+
3
+ module SleeperRb
4
+ module Resources
5
+ ##
6
+ # Implements {SleeperRb::Utilities::ArrayProxy}[rdoc-ref:SleeperRb::Utilities::ArrayProxy] and wraps League objects.
7
+ class LeagueArray < SleeperRb::Utilities::ArrayProxy
8
+ ##
9
+ # Returns leagues which are set to Best Ball mode.
10
+ #
11
+ # @return [{SleeperRb::Resources::LeagueArray}[rdoc-ref:SleeperRb::Resources::LeagueArray]]
12
+ def best_ball
13
+ where(best_ball: true)
14
+ end
15
+
16
+ ##
17
+ # Returns leagues which use PPR scoring.
18
+ #
19
+ # @return [{SleeperRb::Resources::LeagueArray}[rdoc-ref:SleeperRb::Resources::LeagueArray]]
20
+ def ppr
21
+ where(ppr?: true)
22
+ end
23
+
24
+ ##
25
+ # Returns leagues which use Half-PPR scoring.
26
+ #
27
+ # @return [{SleeperRb::Resources::LeagueArray}[rdoc-ref:SleeperRb::Resources::LeagueArray]]
28
+ def half_ppr
29
+ where(half_ppr?: true)
30
+ end
31
+
32
+ ##
33
+ # Returns leagues which use Standard (Zero PPR) scoring.
34
+ #
35
+ # @return [{SleeperRb::Resources::LeagueArray}[rdoc-ref:SleeperRb::Resources::LeagueArray]]
36
+ def standard
37
+ where(standard?: true)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "singleton"
4
+
5
+ module SleeperRb
6
+ module Resources
7
+ ##
8
+ # The NflState resource represents the current state of the NFL (week number, year, etc) as defined by Sleeper.
9
+ class NflState
10
+ include Singleton
11
+ include SleeperRb::Utilities::Request
12
+ include SleeperRb::Utilities::Cache
13
+
14
+ ##
15
+ # :attr_reader: week
16
+
17
+ ##
18
+ # :attr_reader: season_type
19
+
20
+ ##
21
+ # :attr_reader: season
22
+
23
+ ##
24
+ # :attr_reader: league_season
25
+
26
+ ##
27
+ # :attr_reader: season_start_date
28
+
29
+ ##
30
+ # :attr_reader: previous_season
31
+
32
+ ##
33
+ # :attr_reader: leg
34
+
35
+ ##
36
+ # :attr_reader: league_create_season
37
+
38
+ ##
39
+ # :attr_reader: display_week
40
+
41
+ cached_attr :week, :season_type, :season, :league_season, :season_start_date, :previous_season,
42
+ :leg, :league_create_season, :display_week
43
+
44
+ private
45
+
46
+ def retrieve_values!
47
+ execute_request(URI("#{BASE_URL}/state/nfl"))
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,189 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SleeperRb
4
+ module Resources
5
+ ##
6
+ # A specific NFL player with general information about roster position, physical attributes, team, etc.
7
+ class Player
8
+ extend SleeperRb::Utilities::Request
9
+ include SleeperRb::Utilities::Cache
10
+
11
+ class << self
12
+ ##
13
+ # Ensuring there is one source of players so the heavy endpoint need not be called frequently.
14
+ #
15
+ # @return [{SleeperRb::Resources::PlayerArray}[rdoc-ref:SleeperRb::Resources::PlayerArray]]
16
+ def all
17
+ @all ||= PlayerArray.new(player_hashes.reduce([]) do |array, (_player_id, player_hash)|
18
+ array << new(player_hash)
19
+ end)
20
+ end
21
+
22
+ ##
23
+ # Resets the values for all players.
24
+ #
25
+ # @return [self]
26
+ def refresh
27
+ @all = nil
28
+ @player_hashes = nil
29
+ self
30
+ end
31
+
32
+ def player_hashes
33
+ @player_hashes ||= retrieve_players!
34
+ end
35
+
36
+ private
37
+
38
+ def retrieve_players!
39
+ url = "#{BASE_URL}/players/nfl"
40
+ execute_request(url)
41
+ end
42
+ end
43
+
44
+ ##
45
+ # :attr_reader: hashtag
46
+
47
+ ##
48
+ # :attr_reader: depth_chart_position
49
+
50
+ ##
51
+ # :attr_reader: status
52
+
53
+ ##
54
+ # :attr_reader: sport
55
+
56
+ ##
57
+ # :attr_reader: number
58
+
59
+ ##
60
+ # :attr_reader: injury_start_date
61
+
62
+ ##
63
+ # :attr_reader: weight
64
+
65
+ ##
66
+ # :attr_reader: practice_participation
67
+
68
+ ##
69
+ # :attr_reader: sportradar_id
70
+
71
+ ##
72
+ # :attr_reader: team
73
+
74
+ ##
75
+ # :attr_reader: last_name
76
+
77
+ ##
78
+ # :attr_reader: college
79
+
80
+ ##
81
+ # :attr_reader: fantasy_data_id
82
+
83
+ ##
84
+ # :attr_reader: full_name
85
+
86
+ ##
87
+ # :attr_reader: injury_status
88
+
89
+ ##
90
+ # :attr_reader: player_id
91
+
92
+ ##
93
+ # :attr_reader: height
94
+
95
+ ##
96
+ # :attr_reader: age
97
+
98
+ ##
99
+ # :attr_reader: stats_id
100
+
101
+ ##
102
+ # :attr_reader: birth_country
103
+
104
+ ##
105
+ # :attr_reader: espn_id
106
+
107
+ ##
108
+ # :attr_reader: first_name
109
+
110
+ ##
111
+ # :attr_reader: active
112
+
113
+ ##
114
+ # :attr_reader: depth_chart_order
115
+
116
+ ##
117
+ # :attr_reader: years_exp
118
+
119
+ ##
120
+ # :attr_reader: rotowire_id
121
+
122
+ ##
123
+ # :attr_reader: yahoo_id
124
+
125
+ ##
126
+ # :attr_reader: pandascore_id
127
+
128
+ ##
129
+ # :attr_reader: news_updated
130
+
131
+ ##
132
+ # :attr_reader: birth_city
133
+
134
+ ##
135
+ # :attr_reader: birth_date
136
+
137
+ ##
138
+ # :attr_reader: injury_notes
139
+
140
+ ##
141
+ # :attr_reader: gsis_id
142
+
143
+ ##
144
+ # :attr_reader: birth_state
145
+
146
+ ##
147
+ # :attr_reader: swish_id
148
+
149
+ ##
150
+ # :attr_reader: high_school
151
+
152
+ ##
153
+ # :attr_reader: metadata
154
+
155
+ ##
156
+ # :attr_reader: injury_body_part
157
+
158
+ ##
159
+ # :attr_reader: practice_description
160
+
161
+ ##
162
+ # :method: fantasy_positions
163
+ # All fantasy positions for which the player is eligible.
164
+ #
165
+ # @return [Array<{SleeperRb::Utilities::RosterPosition}[rdoc-ref:SleeperRb::Utilities::RosterPosition]>]
166
+
167
+ ##
168
+ # :method: position
169
+ # Primary position for the player.
170
+ #
171
+ # @return [{SleeperRb::Utilities::RosterPosition}[rdoc-ref:SleeperRb::Utilities::RosterPosition]]
172
+
173
+ cached_attr :hashtag, :depth_chart_position, :status, :sport, :number, :injury_start_date, :weight,
174
+ :practice_participation, :sportradar_id, :team, :last_name, :college, :fantasy_data_id, :full_name,
175
+ :injury_status, :player_id, :height, :age, :stats_id, :birth_country, :espn_id, :first_name, :active,
176
+ :depth_chart_order, :years_exp, :rotowire_id, :rotoworld_id, :yahoo_id, :pandascore_id, :news_updated,
177
+ :birth_city, :birth_date, :injury_notes, :gsis_id, :birth_state, :swish_id, :high_school, :metadata,
178
+ :injury_body_part, :practice_description,
179
+ fantasy_positions: ->(array) { array&.map { |pos| SleeperRb::Utilities::RosterPosition.new(pos) } },
180
+ position: ->(pos) { pos ? SleeperRb::Utilities::RosterPosition.new(pos) : nil }
181
+
182
+ private
183
+
184
+ def retrieve_values!
185
+ self.class.player_hashes[@player_id.to_sym]
186
+ end
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,16 @@
1
+ # frozen-string-literal: true
2
+
3
+ module SleeperRb
4
+ module Resources
5
+ ##
6
+ # Provides methods named for each valid roster position which return a PlayerArray containing all
7
+ # players which match the given roster position.
8
+ class PlayerArray < SleeperRb::Utilities::ArrayProxy
9
+ SleeperRb::Utilities::RosterPosition::VALID_ROSTER_POSITIONS.each do |position|
10
+ define_method(position) do
11
+ where(position: position)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end