4. module Logger
def log(message)
puts message
end
end
class ComplexBusiness
include Logger
# ...
end
ComplexBusiness.ancestors
# => [ComplexBusiness, Logger, ...]
5. module Logger
def log(message)
puts message
end
end
class ComplexBusiness
mix Logger
# ...
end
ComplexBusiness.ancestors
# => [ComplexBusiness, Object, ...]
6. module Extra; end
module More; end
class ComplexBusiness
include Extra
end
module Extra
include More
end
ComplexBusiness.ancestors
# => [ComplexBusiness, Extra, Object, ...]
Extra.ancestors
# => [Extra, More]
7. module Logger module EmailNotification
def error(message) def error(message)
puts "ERROR #{message}" # send mail ...
end end
def info(message) end
puts "INFO #{message}"
end
end
14. module Formatter
def log(message)
original_log("*** #{message} ***")
end
end
class ComplexBusiness
def log(message)
puts message
end
end
15. module Formatter
def log(message)
original_log("*** #{message} ***")
end
end
class ComplexBusiness
def log(message)
puts message
end
include Formatter
end
16. module Formatter
def log(message)
original_log("*** #{message} ***")
end
end
alias_method_chain ?
class ComplexBusiness
def log(message)
puts message
end
include Formatter
end
17. module Formatter
def log(message)
original_log("*** #{message} ***")
end
end
class ComplexBusiness
def log(message)
puts message
end
mix Formatter
end
18. module Formatter
def log(message)
super("*** #{message} ***")
end
end
class ComplexBusiness
def log(message)
puts message
end
mix Formatter, :log => []
end
19. module Formatter
def log(message)
super("*** #{message} ***")
end
end
class ComplexBusiness
def log(message)
puts message
end
prepend Formatter
end
23. transfer amount: 100,
from: company,
to: employee
def transfer(hash)
value = hash[:amount]
source = hash[:from]
destination = hash[:to]
# do the transfer ...
end
24. transfer amount: 100,
from: company,
to: employee
def transfer(amount: value,
from: source,
to: destination)
# do the transfer ...
end
27. require "rspec"
describe RSpecWithRefinements do
it "patches objects only inside this block" do
"some string".should respond_to(:should_not)
1234.should respond_to(:should_not)
end
end
1234.should # error!
28. refine Klass {}
using Namespace
escopo léxico
herança, class_eval,
module_eval, instance_eval