class MikadoGraph::Generator

Attributes

graph[R]
prerequisites[R]

Public Class Methods

define(&block) click to toggle source
# File lib/mikado_graph/generator.rb, line 7
def self.define(&block)
  generator_instance = new
  generator_instance.prerequisites.instance_eval(&block)
  generator_instance
end
new() click to toggle source
# File lib/mikado_graph/generator.rb, line 22
def initialize
  @prerequisites = Prerequisites.new
  initialize_graph
end

Public Instance Methods

generate(options = {}) click to toggle source
# File lib/mikado_graph/generator.rb, line 13
def generate(options = {})
  add_states_to_graph(prerequisites.states)
  arrange_graph_direction(options)
  output_options = build_output_options(options)
  graph.output(output_options)
end

Private Instance Methods

add_prerequisite_dependency(state, dependent_state) click to toggle source
# File lib/mikado_graph/generator.rb, line 43
def add_prerequisite_dependency(state, dependent_state)
  state_node = graph.add_nodes(state.name)
  dependent_state_node = graph.add_nodes(dependent_state.name)
  graph.add_edges(state_node, dependent_state_node)
end
add_state_prerequisites(state) click to toggle source
# File lib/mikado_graph/generator.rb, line 36
def add_state_prerequisites(state)
  state.prerequisite_states.each do |prerequisite_state|
    add_prerequisite_dependency(state, prerequisite_state)
    add_state_prerequisites(prerequisite_state)
  end
end
add_states_to_graph(states) click to toggle source
# File lib/mikado_graph/generator.rb, line 32
def add_states_to_graph(states)
  states.each { |state| add_state_prerequisites(state) }
end
arrange_graph_direction(options) click to toggle source
# File lib/mikado_graph/generator.rb, line 49
def arrange_graph_direction(options)
  direction = options.fetch(:direction, :vertical)
  graph[:rankdir] = "LR" if direction == :horizontal
end
build_output_options(options) click to toggle source
# File lib/mikado_graph/generator.rb, line 54
def build_output_options(options)
  output_options = {}
  output_options[options.fetch(:format, "dot")] = options.fetch(:path, nil)
  output_options
end
initialize_graph() click to toggle source
# File lib/mikado_graph/generator.rb, line 27
def initialize_graph
  @graph = GraphViz.new(nil)
  @graph.node[:shape] = "box"
end