module StatesmanViz
Constants
- VERSION
Public Class Methods
generate(state_machine_class)
click to toggle source
# File lib/statesman_viz.rb, line 6 def generate(state_machine_class) unless state_machine_class.respond_to?(:states) raise ArgumentError, "State machine class must respond to `.states`" end unless state_machine_class.respond_to?(:successors) raise ArgumentError, "State machine class must respond to `.successors`" end state_graph = GraphViz.new( :G, :type => :digraph ) node_map = {} state_machine_class.states.each do |state| state = state.to_s node_map[state] = state_graph.add_nodes(state) end state_machine_class.successors.each do |from_state, to_states| from_state = from_state.to_s to_states.each do |to_state| to_state = to_state.to_s state_graph.add_edges(node_map[from_state], node_map[to_state]) end end output_file_path = "/tmp/StatesmanViz" unless Dir.exists?(output_file_path) FileUtils.mkdir_p(output_file_path) end output_file_name = File.join(output_file_path, "#{state_machine_class.to_s}.png") state_graph.output(:png => output_file_name) end