class Chef::Util::FileEdit

Attributes

editor[R]
original_pathname[R]

Public Class Methods

new(filepath) click to toggle source
# File lib/chef/util/file_edit.rb, line 31
def initialize(filepath)
  raise ArgumentError, "File '#{filepath}' does not exist" unless File.exist?(filepath)
  @editor = Editor.new(File.open(filepath, &:readlines))
  @original_pathname = filepath
  @file_edited = false
end

Public Instance Methods

file_edited?() click to toggle source

return if file has been edited

# File lib/chef/util/file_edit.rb, line 39
def file_edited?
  @file_edited
end
insert_line_after_match(regex, newline) click to toggle source

search the file line by line and match each line with the given regex if matched, insert newline after each matching line

# File lib/chef/util/file_edit.rb, line 69
def insert_line_after_match(regex, newline)
  @changes = (editor.append_line_after(regex, newline) > 0) || @changes
end
insert_line_if_no_match(regex, newline) click to toggle source

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

# File lib/chef/util/file_edit.rb, line 75
def insert_line_if_no_match(regex, newline)
  @changes = (editor.append_line_if_missing(regex, newline) > 0) || @changes
end
search_file_delete(regex) click to toggle source

search the file line by line and match each line with the given regex if matched, delete the match (all occurrences) from the line

# File lib/chef/util/file_edit.rb, line 63
def search_file_delete(regex)
  search_file_replace(regex, "")
end
search_file_delete_line(regex) click to toggle source

search the file line by line and match each line with the given regex if matched, delete the line

# File lib/chef/util/file_edit.rb, line 57
def search_file_delete_line(regex)
  @changes = (editor.remove_lines(regex) > 0) || @changes
end
search_file_replace(regex, replace) click to toggle source

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

# File lib/chef/util/file_edit.rb, line 51
def search_file_replace(regex, replace)
  @changes = (editor.replace(regex, replace) > 0) || @changes
end
search_file_replace_line(regex, newline) click to toggle source

search the file line by line and match each line with the given regex if matched, replace the whole line with newline.

# File lib/chef/util/file_edit.rb, line 45
def search_file_replace_line(regex, newline)
  @changes = (editor.replace_lines(regex, newline) > 0) || @changes
end
unwritten_changes?() click to toggle source
# File lib/chef/util/file_edit.rb, line 79
def unwritten_changes?
  !!@changes
end
write_file() click to toggle source

Make a copy of old_file and write new file out (only if file changed)

# File lib/chef/util/file_edit.rb, line 84
def write_file
  if @changes
    backup_pathname = original_pathname + ".old"
    FileUtils.cp(original_pathname, backup_pathname, :preserve => true)
    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