Sha256: a7497cd3b14fcae9ebd002033e72219f88f1e19ef75592cf9cafff9340004b68

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

#!/usr/bin/env ruby

require 'log_line_parser'
require 'log_line_parser/query'
require 'csv'
require 'yaml'

module LogLineParser
  module Utils
    TAB = "\t"
    SPECIAL_CHARS = {
      "\t" => '\\t',
      "\n" => '\\n',
      "\r" => '\\r',
      '\\\\' => '\\\\',
    }
    SPECIAL_CHARS_RE = Regexp.compile(SPECIAL_CHARS.keys.join("|"))

    def self.open_multiple_output_files(base_names, dir=nil, ext="log")
      logs = {}
      filepath = dir ? File.join(dir, "%s.#{ext}") : "%s.#{ext}"
      base_names.each do |base|
        logs[base] = open(format(filepath, base), "w")
      end
      yield logs
    ensure
      logs.each do |k, v|
        v.close
      end
    end

    def self.read_configs(config)
      YAML.load_stream(config).to_a
    end

    def self.load_config_file(config_file)
      open(File.expand_path(config_file)) do |f|
        read_configs(f.read)
      end
    end

    def self.to_tsv(line, escape=true)
      LogLineParser.parse(line).to_a.map do |field|
        escape ? escape_special_chars(field) : field
      end.join(TAB)
    end

    def self.to_csv(line)
      LogLineParser.parse(line).to_a.to_csv
    end

    # private class methods

    def self.escape_special_chars(field)
      field.gsub(SPECIAL_CHARS_RE) do |char|
        SPECIAL_CHARS[char]
      end
    end

    private_class_method :escape_special_chars
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
log_line_parser-0.3.0 lib/log_line_parser/utils.rb