elo_brain 0.1.0 → 1.0.0

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: 6b740e4b007a11265e676cce0831ebfa51e0422c56df445c61574eb82fb1e562
4
- data.tar.gz: 2615639517646bd213cecc2fcafec670a580dcf2eb4e310e12ea75f26b87e993
3
+ metadata.gz: 0e3657744394997f59bff6c65d5695715b8ab1424f788d9bfffd071ff71f60df
4
+ data.tar.gz: 4e2e3f6e6e445febcdf6bbe3039bf103c289a3e7e484630065072010dc6170ec
5
5
  SHA512:
6
- metadata.gz: 1ea28d8e945d0a09a7cee967df38e3bc2ab1a3264066f477cfb3c15f4d23b3fd25f7250ed0a995bf9a11974d552a79b950a8d5d14d4c10c70b354f121f36e494
7
- data.tar.gz: 7b28018b8eb77b9d0b73776c8ae8258150e9dab476523caf51f19ebe49c3a9608a42c5f600d13f89695465479f5f45efe5bb10e4f9e685e73cdcc88c9351147b
6
+ metadata.gz: b309e48aff347e9c6ddf1b032842db19f550497ce41a2ffeaae858cc7db8736aa95a1c2009fa44e87b82237c7583b55a8877a0afc454af7b8c61a1c1e5df990d
7
+ data.tar.gz: eccc65a71e75f5e448b5d0c567a9b6fd8fc3d245ee56dc9ab404307ee34a49f6f7024306928cd8ea4c6517129942698c83832f66f9c9d16659e8150ef287b97a
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Overcommit
4
+ module Hook
5
+ module PrePush
6
+ # Runs `rubocop` on every files.
7
+ class Rubocop < Base
8
+ def run
9
+ result = execute(['rubocop', '-P'])
10
+ return :pass if result.success?
11
+
12
+ output = result.stdout + result.stderr
13
+ [:fail, output]
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
data/.overcommit.yml ADDED
@@ -0,0 +1,34 @@
1
+ # Use this file to configure the Overcommit hooks you wish to use. This will
2
+ # extend the default configuration defined in:
3
+ # https://github.com/sds/overcommit/blob/master/config/default.yml
4
+ #
5
+ # At the topmost level of this YAML file is a key representing type of hook
6
+ # being run (e.g. pre-commit, commit-msg, etc.). Within each type you can
7
+ # customize each hook, such as whether to only run it on certain files (via
8
+ # `include`), whether to only display output if it fails (via `quiet`), etc.
9
+ #
10
+ # For a complete list of hooks, see:
11
+ # https://github.com/sds/overcommit/tree/master/lib/overcommit/hook
12
+ #
13
+ # For a complete list of options that you can use to customize hooks, see:
14
+ # https://github.com/sds/overcommit#configuration
15
+ #
16
+ # Uncomment the following lines to make the configuration take effect.
17
+
18
+ PreCommit:
19
+ # RuboCop:
20
+ # enabled: true
21
+ # command: ['bundle', 'exec', 'rubocop', '-P']
22
+ BundleOutdated:
23
+ enabled: true
24
+ BundleAudit:
25
+ enabled: true
26
+
27
+ PrePush:
28
+ RSpec:
29
+ enabled: true
30
+ command: ['bundle', 'exec', 'rspec', '-f', 'p']
31
+ quiet: false
32
+ # Rubocop:
33
+ # enabled: true
34
+
data/Gemfile CHANGED
@@ -3,5 +3,5 @@ source "https://rubygems.org"
3
3
  # Specify your gem's dependencies in elo_brain.gemspec
4
4
  gemspec
5
5
 
6
- gem "rake", "~> 12.0"
6
+ gem "rake", "~> 12.3.3"
7
7
  gem "rspec", "~> 3.0"
data/Gemfile.lock ADDED
@@ -0,0 +1,116 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ elo_brain (1.0.0)
5
+ dry-struct
6
+ dry-validation
7
+ zeitwerk (~> 2)
8
+
9
+ GEM
10
+ remote: https://rubygems.org/
11
+ specs:
12
+ ast (2.4.2)
13
+ bundle-audit (0.1.0)
14
+ bundler-audit
15
+ bundler-audit (0.7.0.1)
16
+ bundler (>= 1.2.0, < 3)
17
+ thor (>= 0.18, < 2)
18
+ childprocess (4.0.0)
19
+ concurrent-ruby (1.1.8)
20
+ diff-lcs (1.4.4)
21
+ dry-configurable (0.12.0)
22
+ concurrent-ruby (~> 1.0)
23
+ dry-core (~> 0.5, >= 0.5.0)
24
+ dry-container (0.7.2)
25
+ concurrent-ruby (~> 1.0)
26
+ dry-configurable (~> 0.1, >= 0.1.3)
27
+ dry-core (0.5.0)
28
+ concurrent-ruby (~> 1.0)
29
+ dry-equalizer (0.3.0)
30
+ dry-inflector (0.2.0)
31
+ dry-initializer (3.0.4)
32
+ dry-logic (1.1.0)
33
+ concurrent-ruby (~> 1.0)
34
+ dry-core (~> 0.5, >= 0.5)
35
+ dry-schema (1.6.1)
36
+ concurrent-ruby (~> 1.0)
37
+ dry-configurable (~> 0.8, >= 0.8.3)
38
+ dry-core (~> 0.5, >= 0.5)
39
+ dry-initializer (~> 3.0)
40
+ dry-logic (~> 1.0)
41
+ dry-types (~> 1.5)
42
+ dry-struct (1.4.0)
43
+ dry-core (~> 0.5, >= 0.5)
44
+ dry-types (~> 1.5)
45
+ ice_nine (~> 0.11)
46
+ dry-types (1.5.0)
47
+ concurrent-ruby (~> 1.0)
48
+ dry-container (~> 0.3)
49
+ dry-core (~> 0.5, >= 0.5)
50
+ dry-inflector (~> 0.1, >= 0.1.2)
51
+ dry-logic (~> 1.0, >= 1.0.2)
52
+ dry-validation (1.6.0)
53
+ concurrent-ruby (~> 1.0)
54
+ dry-container (~> 0.7, >= 0.7.1)
55
+ dry-core (~> 0.4)
56
+ dry-equalizer (~> 0.2)
57
+ dry-initializer (~> 3.0)
58
+ dry-schema (~> 1.5, >= 1.5.2)
59
+ ice_nine (0.11.2)
60
+ iniparse (1.5.0)
61
+ overcommit (0.57.0)
62
+ childprocess (>= 0.6.3, < 5)
63
+ iniparse (~> 1.4)
64
+ parallel (1.20.1)
65
+ parser (3.0.0.0)
66
+ ast (~> 2.4.1)
67
+ rainbow (3.0.0)
68
+ rake (12.3.3)
69
+ regexp_parser (2.0.3)
70
+ rexml (3.2.4)
71
+ rspec (3.10.0)
72
+ rspec-core (~> 3.10.0)
73
+ rspec-expectations (~> 3.10.0)
74
+ rspec-mocks (~> 3.10.0)
75
+ rspec-core (3.10.1)
76
+ rspec-support (~> 3.10.0)
77
+ rspec-expectations (3.10.1)
78
+ diff-lcs (>= 1.2.0, < 2.0)
79
+ rspec-support (~> 3.10.0)
80
+ rspec-mocks (3.10.2)
81
+ diff-lcs (>= 1.2.0, < 2.0)
82
+ rspec-support (~> 3.10.0)
83
+ rspec-support (3.10.2)
84
+ rubocop (1.9.1)
85
+ parallel (~> 1.10)
86
+ parser (>= 3.0.0.0)
87
+ rainbow (>= 2.2.2, < 4.0)
88
+ regexp_parser (>= 1.8, < 3.0)
89
+ rexml
90
+ rubocop-ast (>= 1.2.0, < 2.0)
91
+ ruby-progressbar (~> 1.7)
92
+ unicode-display_width (>= 1.4.0, < 3.0)
93
+ rubocop-ast (1.4.1)
94
+ parser (>= 2.7.1.5)
95
+ rubocop-performance (1.9.2)
96
+ rubocop (>= 0.90.0, < 2.0)
97
+ rubocop-ast (>= 0.4.0)
98
+ ruby-progressbar (1.11.0)
99
+ thor (1.1.0)
100
+ unicode-display_width (2.0.0)
101
+ zeitwerk (2.4.2)
102
+
103
+ PLATFORMS
104
+ ruby
105
+
106
+ DEPENDENCIES
107
+ bundle-audit
108
+ elo_brain!
109
+ overcommit
110
+ rake (~> 12.3.3)
111
+ rspec (~> 3.0)
112
+ rubocop (> 0.58)
113
+ rubocop-performance
114
+
115
+ BUNDLED WITH
116
+ 1.17.3
data/elo_brain.gemspec CHANGED
@@ -3,7 +3,7 @@ require_relative 'lib/elo_brain/version'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "elo_brain"
5
5
  spec.version = EloBrain::VERSION
6
- spec.authors = ["matthieu <Malus> Lu"]
6
+ spec.authors = ["Matthieu <Malus> Lu"]
7
7
  spec.email = ["matthieu.lu.pro@gmail.com"]
8
8
 
9
9
  spec.summary = "Simple elo calculation."
@@ -26,4 +26,13 @@ Gem::Specification.new do |spec|
26
26
  spec.bindir = "exe"
27
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
+
30
+ spec.add_development_dependency "bundle-audit"
31
+ spec.add_development_dependency "overcommit"
32
+ spec.add_development_dependency 'rubocop', '> 0.58'
33
+ spec.add_development_dependency "rubocop-performance"
34
+
35
+ spec.add_dependency 'dry-struct'
36
+ spec.add_dependency 'dry-validation'
37
+ spec.add_dependency 'zeitwerk', '~> 2'
29
38
  end
data/lib/elo_brain.rb CHANGED
@@ -1,6 +1,12 @@
1
- require "elo_brain/version"
1
+ # frozen_string_literal: true
2
+
3
+ require 'dry-struct'
4
+ require 'dry-validation'
5
+ require 'elo_brain/version'
6
+ require 'zeitwerk'
7
+ loader = Zeitwerk::Loader.for_gem
8
+ loader.setup
2
9
 
3
10
  module EloBrain
4
11
  class Error < StandardError; end
5
- # Your code goes here...
6
12
  end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module DevelopmentCoefficient
