From f7b830616b4e1a8ba77ca5a8aeee0db0fadc891e Mon Sep 17 00:00:00 2001 From: jason perez Date: Sat, 15 Feb 2014 09:17:35 -0800 Subject: [PATCH 1/3] add protects? method to terminatorable --- terminator_spec.rb | 11 +++++++++++ terminatorable.rb | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/terminator_spec.rb b/terminator_spec.rb index 749dae3..5ca518a 100644 --- a/terminator_spec.rb +++ b/terminator_spec.rb @@ -20,4 +20,15 @@ subject.protect_sarah_connor! subject.current_mission.should eq("protect: sarah_connor") end + + describe "#protects?" do + it "should return true when protecting Sarah Connor" do + subject.protect_sarah_connor! + subject.protects?(:sarah_connor).should be_true + end + it "should return false when destroying Sarah Connor" do + subject.destroy_sarah_connor! + subject.protects?(:sarah_connor).should be_false + end + end end diff --git a/terminatorable.rb b/terminatorable.rb index 378afd6..d713c5a 100644 --- a/terminatorable.rb +++ b/terminatorable.rb @@ -6,6 +6,7 @@ def likes_to_protect(people=[]) people.each do |person| define_method "#{mission_type}_#{person}!" do @current_mission = "#{mission_type}: #{person}" + @protected_person = person if mission_type == "protect" end end end @@ -15,5 +16,8 @@ def likes_to_protect(people=[]) def self.included(klass) attr_reader :current_mission klass.extend Terminatorable::ClassMethods + def protects?(person) + @protected_person == person + end end end From 18ae670b4e0e1245e4a1bdd1e83e40378ac31f1e Mon Sep 17 00:00:00 2001 From: jason perez Date: Sat, 15 Feb 2014 10:52:54 -0800 Subject: [PATCH 2/3] add #good? method to Terminatorable --- terminator_spec.rb | 11 +++++++++++ terminatorable.rb | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/terminator_spec.rb b/terminator_spec.rb index 5ca518a..6e960c5 100644 --- a/terminator_spec.rb +++ b/terminator_spec.rb @@ -31,4 +31,15 @@ subject.protects?(:sarah_connor).should be_false end end + + describe "#good?" do + it "should return true if the terminator is good" do + subject.protect_sarah_connor! + subject.good?.should be_true + end + it "should return false if the terminator is bad" do + subject.destroy_john_connor! + subject.good?.should be_false + end + end end diff --git a/terminatorable.rb b/terminatorable.rb index d713c5a..c950754 100644 --- a/terminatorable.rb +++ b/terminatorable.rb @@ -7,6 +7,7 @@ def likes_to_protect(people=[]) define_method "#{mission_type}_#{person}!" do @current_mission = "#{mission_type}: #{person}" @protected_person = person if mission_type == "protect" + @mission_type = mission_type end end end @@ -19,5 +20,8 @@ def self.included(klass) def protects?(person) @protected_person == person end + def good? + @mission_type == "protect" + end end end From 972e0c7c521a420455f310bf69c13b859f0a64ae Mon Sep 17 00:00:00 2001 From: jason perez Date: Tue, 18 Feb 2014 19:54:11 -0800 Subject: [PATCH 3/3] update to protect/destroy multiple people --- terminator_spec.rb | 5 +++++ terminatorable.rb | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/terminator_spec.rb b/terminator_spec.rb index 6e960c5..b04ffa2 100644 --- a/terminator_spec.rb +++ b/terminator_spec.rb @@ -30,6 +30,11 @@ subject.destroy_sarah_connor! subject.protects?(:sarah_connor).should be_false end + it "should protect Sarah and John Connor at the same time" do + subject.protect_sarah_connor! + subject.protect_john_connor! + subject.protects?(:sarah_connor).should be_true + end end describe "#good?" do diff --git a/terminatorable.rb b/terminatorable.rb index c950754..0d05284 100644 --- a/terminatorable.rb +++ b/terminatorable.rb @@ -5,8 +5,9 @@ def likes_to_protect(people=[]) ["destroy", "protect"].each do |mission_type| people.each do |person| define_method "#{mission_type}_#{person}!" do + @protected_person ||= [] @current_mission = "#{mission_type}: #{person}" - @protected_person = person if mission_type == "protect" + @protected_person << person if mission_type == "protect" @mission_type = mission_type end end @@ -18,7 +19,7 @@ def self.included(klass) attr_reader :current_mission klass.extend Terminatorable::ClassMethods def protects?(person) - @protected_person == person + @protected_person.include? person end def good? @mission_type == "protect"