← Каталог
Основы языка Ruby — Модули — композиция поведения без наследования
Фрагмент из «Основы языка Ruby»: Модули — композиция поведения без наследования.
module Loggable
def log(message)
puts "[#{Time.now}] #{message}"
end
end
module Retryable
def with_retry(max: 3)
yield
rescue => e
retry if (max -= 1) > 0
raise
end
end
class Downloader
include Loggable
include Retryable
def fetch(url)
with_retry do
log("Fetching #{url}")
Net::HTTP.get(URI(url)) # require 'net/http'; require 'uri'
end
end
end module Loggable
def log(message)
puts "[#{Time.now}] #{message}"
end
end
module Retryable
def with_retry(max: 3)
yield
rescue => e
retry if (max -= 1) > 0
raise
end
end
class Downloader
include Loggable
include Retryable
def fetch(url)
with_retry do
log("Fetching #{url}")
Net::HTTP.get(URI(url)) # require 'net/http'; require 'uri'
end
end
end