5
+ class EligibleSituation
6
+ def initialize(default_condition, *conditions)
7
+ @default_condition = default_condition
8
+ @conditions = conditions
9
+ end
10
+
11
+ def situation
12
+ @conditions.each do |condition|
13
+ return condition if condition.eligible?
14
+ end
15
+ @default_condition
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module DevelopmentCoefficient
5
+ class SituationCoefficient
6
+ def call(nb_matches:, elo:)
7
+ klass = EligibleSituation.new(
8
+ Situations::Default.new,
9
+ Situations::Starting.new(nb_matches: nb_matches),
10
+ Situations::Amateur.new(elo: elo),
11
+ Situations::Pro.new(elo: elo)
12
+ ).situation.class
13
+ coefficient(klass)
14
+ end
15
+
16
+ private
17
+
18
+ def coefficient(klass)
19
+ klass::COEFFICIENT
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module DevelopmentCoefficient
5
+ module Situations
6
+ class Amateur
7
+ COEFFICIENT = 20
8
+ ELO_MAX = 2_400
9
+ def initialize(elo:)
10
+ @elo = elo
11
+ end
12
+
13
+ def eligible?
14
+ @elo < ELO_MAX
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # The default condition is always true
4
+ # It is call at the end of the run_conditions.rb's condition method
5
+ # This class manages all player's cases which is not working
6
+ # Then run_condition.rb's condition method always return an condition object
7
+ module EloBrain
8
+ module DevelopmentCoefficient
9
+ module Situations
10
+ class Default
11
+ COEFFICIENT = 0
12
+ def eligible?
13
+ true
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module DevelopmentCoefficient
5
+ module Situations
6
+ class Pro
7
+ COEFFICIENT = 10
8
+ ELO_MIN = 2_399
9
+ def initialize(elo:)
10
+ @elo = elo
11
+ end
12
+
13
+ def eligible?
14
+ @elo > ELO_MIN
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module DevelopmentCoefficient
5
+ module Situations
6
+ class Starting
7
+ COEFFICIENT = 40
8
+ NB_MAXIMUM_MATCHES = 30
9
+ def initialize(nb_matches:)
10
+ @nb_matches = nb_matches
11
+ end
12
+
13
+ def eligible?
14
+ @nb_matches < NB_MAXIMUM_MATCHES
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module EloCalculations
5
+ class Looser < Variation
6
+ def new_elo(elo:, development_coefficient:, win_probability:)
7
+ elo - development_coefficient * (MAX_PROBABILITY - win_probability)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module EloCalculations
5
+ class Strategies
6
+ STRATEGIES_COLLECTION = {
7
+ winner: Winner,
8
+ looser: Looser
9
+ }.freeze
10
+
11
+ def call(strategy:)
12
+ STRATEGIES_COLLECTION[strategy.to_sym].new
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module EloCalculations
5
+ class Variation
6
+ MAX_PROBABILITY = 1.0
7
+ def new_elo(_elo:, _development_coefficient:, _win_probability:)
8
+ 'Must call a strategy'
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module EloCalculations
5
+ class Winner < Variation
6
+ def new_elo(elo:, development_coefficient:, win_probability:)
7
+ elo + development_coefficient * (MAX_PROBABILITY - win_probability)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module Elos
5
+ class Contract < Dry::Validation::Contract
6
+ params do
7
+ required(:player1).value(Types::Player)
8
+ required(:player2).value(Types::Player)
9
+ end
10
+
11
+ rule(:player1, :player2) do
12
+ if values[:player1].situation == values[:player2].situation
13
+ key.failure('must have a unique different situation for players')
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module Elos
5
+ class Elo < Dry::Struct
6
+ attribute :player1, Types::Player
7
+ attribute :player2, Types::Player
8
+
9
+ def self.from(player1:, player2:)
10
+ new(
11
+ player1: player1,
12
+ player2: player2
13
+ )
14
+ end
15
+
16
+ def self.from_contract(contract:)
17
+ new(
18
+ player1: contract[:player1],
19
+ player2: contract[:player2]
20
+ )
21
+ end
22
+
23
+ def calculate_new_elos
24
+ {
25
+ player1_new_elo: EloBrain::Elos::Services::LaunchNewEloCalculation.new.call(strategy: player1.situation,
26
+ nb_matches: player1.nb_matches, player_elo: player1.elo, opponent_elo: player2.elo),
27
+ player2_new_elo: EloBrain::Elos::Services::LaunchNewEloCalculation.new.call(strategy: player2.situation,
28
+ nb_matches: player2.nb_matches, player_elo: player2.elo, opponent_elo: player1.elo)
29
+ }
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module Elos
5
+ module Services
6
+ class LaunchNewEloCalculation
7
+ def call(strategy:, nb_matches:, player_elo:, opponent_elo:)
8
+ coefficient = development_coefficient(nb_matches, player_elo)
9
+ probability = win_probability(player_elo - opponent_elo)
10
+ calculation_strategy(strategy).new_elo(elo: player_elo, development_coefficient: coefficient,
11
+ win_probability: probability)
12
+ end
13
+
14
+ private
15
+
16
+ def calculation_strategy(strategy)
17
+ EloBrain::EloCalculations::Strategies.new.call(strategy: strategy)
18
+ end
19
+
20
+ def development_coefficient(nb_matches, elo)
21
+ EloBrain::DevelopmentCoefficient::SituationCoefficient.new.call(nb_matches: nb_matches, elo: elo)
22
+ end
23
+
24
+ def win_probability(difference_of_elo)
25
+ EloBrain::WinProbability::ProbabilityCalculation.new.call(difference_of_elo: difference_of_elo)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module Elos
5
+ module Types
6
+ include Dry.Types()
7
+
8
+ Player = Types.Instance(EloBrain::Players::Player)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module Players
5
+ class Contract < Dry::Validation::Contract
6
+ params do
7
+ required(:elo).value(:integer)
8
+ required(:nb_matches).value(:integer)
9
+ required(:situation).value(:string)
10
+ end
11
+
12
+ rule(:elo) do
13
+ key.failure('must be zero or positive') unless value.zero? || value.positive?
14
+ end
15
+
16
+ rule(:nb_matches) do
17
+ key.failure('must be zero or positive') unless value.zero? || value.positive?
18
+ end
19
+
20
+ rule(:situation) do
21
+ key.failure('must be equal to looser or winner') unless %w[looser winner].include? value
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module Players
5
+ class Player < Dry::Struct
6
+ attribute :elo, Types::Strict::Integer
7
+ attribute :nb_matches, Types::Strict::Integer
8
+ attribute :situation, Types::Strict::String
9
+
10
+ def self.from(elo:, nb_matches:, situation:)
11
+ new(
12
+ elo: elo,
13
+ nb_matches: nb_matches,
14
+ situation: situation
15
+ )
16
+ end
17
+
18
+ def self.from_contract(contract:)
19
+ new(
20
+ elo: contract[:elo],
21
+ nb_matches: contract[:nb_matches],
22
+ situation: contract[:situation]
23
+ )
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module Players
5
+ module Types
6
+ include Dry.Types()
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module EloBrain
2
- VERSION = "0.1.0"
4
+ VERSION = '1.0.0'
3
5
  end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module EloBrain
