class BaseClass
def hello
:hello
end
end
base_object = BaseClass.new
base_object.hello
:hello
class InheritClass < BaseClass
end
inherit_object = InheritClass.new
inherit_object.hello
:hello
def base_object.hello
:singleton_method_hello
end
base_object.hello
:singleton_method_hello
module HelloModule
def hello_from_module
:hello_from_module
end
end
class InheritClass
include HelloModule
end
inherit_object = InheritClass.new
inherit_object.hello_from_module
:hello_from_module
module ByeModule
end
class MixinClass < BaseClass
include HelloModule
include ByeModule
end
MixinClass
class DuplicateMixinClass < BaseClass
include HelloModule
include ByeModule
include HelloModule
end
DuplicateMixinClass
inherit_object = InheritClass.new
inherit_object.net_exist_method
NoMethodError: undefined method `net_exist_method' for #<InheritClass:0x00007ff1cf8c1b58> (pry):44:in `<main>' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `eval' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:387:in `evaluate_ruby' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:355:in `handle_line' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:274:in `block (2 levels) in eval' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `catch' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:273:in `block in eval' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `catch' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/pry-0.12.2/lib/pry/pry_instance.rb:272:in `eval' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:66:in `eval' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/iruby-0.3/lib/iruby/backend.rb:12:in `eval' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:87:in `execute_request' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:47:in `dispatch' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/iruby-0.3/lib/iruby/kernel.rb:37:in `run' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:70:in `run_kernel' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/iruby-0.3/lib/iruby/command.rb:34:in `run' /Users/ketchup/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/iruby-0.3/bin/iruby:5:in `<top (required)>' /Users/ketchup/.rbenv/versions/2.6.1/bin/iruby:23:in `load' /Users/ketchup/.rbenv/versions/2.6.1/bin/iruby:23:in `<main>'
module HelloModule
def hello
:hello_module
end
end
class GrandParentClass
def hello
:grand_parent_hello
end
end
class ParentClass < GrandParentClass
include HelloModule
end
class ChildClass < ParentClass
end
child = ChildClass.new
child.hello
:hello_module
module PrependModule
def prepended_method
:prepended_method
end
end
class PrependedClass
prepend PrependModule
end
prepended_obj = PrependedClass.new
prepended_obj.prepended_method
:prepended_method
module IncludeModule
def embeded_method
:from_include_module
end
end
module PrependModule
def embeded_method
:from_prepend_module
end
end
class EmbeddedClass
include IncludeModule
prepend PrependModule
end
embeded_obj = EmbeddedClass.new
embeded_obj.embeded_method
:from_prepend_module
class ReverseEmbeddedClass
prepend PrependModule
include IncludeModule
end
reverse_embeded_obj = ReverseEmbeddedClass.new
reverse_embeded_obj.embeded_method
:from_prepend_module
class PrependedClass
prepend PrependModule
def embeded_method
:prepended_class
end
end
obj = PrependedClass.new
obj.embeded_method
:from_prepend_module
module SuperCallModule
def super_call_method
puts "super_call_method"
super
end
end
class OverrideClass
prepend SuperCallModule
def super_call_method
:overrode
end
end
override_obj = OverrideClass.new
override_obj.super_call_method
super_call_method
:overrode
module BeforeHelloFilter
def hello
"Hi! " + super
end
end
class Hello
prepend BeforeHelloFilter
def hello
"hello"
end
end
Hello.new.hello
"Hi! hello"
module FirstPrependModule
def prepended_method
:first_prepend_module
end
end
module SecondPrependModule
def prepended_method
:second_prepend_method
end
end
class PrependedClass
prepend FirstPrependModule
prepend SecondPrependModule
end
prepended_obj = PrependedClass.new
prepended_obj.prepended_method
:second_prepend_method