class Idcf::Cli::Lib::Convert::Filter::FieldFilter

filter fields

Constants

MSG_NO_TARGETS

Public Instance Methods

filter(data, condition) click to toggle source

filter

@param data [Hash] @param condition [String] @return Hash

# File lib/idcf/cli/lib/convert/filter/field_filter.rb, line 16
def filter(data, condition)
  return data if condition.empty?
  cli_error(MSG_NO_DATA) unless [Array, Hash].include?(data.class)
  return extraction(data, condition) if data.class == Hash

  recursion(data, condition)
end

Protected Instance Methods

check_extraction(data, condition) click to toggle source
# File lib/idcf/cli/lib/convert/filter/field_filter.rb, line 55
def check_extraction(data, condition)
  no_targets = []
  condition.split(',').each do |key|
    next if key.empty?
    no_targets << key unless data.key?(key)
  end

  return nil if no_targets.empty?
  cli_error(format(MSG_NO_TARGETS, field: no_targets.join(',')))
end
extraction(data, condition) click to toggle source
# File lib/idcf/cli/lib/convert/filter/field_filter.rb, line 42
def extraction(data, condition)
  check_extraction(data, condition)
  result = {}
  condition.split(',').each do |key|
    next if key.blank?

    val         = data[key]
    flg         = @options[:table_flag] && [Array, Hash].include?(val.class)
    result[key] = flg ? val.to_s : val
  end
  result
end
recursion(values, condition) click to toggle source
# File lib/idcf/cli/lib/convert/filter/field_filter.rb, line 26
def recursion(values, condition)
  return values unless values.class == Array
  [].tap do |result|
    values.each do |data|
      case data
      when Array
        result << recursion(data, condition)
      when Hash
        result << extraction(data, condition)
      else
        cli_error(MSG_NO_DATA)
      end
    end
  end
end