Class: Rundoc::CodeCommand::FileCommand::Append
Constant Summary
NEWLINE
Instance Attribute Summary
#command, #contents, #keyword, #original_args, #render_command, #render_result
Instance Method Summary
collapse
#filename, #mkdir_p
#hidden?, #not_hidden?, #push
Constructor Details
#initialize(filename) ⇒ Append
Returns a new instance of Append.
5
6
7
8
9
10
|
# File 'lib/rundoc/code_command/file_command/append.rb', line 5
def initialize(filename)
@filename, line = filename.split("#")
@line_number = if line
Integer(line)
end
end
|
Instance Method Details
#call(env = {}) ⇒ Object
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
# File 'lib/rundoc/code_command/file_command/append.rb', line 58
def call(env = {})
mkdir_p
doc = File.read(filename)
if @line_number
puts "Writing to: '#{filename}' line #{@line_number} with: #{contents.inspect}"
doc = insert_contents_into_at_line(doc)
else
puts "Appending to file: '#{filename}' with: #{contents.inspect}"
doc = concat_with_newline(doc, contents)
end
File.write(filename, doc)
contents
end
|
#concat_with_newline(str1, str2) ⇒ Object
34
35
36
37
38
39
40
41
|
# File 'lib/rundoc/code_command/file_command/append.rb', line 34
def concat_with_newline(str1, str2)
result = ""
result << str1
result << "\n" unless ends_in_newline?(result)
result << str2
result << "\n" unless ends_in_newline?(result)
result
end
|
#ends_in_newline?(string) ⇒ Boolean
30
31
32
|
# File 'lib/rundoc/code_command/file_command/append.rb', line 30
def ends_in_newline?(string)
last_char_of(string) == "\n"
end
|
#insert_contents_into_at_line(doc) ⇒ Object
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/rundoc/code_command/file_command/append.rb', line 43
def insert_contents_into_at_line(doc)
lines = doc.lines
raise "Expected #{filename} to have at least #{@line_number} but only has #{lines.count}" if lines.count < @line_number
result = []
lines.each_with_index do |line, index|
line_number = index.next
if line_number == @line_number
result << contents
result << "\n" unless ends_in_newline?(contents)
end
result << line
end
result.flatten.join("")
end
|
#last_char_of(string) ⇒ Object
26
27
28
|
# File 'lib/rundoc/code_command/file_command/append.rb', line 26
def last_char_of(string)
string[-1, 1]
end
|
#to_md(env) ⇒ Object
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# File 'lib/rundoc/code_command/file_command/append.rb', line 12
def to_md(env)
return unless render_command?
raise "must call write in its own code section" unless env[:commands].empty?
env[:before] << if @line_number
"In file `#{filename}`, on line #{@line_number} add:"
else
"At the end of `#{filename}` add:"
end
env[:before] << NEWLINE
nil
end
|