diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..dbab2a8 --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +# A sample Gemfile +source "https://rubygems.org" + + gem "rspec" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..210068a --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,18 @@ +GEM + remote: https://rubygems.org/ + specs: + diff-lcs (1.1.3) + rspec (2.10.0) + rspec-core (~> 2.10.0) + rspec-expectations (~> 2.10.0) + rspec-mocks (~> 2.10.0) + rspec-core (2.10.1) + rspec-expectations (2.10.0) + diff-lcs (~> 1.1.3) + rspec-mocks (2.10.1) + +PLATFORMS + ruby + +DEPENDENCIES + rspec diff --git a/lib/clipboard.rb b/lib/clipboard.rb new file mode 100644 index 0000000..7ab971a --- /dev/null +++ b/lib/clipboard.rb @@ -0,0 +1,18 @@ +class Clipboard + attr_accessor :commands, :last_commands + + def initialize + @commands = [] + @last_commands = [] + end + + def undo + @last_commands << @commands.pop + self + end + + def redo + @commands << @last_commands.pop + self + end +end diff --git a/spec/clipboard_spec.rb b/spec/clipboard_spec.rb new file mode 100644 index 0000000..28a4ea6 --- /dev/null +++ b/spec/clipboard_spec.rb @@ -0,0 +1,44 @@ +require 'spec_helper' + +describe Clipboard do + let :mkdir do + double(:name => 'mkdir') + end + + let :ls do + double(:name => 'ls') + end + + before do + subject.commands << mkdir + end + + it 'should respond to undo' do + subject.should respond_to :undo + end + + it 'should add last_undo command' do + subject.undo + subject.commands.should be_empty + end + + it 'should readdd last undo command on redo' do + subject.undo.redo + subject.commands.should == [mkdir] + end + + it 'should return self when call undo' do + subject.undo.should eq subject + end + + it 'should return self when call redo' do + subject.redo.should eq subject + end + + it 'should undo twice and redo' do + subject.commands << ls + subject.undo.undo.redo.redo + subject.commands.should == [mkdir,ls] + subject.last_commands.should be_empty + end +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb new file mode 100644 index 0000000..8d81acd --- /dev/null +++ b/spec/spec_helper.rb @@ -0,0 +1 @@ +require 'lib/clipboard'