Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

panda, tiger, eagle #7

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
64 changes: 64 additions & 0 deletions spec/terminator_spec.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
require './spec_helper'
require "./terminator"

describe BadTerminator do
it "should destroy_john_connor" do
subject.destroy_john_connor!
subject.current_mission.should eq("destroy: john_connor")
end

it "should destroy_sarah_connor" do
subject.destroy_sarah_connor!
subject.current_mission.should eq("destroy: sarah_connor")
end

it 'should not protect john' do
expect(subject.protects?('John Connor')).to be_false
end

it 'should not protect Sarah' do
expect(subject.protects?('Sarah Connor')).to be_false
end

it 'should not protect Bob' do
expect(subject.protects?('Bob')).to be_false
puts 'poor bob'
end

it 'should not be good if it is trying to destory someone' do
subject.destroy_sarah_connor!
expect(subject.good?).to be_false
end

end

describe GoodTerminator do
it "should protect_john_connor" do
subject.protect_john_connor!
subject.current_mission.should eq("protect: john_connor")
end


it "should protect_sarah_connor" do
subject.protect_sarah_connor!
subject.current_mission.should eq("protect: sarah_connor")
end

it 'should protect john' do
expect(subject.protects?('John Connor')).to be_true
end

it 'should protect Sarah' do
expect(subject.protects?('Sarah Connor')).to be_true
end

it 'should not protect Bob' do
expect(subject.protects?('Bob')).to be_false
puts 'poor bob'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Poor bob :)

end

it 'should be good if it is not trying to destory someone' do
subject.protect_sarah_connor!
expect(subject.good?).to be_true
end
end
15 changes: 15 additions & 0 deletions spec_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
require 'rspec'




RSpec.configure do |config|
# Use color in STDOUT
config.color_enabled = true

# Use color not only in STDOUT but also in pagers and files
config.tty = true

# Use the specified formatter
config.formatter = :documentation # :progress, :html, :textmate
end
9 changes: 9 additions & 0 deletions terminator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

class Terminator
include Terminatorable
end

class GoodTerminator < Terminator
likes_to_protect [:john_connor, :sarah_connor]
likes_to_destroy []
end

class BadTerminator < Terminator
likes_to_protect []
likes_to_destroy [:john_connor, :sarah_connor]
end

23 changes: 0 additions & 23 deletions terminator_spec.rb

This file was deleted.

29 changes: 24 additions & 5 deletions terminatorable.rb
Original file line number Diff line number Diff line change
@@ -1,19 +1,38 @@
module Terminatorable

module ClassMethods

def likes_to_protect(people=[])
["destroy", "protect"].each do |mission_type|
people.each do |person|
define_method "#{mission_type}_#{person}!" do
@current_mission = "#{mission_type}: #{person}"
define_method "protect_#{person}!" do
@current_mission = "protect: #{person}"
end
end
end

def likes_to_destroy(people=[])
people.each do |person|
define_method "destroy_#{person}!" do
@current_mission = "destroy: #{person}"
end
end
end
end


end

def self.included(klass)
attr_reader :current_mission
attr_reader :current_mission, :good
klass.extend Terminatorable::ClassMethods
end

def protects?(person)
methodize = "protect_#{person.downcase!.sub(' ','_')}!"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nice touch!

self.respond_to?(methodize)
end

def good?
@current_mission[0..7] == 'protect:'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd probably go with a regex in Ruby for something like this:

@current_mission ~= /^protect:/

end

end