sorare-rewards 1.2.0 → 1.3.0.beta0

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: 4f64ea163ad5ed02120737f8a540b3c1a86cbfc4e2d472ff4906cf2ca836f060
4
- data.tar.gz: d9021d4ce7717b197408ee1e9e1da025e3af46f4f744862c987ea58654e9f191
3
+ metadata.gz: f21a3d6ed4a19177ff92d64b89a4f605f76de64f3f7d1cc077d9d59a5f241c7c
4
+ data.tar.gz: cdfc9b29382f52800871f27533b1d5dcfa7795bc35c7f223d9a19f02287d245b
5
5
  SHA512:
6
- metadata.gz: eafcc27cb84b5974e901b8246fd49a9f351b7e88b784274eb2a3dc0b1086f6b11a6d96611b20790b42c92e83ac97e4abb6dadfa3b2f928f2c66db161451c86c4
7
- data.tar.gz: db9da4a9da91484dd38a71afa544cc324d7c1e724a85cebe154453fa381c376c8c028ad3f4494e533cd6480657c6d6b9a6a2c2b6cef6e1be6f96fa2f57516222
6
+ metadata.gz: 3d4d20f37c3072805b4d6927936f959b7639ae0904fbd327e9aa709fd33d8c1360aa0d45d949402c250f57878bd06b19b8d1406d9a11999b62322c3d05276b8e
7
+ data.tar.gz: 6deb5eb9c375f07b3f6c20107155019782dc3fab546de56bf7979fc131a927077575822b5111235cd16bcc842b851f74524848bf12c4436c2f3514e738f6ae8b
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## [1.3.0] - 2021-11-02
2
+ ### Breaking
3
+ - Removed rewards method from `GameWeek` (`card_rewards`, `cards_picked`, `reward_allocations`, `prize_pools`, `card_allocations`)
4
+ - `Picker` has been renamed to `CardPicker`
5
+ ### Added
6
+ - Added a `GameWeekRewards` class that provides all rewards related methods
7
+ - Added a way to pick cards with a custom `card_allocations`
8
+
1
9
  ## [1.2.0] - 2021-11-02
2
10
  ### Added
3
11
  - Enable cross leagues cooldown using `per_league` configuration flag
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sorare-rewards (1.2.0)
4
+ sorare-rewards (1.3.0.beta0)
5
5
  activesupport (~> 6.1.4)
6
6
  interactor (~> 3.1.2)
7
7
  json (~> 2)
@@ -29,7 +29,7 @@ GEM
29
29
  net-http (0.1.1)
30
30
  net-protocol
31
31
  uri
32
- net-protocol (0.1.1)
32
+ net-protocol (0.1.2)
33
33
  io-wait
34
34
  timeout
35
35
  ostruct (0.4.0)
@@ -73,7 +73,7 @@ GEM
73
73
  tzinfo (2.0.4)
74
74
  concurrent-ruby (~> 1.0)
75
75
  unicode-display_width (2.1.0)
76
- uri (0.10.1)
76
+ uri (0.11.0)
77
77
  yaml (0.2.0)
78
78
  zeitwerk (2.5.0)
79
79
 
data/README.md CHANGED
@@ -10,11 +10,11 @@ gem 'sorare-rewards'
10
10
 
11
11
  And then execute:
12
12
 
13
- $ bundle install
13
+ $ bundle install
14
14
 
15
15
  Or install it yourself as:
16
16
 
17
- $ gem install sorare-rewards
17
+ $ gem install sorare-rewards
18
18
 
19
19
  ## Usage
20
20
 
