module Urbivore::Interface

Constants

STANDARD_LEVELS

we expect logger to provide:

#configured_level (i.e., the default)
#configured_levels (i.e., the scale)

…if these are nil, we send system defaults from here

Public Instance Methods

add(level, message_arg = nil, options = {}) { |: message_arg| ... } click to toggle source
# File lib/urbivore/interface.rb, line 57
def add(level, message_arg = nil, options = {}, &message_block)
  level = level.is_a?(Numeric) ? available_levels.at(level) : level.to_sym
  unless current_levels.include?(level)
    return false
  end

  # support stdlib-style prognames thus:
  if options.is_a?(String) 
    progname = options
    options  = { progname: options }
  end
  
  unless options.is_a?(Hash)
    raise Urbivore::Exceptions::TypeError.new("options must be a String or a Hash")
  end

  message    = block_given? ? yield : message_arg
  options.merge!(level: level)
  append_message(generate_message_object(message, options))
end
append_message(message_object) click to toggle source
# File lib/urbivore/interface.rb, line 78
def append_message(message_object)
  # allow this object to queue the message for
  # later processing by defininng #message_collector
  if respond_to?(:message_collector)
    # check for optional live stream here
    message_collector(message_object)
  else
    logger.submit(message_object) 
  end
end
available_levels() click to toggle source
# File lib/urbivore/interface.rb, line 22
def available_levels
  logger.configured_levels || STANDARD_LEVELS
end
current_levels(requested = nil) click to toggle source
# File lib/urbivore/interface.rb, line 38
def current_levels(requested = nil)
  if requested
    requested.is_a?(Array) ? levels_by_subset(requested) : levels_by_minimum(requested)
  else
    default_levels 
  end
end
default_level() click to toggle source
# File lib/urbivore/interface.rb, line 14
def default_level
  logger.configured_level || :info
end
default_levels() click to toggle source
# File lib/urbivore/interface.rb, line 18
def default_levels
  levels_by_minimum(default_level)
end
default_logger() click to toggle source

allow config here…

# File lib/urbivore/interface.rb, line 10
def default_logger
  Urbivore::Logger
end
generate_message_object(message, options = {}) click to toggle source

this is the interface to use for building novel stuff with messages don't instantiate Message directly

# File lib/urbivore/interface.rb, line 91
def generate_message_object(message, options = {})
  # ability to specify time useful for testing?
  timestamp     = options[:timestamp]  || Time.now
  level         = options[:level]      || default_level
  progname      = options[:progname]
  data          = options[:data]
  Urbivore::Message.new(timestamp, message, level, progname, data)
end
levels_by_minimum(level) click to toggle source
# File lib/urbivore/interface.rb, line 26
def levels_by_minimum(level)
  levels = available_levels
  # memoize this locally in these methods,
  # not in the getter above---we should
  # anticipate runtime changes
  levels.include?(level) ? levels.reject { |l| levels.index(l) < levels.index(level) } : nil
end
levels_by_subset(levels) click to toggle source
# File lib/urbivore/interface.rb, line 34
def levels_by_subset(levels)
  available_levels & levels
end