From 72c1866de7bff14d87cec21fb4ef6561aa924f04 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 23 May 2012 00:59:44 -0400 Subject: [PATCH 1/5] alias_method :size, :count, since :count is provided by Enumerable. Also whitespace, because my editor hates whitespace. --- lib/bracket_tree/bracket.rb | 8 +++----- spec/unit/bracket_tree/bracket_spec.rb | 9 +++++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/bracket_tree/bracket.rb b/lib/bracket_tree/bracket.rb index 75f99d0..824cc55 100644 --- a/lib/bracket_tree/bracket.rb +++ b/lib/bracket_tree/bracket.rb @@ -7,7 +7,7 @@ class SeedLimitExceededError < Exception ; end include Enumerable attr_accessor :root, :seed_order, :insertion_order - + def initialize @insertion_order = [] end @@ -99,14 +99,12 @@ def nodes to_a.sort_by { |node| @insertion_order.index(node.position) } end - def size - @insertion_order.size - end + alias_method :size, :count def in_order(node, block) if node unless node.left.nil? - in_order(node.left, block) + in_order(node.left, block) end block.call(node) diff --git a/spec/unit/bracket_tree/bracket_spec.rb b/spec/unit/bracket_tree/bracket_spec.rb index b8d729d..7eac991 100644 --- a/spec/unit/bracket_tree/bracket_spec.rb +++ b/spec/unit/bracket_tree/bracket_spec.rb @@ -105,6 +105,15 @@ end end + describe "#size" do + it "should return the number of nodes in the bracket" do + bracket.add 3, { foo: 'foo' } + bracket.add 2, { bar: 'bar' } + bracket.add 4, { baz: 'baz' } + bracket.size.should == 3 + end + end + describe '#seed' do let(:bracket) { BracketTree::Template::SingleElimination.by_size(4).generate_blank_bracket } let(:players) do From 88609b6405f964e728c975b21652f4d6612ab442 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 23 May 2012 01:08:12 -0400 Subject: [PATCH 2/5] Add Bracket#at(position) convenience method. --- lib/bracket_tree/bracket.rb | 6 +++++- spec/unit/bracket_tree/bracket_spec.rb | 13 +++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/bracket_tree/bracket.rb b/lib/bracket_tree/bracket.rb index 824cc55..2e884d6 100644 --- a/lib/bracket_tree/bracket.rb +++ b/lib/bracket_tree/bracket.rb @@ -49,7 +49,7 @@ def add position, data # @param [Fixnum] position - the node position to replace # @param payload - the new payload object to replace def replace position, payload - node = find { |n| n.position == position } + node = at position if node node.payload = payload true @@ -99,6 +99,10 @@ def nodes to_a.sort_by { |node| @insertion_order.index(node.position) } end + def at position + find { |n| n.position == position } + end + alias_method :size, :count def in_order(node, block) diff --git a/spec/unit/bracket_tree/bracket_spec.rb b/spec/unit/bracket_tree/bracket_spec.rb index 7eac991..4d6bbd4 100644 --- a/spec/unit/bracket_tree/bracket_spec.rb +++ b/spec/unit/bracket_tree/bracket_spec.rb @@ -114,6 +114,19 @@ end end + describe "#at" do + before do + bracket.add 3, { foo: 'foo' } + bracket.add 2, { bar: 'bar' } + bracket.add 1, { baz: 'baz' } + end + it "should return the node at the given position in the bracket" do + bracket.at(1).payload.should == { baz: 'baz'} + bracket.at(2).payload.should == { bar: 'bar'} + bracket.at(3).payload.should == { foo: 'foo'} + end + end + describe '#seed' do let(:bracket) { BracketTree::Template::SingleElimination.by_size(4).generate_blank_bracket } let(:players) do From d79b903d731fea10c6de6ea8345330d0b7bb5c88 Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 23 May 2012 01:27:51 -0400 Subject: [PATCH 3/5] Remove unnecessary variable assignment. --- lib/bracket_tree/template.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/bracket_tree/template.rb b/lib/bracket_tree/template.rb index 2437bbc..5ce4f4a 100644 --- a/lib/bracket_tree/template.rb +++ b/lib/bracket_tree/template.rb @@ -18,13 +18,13 @@ def by_size size end # Generates Template from JSON - # + # # @param [String] json - the bracket template in its standard data specification # @return [BracketTree::Template] def from_json json template = new if json['seats'] - template.seats = json['seats'].map { |s| s['position'] } + template.seats = json['seats'].map { |s| s['position'] } end if json['startingSeats'] @@ -68,12 +68,12 @@ def generate_blank_bracket bracket end - + # Returns hash representation of the Template # # @return [Hash] template def to_h - hash = { + { 'seats' => @seats.map { |s| { 'position' => s } }, 'startingSeats' => @starting_seats, 'nodes' => @nodes From c97c2f711eb4ae459f8f07c4dcea827cc030afdf Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 23 May 2012 01:28:07 -0400 Subject: [PATCH 4/5] potential refactor of Bracket#add_winner --- lib/bracket_tree/bracket.rb | 10 +++++++--- spec/unit/bracket_tree/bracket_spec.rb | 13 +++++++++++++ 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/bracket_tree/bracket.rb b/lib/bracket_tree/bracket.rb index 2e884d6..91b2dd4 100644 --- a/lib/bracket_tree/bracket.rb +++ b/lib/bracket_tree/bracket.rb @@ -77,10 +77,14 @@ def seed players end # This needs refactoring. Inconsistent interface + # Not sure if this is what you want here or not, but this now accepts hashlike input + # I'm also unsure about a good default position. I assume 1? - MHW def add_winner winner - @root.payload.seed_value = winner.seed_position - @root.payload.race = winner.race - @root.payload.player = winner.user.login + if @root + @root.payload = winner.to_hash + else + add 1, winner.to_hash + end end def winner diff --git a/spec/unit/bracket_tree/bracket_spec.rb b/spec/unit/bracket_tree/bracket_spec.rb index 4d6bbd4..bbce2ff 100644 --- a/spec/unit/bracket_tree/bracket_spec.rb +++ b/spec/unit/bracket_tree/bracket_spec.rb @@ -127,6 +127,19 @@ end end + describe "#add_winner" do + it "should destructure the incoming data as the root's payload" do + bracket.add 1, { name: 'well, it was me' } + bracket.add_winner( { name: 'but now it is me', awyeah: true } ) + bracket.winner.should == { name: 'but now it is me', awyeah: true } + end + it "should create the root node if it needs to" do + bracket.size.should == 0 + bracket.add_winner( { name: 'but now it is me', awyeah: true } ) + bracket.winner.should == { name: 'but now it is me', awyeah: true } + end + end + describe '#seed' do let(:bracket) { BracketTree::Template::SingleElimination.by_size(4).generate_blank_bracket } let(:players) do From f20ca33647ec3d07ae9396d4fb411e12da4a8feb Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 23 May 2012 09:45:02 -0400 Subject: [PATCH 5/5] Revert "potential refactor of Bracket#add_winner", pending implementation guidance. This reverts commit c97c2f711eb4ae459f8f07c4dcea827cc030afdf. --- lib/bracket_tree/bracket.rb | 10 +++------- spec/unit/bracket_tree/bracket_spec.rb | 13 ------------- 2 files changed, 3 insertions(+), 20 deletions(-) diff --git a/lib/bracket_tree/bracket.rb b/lib/bracket_tree/bracket.rb index 91b2dd4..2e884d6 100644 --- a/lib/bracket_tree/bracket.rb +++ b/lib/bracket_tree/bracket.rb @@ -77,14 +77,10 @@ def seed players end # This needs refactoring. Inconsistent interface - # Not sure if this is what you want here or not, but this now accepts hashlike input - # I'm also unsure about a good default position. I assume 1? - MHW def add_winner winner - if @root - @root.payload = winner.to_hash - else - add 1, winner.to_hash - end + @root.payload.seed_value = winner.seed_position + @root.payload.race = winner.race + @root.payload.player = winner.user.login end def winner diff --git a/spec/unit/bracket_tree/bracket_spec.rb b/spec/unit/bracket_tree/bracket_spec.rb index bbce2ff..4d6bbd4 100644 --- a/spec/unit/bracket_tree/bracket_spec.rb +++ b/spec/unit/bracket_tree/bracket_spec.rb @@ -127,19 +127,6 @@ end end - describe "#add_winner" do - it "should destructure the incoming data as the root's payload" do - bracket.add 1, { name: 'well, it was me' } - bracket.add_winner( { name: 'but now it is me', awyeah: true } ) - bracket.winner.should == { name: 'but now it is me', awyeah: true } - end - it "should create the root node if it needs to" do - bracket.size.should == 0 - bracket.add_winner( { name: 'but now it is me', awyeah: true } ) - bracket.winner.should == { name: 'but now it is me', awyeah: true } - end - end - describe '#seed' do let(:bracket) { BracketTree::Template::SingleElimination.by_size(4).generate_blank_bracket } let(:players) do