Class: CommandBuilder::CodeGenerator::RubyCodeWriter

Inherits:
Object
  • Object
show all
Defined in:
lib/command_builder/code_generator/ruby_code_writer.rb

Constant Summary collapse

INDENT_SPACES =
2

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stream) ⇒ RubyCodeWriter

Returns a new instance of RubyCodeWriter.



9
10
11
12
# File 'lib/command_builder/code_generator/ruby_code_writer.rb', line 9

def initialize(stream)
  @stream = stream
  @indent = 0
end

Instance Attribute Details

#indentObject

Returns the value of attribute indent.



7
8
9
# File 'lib/command_builder/code_generator/ruby_code_writer.rb', line 7

def indent
  @indent
end

Instance Method Details

#dedentObject



22
23
24
# File 'lib/command_builder/code_generator/ruby_code_writer.rb', line 22

def dedent
  @indent -= 1
end

#write(code) ⇒ Object



26
27
28
# File 'lib/command_builder/code_generator/ruby_code_writer.rb', line 26

def write(code)
  @stream.print code
end

#write_block(line) ⇒ Object



34
35
36
37
38
39
40
41
# File 'lib/command_builder/code_generator/ruby_code_writer.rb', line 34

def write_block(line)
  write_line line
  indent
  yield
  dedent
  write_line 'end'
  line
end

#write_class(class_name, base_class_name = nil) ⇒ Object



47
48
49
50
51
# File 'lib/command_builder/code_generator/ruby_code_writer.rb', line 47

def write_class(class_name, base_class_name=nil)
  line = "class #{class_name}"
  line << " < #{base_class_name}" if base_class_name
  write_block(line) { yield }
end

#write_line(line = '') ⇒ Object



30
31
32
# File 'lib/command_builder/code_generator/ruby_code_writer.rb', line 30

def write_line(line='')
  @stream.puts line.rjust(line.length + @indent * INDENT_SPACES, ' ')
end

#write_method(method_name, *args) ⇒ Object



53
54
55
56
57
58
# File 'lib/command_builder/code_generator/ruby_code_writer.rb', line 53

def write_method(method_name, *args)
  args = [args].flatten
  line = "def #{method_name}"
  line << "(#{args.join ', '})" unless args.empty?
  write_block(line) { yield }
end

#write_module(module_name) ⇒ Object



43
44
45
# File 'lib/command_builder/code_generator/ruby_code_writer.rb', line 43

def write_module(module_name)
  write_block("module #{module_name}") { yield }
end