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