module PathMapper::Node::Base::File

Attributes

changes_overlay[RW]

Public Instance Methods

_append!(content) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 32
def _append!(content)
  { d: { result: self }, code: :ok }
end
_create!() click to toggle source
# File lib/path_mapper/node/base/file.rb, line 20
def _create!
  { d: { result: self }, code: :ok }
end
_delete!(full: false) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 51
def _delete!(full: false)
  { d: { result: self }, code: :ok }
end
_override!(content) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 55
def _override!(content)
  if content.empty?
    { d: { result: self.delete!(logger: false) }, code: :deleted }
  else
    self.with_dry_run do |dry_run|
      tmp_mapper = self._create_node(@path.dirname.join(".#{@name}.tmp")).put!(content, logger: false)

      if self.nil? or !self.compare_with(tmp_mapper)
        if dry_run
          self.storage[@path] = tmp_mapper.raw_value
        else
          tmp_mapper.rename!(@path, logger: false)
        end
        code = :overrided
      else
        tmp_mapper.delete!(logger: false)
        code = :ok
      end

      { d: { result: self._create_node(@path) }, code: code }
    end
  end
end
_put!(content) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 24
def _put!(content)
  { d: { result: self }, code: :ok }
end
_remove_line!(line) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 36
def _remove_line!(line)
  { d: { result: self }, code: :ok }
end
_rename!(new_path) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 40
def _rename!(new_path)
  self.with_dry_run do |dry_run|
    if dry_run
      self.storage[new_path] = self.storage_file_delete(@path)
    else
      ::File.rename(@path, new_path)
    end
  end
  { d: { result: self._create_node(new_path) }, code: :renamed }
end
_safe_put!(content) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 28
def _safe_put!(content)
  { d: { result: self }, code: :ok }
end
check(line) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 88
def check(line)
  false
end
compare_with(obj) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 79
def compare_with(obj)
  return if obj.nil?
  if obj.respond_to? :node? and obj.node?
    self.md5 == obj.md5
  else
    self.md5 == Digest::MD5.new.digest(obj.to_s)
  end
end
custom_diff(a, b) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 102
def custom_diff(a, b)
  Diffy::Diff.new(a, b).to_s
end
diff(content) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 96
def diff(content)
  content = with_line_separator(content.chomp) unless content.nil?
  diff = Diffy::Diff.new(content, self.raw_value, diff: '-U 3').to_s
  diff.empty? ? nil : diff
end
md5() click to toggle source
# File lib/path_mapper/node/base/file.rb, line 92
def md5
  Digest::MD5.new.digest(self.value)
end
method_missing(m, *args, &block) click to toggle source
# File lib/path_mapper/node/base/file.rb, line 7
def method_missing(m, *args, &block)
  kwargs = self.kwargs(args)
  self.with_logger(logger: kwargs.delete(:logger)) do
    self.changes_overlay = kwargs.delete(:change_overlay) if kwargs.key? :change_overlay
    args << kwargs unless kwargs.empty?
    self.changes_overlay.send("_#{m}", *args, &block)[:d][:result] if self.respond_to?("_#{m}")
  end
end

Protected Instance Methods

_file_puts(content, file_mode='w') click to toggle source
# File lib/path_mapper/node/base/file.rb, line 108
def _file_puts(content, file_mode='w')
  return self if content.to_s.empty?
  self.parent.create!

  with_dry_run do |dry_run|
    if dry_run
      self.storage[@path] = case file_mode
        when 'w' then with_line_separator(content)
        when 'a+' then self.storage[@path].to_s + with_line_separator(content)
      end
    else
      ::File.open(@path, file_mode) {|f| f.puts(content) }
    end
  end

  self._create_node(@path)
end
_general_options() click to toggle source
Calls superclass method
# File lib/path_mapper/node/base/file.rb, line 126
def _general_options
  super[:changes_overlay] = @changes_overlay if @changes_overlay != self
end