Class: Fiona7::Builder::BatchWidgetWriter

Inherits:
Object
  • Object
show all
Defined in:
lib/fiona7/builder/batch_widget_writer.rb

Defined Under Namespace

Classes: WidgetGraph, WidgetNode

Instance Method Summary collapse

Constructor Details

#initialize(obj, id_map, widget_pool, path_map) ⇒ BatchWidgetWriter

Returns a new instance of BatchWidgetWriter.



68
69
70
71
# File 'lib/fiona7/builder/batch_widget_writer.rb', line 68

def initialize(obj, id_map, widget_pool, path_map)
  @obj, @id_map, @widget_pool, @path_map = obj, id_map, widget_pool, path_map
  @pool_changed = false
end

Instance Method Details

#path_mapObject



106
107
108
# File 'lib/fiona7/builder/batch_widget_writer.rb', line 106

def path_map
  @path_map
end

#pool_changed?Boolean

Returns:

  • (Boolean)


102
103
104
# File 'lib/fiona7/builder/batch_widget_writer.rb', line 102

def pool_changed?
  !!@pool_changed
end

#writeObject



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/fiona7/builder/batch_widget_writer.rb', line 73

def write
  widget_nodes = @widget_pool.map do |widget_id, values|
    obj_id = @id_map[widget_id]

    if values.nil?
      # TODO: this widget can be GC-ed
      @pool_changed = true
      @path_map.delete(widget_id)
      next
    end

    if obj_id
      builder = WidgetUpdater.new(@obj, widget_id, values.merge(_id: obj_id), @path_map)
    else
      builder = WidgetBuilder.new(@obj, widget_id, values, @path_map)
      @pool_changed = true
    end

    WidgetNode.new(widget_id, values, builder)
  end.compact

  widget_graph = WidgetGraph.new(widget_nodes)

  widget_graph.tsort.each do |widget_node|
    widget_node.builder.build
    @path_map[widget_node.id] = widget_node.builder.path
  end
end