class Seafoam::JSONWriter

Write files in a JSON format.

Public Class Methods

new(out) click to toggle source
# File lib/seafoam/json_writer.rb, line 6
def initialize(out)
  @out = out
end

Public Instance Methods

write(name, graph) click to toggle source
# File lib/seafoam/json_writer.rb, line 10
def write(name, graph)
  nodes = []
  edges = []

  graph.nodes.each_value do |node|
    nodes.push(
      id: node.id,
      props: node.props
    )

    node.outputs.each do |edge|
      edges.push(
        from: edge.from.id,
        to: edge.to.id,
        props: edge.props
      )
    end
  end

  object = {
    name: name,
    props: graph.props,
    nodes: nodes,
    edges: edges
  }

  @out.puts JSON.pretty_generate(prepare_json(object))
end

Private Instance Methods

prepare_json(object) click to toggle source
# File lib/seafoam/json_writer.rb, line 41
def prepare_json(object)
  case object
  when Float
    if object.nan?
      '[NaN]'
    else
      object
    end
  when Array
    object.map { |o| prepare_json(o) }
  when Hash
    object.transform_values { |v| prepare_json(v) }
  else
    object
  end
end