1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
def f
send(@method)
end
alias g f
describe :kernel___method__, :shared => true do
it "returns the current method, even when aliased" do
f.should == :f
end
ruby_version_is ""..."2.0" do
it "returns the original name when aliased method" do
g.should == :f
end
end
ruby_version_is "2.0" do
it "returns the aliased name when aliased method" do
g.should == :g
end
end
it "returns the caller from blocks too" do
def h
(1..2).map { send(@method) }
end
h.should == [:h, :h]
end
it "returns the caller from define_method too" do
klass = Class.new {define_method(:f) {__method__}}
klass.new.f.should == :f
end
it "returns the caller from block inside define_method too" do
klass = Class.new {define_method(:f) { 1.times{break __method__}}}
klass.new.f.should == :f
end
it "returns the caller from a define_method called from the same class" do
class C
define_method(:f) { 1.times{break __method__}}
def g; f end
end
C.new.g.should == :f
end
it "returns method name even from eval" do
def h
eval @method.to_s
end
h.should == :h
end
it "returns nil when not called from a method" do
send(@method).should == nil
end
it "returns the caller when sent as a string" do
def h
send(@method.to_s)
end
h.should == :h
end
end
|