lib/ztk/base.rb in ztk-1.0.0.rc.0 vs lib/ztk/base.rb in ztk-1.0.0.rc.1
- old
+ new
@@ -20,48 +20,41 @@
require "ostruct"
module ZTK
# ZTK::Base Error Class
+ #
+ # @author Zachary Patten <zachary@jovelabs.net>
class BaseError < Error; end
# ZTK Base Class
#
# This is the base class inherited by most of the other classes in this
# library. It provides a standard set of features to control STDOUT, STDERR
# and STDIN, a configuration mechanism and logging mechanism.
#
# You should never interact with this class directly; you should inherit it
# and extend functionality as appropriate.
+ #
+ # @author Zachary Patten <zachary@jovelabs.net>
class Base
class << self
# @param [Hash] configuration Configuration options hash.
- # @option config [IO] :stdout Instance of IO to be used for STDOUT.
- # @option config [IO] :stderr Instance of IO to be used for STDERR.
- # @option config [IO] :stdin Instance of IO to be used for STDIN.
- # @option config [Logger] :logger Instance of Logger to be used for logging.
+ # @option config [ZTK::UI] :ui Instance of ZTK:UI to be used for
+ # console IO and logging.
def build_config(configuration={})
if configuration.is_a?(OpenStruct)
configuration = configuration.send(:table)
end
- rails_logger = Rails.logger if defined?(Rails)
-
+ # FIXME: this needs to be refactored into the UI class
config = OpenStruct.new({
- :stdout => $stdout,
- :stderr => $stderr,
- :stdin => $stdin,
- :logger => ($logger || rails_logger || ZTK::Logger.new("/dev/null"))
+ :ui => ::ZTK::UI.new
}.merge(configuration))
- (config.stdout && config.stdout.respond_to?(:sync=)) and config.stdout.sync = true
- (config.stderr && config.stderr.respond_to?(:sync=)) and config.stderr.sync = true
- (config.stdin && config.stdin.respond_to?(:sync=)) and config.stdin.sync = true
- (config.logger && config.logger.respond_to?(:sync=)) and config.logger.sync = true
-
config
end
# Removes all key-value pairs which are not core so values do not bleed
# into classes they are not meant for.
@@ -131,11 +124,11 @@
# @param [Exception] exception The exception class to raise.
# @param [String] message The message to display with the exception.
# @param [Integer] shift (2) How many places to shift the caller stack in
# the log statement.
def log_and_raise(exception, message, shift=2)
- Base.log_and_raise(config.logger, exception, message, shift)
+ Base.log_and_raise(config.ui.logger, exception, message, shift)
end
# Direct logging method.
#
# This method provides direct writing of data to the current log device.
@@ -147,20 +140,20 @@
#
# @param [Symbol] log_level This should be any one of [:debug, :info, :warn, :error, :fatal].
# @yield No value is passed to the block.
# @yieldreturn [String] The message to log.
def direct_log(log_level, &blocK)
- @config.logger.nil? and raise BaseError, "You must supply a logger for direct logging support!"
+ @config.ui.logger.nil? and raise BaseError, "You must supply a logger for direct logging support!"
if !block_given?
log_and_raise(BaseError, "You must supply a block to the log method!")
- elsif (@config.logger.level <= ZTK::Logger.const_get(log_level.to_s.upcase))
- if @config.logger.respond_to?(:logdev)
- @config.logger.logdev.write(yield)
- @config.logger.logdev.respond_to?(:flush) and @config.logger.logdev.flush
+ elsif (@config.ui.logger.level <= ZTK::Logger.const_get(log_level.to_s.upcase))
+ if @config.ui.logger.respond_to?(:logdev)
+ @config.ui.logger.logdev.write(yield)
+ @config.ui.logger.logdev.respond_to?(:flush) and @config.ui.logger.logdev.flush
else
- @config.logger.instance_variable_get(:@logdev).instance_variable_get(:@dev).write(yield)
- @config.logger.instance_variable_get(:@logdev).instance_variable_get(:@dev).respond_to?(:flush) and @config.logger.instance_variable_get(:@logdev).instance_variable_get(:@dev).flush
+ @config.ui.logger.instance_variable_get(:@logdev).instance_variable_get(:@dev).write(yield)
+ @config.ui.logger.instance_variable_get(:@logdev).instance_variable_get(:@dev).respond_to?(:flush) and @config.ui.logger.instance_variable_get(:@logdev).instance_variable_get(:@dev).flush
end
end
end
end