Skip to content

Commit 75b1e8e

Browse files
committed
Add specs for Module#define_method(name, &block) lambda behavior
1 parent 77fe339 commit 75b1e8e

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

spec/ruby/core/module/define_method_spec.rb

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,14 @@ def cool_method
350350
object2.other_cool_method.should == "data is foo"
351351
end
352352

353+
it "accepts a proc from a Symbol" do
354+
symbol_proc = :+.to_proc
355+
klass = Class.new do
356+
define_method :foo, &symbol_proc
357+
end
358+
klass.new.foo(1, 2).should == 3
359+
end
360+
353361
it "maintains the Proc's scope" do
354362
class DefineMethodByProcClass
355363
in_scope = true
@@ -715,3 +723,46 @@ def nested_method_in_proc_for_define_method
715723
end
716724
end
717725
end
726+
727+
describe "Method#define_method when passed a block" do
728+
describe "behaves exactly like a lambda" do
729+
it "for return" do
730+
Class.new do
731+
define_method(:foo) do
732+
return 42
733+
end
734+
end.new.foo.should == 42
735+
end
736+
737+
it "for break" do
738+
Class.new do
739+
define_method(:foo) do
740+
break 42
741+
end
742+
end.new.foo.should == 42
743+
end
744+
745+
it "for next" do
746+
Class.new do
747+
define_method(:foo) do
748+
next 42
749+
end
750+
end.new.foo.should == 42
751+
end
752+
753+
it "for redo" do
754+
Class.new do
755+
result = []
756+
define_method(:foo) do
757+
if result.empty?
758+
result << :first
759+
redo
760+
else
761+
result << :second
762+
result
763+
end
764+
end
765+
end.new.foo.should == [:first, :second]
766+
end
767+
end
768+
end

0 commit comments

Comments
 (0)