class JYRon::CLI::CMDBinding

Public Class Methods

exit_on_failure?() click to toggle source
# File lib/jyron/cli.rb, line 77
def self.exit_on_failure?
  true
end

Public Instance Methods

mediator() click to toggle source
# File lib/jyron/cli.rb, line 27
def mediator
  components = options.to_h.keys.map(&:to_sym)
  if options[:file] then
    begin
      data = readfile(options[:file])
    rescue HelpersError => e
      cli_exit case: :not_found, more: e
    end
  elsif $stdin.ready?
    data = STDIN.read
  else
    cli_exit case: :option_needed, more: "Data from STDIN or file ( --file|-f <filename> )"
  end

  #Adapters
  adapters = []
  adapters = options[:adapters].split(',').map(&:to_sym) if options[:adapters]
  invalid_adapters = []
  adapters.each {|adapter| invalid_adapters.push adapter unless ADAPTERS.include? adapter }
  cli_exit case: :configuration_error, more: "Adapter(s) : #{invalid_adapters.join(', ')} not found" unless invalid_adapters.empty?

  data_pipe = JYRon::Mediator::new adapters: adapters

  # inputs
  inputs = components.select{|value| value =~ /^from/} & CLI_INPUTS.keys
  cli_exit case: :options_incompatibility, more: "Only one inputs type requiered" unless inputs.size < 2
  cli_exit case: :option_needed, more: "Inputs type requiered (--from-<type>)" if inputs.empty?
  input = inputs.first
  begin
    data_pipe.send(input, data)
  rescue BadInputFormat => e
    cli_exit case: :status_ko, more: "Bad Input format : #{e}"
  end

  # filters
  filters = components.select{|value| value =~ /^filter/}
  filters.each do |filter|
    meth = filter.to_s.gsub('filter-','')
    data_pipe.send meth.to_sym, options[filter]
  end

  # outputs
  outputs = components.select{|value| value =~ /^to/} & CLI_OUTPUTS.keys
  cli_exit case: :options_incompatibility, more: "Only one outputs type requiered" unless outputs.size < 2
  cli_exit case: :option_needed, more: "Outputs type requiered (--to-<type>)" if outputs.empty?
  output = outputs.first
  puts data_pipe.send output

end