class JsonCli::Command::Join

Join JSON class

Public Class Methods

new(left_io, right_io, options) click to toggle source
Calls superclass method JsonCli::Command::Base::new
# File lib/json_cli/command/join.rb, line 7
def initialize(left_io, right_io, options)
  super(options)
  @left_io = left_io
  @right_io = right_io
  @join_key = options[:join_key]
end

Public Instance Methods

inner_join() click to toggle source
# File lib/json_cli/command/join.rb, line 22
def inner_join
  right = io2hash(@right_io)
  @left_io.each do |line|
    obj = MultiJson.load(line.chomp)
    next if !obj.key?(@join_key) ||
      !right.key?((jk_val = obj[@join_key]))
    @output.puts MultiJson.dump(obj.merge(right[jk_val]))
  end
end
left_join() click to toggle source
# File lib/json_cli/command/join.rb, line 14
def left_join
  join(@left_io, @right_io)
end
right_join() click to toggle source
# File lib/json_cli/command/join.rb, line 18
def right_join
  join(@right_io, @left_io)
end

Private Instance Methods

io2hash(io) click to toggle source
# File lib/json_cli/command/join.rb, line 34
def io2hash(io)
  io.each_with_object({}) do |line, hash|
    obj = MultiJson.load(line.chomp)
    hash[obj.delete(@join_key)] = obj if obj.key?(@join_key)
  end
end
join(left_io, right_io) click to toggle source
# File lib/json_cli/command/join.rb, line 41
def join(left_io, right_io)
  right = io2hash(right_io)
  left_io.each do |line|
    obj = MultiJson.load(line.chomp)
    obj.merge!(right[obj[@join_key]] || {}) if obj.key?(@join_key)
    @output.puts MultiJson.dump(obj)
  end
end