# class Chef::Util::FileEdit

### 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 occurances) 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 occurances) 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