Sha256: 720bd102c7c67d28ab4e4fec7b50101250e4c032c0867d8a0a05b94cc065404b

Contents?: true

Size: 1.75 KB

Versions: 1

Compression:

Stored size: 1.75 KB

Contents

# namespace
module TeeLogger
  # util
  module Utils
    # LOGDEV_NAMES not incuded error
    class IncorrectNameError < StandardError; end
    #
    class IncorrectOptionError < StandardError; end
    # using private method #parse_to_hash
    ParsedOption = Struct.new(:logdev_name, :indent_level)
    # defined log devices names
    LOGDEV_NAMES = [:console, :logfile]
    # defined reverse names
    LOGDEV_REVERSE = { console: :logfile, logfile: :console }

    private

    def extract_options(options)
      options.each_with_object(ParsedOption.new(nil, 0)) do |val, obj|
        case val
        when Symbol then obj.logdev_name = name_reverse(val)
        when Fixnum then obj.indent_level = val
        else incorrect_option_error(val)
        end
      end
    end

    def indentation(progname, block, indent_level)
      if block.nil?
        progname = "#{' ' * indent_level}#{formatting(progname)}"
      else
        result = block.call
        block  = proc { "#{' ' * indent_level}#{formatting(result)}" }
      end
      [progname, block]
    end

    def formatting(val)
      case val
      when Symbol then ":#{val}"
      when nil    then 'nil'
      else val
      end
    end

    def name_reverse(val)
      correct_name?(val)
      LOGDEV_REVERSE[val]
    end

    def correct_name?(name)
      LOGDEV_NAMES.include?(name) ? true : incorrect_name_error(name)
    end

    def incorrect_name_error(name)
      fail IncorrectNameError,
           "logdev_name is :console or :logfile. logdev_name=[:#{name}]"
    end

    def incorrect_option_error(val)
      fail IncorrectOptionError,
           "option params is Symbol or Fixnum. class=[#{val.class}]"
    end

    def logdev_instance(logdev_name)
      instance_variable_get("@#{logdev_name}")
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tee_logger-3.0.1 lib/tee_logger/utils.rb