Class: CommandBuilderGenerator::RubyCodeWriter

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

Constant Summary collapse

INDENT_SPACES =
2

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(stream) ⇒ RubyCodeWriter



8
9
10
11
# File 'lib/command_builder_generator/ruby_code_writer.rb', line 8

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

Instance Attribute Details

#indentObject

Returns the value of attribute indent.



6
7
8
# File 'lib/command_builder_generator/ruby_code_writer.rb', line 6

def indent
  @indent
end

Instance Method Details

#dedentObject



21
22
23
# File 'lib/command_builder_generator/ruby_code_writer.rb', line 21

def dedent
  @indent -= 1
end

#write(code) ⇒ Object



25
26
27
# File 'lib/command_builder_generator/ruby_code_writer.rb', line 25

def write(code)
  @stream.print code
end

#write_block(line) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/command_builder_generator/ruby_code_writer.rb', line 33

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

#write_class(class_name, base_class_name = nil) ⇒ Object



46
47
48
49
50
# File 'lib/command_builder_generator/ruby_code_writer.rb', line 46

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



29
30
31
# File 'lib/command_builder_generator/ruby_code_writer.rb', line 29

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

#write_method(method_name, *args) ⇒ Object



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

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

#write_module(module_name) ⇒ Object



42
43
44
# File 'lib/command_builder_generator/ruby_code_writer.rb', line 42

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