Class: JsonCli::JoinJson

Inherits:
Object
  • Object
show all
Defined in:
lib/json_cli/join.rb

Overview

Join JSON class

Class Method Summary collapse

Class Method Details

.inner_join(left_io, right_io, join_key, out = STDOUT) ⇒ Object



21
22
23
24
25
26
27
28
29
# File 'lib/json_cli/join.rb', line 21

def self.inner_join(left_io, right_io, join_key, out = STDOUT)
  right = io2hash(right_io, join_key)
  left_io.each do |l|
    j = MultiJson.load(l.chomp)
    next if !j.key?(join_key) || !right.key?(j[join_key])
    out.puts MultiJson.dump(j.merge(right[j[join_key]]))
  end
  out.flush
end

.io2hash(io, key) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/json_cli/join.rb', line 31

def self.io2hash(io, key)
  hash = {}
  io.each do |l|
    j = MultiJson.load(l.chomp)
    next unless j.key?(key)
    hash[j[key]] = j.select { |k, _| k != key }
  end
  hash
end

.left_join(left_io, right_io, join_key, out = STDOUT) ⇒ Object



7
8
9
10
11
12
13
14
15
# File 'lib/json_cli/join.rb', line 7

def self.left_join(left_io, right_io, join_key, out = STDOUT)
  right = io2hash(right_io, join_key)
  left_io.each do |l|
    j = MultiJson.load(l.chomp)
    j.merge!(right[j[join_key]] || {}) if j.key?(join_key)
    out.puts MultiJson.dump(j)
  end
  out.flush
end

.right_join(left_io, right_io, join_key, out = STDOUT) ⇒ Object



17
18
19
# File 'lib/json_cli/join.rb', line 17

def self.right_join(left_io, right_io, join_key, out = STDOUT)
  left_join(right_io, left_io, join_key, out)
end