Skip to content

Instantly share code, notes, and snippets.

@karavanis
Created October 16, 2013 14:54
Show Gist options
  • Save karavanis/7008988 to your computer and use it in GitHub Desktop.
Save karavanis/7008988 to your computer and use it in GitHub Desktop.
module V1A
def mpla
"#{foo} from mpla"
end
def foo
return 'from V1'
end
end
module V2A
include V1A
def foo
return 'from V2'
end
end
module V1
class A
include V1A
end
class B < A
def bar
"B #{mpla}"
end
end
class C < A
def bar
"C #{mpla}"
end
end
end
module V2
include V1
class A
include V2A
end
class B < A
def bar
"B ~ #{mpla}"
end
end
class C < V1::C
include V2A
end
end
puts V1::B.new.bar #=> B from V1 from mpla
puts V2::B.new.bar #=> B ~ from V2 from mpla
puts V1::C.new.bar #=> C from V1 from mpla
puts V2::C.new.bar #=> C from V2 from mpla
p V1::B.ancestors #=> [V1::B, V1::A, V1A, Object, Kernel, BasicObject]
p V2::B.ancestors #=> [V2::B, V2::A, V2A, V1A, Object, Kernel, BasicObject]
p V1::C.ancestors #=> [V1::C, V1::A, V1A, Object, Kernel, BasicObject]
p V2::C.ancestors #=> [V2::C, V2A, V1::C, V1::A, V1A, Object, Kernel, BasicObject]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment