sorare-rewards 1.2.0 → 1.3.0.beta0

Sign up to get free protection for your applications and to get access to all the features.
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: