tournament-system 1.0.2 → 2.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 864919bea23fd1e9fce67c2dd004acd1d27005e8
4
- data.tar.gz: 57af40662e26b221a00e0425ba9f53ddd9277bfd
2
+ SHA256:
3
+ metadata.gz: 52196b11f89aad9f8e4dbf67094ba9e99dff805e6d7d95dc840213d802bfb511
4
+ data.tar.gz: 739375eaad6f1093c3e47ec6e630ea1394670582f1f6e84d85917327bc30358e
5
5
  SHA512:
6
- metadata.gz: 96f2de44135c43b48be3dad1e981d890518fdc936620047908e115b7b6fb46468a22b826fc3712b2dd27ebaf28e5ab2bfdd51185ebfd79fed7cb60fb73fcad5d
7
- data.tar.gz: f7b53a6c95787e983273242ec1d15160a427a77728ff5ec9a7925669788d50d91b1ccafa3eecc218855c962ea6117c1133ae4e76d8e9a4f8bfae28e12c16f425
6
+ metadata.gz: 80e6f521ef7293504a69d2d0287200d535ce5833cbbc4d78c60878de30d18f1862aea1101460e9aeac0c396d18818c5a199764a875bcebbbc6298b8ab5f30ae3
7
+ data.tar.gz: 88b4831a41dea4acce69ffcde2e10eed2edbb5ec5a435c9d97b47fb5aad85e24beffb3aa76a809eadca053769c354611798edac2e79dd57382145c256d0d517a
data/.reek CHANGED
@@ -14,3 +14,6 @@ DuplicateMethodCall:
14
14
 
15
15
  NestedIterators:
16
16
  max_allowed_nesting: 2
17
+
18
+ TooManyMethods:
19
+ max_methods: 17
data/.rubocop.yml CHANGED
@@ -6,7 +6,7 @@ Metrics/LineLength:
6
6
  Max: 120
7
7
 
8
8
  # This is fine, really
9
- Style/FileName:
9
+ Naming/FileName:
10
10
  Enabled: false
11
11
 
12
12
  # 'old' style
data/.travis.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  language: ruby
2
2
  cache: bundler
3
- rvm: 2.3.3
3
+ rvm: 2.5.0
4
4
  # rainbow gem install script is broken
5
5
  before_install:
6
6
  - gem update --system
data/Gemfile CHANGED
@@ -12,7 +12,7 @@ gem 'rspec'
12
12
  gem 'simplecov'
13
13
 
14
14
  # Linting
15
- gem 'rubocop', '~> 0.47.1'
15
+ gem 'rubocop', '~> 0.52.1'
16
16
  gem 'reek'
17
17
 
18
18
  group :test do
data/README.md CHANGED
@@ -14,7 +14,7 @@ It is designed to easily fit into any memory model you might already have.
14
14
  Add this line to your application's Gemfile:
15
15
 
16
16
  ```ruby
17
- gem 'tournament-system', '~> 1.0.0'
17
+ gem 'tournament-system', '~> 2'
18
18
  ```
19
19
 
20
20
  And then execute:
@@ -35,7 +35,7 @@ First you need to implement a driver to handle the interface between your data
35
35
  and the tournament systems:
36
36
 
37
37
  ```ruby
38
- class Driver < Tournament::Driver
38
+ class Driver < TournamentSystem::Driver
39
39
  def matches
40
40
  ...
41
41
  end
@@ -60,12 +60,18 @@ class Driver < Tournament::Driver
60
60
  ...
61
61
  end
62
62
 
63
+ def get_team_matches(team)
64
+ ...
65
+ end
66
+
63
67
  def build_match(home_team, away_team)
64
68
  ...
65
69
  end
66
70
  end
67
71
  ```
68
72
 
