Class: Brotorift

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

Instance Method Summary collapse

Constructor Details

#initializeBrotorift

Returns a new instance of Brotorift.



27
28
29
# File 'lib/brotorift.rb', line 27

def initialize
  @generated_nodes = {}
end

Instance Method Details

#find_generator(language, side) ⇒ Object



99
100
101
# File 'lib/brotorift.rb', line 99

def find_generator language, side
  Generator.generators.find { |g| g.language == language and g.side == side }
end

#generate_all_code(runtime, generate_diagram) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/brotorift.rb', line 48

def generate_all_code runtime, generate_diagram
  runtime.directions.each do |direction|
    generate_code runtime, direction.client, :client
    generate_code runtime, direction.server, :server
    generate_bot_code runtime, direction.client
  end

  generate_sequence_diagrams runtime if generate_diagram
end

#generate_bot_code(runtime, node) ⇒ Object



88
89
90
91
92
93
94
95
96
97
# File 'lib/brotorift.rb', line 88

def generate_bot_code runtime, node
  generator = find_generator 'bot', :client
  if generator == nil
    puts "Generator for bot is not found.".red
    return
  end

  puts "Generating bot code for node '#{node.name}'..."
  generator.generate node, runtime
end

#generate_code(runtime, node, side) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/brotorift.rb', line 69

def generate_code runtime, node, side
  old_sides = @generated_nodes[node.name]
  return if old_sides != nil and old_sides.include? side

  generator = find_generator node.language, side
  if generator == nil
    puts "Generator for language '#{node.language}' and side #{side} is not found.".red
    return
  end

  puts "Generating #{node.language} #{side} code for node '#{node.name}'..."
  generator.generate node, runtime
  if old_sides != nil
    old_sides.push side
  else
    @generated_nodes[node.name] = [side]
  end
end

#generate_sequence_diagrams(runtime) ⇒ Object



59
60
61
62
63
64
65
66
# File 'lib/brotorift.rb', line 59

def generate_sequence_diagrams runtime
  begin
    Dir.mkdir 'docs'
    Dir.mkdir 'docs/diagrams'
  rescue
  end
  SequenceDiagramGenerator.generate runtime
end

#load_generatorsObject



31
32
33
34
35
36
37
# File 'lib/brotorift.rb', line 31

def load_generators
  root_folder = File.expand_path File.dirname __FILE__
  generators_pattern = root_folder + '/generators/*.rb'
  Dir.glob generators_pattern do |generator_file|
    require generator_file
  end
end


40
41
42
43
44
45
# File 'lib/brotorift.rb', line 40

def print_compile_errors errors
  errors.each do |e|
    puts e
  end
  puts 'Your brotorift files contain errors. Please fix them before go on.'.red
end

#run(file_name, generate_diagram) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
# File 'lib/brotorift.rb', line 103

def run file_name, generate_diagram
  load_generators
  compiler = Compiler.new
  compiler.compile file_name, true
  if compiler.errors.length > 0
    print_compile_errors compiler.errors
    exit 1
  else
    generate_all_code compiler.runtime, generate_diagram
  end
end