4
+ module WinProbability
5
+ class ProbabilityCalculation
6
+ def call(difference_of_elo:)
7
+ 1.0 / (1.0 + 10.0**(-1.0 * difference_of_elo / 400.0))
8
+ end
9
+ end
10
+ end
11
+ end
metadata CHANGED
@@ -1,15 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elo_brain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
- - matthieu <Malus> Lu
7
+ - Matthieu <Malus> Lu
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
11
  date: 2021-02-05 00:00:00.000000000 Z
12
- dependencies: []
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundle-audit
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: overcommit
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rubocop
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.58'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.58'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop-performance
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: dry-struct
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dry-validation
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: zeitwerk
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '2'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '2'
13
111
  description:
14
112
  email:
15
113
  - matthieu.lu.pro@gmail.com
@@ -17,6 +115,7 @@ executables: []
17
115
  extensions: []
18
116
  extra_rdoc_files: []
19
117
  files:
118
+ - ".git-hooks/pre_push/rubocop.rb"
20
119
  - ".gitignore"
21
120
  - ".idea/.gitignore"
22
121
  - ".idea/elo_brain.iml"
@@ -24,10 +123,12 @@ files:
24
123
  - ".idea/misc.xml"
25
124
  - ".idea/modules.xml"
26
125
  - ".idea/vcs.xml"
126
+ - ".overcommit.yml"
27
127
  - ".rspec"
28
128
  - ".travis.yml"
29
129
  - CODE_OF_CONDUCT.md
30
130
  - Gemfile
131
+ - Gemfile.lock
31
132
  - LICENSE.txt
32
133
  - README.md
33
134
  - Rakefile
@@ -35,7 +136,25 @@ files:
35
136
  - bin/setup
36
137
  - elo_brain.gemspec
37
138
  - lib/elo_brain.rb
139
+ - lib/elo_brain/development_coefficient/eligible_situation.rb
140
+ - lib/elo_brain/development_coefficient/situation_coefficient.rb
141
+ - lib/elo_brain/development_coefficient/situations/amateur.rb
142
+ - lib/elo_brain/development_coefficient/situations/default.rb
143
+ - lib/elo_brain/development_coefficient/situations/pro.rb
144
+ - lib/elo_brain/development_coefficient/situations/starting.rb
145
+ - lib/elo_brain/elo_calculations/looser.rb
146
+ - lib/elo_brain/elo_calculations/strategies.rb
147
+ - lib/elo_brain/elo_calculations/variation.rb
148
+ - lib/elo_brain/elo_calculations/winner.rb
149
+ - lib/elo_brain/elos/contract.rb
150
+ - lib/elo_brain/elos/elo.rb
151
+ - lib/elo_brain/elos/services/launch_new_elo_calculation.rb
152
+ - lib/elo_brain/elos/types.rb
153
+ - lib/elo_brain/players/contract.rb
154
+ - lib/elo_brain/players/player.rb
155
+ - lib/elo_brain/players/types.rb
38
156
  - lib/elo_brain/version.rb
157
+ - lib/elo_brain/win_probability/probability_calculation.rb
39
158
  homepage: https://github.com/MatthieuLPro/elo_brain
40
159
  licenses:
41
160
  - MIT
@@ -57,7 +176,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
176
  - !ruby/object:Gem::Version
58
177
  version: '0'
59
178
  requirements: []
60
- rubygems_version: 3.0.3
179
+ rubygems_version: 3.0.8
61
180
  signing_key:
62
181
  specification_version: 4
63
182
  summary: Simple elo calculation.