summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/reline/kill_ring.rb12
-rw-r--r--test/reline/test_kill_ring.rb12
2 files changed, 24 insertions, 0 deletions
diff --git a/lib/reline/kill_ring.rb b/lib/reline/kill_ring.rb
index 842fd04697..bb3684b42b 100644
--- a/lib/reline/kill_ring.rb
+++ b/lib/reline/kill_ring.rb
@@ -1,4 +1,6 @@
class Reline::KillRing
+ include Enumerable
+
module State
FRESH = :fresh
CONTINUED = :continued
@@ -110,4 +112,14 @@ class Reline::KillRing
nil
end
end
+
+ def each
+ start = head = @ring.head
+ loop do
+ break if head.nil?
+ yield head.str
+ head = head.backward
+ break if head == start
+ end
+ end
end
diff --git a/test/reline/test_kill_ring.rb b/test/reline/test_kill_ring.rb
index 8bebfe2177..9f6e0c3e74 100644
--- a/test/reline/test_kill_ring.rb
+++ b/test/reline/test_kill_ring.rb
@@ -253,4 +253,16 @@ class Reline::KillRing::Test < Reline::TestCase
assert_equal(['AB', 'abcde'], @kill_ring.yank_pop)
assert_equal(Reline::KillRing::State::YANK, @kill_ring.instance_variable_get(:@state))
end
+
+ def test_enumerable
+ @kill_ring.append('a')
+ @kill_ring.process
+ @kill_ring.process
+ @kill_ring.append('b')
+ @kill_ring.process
+ @kill_ring.process
+ @kill_ring.append('c')
+ @kill_ring.process
+ assert_equal(%w{c b a}, @kill_ring.to_a)
+ end
end