Class: Chef::Util::FileEdit
- Inherits:
-
Object
- Object
- Chef::Util::FileEdit
- Defined in:
- lib/chef/util/file_edit.rb
Instance Method Summary collapse
-
#file_edited? ⇒ Boolean
return if file has been edited.
-
#initialize(filepath) ⇒ FileEdit
constructor
A new instance of FileEdit.
-
#insert_line_after_match(regex, newline) ⇒ Object
search the file line by line and match each line with the given regex if matched, insert newline after each matching line.
-
#insert_line_if_no_match(regex, newline) ⇒ Object
search the file line by line and match each line with the given regex if not matched, insert newline at the end of the file.
-
#search_file_delete(regex) ⇒ Object
search the file line by line and match each line with the given regex if matched, delete the match (all occurrences) from the line.
-
#search_file_delete_line(regex) ⇒ Object
search the file line by line and match each line with the given regex if matched, delete the line.
-
#search_file_replace(regex, replace) ⇒ Object
search the file line by line and match each line with the given regex if matched, replace the match (all occurrences) with the replace parameter.
-
#search_file_replace_line(regex, newline) ⇒ Object
search the file line by line and match each line with the given regex if matched, replace the whole line with newline.
- #unwritten_changes? ⇒ Boolean
-
#write_file ⇒ Object
Make a copy of old_file and write new file out (only if file changed).
Constructor Details
#initialize(filepath) ⇒ FileEdit
Returns a new instance of FileEdit.
31 32 33 34 35 36 37 |
# File 'lib/chef/util/file_edit.rb', line 31 def initialize(filepath) raise ArgumentError, "File '#{filepath}' does not exist" unless TargetIO::File.exist?(filepath) @editor = Editor.new(TargetIO::File.open(filepath, &:readlines)) @original_pathname = filepath @file_edited = false end |
Instance Method Details
#file_edited? ⇒ Boolean
return if file has been edited
40 41 42 |
# File 'lib/chef/util/file_edit.rb', line 40 def file_edited? @file_edited end |
#insert_line_after_match(regex, newline) ⇒ Object
search the file line by line and match each line with the given regex if matched, insert newline after each matching line
70 71 72 |
# File 'lib/chef/util/file_edit.rb', line 70 def insert_line_after_match(regex, newline) @changes = (editor.append_line_after(regex, newline) > 0) || @changes end |
#insert_line_if_no_match(regex, newline) ⇒ Object
search the file line by line and match each line with the given regex if not matched, insert newline at the end of the file
76 77 78 |
# File 'lib/chef/util/file_edit.rb', line 76 def insert_line_if_no_match(regex, newline) @changes = (editor.append_line_if_missing(regex, newline) > 0) || @changes end |
#search_file_delete(regex) ⇒ Object
search the file line by line and match each line with the given regex if matched, delete the match (all occurrences) from the line
64 65 66 |
# File 'lib/chef/util/file_edit.rb', line 64 def search_file_delete(regex) search_file_replace(regex, "") end |
#search_file_delete_line(regex) ⇒ Object
search the file line by line and match each line with the given regex if matched, delete the line
58 59 60 |
# File 'lib/chef/util/file_edit.rb', line 58 def search_file_delete_line(regex) @changes = (editor.remove_lines(regex) > 0) || @changes end |
#search_file_replace(regex, replace) ⇒ Object
search the file line by line and match each line with the given regex if matched, replace the match (all occurrences) with the replace parameter
52 53 54 |
# File 'lib/chef/util/file_edit.rb', line 52 def search_file_replace(regex, replace) @changes = (editor.replace(regex, replace) > 0) || @changes end |
#search_file_replace_line(regex, newline) ⇒ Object
search the file line by line and match each line with the given regex if matched, replace the whole line with newline.
46 47 48 |
# File 'lib/chef/util/file_edit.rb', line 46 def search_file_replace_line(regex, newline) @changes = (editor.replace_lines(regex, newline) > 0) || @changes end |
#unwritten_changes? ⇒ Boolean
80 81 82 |
# File 'lib/chef/util/file_edit.rb', line 80 def unwritten_changes? !!@changes end |
#write_file ⇒ Object
Make a copy of old_file and write new file out (only if file changed)
85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/chef/util/file_edit.rb', line 85 def write_file if @changes backup_pathname = original_pathname + ".old" TargetIO::FileUtils.cp(original_pathname, backup_pathname, preserve: true) TargetIO::File.open(original_pathname, "w") do |newfile| editor.lines.each do |line| newfile.puts(line) end newfile.flush end @file_edited = true end @changes = false end |