73
+ Check the docs on [`TournamentSystem::Driver`](http://www.rubydoc.info/github/ozfortress/tournament-system/master/Tournament/Driver) for more information.
74
+
69
75
  Then you can simply generate matches for any tournament system using a driver
70
76
  instance:
71
77
 
@@ -73,18 +79,21 @@ instance:
73
79
  driver = Driver.new
74
80
 
75
81
  # Generate a round of a single elimination tournament
76
- Tournament::SingleElimination.generate driver
82
+ TournamentSystem::SingleElimination.generate driver
77
83
 
78
84
  # Generate a round for a round robin tournament
79
- Tournament::RoundRobin.generate driver
85
+ TournamentSystem::RoundRobin.generate driver
80
86
 
81
87
  # Generate a round for a swiss system tournament, pushing byes to the bottom
82
88
  # half (bottom half teams will bye before the top half)
83
- Tournament::Swiss.generate driver, pairer: Tournament::Swiss::Dutch,
89
+ TournamentSystem::Swiss.generate driver, pairer: TournamentSystem::Swiss::Dutch,
84
90
  pair_options: { push_byes_to: :bottom_half }
85
91
 
92
+ # Alternatively use the accelerated swiss system
93
+ TournamentSystem::Swiss.generate driver, pairer: TournamentSystem::Swiss::AcceleratedDutch
94
+
86
95
  # Generate a round for a page playoff system, with an optional bronze match
87
- Tournament::PagePlayoff.generate driver, bronze_match: true
96
+ TournamentSystem::PagePlayoff.generate driver, bronze_match: true
88
97
  ```
89
98
 
90
99
  ## Contributing
data/Rakefile CHANGED
@@ -9,5 +9,5 @@ RuboCop::RakeTask.new
9
9
  Reek::Rake::Task.new
10
10
 
11
11
  task default: :test
12
- task test: %w(rspec lint)
13
- task lint: %w(rubocop reek)
12
+ task test: %w[rspec lint]
13
+ task lint: %w[rubocop reek]
@@ -0,0 +1,25 @@
1
+ require 'tournament_system/version'
2
+ require 'tournament_system/driver'
3
+
4
+ require 'tournament_system/swiss'
5
+ require 'tournament_system/round_robin'
6
+ require 'tournament_system/page_playoff'
7
+ require 'tournament_system/single_elimination'
8
+
9
+ # This library is split into two parts, there's the actual algorithms that implement various tournament systems
10
+ # ({Algorithm}) and a data abstraction layer for generating matches using various tournament systems in a
11
+ # data-independent way ({Driver}), along with matching implementations of tournament systems using drivers.
12
+ #
13
+ # TournamentSystem currently supports the following systems:
14
+ #
15
+ # * {https://en.wikipedia.org/wiki/Single-elimination_tournament Single elimination}
16
+ # ({TournamentSystem::SingleElimination})
17
+ # * {https://en.wikipedia.org/wiki/Page_playoff_system Page playoffs} ({TournamentSystem::PagePlayoff})
18
+ # * {https://en.wikipedia.org/wiki/Round-robin_tournament Round robin} ({TournamentSystem::RoundRobin})
19
+ # * {https://en.wikipedia.org/wiki/Swiss-system_tournament Swiss-system} ({TournamentSystem::Swiss}) with support for
20
+ # multiple types of pairing systems:
21
+ #
22
+ # * Dutch pairing (very popular) ({TournamentSystem::Swiss::Dutch})
23
+ # * Accelerated pairing (aka Accelerated swiss) ({TournamentSystem::Swiss::AcceleratedDutch})
24
+ module TournamentSystem
25
+ end
@@ -1,6 +1,5 @@
1
- module Tournament
2
- # This module provides abtraction-less implementations of all algorithms
3
- # used for tournament systems.
1
+ module TournamentSystem
2
+ # This module provides abtraction-less implementations of all algorithms used for tournament systems.
4
3
  module Algorithm
5
4
  end
6
5
  end
@@ -1,4 +1,4 @@
1
- module Tournament
1
+ module TournamentSystem
2
2
  module Algorithm
3
3
  # This module provides group pairing algorithms
4
4
  module GroupPairing
@@ -1,6 +1,6 @@
1
1
  require 'graph_matching'
2
2
 
3
- module Tournament
3
+ module TournamentSystem
4
4
  module Algorithm
5
5
  # Implements graph matching algorithms for tournament systems.
6
6
  module Matching
@@ -41,7 +41,7 @@ module Tournament
41
41
  end
42
42
  end
43
43
  end
44
- # rubbocop:enable Metrics/MethodLength
44
+ # rubocop:enable Metrics/MethodLength
45
45
 
46
46
  # Performs maximum weight perfect matching of a undirected complete graph composed of the given vertices.
47
47
  #
@@ -1,4 +1,4 @@
1
- module Tournament
1
+ module TournamentSystem
2
2
  module Algorithm
3
3
  # This module provides algorithms for dealing with the page playoff system.
4
4
  module PagePlayoff
@@ -1,7 +1,7 @@
1
- require 'tournament/algorithm/util'
2
- require 'tournament/algorithm/group_pairing'
1
+ require 'tournament_system/algorithm/util'
2
+ require 'tournament_system/algorithm/group_pairing'
3
3
 
4
- module Tournament
4
+ module TournamentSystem
5
5
  module Algorithm
6
6
  # This module provides algorithms for dealing with round robin tournament
7
7
  # systems.
@@ -1,6 +1,6 @@
1
1
  require 'ostruct'
2
2
 
3
- module Tournament
3
+ module TournamentSystem
4
4
  module Algorithm
5
5
  # This module provides algorithms for dealing with single bracket
6
6
  # elimination tournament systems.
@@ -36,15 +36,11 @@ module Tournament
36
36
  total_teams = max_teams(rounds)
37
37
 
38
38
  # Make sure we don't have too many matches
39
- unless total_teams >= matches_count
40
- raise ArgumentError, 'Too many matches'
41
- end
39
+ raise ArgumentError, 'Too many matches' unless total_teams >= matches_count
42
40
 
43
41
  round = rounds - Math.log2(total_teams - matches_count)
44
- unless (round % 1).zero?
45
- # Make sure we don't have some weird number of matches
46
- raise ArgumentError, 'Invalid number of matches'
47
- end
42
+ # Make sure we don't have some weird number of matches
43
+ raise ArgumentError, 'Invalid number of matches' unless (round % 1).zero?
48
44
 
49
45
  round.to_i
50
46
  end
@@ -72,9 +68,7 @@ module Tournament
72
68
  # @return [Array<team>]
73
69
  # @raise [ArgumentError] when the number of teams is not a power of 2
74
70
  def seed(teams)
75
- unless (Math.log2(teams.length) % 1).zero?
76
- raise ArgumentError, 'Need power-of-2 teams'
77
- end
71
+ raise ArgumentError, 'Need power-of-2 teams' unless (Math.log2(teams.length) % 1).zero?
78
72
 
79
73
  teams = teams.map.with_index do |team, index|
80
74
  OpenStruct.new(team: team, index: index)
@@ -1,4 +1,4 @@
1
- module Tournament
1
+ module TournamentSystem
2
2
  module Algorithm
3
3
  # This module provides algorithms for dealing with swiss tournament systems. Specifically it provides algorithms for
4
4
  # grouping teams.
@@ -1,4 +1,4 @@
1
- module Tournament
1
+ module TournamentSystem
2
2
  module Algorithm
3
3
  # This module provides utility functions for helping implement other
4
4
  # algorithms.
@@ -1,22 +1,78 @@
1
- module Tournament
1
+ module TournamentSystem
2
2
  # :reek:UnusedParameters
3
3
 
4
4
  # An interface for external tournament data.
5
5
  #
6
- # To use any tournament system implemented in this gem, simply subclass this
7
- # class and implement the interface functions.
6
+ # To use any tournament system implemented in this gem, simply subclass this class and implement the interface
7
+ # functions.
8
8
  #
9
- # The interface is designed to be useable with arbitrary data,
10
- # meaning that as long as your data is consistent it will work with this gem.
11
- # Be it Ruby on Rails Models or simply integers.
9
+ # The interface is designed to be useable with arbitrary data, meaning that as long as your data is consistent it will
10
+ # work with this gem. Be it Ruby on Rails Models or simply integers.
12
11
  #
13
- # Certain tournament systems will not make use of certain parts of this
14
- # interface. You can for example leave out `#get_team_score` if you're not
15
- # using the Swiss tournament system.
12
+ # Certain tournament systems will not make use of certain parts of this interface. You can for example leave out
13
+ # `#get_team_score` if you're not using the Swiss tournament system.
16
14
  #
17
- # This class caches certain calculations/objects, it is designed to be a
18
- # one-time use with any one tournament system. Reusing an instance may result
19
- # in undefined behaviour.
15
+ # This class caches certain calculations/objects, it is designed to be a one-time use with any one tournament system.
16
+ # Reusing an instance is undefined behaviour.
17
+ #
18
+ # @example Example of Rails models and a tournament system driver
19
+ # class Tournament < ActiveRecord::Base
20
+ # has_many :matches
21
+ # has_many :teams
22
+ # end
23
+ #
24
+ # class Match < ActiveRecord::Base
25
+ # belongs_to :tournament
26
+ # belongs_to :team1, class_name: 'Team'
27
+ # belongs_to :team2, class_name: 'Team'
28
+ # belongs_to :winner, class_name: 'Team'
29
+ # end
30
+ #
31
+ # class Team < ActiveRecord::Base
32
+ # belongs_to :tournament
33
+ #
34
+ # validates :seed, numericality: { only_integer: true }
35
+ # validates :points, numericality: { only_integer: true }
36
+ # end
37
+ #
38
+ # class Driver < TournamentSystem
39
+ # def initialize(tournament)
40
+ # @tournament = tournament
41
+ # end
42
+ #
43
+ # def matches
44
+ # @tournament.matches
45
+ # end
46
+ #
47
+ # def seeded_teams
48
+ # @tournament.teams.order(:seed).to_a
49
+ # end
50
+ #
51
+ # def ranked_teams
52
+ # @tournament.teams.order(:points).to_a
53
+ # end
54
+ #
55
+ # def get_match_winner(match)
56
+ # match.winner
57
+ # end
58
+ #
59
+ # def get_match_teams(match)
60
+ # [match.team1, match.team2]
61
+ # end
62
+ #
63
+ # def get_team_score(team)
64
+ # team.points
65
+ # end
66
+ #
67
+ # def get_team_matches(team)
68
+ # @tournament.matches.where(team1: team) +
69
+ # @tournament.matches.where(team2: team)
70
+ # end
71
+ #
72
+ # def build_match(home_team, away_team)
73
+ # @tournament.matches.create!(team1: home_team, team2: away_team)
74
+ # end
75
+ # end
20
76
  class Driver
21
77
  # rubocop:disable Lint/UnusedMethodArgument
22
78
  # :nocov:
@@ -66,6 +122,14 @@ module Tournament
66
122
  raise 'Not Implemented'
67
123
  end
68
124
 
125
+ # Required to implement: Get the matches a team has participated in.
126
+ #
127
+ # @param team [] a team, eg. one returned by {#seeded_teams}
128
+ # @return [Array<match>] a list of matches the team has played in
129
+ def get_team_matches(team)
130
+ raise 'Not Implemented'
131
+ end
132
+
69
133
  # Required to implement: Called when a match is created by a tournament system.
70
134
  #
71
135
  # @example rails
@@ -102,6 +166,13 @@ module Tournament
102
166
  @matches_hash ||= build_matches_hash
103
167
  end
104
168
 
169
+ # Get a hash of the matches teams have played in. Used by tournament systems.
170
+ #
171
+ # @return [Hash{team => Array<match>}]
172
+ def team_matches_hash
173
+ @team_matches_hash ||= build_team_matches_hash
174
+ end
175
+
105
176
  # Count the number of times each pair of teams has played already. Used by tournament systems.
106
177
  #
107
178
  # @param matches [Array<match>]
@@ -152,5 +223,12 @@ module Tournament
152
223
  counter[match] += 1
153
224
  end
154
225
  end
226
+
227
+ def build_team_matches_hash
228
+ seeded_teams.each_with_object({}) do |team, hash|
229
+ matches = get_team_matches(team)
230
+ hash[team] = matches
231
+ end
232
+ end
155
233
  end
156
234
  end
@@ -0,0 +1,46 @@
1
+ module TournamentSystem
2
+ # Proxies a driver, allowing overriding of certain functions.
3
+ #
4
+ # Used by tournament systems that build on top of others, with special behaviour.
5
+ # By default the behaviour is identical to the proxied driver.
6
+ class DriverProxy < Driver
7
+ # :nocov:
8
+
9
+ # @param target [Driver] the driver to proxy
10
+ def initialize(target)
11
+ @target = target
12
+ end
13
+
14
+ def matches
15
+ @target.matches
16
+ end
17
+
18
+ def seeded_teams
19
+ @target.seeded_teams
20
+ end
21
+
22
+ def ranked_teams
23
+ @target.ranked_teams
24
+ end
25
+
26
+ def get_match_winner(match)
27
+ @target.get_match_winner(match)
28
+ end
29
+
30
+ def get_match_teams(match)
31
+ @target.get_match_teams(match)
32
+ end
33
+
34
+ def get_team_score(team)
35
+ @target.get_team_score(team)
36
+ end
37
+
38
+ def get_team_matches(team)
39
+ @target.get_team_matches(team)
40
+ end
41
+
42
+ def build_match(home_team, away_team)
43
+ @target.build_match(home_team, away_team)
44
+ end
45
+ end
46
+ end
@@ -1,7 +1,7 @@
1
- require 'tournament/algorithm/page_playoff'
2
- require 'tournament/algorithm/group_pairing'
1
+ require 'tournament_system/algorithm/page_playoff'
2
+ require 'tournament_system/algorithm/group_pairing'
3
3
 
4
- module Tournament
4
+ module TournamentSystem
5
5
  # Implements the page playoff system.
6
6
  module PagePlayoff
7
7
  extend self
@@ -1,7 +1,7 @@
1
- require 'tournament/algorithm/util'
2
- require 'tournament/algorithm/round_robin'
1
+ require 'tournament_system/algorithm/util'
2
+ require 'tournament_system/algorithm/round_robin'
3
3
 
4
- module Tournament
4
+ module TournamentSystem
5
5
  # Implements the round-robin tournament system.
6
6
  module RoundRobin
7
7
  extend self
@@ -1,7 +1,7 @@
1
- require 'tournament/algorithm/single_bracket'
2
- require 'tournament/algorithm/group_pairing'
1
+ require 'tournament_system/algorithm/single_bracket'
2
+ require 'tournament_system/algorithm/group_pairing'
3
3
 
4
- module Tournament
4
+ module TournamentSystem
5
5
  # Implements the single bracket elimination tournament system.
6
6
  module SingleElimination
7
7
  extend self
@@ -1,8 +1,9 @@
1
- require 'tournament/algorithm/swiss'
2
- require 'tournament/swiss/dutch'
1
+ require 'tournament_system/algorithm/swiss'
2
+ require 'tournament_system/swiss/dutch'
3
+ require 'tournament_system/swiss/accelerated_dutch'
3
4
 
4
- module Tournament
5
- # Implements the swiss tournament system
5
+ module TournamentSystem
6
+ # Robust implementation of the swiss tournament system
6
7
  module Swiss
7
8
  extend self
8
9
 
@@ -23,6 +24,15 @@ module Tournament
23
24
  driver.create_matches(pairings)
24
25
  end
25
26
 
27
+ # Guesses the round number (starting from 0) from the maximum amount of matches any team has played.
28
+ # The guess will be wrong for long running competitions where teams are free to sign up and drop out at any time.
29
+ #
30
+ # @param driver [Driver]
31
+ # @return [Integer]
32
+ def guess_round(driver)
33
+ driver.team_matches_hash.values.map(&:length).max || 0
34
+ end
35
+
26
36
  # The minimum number of rounds to determine a number of winners.
27
37
  #
28
38
  # @param driver [Driver]
@@ -0,0 +1,69 @@
1
+ require 'tournament_system/swiss/dutch'
2
+ require 'tournament_system/driver_proxy'
3
+
4
+ module TournamentSystem
5
+ module Swiss
6
+ # A implementation of accelerated (dutch) swiss pairing
7
+ module AcceleratedDutch
8
+ extend self
9
+
10
+ # Pair teams using the accelerated (dutch) swiss pairing system.
11
+ #
12
+ # Behaves identical to the dutch pairing system, except that for the first N rounds the top half of the seeded
13
+ # teams is given a point bonus. This makes the first couple rounds of a tournament accelerate 1 round ahead of
14
+ # swiss.
15
+ #
16
+ # Options are passed to the dutch system and behave identically.
17
+ #
18
+ # @param driver [Driver]
19
+ # @option options [Integer] acceleration_rounds determines how many round to perform the acceleration for. This
20
+ # should be shorter than the length of the tournament in order to produce fair results.
21
+ # @option options [Number] acceleration_points determines how many points to grant the teams. This should be
22
+ # approximately equal to the number of points usually granted in one round.
23
+ # @return [Array<Array(team, team)>] the generated pairs of teams
24
+ def pair(driver, options = {})
25
+ acceleration_rounds = options[:acceleration_rounds] || 2
26
+ acceleration_points = options[:acceleration_points] || 1
27
+
28
+ # Accelerate for the first N rounds by replacing the driver with an accelerated one
29
+ driver = accelerate_driver(driver, acceleration_points) if Swiss.guess_round(driver) < acceleration_rounds
30
+
31
+ # Do a regular dutch pairing
32
+ Dutch.pair(driver, options)
33
+ end
34
+
35
+ private
36
+
37
+ def accelerate_driver(driver, acceleration_points)
38
+ teams = driver.seeded_teams
39
+ top_half = Set.new teams[0..teams.length / 2]
40
+
41
+ # Accelerated dutch is identical to dutch, except that we give the top half an extra point for the first 2
42
+ # rounds. To do that we just proxy the driver and add one point.
43
+ AcceleratedDutchDriverProxy.new(driver, top_half, acceleration_points)
44
+ end
45
+
46
+ # Driver proxy for implementing a score bonus
47
+ class AcceleratedDutchDriverProxy < DriverProxy
48
+ def initialize(target, accelerated_teams, acceleration_points)
49
+ super(target)
50
+
51
+ @accelerated_teams = accelerated_teams
52
+ @acceleration_points = acceleration_points
53
+ end
54
+
55
+ def get_team_score(team)
56
+ original_score = super(team)
57
+
58
+ if @accelerated_teams.include?(team)
59
+ original_score + @acceleration_points
60
+ else
61
+ original_score
62
+ end
63
+ end
64
+ end
65
+
66
+ private_constant :AcceleratedDutchDriverProxy
67
+ end
68
+ end
69
+ end
@@ -1,20 +1,21 @@
1
1
  require 'ostruct'
2
2
 
3
- require 'tournament/algorithm/swiss'
4
- require 'tournament/algorithm/matching'
5
- require 'tournament/algorithm/group_pairing'
3
+ require 'tournament_system/algorithm/swiss'
4
+ require 'tournament_system/algorithm/matching'
5
+ require 'tournament_system/algorithm/group_pairing'
6
6
 
7
- module Tournament
7
+ module TournamentSystem
8
8
  module Swiss
9
- # A simplified Dutch pairing system implementation.
9
+ # A Dutch pairing system implementation.
10
10
  module Dutch
11
11
  extend self
12
12
 
13
13
  # Pair teams using dutch pairing for a swiss system tournament.
14
14
  #
15
- # Teams are initially grouped by their score and then slide paired ({Tournament::Algorithm::GroupPairing.slide}).
16
- # If that fails to produce unique matches it will match teams by the minimum score difference, aniling duplicate
17
- # matches (default) and optionally pushing byes to a certain side.
15
+ # Teams are initially grouped by their score and then slide paired
16
+ # ({TournamentSystem::Algorithm::GroupPairing.slide}). If that fails to produce unique matches it will match teams
17
+ # by the minimum score difference, aniling duplicate matches (default) and optionally pushing byes to a certain
18
+ # side.
18
19
  #
19
20
  # @param driver [Driver]
20
21
  # @option options [Boolean] allow_duplicates removes the penalty of duplicate matches from the pairing algorithm
@@ -0,0 +1,4 @@
1
+ module TournamentSystem
2
+ # The current version of this gem.
3
+ VERSION = '2.0.0'.freeze
4
+ end
@@ -1,12 +1,10 @@
1
- # coding: utf-8
2
-
3
1
  lib = File.expand_path('../lib', __FILE__)
4
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'tournament/version'
3
+ require 'tournament_system/version'
6
4
 
7
5
  Gem::Specification.new do |spec|
8
6
  spec.name = 'tournament-system'
9
- spec.version = Tournament::VERSION
7
+ spec.version = TournamentSystem::VERSION
10
8
  spec.authors = ['Benjamin Schaaf']
11
9
  spec.email = ['ben.schaaf@gmail.com']
12
10
 
@@ -24,5 +22,5 @@ Gem::Specification.new do |spec|
24
22
  spec.require_paths = ['lib']
25
23
 
26
24
  spec.add_runtime_dependency 'graph_matching', '~> 0.1.1'
27
- spec.add_development_dependency 'bundler', '~> 1.14'
25
+ spec.add_development_dependency 'bundler', '~> 1.16.0'
28
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tournament-system
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Schaaf
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-29 00:00:00.000000000 Z
11
+ date: 2018-01-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: graph_matching
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.14'
33
+ version: 1.16.0
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.14'
40
+ version: 1.16.0
41
41
  description:
42
42
  email:
43
43
  - ben.schaaf@gmail.com
@@ -54,23 +54,24 @@ files:
54
54
  - LICENSE
55
55
  - README.md
56
56
  - Rakefile
57
- - lib/tournament-system.rb
58
- - lib/tournament.rb
59
- - lib/tournament/algorithm.rb
60
- - lib/tournament/algorithm/group_pairing.rb
61
- - lib/tournament/algorithm/matching.rb
62
- - lib/tournament/algorithm/page_playoff.rb
63
- - lib/tournament/algorithm/round_robin.rb
64
- - lib/tournament/algorithm/single_bracket.rb
65
- - lib/tournament/algorithm/swiss.rb
66
- - lib/tournament/algorithm/util.rb
67
- - lib/tournament/driver.rb
68
- - lib/tournament/page_playoff.rb
69
- - lib/tournament/round_robin.rb
70
- - lib/tournament/single_elimination.rb
71
- - lib/tournament/swiss.rb
72
- - lib/tournament/swiss/dutch.rb
73
- - lib/tournament/version.rb
57
+ - lib/tournament_system.rb
58
+ - lib/tournament_system/algorithm.rb
59
+ - lib/tournament_system/algorithm/group_pairing.rb
60
+ - lib/tournament_system/algorithm/matching.rb
61
+ - lib/tournament_system/algorithm/page_playoff.rb
62
+ - lib/tournament_system/algorithm/round_robin.rb
63
+ - lib/tournament_system/algorithm/single_bracket.rb
64
+ - lib/tournament_system/algorithm/swiss.rb
65
+ - lib/tournament_system/algorithm/util.rb
66
+ - lib/tournament_system/driver.rb
67
+ - lib/tournament_system/driver_proxy.rb
68
+ - lib/tournament_system/page_playoff.rb
69
+ - lib/tournament_system/round_robin.rb
70
+ - lib/tournament_system/single_elimination.rb
71
+ - lib/tournament_system/swiss.rb
72
+ - lib/tournament_system/swiss/accelerated_dutch.rb
73
+ - lib/tournament_system/swiss/dutch.rb
74
+ - lib/tournament_system/version.rb
74
75
  - tournament-system.gemspec
75
76
  homepage: https://github.com/ozfortress/tournament-system
76
77
  licenses:
@@ -92,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
92
93
  version: '0'
93
94
  requirements: []
94
95
  rubyforge_project:
95
- rubygems_version: 2.6.13
96
+ rubygems_version: 2.7.3
96
97
  signing_key:
97
98
  specification_version: 4
98
99
  summary: Implements various tournament systems
@@ -1,7 +0,0 @@
1
- require 'tournament/version'
2
- require 'tournament/driver'
3
-
4
- require 'tournament/swiss'
5
- require 'tournament/round_robin'
6
- require 'tournament/page_playoff'
7
- require 'tournament/single_elimination'
data/lib/tournament.rb DELETED
@@ -1,6 +0,0 @@
1
- # This library is split into two parts, there's the actual algorithms that
2
- # implement various tournament systems ({Algorithm}) and a data abstraction
3
- # layer for generating matches using various tournament systems in a
4
- # data-independent way ({Driver}).
5
- module Tournament
6
- end
@@ -1,4 +0,0 @@
1
- module Tournament
2
- # The current version of this gem.
3
- VERSION = '1.0.2'.freeze
4
- end