class Bismas::CLI::Filter

Constants

TYPES

Public Class Methods

defaults() click to toggle source
Calls superclass method
# File lib/bismas/cli/filter.rb, line 35
def self.defaults
  super.merge(
    type:       TYPES.first,
    key_format: '%s'
  )
end

Public Instance Methods

run(arguments) click to toggle source
# File lib/bismas/cli/filter.rb, line 42
def run(arguments)
  quit unless arguments.empty?

  klass = case type = options[:type]
    when 'dat'
      Writer
    when 'dbm'
      require_gem 'midos'
      options[:output_encoding] ||= Midos::DEFAULT_ENCODING
      Midos::Writer
    else
      quit "Unsupported type: #{type}. Must be one of: #{TYPES.join(', ')}."
  end

  Bismas.filter(klass, options, &method(:quit))
end

Private Instance Methods

opts(opts) click to toggle source
# File lib/bismas/cli/filter.rb, line 61
def opts(opts)
  opts.summary_width = 34

  opts.option(:input__FILE, 'Path to input file [Default: STDIN]')

  opts.option(:output__FILE, 'Path to output file [Default: STDOUT]')

  opts.separator
  opts.separator 'Input options:'

  opts.option(:input_encoding__ENCODING, :N, "Input encoding [Default: #{DEFAULT_ENCODING}]")

  opts.separator

  opts.option(:input_key__KEY, :K, 'ID key of input file')

  opts.separator

  opts.switch(:strict, :S, 'Turn parse warnings into errors')

  opts.switch(:silent, :T, 'Silence parse warnings')

  opts.separator

  opts.switch(:legacy, :L, 'Use the legacy parser')

  opts.separator
  opts.separator 'Output options:'

  opts.option(:type__TYPE, "Output file type (#{TYPES.join(', ')}) [Default: #{TYPES.first}]")

  opts.separator

  opts.option(:output_encoding__ENCODING, :n, 'Output encoding [Default: depends on TYPE]')

  opts.separator

  opts.option(:output_key__KEY, :k, 'ID key of output file')
  opts.option(:key_format__KEY_FORMAT, :f, 'Key format [Default: %s]')

  opts.separator

  opts.option(:mapping__FILE_OR_YAML, 'Path to mapping file or YAML string')

  opts.separator

  opts.switch(:sort, 'Sort each record')

  opts.separator

  opts.option(:execute__FILE_OR_CODE, 'Code to execute for each _record_ before mapping') { |e|
    (options[:execute] ||= []) << e
  }

  opts.option(:execute_mapped__FILE_OR_CODE, :E, 'Code to execute for each _record_ after mapping') { |e|
    (options[:execute_mapped] ||= []) << e
  }

  opts.separator

  opts.option(:padding_length__LENGTH, :P, Integer, "Length of padding for TYPE=dat [Default: #{DEFAULT_PADDING_LENGTH}]")

  opts.separator
  opts.separator 'Common options:'

  opts.option(:category_length__LENGTH, :C, Integer, "Length of category for TYPE=dat [Default: #{DEFAULT_CATEGORY_LENGTH}]")
end