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



87
88
89
# File 'lib/brotorift.rb', line 87

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

#generate_all_code(runtime) ⇒ Object



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

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

  generate_sequence_diagrams runtime
end

#generate_code(runtime, node, side) ⇒ Object



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

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



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

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) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
# File 'lib/brotorift.rb', line 91

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