@@ -28,20 +28,37 @@ game_week = Sorare::Rewards::GameWeek.new(hash: 'QmbwCo1fuhRN1T2DyEQtETefsBH6yCj
28
28
  Game Week's `hash` and `salt` can be retrieved using the GQL API, the salt is made public after the rewards have been distributed.
29
29
 
30
30
 
31
- To compute the number of rewards for the game week :
31
+ To compute rewards for a game week :
32
32
 
33
33
  ```ruby
34
- # Card rewards :
35
- game_week.card_allocations
34
+ rewards = Sorare::Rewards::GameWeekRewards.new(game_week: game_week)
36
35
 
37
- # Eth rewards :
38
- game_week.prize_pools
36
+ # Cards allocations :
37
+ rewards.card_allocations
38
+
39
+ # Cards :
40
+ rewards.cards
41
+
42
+ # Prize pools :
43
+ rewards.prize_pools
39
44
  ```
40
45
 
41
- To get the cards rewarded for a GameWeek :
46
+ By default it uses the computed card allocations to pick the rewards. To override it :
42
47
 
43
48
  ```ruby
44
- game_week.cards_picked
49
+ card_allocations = {
50
+ 'global_all-star' => {
51
+ 'D1' => {
52
+ 'rare' => {
53
+ 'tier_0' => 1,
54
+ ...
55
+ }
56
+ }
57
+ }
58
+ }
59
+
60
+ rewards = Sorare::Rewards::GameWeekRewards.new(game_week: game_week, card_allocations: card_allocations)
61
+
45
62
  ```
46
63
 
47
64
  ## Development
@@ -4,8 +4,8 @@ require 'active_support/core_ext/module/delegation'
4
4
 
5
5
  module Sorare
6
6
  module Rewards
7
- # Picker allows to randomly pick a card
8
- class Picker
7
+ # CardPicker allows to randomly pick a card
8
+ class CardPicker
9
9
  attr_accessor :cards, :player_counter
10
10
 
11
11
  delegate :length, to: :cards
@@ -6,13 +6,10 @@ require 'active_support/core_ext/module/delegation'
6
6
 
7
7
  module Sorare
8
8
  module Rewards
9
- # GameWeek stores the reward data of a game week
9
+ # GameWeek stores the data of a game week
10
10
  class GameWeek
11
11
  attr_reader :salt
12
12
 
13
- delegate :card_allocations, :prize_pools, to: :reward_allocations
14
- delegate :cards_picked, to: :card_rewards
15
-
16
13
  def initialize(data: nil, hash: nil, salt: nil)
17
14
  @uri = URI("#{Sorare::Rewards.configuration.gateway}#{hash}")
18
15
  @data = data
@@ -48,16 +45,6 @@ module Sorare
48
45
  end
49
46
  end
50
47
 
51
- def reward_allocations
52
- raise 'Salt required' unless salt
53
-
54
- @reward_allocations ||= Sorare::Rewards::Build.call!(game_week: self, salt: salt)
55
- end
56
-
57
- def card_rewards
58
- @card_rewards ||= Sorare::Rewards::Pick.call!(reward_allocations.to_h)
59
- end
60
-
61
48
  def league(name)
62
49
  raise 'Unknown league' unless (leagues || {})[name]
63
50
 
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sorare
4
+ module Rewards
5
+ # GameWeekRewards stores rewards related data for a specified GameWeek, salt,
6
+ # And a card allocations hash
7
+ # {
8
+ # 'global-all_star' => {
9
+ # 'D1' => {
10
+ # 'rare' => { 'tier_0' => 0, 'tier_1' => 1 }
11
+ # }
12
+ # }
13
+ # }
14
+ class GameWeekRewards
15
+ attr_reader :game_week, :salt, :card_allocations
16
+
17
+ MISSING_PARAMETER = '%s parameter required'
18
+
19
+ def initialize(game_week:, salt: nil, card_allocations: nil)
20
+ @game_week = game_week
21
+ @salt = salt || game_week.salt
22
+ @card_allocations = card_allocations || computed_card_allocations
23
+ end
24
+
25
+ def cards
26
+ @cards ||= Sorare::Rewards::Pick.call!(
27
+ salt: salt,
28
+ game_week: game_week,
29
+ card_allocations: card_allocations
30
+ ).cards_picked
31
+ end
32
+
33
+ def prize_pools
34
+ @prize_pools ||= reward_allocations.prize_pools
35
+ end
36
+
37
+ def reward_allocations
38
+ validate!(:salt)
39
+
40
+ @reward_allocations ||= Sorare::Rewards::Build.call!(game_week: game_week, salt: salt)
41
+ end
42
+
43
+ def computed_card_allocations
44
+ Transposer.transpose_allocations(reward_allocations.card_allocations)
45
+ end
46
+
47
+ private
48
+
49
+ def validate!(field)
50
+ raise format(MISSING_PARAMETER, field) unless send(field)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -8,27 +8,26 @@ module Sorare
8
8
  class Build
9
9
  include Interactor
10
10
 
11
- delegate :game_week, :salt, to: :context
11
+ delegate :game_week, to: :context
12
12
 
13
13
  def call
14
14
  context.card_allocations = allocate!
15
15
  context.prize_pools = prize_pools!
16
- context.prize_pool_currency = game_week.config.prize_pool_currency
17
16
  end
18
17
 
19
18
  def game_week_supply
20
- @game_week_supply ||= Supply::ComputeForGameWeek.call!(game_week: game_week, salt: salt)
19
+ @game_week_supply ||= Supply::ComputeForGameWeek.call!(game_week: game_week)
21
20
  .game_week_supply
22
21
  end
23
22
 
24
23
  def allocate!
25
24
  Allocations::ComputeForGameWeek.call!(
26
- game_week: game_week, supply: game_week_supply, salt: salt
25
+ supply: game_week_supply, public_seed: game_week.public_seed, salt: game_week.salt
27
26
  ).game_week_allocations
28
27
  end
29
28
 
30
29
  def prize_pools!
31
- PrizePools::ComputeForGameWeek.call!(game_week: game_week, salt: salt).prize_pools
30
+ PrizePools::ComputeForGameWeek.call!(game_week: game_week).prize_pools
32
31
  end
33
32
  end
34
33
  end
@@ -10,8 +10,8 @@ module Sorare
10
10
  # PickForDivision picks the rewards for a given division
11
11
  # Receive a list of pickers for each tiers and quality
12
12
  # {
13
- # 'rare' => { 'tier_0' => Picker, 'tier_1' => Picker },
14
- # 'super_rare' => { 'tier_0' => Picker, 'tier_1' => Picker }
13
+ # 'rare' => { 'tier_0' => CardPicker, 'tier_1' => CardPicker },
14
+ # 'super_rare' => { 'tier_0' => CardPicker, 'tier_1' => CardPicker }
15
15
  # }
16
16
  # And a reward allocations
17
17
  # {
@@ -9,7 +9,7 @@ module Sorare
9
9
  # PickForDivisionAndRarity picks the rewards for a given division and rarity
10
10
  # Receive a list of pickers for each tiers
11
11
  # {
12
- # 'tier_0' => Picker, 'tier_1' => Picker
12
+ # 'tier_0' => CardPicker, 'tier_1' => CardPicker
13
13
  # }
14
14
  # A game week data
15
15
  # And a reward allocations
@@ -19,7 +19,7 @@ module Sorare
19
19
  class PickForGameWeek
20
20
  include Interactor
21
21
 
22
- delegate :game_week, :allocations, :salt, :picks, to: :context
22
+ delegate :game_week, :allocations, :picks, to: :context
23
23
 
24
24
  def call
25
25
  context.cards_picked = pick!
@@ -17,7 +17,7 @@ module Sorare
17
17
  class PickForLeague
18
18
  include Interactor
19
19
 
20
- delegate :salt, :league, :allocations, :pickers, to: :context
20
+ delegate :league, :allocations, :pickers, to: :context
21
21
  delegate :game_week, to: :league
22
22
 
23
23
  def call
@@ -48,7 +48,7 @@ module Sorare
48
48
  end
49
49
 
50
50
  def initialize_tier_picker(players, rarity, tier)
51
- pickers[rarity][tier] = Picker.new(game_week.public_seed, salt)
51
+ pickers[rarity][tier] = CardPicker.new(game_week.public_seed, game_week.salt)
52
52
 
53
53
  players.each do |slug, _|
54
54
  pickers[rarity][tier].add_player(slug, player_supply(rarity, slug))
@@ -11,8 +11,8 @@ module Sorare
11
11
  # And a reward allocations
12
12
  # {
13
13
  # 'global-all_star' => {
14
- # 'rare' => {
15
- # 'D1' => { 'tier_0' => 0, 'tier_1' => 1 }
14
+ # 'D1' => {
15
+ # 'rare' => { 'tier_0' => 0, 'tier_1' => 1 }
16
16
  # }
17
17
  # }
18
18
  # }
@@ -27,13 +27,9 @@ module Sorare
27
27
  context.cards_picked = Sorare::Rewards::Cards::PickForGameWeek.call!(
28
28
  **context.to_h,
29
29
  salt: salt,
30
- allocations: transposed_allocations
30
+ allocations: Sorare::Rewards::GameWeekAllocations.new(card_allocations)
31
31
  ).cards_picked
32
32
  end
33
-
34
- def transposed_allocations
35
- Sorare::Rewards::GameWeekAllocations.new(Transposer.transpose_allocations(card_allocations))
36
- end
37
33
  end
38
34
  end
39
35
  end
@@ -10,7 +10,7 @@ module Sorare
10
10
  class ComputeForGameWeek
11
11
  include Interactor
12
12
 
13
- delegate :salt, :game_week, :game_week_supply, to: :context
13
+ delegate :game_week, :game_week_supply, to: :context
14
14
 
15
15
  def call
16
16
  context.game_week_supply = game_week_supply!
@@ -31,7 +31,7 @@ module Sorare
31
31
  end
32
32
 
33
33
  def randomizer
34
- @randomizer ||= Sorare::Rewards::Random.new(game_week.public_seed, salt)
34
+ @randomizer ||= Sorare::Rewards::Random.new(game_week.public_seed, game_week.salt)
35
35
  end
36
36
  end
37
37
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Sorare
4
4
  module Rewards
5
- VERSION = '1.2.0'
5
+ VERSION = '1.3.0.beta0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sorare-rewards
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0.beta0
5
5
  platform: ruby
6
6
  authors:
7
7
  - pierre
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-02 00:00:00.000000000 Z
11
+ date: 2021-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -172,10 +172,12 @@ files:
172
172
  - data.patch
173
173
  - lib/sorare/rewards.rb
174
174
  - lib/sorare/rewards/allocation_configuration.yml
175
+ - lib/sorare/rewards/card_picker.rb
175
176
  - lib/sorare/rewards/configuration.rb
176
177
  - lib/sorare/rewards/game_week.rb
177
178
  - lib/sorare/rewards/game_week_allocations.rb
178
179
  - lib/sorare/rewards/game_week_config.rb
180
+ - lib/sorare/rewards/game_week_rewards.rb
179
181
  - lib/sorare/rewards/interactor.rb
180
182
  - lib/sorare/rewards/interactors/allocations/compute_for_game_week.rb
181
183
  - lib/sorare/rewards/interactors/allocations/compute_for_league.rb
@@ -197,7 +199,6 @@ files:
197
199
  - lib/sorare/rewards/interactors/tiers/qualify_players.rb
198
200
  - lib/sorare/rewards/interactors/tiers/qualify_supply.rb
199
201
  - lib/sorare/rewards/league.rb
200
- - lib/sorare/rewards/picker.rb
201
202
  - lib/sorare/rewards/player.rb
202
203
  - lib/sorare/rewards/prize_pool_configuration.yml
203
204
  - lib/sorare/rewards/random.rb
@@ -221,9 +222,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
221
222
  version: 2.7.1
222
223
  required_rubygems_version: !ruby/object:Gem::Requirement
223
224
  requirements:
224
- - - ">="
225
+ - - ">"
225
226
  - !ruby/object:Gem::Version
226
- version: '0'
227
+ version: 1.3.1
227
228
  requirements: []
228
229
  rubygems_version: 3.2.22
229
230
  signing_key: