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 +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +3 -3
- data/README.md +26 -9
- data/lib/sorare/rewards/{picker.rb → card_picker.rb} +2 -2
- data/lib/sorare/rewards/game_week.rb +1 -14
- data/lib/sorare/rewards/game_week_rewards.rb +54 -0
- data/lib/sorare/rewards/interactors/build.rb +4 -5
- data/lib/sorare/rewards/interactors/cards/pick_for_division.rb +2 -2
- data/lib/sorare/rewards/interactors/cards/pick_for_division_and_rarity.rb +1 -1
- data/lib/sorare/rewards/interactors/cards/pick_for_game_week.rb +1 -1
- data/lib/sorare/rewards/interactors/cards/pick_for_league.rb +2 -2
- data/lib/sorare/rewards/interactors/pick.rb +3 -7
- data/lib/sorare/rewards/interactors/supply/compute_for_game_week.rb +2 -2
- data/lib/sorare/rewards/version.rb +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f21a3d6ed4a19177ff92d64b89a4f605f76de64f3f7d1cc077d9d59a5f241c7c
|
4
|
+
data.tar.gz: cdfc9b29382f52800871f27533b1d5dcfa7795bc35c7f223d9a19f02287d245b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
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.
|
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.
|
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
|
-
|
13
|
+
$ bundle install
|
14
14
|
|
15
15
|
Or install it yourself as:
|
16
16
|
|
17
|
-
|
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
|
31
|
+
To compute rewards for a game week :
|
32
32
|
|
33
33
|
```ruby
|
34
|
-
|
35
|
-
game_week.card_allocations
|
34
|
+
rewards = Sorare::Rewards::GameWeekRewards.new(game_week: game_week)
|
36
35
|
|
37
|
-
#
|
38
|
-
|
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
|
-
|
46
|
+
By default it uses the computed card allocations to pick the rewards. To override it :
|
42
47
|
|
43
48
|
```ruby
|
44
|
-
|
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
|
-
#
|
8
|
-
class
|
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
|
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,
|
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
|
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
|
-
|
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
|
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' =>
|
14
|
-
# 'super_rare' => { 'tier_0' =>
|
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' =>
|
12
|
+
# 'tier_0' => CardPicker, 'tier_1' => CardPicker
|
13
13
|
# }
|
14
14
|
# A game week data
|
15
15
|
# And a reward allocations
|
@@ -17,7 +17,7 @@ module Sorare
|
|
17
17
|
class PickForLeague
|
18
18
|
include Interactor
|
19
19
|
|
20
|
-
delegate :
|
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] =
|
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
|
-
# '
|
15
|
-
# '
|
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:
|
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 :
|
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
|
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.
|
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-
|
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:
|
227
|
+
version: 1.3.1
|
227
228
|
requirements: []
|
228
229
|
rubygems_version: 3.2.22
|
229
230
|
signing_key:
|