Skip to content

Commit

Permalink
Adds Bracket#seed
Browse files Browse the repository at this point in the history
  • Loading branch information
cadwallion committed May 22, 2012
1 parent 3641304 commit 297ed50
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 0 deletions.
18 changes: 18 additions & 0 deletions lib/bracket_tree/bracket.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -55,6 +55,24 @@ def replace position, payload
end end
end end


# Seeds bracket based on `seed_order` value of bracket. Provide an iterator
# with players that will be inserted in the appropriate location. Will raise a
# SeedLimitExceededError if too many players are sent, and a NoSeedOrderError if
# the `seed_order` attribute is nil
#
# @param [Enumerable] players - players to be seeded
def seed players
if @seed_order.nil?
raise NoSeedOrderError, 'Bracket does not have a seed order.'
elsif players.size > @seed_order.size
raise SeedLimitExceededError, 'cannot seed more players than seed order list.'
else
@seed_order.each do |position|
replace position, players.shift
end
end
end

# This needs refactoring. Inconsistent interface # This needs refactoring. Inconsistent interface
def add_winner winner def add_winner winner
@root.payload.seed_value = winner.seed_position @root.payload.seed_value = winner.seed_position
Expand Down
21 changes: 21 additions & 0 deletions spec/unit/bracket_tree/bracket_spec.rb
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -104,4 +104,25 @@
bracket.root.right.payload.should == { baz: 'baz' } bracket.root.right.payload.should == { baz: 'baz' }
end end
end end

describe '#seed' do
let(:bracket) { BracketTree::Template::SingleElimination.by_size(4).generate_blank_bracket }
let(:players) do
[
{ name: 'player4' },
{ name: 'player1' },
{ name: 'player3' },
{ name: 'player2' }
]
end

it 'should place the players in the bracket by seed order' do
bracket.seed players

bracket.find { |n| n.position == 1 }.payload.should == { name: 'player4' }
bracket.find { |n| n.position == 3 }.payload.should == { name: 'player1' }
bracket.find { |n| n.position == 5 }.payload.should == { name: 'player3' }
bracket.find { |n| n.position == 7 }.payload.should == { name: 'player2' }
end
end
end end

0 comments on commit 297ed50

Please sign in to comment.