Class: Magicfile

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

Instance Method Summary collapse

Constructor Details

#initialize(lines = [], current_line_index = -1,, current_line_space_num = -2)) ⇒ Magicfile

Returns a new instance of Magicfile.



16
17
18
19
20
# File 'lib/magicfile.rb', line 16

def initialize(lines=[], current_line_index=-1, current_line_space_num=-2)
  @lines = lines
  @current_line_index = current_line_index
  @current_line_space_num = current_line_space_num
end

Instance Method Details

#append_after_current(line, enable_move_down = true, spaces = 2) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/magicfile.rb', line 55

def append_after_current(line, enable_move_down=true, spaces=2)


  line.space_num = @current_line_space_num + spaces
  @lines.insert(@current_line_index + 1, line)


  if enable_move_down
    @current_line_space_num = line.space_num
    @current_line_index += 1
  end

end

#append_class(name, parent_class_name = nil) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
# File 'lib/magicfile.rb', line 22

def append_class(name, parent_class_name=nil)

  if parent_class_name
    class_start_line = MagicLine.new("class #{name.camelize} < #{parent_class_name}")
  else
    class_start_line = MagicLine.new("class #{name.camelize}")
  end

  append_after_current(class_start_line, true, 2)
  append_after_current(MagicLine.new("end"), false, 0)
end

#append_module(name) ⇒ Object



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

def append_module(name)
  module_start_line = MagicLine.new("module #{name.camelize}")
  module_end_line = MagicLine.new("end")

  append_after_current(module_start_line, true, 2)
  append_after_current(module_end_line, false, 0)
end

#append_modules(names) ⇒ Object



42
43
44
45
46
# File 'lib/magicfile.rb', line 42

def append_modules(names)
  names.each do |name|
    append_module(name)
  end
end

#append_string_lines(line_contents) ⇒ Object



48
49
50
51
52
53
# File 'lib/magicfile.rb', line 48

def append_string_lines(line_contents)
  space_num = @current_line_space_num + 2
  content = line_contents.join("\n" + " " * space_num)
  line = MagicLine.new(content, space_num)
  @lines.insert(@current_line_index + 1, line)
end

#to_file(name) ⇒ Object



69
70
71
72
# File 'lib/magicfile.rb', line 69

def to_file(name)
  infos = @lines.map { |line| " " * line.instance_variable_get("@space_num") + line.instance_variable_get("@content") }
  File.open(name, 'w') { |file| file.write(infos.join("\n")) }
end