class Franz::InputConfig

Attributes

configs[R]

Public Class Methods

new(configs, logger=nil) click to toggle source
# File lib/franz/input_config.rb, line 5
def initialize configs, logger=nil
  @logger  = logger || Logger.new(STDOUT)
  @configs = configs
  @configs.map! do |c|
    normalized_config c
  end
  @types = Hash.new
  @drop  = Hash.new
  @keep  = Hash.new
end

Public Instance Methods

config(path) click to toggle source
# File lib/franz/input_config.rb, line 16
def config path
  t = type(path)
  configs.select { |c| c[:type] == t }.shift
end
drop?(path, message) click to toggle source
# File lib/franz/input_config.rb, line 34
def drop? path, message
  patterns = drops_for(path)
  return true if patterns.nil?
  return false if patterns.empty?
  apply_patterns patterns, message
end
json?(path) click to toggle source
# File lib/franz/input_config.rb, line 21
def json? path
  config(path)[:json?]
rescue
  false
end
keep?(path, message) click to toggle source
# File lib/franz/input_config.rb, line 27
def keep? path, message
  patterns = keeps_for(path)
  return true if patterns.nil?
  return true if patterns.empty?
  apply_patterns patterns, message
end
type(path) click to toggle source
# File lib/franz/input_config.rb, line 41
def type path
  @types.fetch path
rescue KeyError
  configs.each do |config|
    type = config[:type] if config[:includes].any? { |glob|
      included = File.fnmatch? glob, path, File::FNM_EXTGLOB
      excludes = !config[:excludes].nil?
      excluded = excludes && config[:excludes].any? { |exlude|
        File.fnmatch? exlude, File::basename(path), File::FNM_EXTGLOB
      }
      included && !excluded
    }
    unless type.nil?
      @types[path] = type
      return type
    end
  end
  log.warn \
    event: 'type unknown',
    file: path
  @types[path] = nil
end

Private Instance Methods

apply_patterns(patterns, message) click to toggle source
# File lib/franz/input_config.rb, line 82
def apply_patterns patterns, message
  return true if patterns.nil?
  patterns.each do |pattern|
    return true if message =~ pattern
  end
  return false
end
drops_for(path) click to toggle source
# File lib/franz/input_config.rb, line 90
def drops_for path
  patterns_for path, :drop, @drop
end
keeps_for(path) click to toggle source
# File lib/franz/input_config.rb, line 94
def keeps_for path
  patterns_for path, :keep, @keep
end
log() click to toggle source
# File lib/franz/input_config.rb, line 66
def log ; @logger end
normalized_config(config) click to toggle source
# File lib/franz/input_config.rb, line 68
def normalized_config config
  config[:keep] = realize_regexps config[:keep]
  config[:drop] = realize_regexps config[:drop]
  config
end
patterns_for(path, kind, memo) click to toggle source
# File lib/franz/input_config.rb, line 98
def patterns_for path, kind, memo
  memo.fetch path
rescue KeyError
  c = config(path)
  k = c ? c[kind] : []
  memo[path] = k
end
realize_regexps(ps) click to toggle source
# File lib/franz/input_config.rb, line 74
def realize_regexps ps
  return [] if ps.nil?
  ps = ps.is_a?(Array) ? ps : [ ps ]
  ps.map do |pattern|
    Regexp.new pattern
  end
end