class JsonCli::Command::Unwind

Unwind JSON class

Public Class Methods

new(io, options) click to toggle source
Calls superclass method JsonCli::Command::Base::new
# File lib/json_cli/command/unwind.rb, line 7
def initialize(io, options)
  super(options)
  @io = io
  @unwind_key = options[:unwind_key]
  @flatten = options[:flatten]
  @key_label = options[:key_label] || 'key'
  @value_label = options[:value_label] || 'value'
end

Public Instance Methods

unwind_array() click to toggle source
# File lib/json_cli/command/unwind.rb, line 16
def unwind_array
  @io.each do |line|
    obj = MultiJson.load(line.chomp)
    if !obj.key?(@unwind_key) || !obj[@unwind_key].is_a?(Array)
      @output.puts MultiJson.dump(obj)
    else
      unwind_array_obj(obj)
    end
  end
end
unwind_hash() click to toggle source
# File lib/json_cli/command/unwind.rb, line 27
def unwind_hash
  @io.each do |line|
    obj = MultiJson.load(line.chomp)
    if !obj.key?(@unwind_key) || !obj[@unwind_key].is_a?(Hash)
      @output.puts MultiJson.dump(obj)
    elsif @flatten
      unwind_hash_obj_flatten(obj)
    else
      unwind_hash_obj(obj)
    end
  end
end

Private Instance Methods

unwind_array_obj(obj) click to toggle source
# File lib/json_cli/command/unwind.rb, line 42
def unwind_array_obj(obj)
  obj[@unwind_key].each do |val|
    @output.puts MultiJson.dump(obj.merge(@unwind_key => val))
  end
end
unwind_hash_obj(obj) click to toggle source
# File lib/json_cli/command/unwind.rb, line 48
def unwind_hash_obj(obj)
  obj[@unwind_key].each do |key, val|
    jj = obj.merge(@unwind_key => { key => val })
    @output.puts MultiJson.dump(jj)
  end
end
unwind_hash_obj_flatten(obj) click to toggle source
# File lib/json_cli/command/unwind.rb, line 55
def unwind_hash_obj_flatten(obj)
  base = obj.select { |key, _| key != @unwind_key }
  obj[@unwind_key].each do |key, val|
    jj = base.merge(
      @key_label => key,
      @value_label => val
    )
    @output.puts MultiJson.dump(jj)
  end
end