Skip to content

Instantly share code, notes, and snippets.

@jordelver
Last active December 20, 2015 22:19
Show Gist options
  • Save jordelver/6204052 to your computer and use it in GitHub Desktop.
Save jordelver/6204052 to your computer and use it in GitHub Desktop.
NullObject logger
Purchase = Struct.new(:description, :price)
DATA = [
Purchase.new("Walkman", "1.25"),
Purchase.new("Mini-disc player", "2.57"),
Purchase.new("Record player", "3.54")
]
require 'logger'
class TransactionImport
attr_reader :data, :logger
def initialize(data, options = {})
@data = data
@logger = options.fetch(:logger) { default_logger }
end
def import
data.each do |record|
# ...do import work
logger.info("Processing #{record.description}")
end
end
private
def default_logger
@logger ||= Logger.new(STDOUT)
end
end
class FabulousLogger
def info(log_message)
puts ">>> #{log_message} <<<"
end
end
class NullObject < BasicObject
def method_missing(*)
end
def respond_to_missing?(name)
true
end
end
# Normal logger
TransactionImport.new(DATA).import
# An alternative logger
TransactionImport.new(DATA, logger: FabulousLogger.new).import
# No logging using `NullObject`
TransactionImport.new(DATA, logger: NullObject.new).import
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment