Module: PathMapper::Node::Base::File

Included in:
PathMapper::Node::Base
Defined in:
lib/path_mapper/node/base/file.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(m, *args, &block) ⇒ Object



7
8
9
10
11
12
13
14
# 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

Instance Attribute Details

#changes_overlayObject

Returns the value of attribute changes_overlay.



5
6
7
# File 'lib/path_mapper/node/base/file.rb', line 5

def changes_overlay
  @changes_overlay
end

Instance Method Details

#_append!(content) ⇒ Object



32
33
34
# File 'lib/path_mapper/node/base/file.rb', line 32

def _append!(content)
  { d: { result: self }, code: :ok }
end

#_create!Object



20
21
22
# File 'lib/path_mapper/node/base/file.rb', line 20

def _create!
  { d: { result: self }, code: :ok }
end

#_delete!(full: false) ⇒ Object



51
52
53
# File 'lib/path_mapper/node/base/file.rb', line 51

def _delete!(full: false)
  { d: { result: self }, code: :ok }
end

#_override!(content) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# 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) ⇒ Object



24
25
26
# File 'lib/path_mapper/node/base/file.rb', line 24

def _put!(content)
  { d: { result: self }, code: :ok }
end

#_remove_line!(line) ⇒ Object



36
37
38
# File 'lib/path_mapper/node/base/file.rb', line 36

def _remove_line!(line)
  { d: { result: self }, code: :ok }
end

#_rename!(new_path) ⇒ Object



40
41
42
43
44
45
46
47
48
49
# 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) ⇒ Object



28
29
30
# File 'lib/path_mapper/node/base/file.rb', line 28

def _safe_put!(content)
  { d: { result: self }, code: :ok }
end

#check(line) ⇒ Object



88
89
90
# File 'lib/path_mapper/node/base/file.rb', line 88

def check(line)
  false
end

#compare_with(obj) ⇒ Object



79
80
81
82
83
84
85
86
# 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) ⇒ Object



102
103
104
# 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) ⇒ Object



96
97
98
99
100
# 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

#md5Object



92
93
94
# File 'lib/path_mapper/node/base/file.rb', line 92

def md5
  Digest::MD5.new.digest(self.value)
end