This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
module Yell #:nodoc:
|
||||
# AdapterNotFound is raised whenever you want to instantiate an
|
||||
# adapter that does not exist.
|
||||
class AdapterNotFound < StandardError; end
|
||||
|
||||
# This module provides the interface to attaching adapters to
|
||||
# the logger. You should not have to call the corresponding classes
|
||||
# directly.
|
||||
module Adapters
|
||||
class Collection
|
||||
def initialize( options = {} )
|
||||
@options = options
|
||||
@collection = []
|
||||
end
|
||||
|
||||
def add( type = :file, *args, &block )
|
||||
options = [@options, *args].inject(Hash.new) do |h, c|
|
||||
h.merge( [String, Pathname].include?(c.class) ? {:filename => c} : c )
|
||||
end
|
||||
|
||||
# remove possible :null adapters
|
||||
@collection.shift if @collection.first.instance_of?(Yell::Adapters::Base)
|
||||
|
||||
new_adapter = Yell::Adapters.new(type, options, &block)
|
||||
@collection.push(new_adapter)
|
||||
|
||||
new_adapter
|
||||
end
|
||||
|
||||
def empty?
|
||||
@collection.empty?
|
||||
end
|
||||
|
||||
# @private
|
||||
def write( event )
|
||||
@collection.each { |c| c.write(event) }
|
||||
true
|
||||
end
|
||||
|
||||
# @private
|
||||
def close
|
||||
@collection.each { |c| c.close }
|
||||
end
|
||||
end
|
||||
|
||||
# holds the list of known adapters
|
||||
@adapters = {}
|
||||
|
||||
# Register your own adapter here
|
||||
#
|
||||
# @example
|
||||
# Yell::Adapters.register( :myadapter, MyAdapter )
|
||||
def self.register( name, klass )
|
||||
@adapters[name.to_sym] = klass
|
||||
end
|
||||
|
||||
# Returns an instance of the given processor type.
|
||||
#
|
||||
# @example A simple file adapter
|
||||
# Yell::Adapters.new( :file )
|
||||
def self.new( type, options = {}, &block )
|
||||
return type if type.is_a?(Yell::Adapters::Base)
|
||||
|
||||
adapter = case type
|
||||
when STDOUT then @adapters[:stdout]
|
||||
when STDERR then @adapters[:stderr]
|
||||
else @adapters[type.to_sym]
|
||||
end
|
||||
|
||||
raise AdapterNotFound.new(type) if adapter.nil?
|
||||
adapter.new(options, &block)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Base for all adapters
|
||||
require File.dirname(__FILE__) + '/adapters/base'
|
||||
|
||||
# IO based adapters
|
||||
require File.dirname(__FILE__) + '/adapters/io'
|
||||
require File.dirname(__FILE__) + '/adapters/streams'
|
||||
require File.dirname(__FILE__) + '/adapters/file'
|
||||
require File.dirname(__FILE__) + '/adapters/datefile'
|
||||
|
||||
Reference in New Issue
Block a user