Class: JsonCanvas::Canvas

Inherits:
Object
  • Object
show all
Defined in:
lib/json_canvas/canvas.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(nodes = [], edges = []) ⇒ Canvas

Returns a new instance of Canvas.



31
32
33
34
# File 'lib/json_canvas/canvas.rb', line 31

def initialize(nodes = [], edges = [])
  @nodes = nodes
  @edges = edges
end

Instance Attribute Details

#edgesObject (readonly)

Returns the value of attribute edges.



9
10
11
# File 'lib/json_canvas/canvas.rb', line 9

def edges
  @edges
end

#nodesObject (readonly)

Returns the value of attribute nodes.



9
10
11
# File 'lib/json_canvas/canvas.rb', line 9

def nodes
  @nodes
end

Class Method Details

.parse(json) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/json_canvas/canvas.rb', line 11

def self.parse(json)
  obj = JSON.parse(json)
  nodes = obj["nodes"].map do |x|
    case x["type"]
    when "text"
      TextNode.new(**x.transform_keys(&:to_sym))
    when "file"
      FileNode.new(**x.transform_keys(&:to_sym))
    when "link"
      LinkNode.new(**x.transform_keys(&:to_sym))
    when "group"
      GroupNode.new(**x.transform_keys(&:to_sym))
    else
      raise
    end
  end
  edges = obj["edges"].map { |x| Edge.new(**x.transform_keys(&:to_sym)) }
  Canvas.new(nodes, edges)
end

Instance Method Details

#add_edgeObject



60
61
62
63
64
# File 'lib/json_canvas/canvas.rb', line 60

def add_edge(**)
  edge = Edge.new(**)
  edges.push(edge)
  edge
end

#add_fileObject



42
43
44
45
46
# File 'lib/json_canvas/canvas.rb', line 42

def add_file(**)
  node = FileNode.new(**)
  nodes.push(node)
  node
end

#add_groupObject



54
55
56
57
58
# File 'lib/json_canvas/canvas.rb', line 54

def add_group(**)
  node = GroupNode.new(**)
  nodes.push(node)
  node
end


48
49
50
51
52
# File 'lib/json_canvas/canvas.rb', line 48

def add_link(**)
  node = LinkNode.new(**)
  nodes.push(node)
  node
end

#add_textObject



36
37
38
39
40
# File 'lib/json_canvas/canvas.rb', line 36

def add_text(**)
  node = TextNode.new(**)
  nodes.push(node)
  node
end

#save(filename) ⇒ Object



73
74
75
# File 'lib/json_canvas/canvas.rb', line 73

def save(filename)
  File.write(filename, to_json)
end

#to_jsonObject



66
67
68
69
70
71
# File 'lib/json_canvas/canvas.rb', line 66

def to_json
  JSON.generate({
    nodes: nodes.map { |x| x.to_hash },
    edges: edges.map { |x| x.to_hash }
  })
end