Class: Docker2plantuml::DockerJsonParser

Inherits:
Object
  • Object
show all
Defined in:
lib/docker2plantuml/parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(json) ⇒ DockerJsonParser

Returns a new instance of DockerJsonParser.



5
6
7
# File 'lib/docker2plantuml/parser.rb', line 5

def initialize(json)
  @json_data = json
end

Instance Method Details

#create_port_info(ports) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/docker2plantuml/parser.rb', line 55

def create_port_info(ports)
  ret = ports
        .reject { |_container_port, host_port| host_port.nil? }
        .map do |c_port, h_port|
          h_port.map { |val| Docker2plantuml::PortInfo.new(c_port, val['HostPort']) }
        end
  ret = ret.inject([]) { |list, p| list + p }
  ret.concat(
    ports.select { |_container_port, host_port| host_port.nil? }
         .map { |container_port, _host_port| Docker2plantuml::PortInfo.new(container_port) }
  )
end

#parseObject



9
10
11
12
13
14
15
# File 'lib/docker2plantuml/parser.rb', line 9

def parse
  @json_data.map do |json|
    container = parse_container(json)
    parse_network_and_port(json, container)
    container
  end
end

#parse_container(json) ⇒ Object



17
18
19
20
21
22
# File 'lib/docker2plantuml/parser.rb', line 17

def parse_container(json)
  Docker2plantuml::DockerContainer.new(
    parse_container_name(json),
    parse_container_status(json)
  )
end

#parse_container_name(json) ⇒ Object



24
25
26
27
# File 'lib/docker2plantuml/parser.rb', line 24

def parse_container_name(json)
  name = json['Name']
  name.slice(1..-1) if name.start_with?('/')
end

#parse_container_status(json) ⇒ Object



29
30
31
# File 'lib/docker2plantuml/parser.rb', line 29

def parse_container_status(json)
  json['State']['Status']
end

#parse_network_and_port(json, container) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/docker2plantuml/parser.rb', line 33

def parse_network_and_port(json, container)
  networks = parse_networks(json)
  return unless networks.is_a? String

  container.network_setting = Docker2plantuml::NetworkSetting.new(networks)
  container.port_info_list.concat(parse_ports(json))
end

#parse_network_settings(json) ⇒ Object



46
47
48
# File 'lib/docker2plantuml/parser.rb', line 46

def parse_network_settings(json)
  json['NetworkSettings']
end

#parse_networks(json) ⇒ Object



41
42
43
44
# File 'lib/docker2plantuml/parser.rb', line 41

def parse_networks(json)
  network_settings = parse_network_settings(json)
  network_settings['Networks'].map { |k, _v| k }.first
end

#parse_ports(json) ⇒ Object



50
51
52
53
# File 'lib/docker2plantuml/parser.rb', line 50

def parse_ports(json)
  network_settings = parse_network_settings(json)
  create_port_info(network_settings['Ports'])
end