class FlatKit::Command::Sort
Attributes
compare_keys[R]
reader[R]
sort[R]
Public Class Methods
description()
click to toggle source
# File lib/flat_kit/command/sort.rb, line 10 def self.description "Sort a given file by a set of fields." end
name()
click to toggle source
# File lib/flat_kit/command/sort.rb, line 6 def self.name "sort" end
parser()
click to toggle source
# File lib/flat_kit/command/sort.rb, line 14 def self.parser ::Optimist::Parser.new do banner "#{Sort.description}" banner "" banner <<~BANNER Given an input file and a sort key, order the records in that file by that key. If no input file is given the stdin is assumed. If no output file is given then stdout is assumed. The --key parameter is required, and it must be a comma separated list of field nams on the input on which to use as the sort key for the merge process. There must also be only 1 input files. The flatfile type(s) will be automatically determined by the file name. If the output is not a file, but to stdout then the output type will be the same as the first input file, or it can be specified as a commandline switch. BANNER banner <<~USAGE Usage: fk sort --key surname,given_name file.csv > sorted.csv fk sort --key surname,given_name --output-format json file.csv > sorted.json fk sort --key field1,field2 --output-format json input.csv | gzip -c > sorted.json.gz fk sort --key field1 file.json.gz -o sorted.json.gz gunzip -c file.json.gz | fk sort --key field1 --input-format json --output-format json > gzip -c sorted.json.gz USAGE banner <<~OPTIONS Options: OPTIONS opt :output, "Send the output to the given path instead of standard out.", default: "<stdout>" opt :input_format, "Input format, csv or json", default: "auto", short: :none opt :output_format, "Output format, csv or json", default: "auto", short: :none opt :key, "The comma separted list of field(s) to use for sorting the input", required: true, type: :string end end
Public Instance Methods
call()
click to toggle source
# File lib/flat_kit/command/sort.rb, line 83 def call sort.call end
parse()
click to toggle source
# File lib/flat_kit/command/sort.rb, line 65 def parse parser = self.class.parser ::Optimist::with_standard_exception_handling(parser) do begin @opts = parser.parse(argv) @compare_keys = CSV.parse_line(opts[:key]) paths = parser.leftovers raise ::Optimist::CommandlineError, "1 and only 1 input file is allowed" if paths.size > 1 path = paths.first || "-" # default to stdin @sort = ::FlatKit::Sort.new(input: path, input_fallback: opts[:input_format], output: opts[:output], output_fallback: opts[:output_format], compare_fields: @compare_keys) rescue ::FlatKit::Error => e raise ::Optimist::CommandlineError, e.message end end end