Class: Brakeman::FilePath

Inherits:
Object
  • Object
show all
Defined in:
lib/brakeman/file_path.rb

Overview

Class to represent file paths within Brakeman. FilePath objects track both the relative and absolute paths to make it easier to manage paths.

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(absolute_path, relative_path) ⇒ FilePath

Create a new FilePath with the given absolute and relative paths.



33
34
35
36
# File 'lib/brakeman/file_path.rb', line 33

def initialize absolute_path, relative_path
  @absolute = absolute_path
  @relative = relative_path
end

Instance Attribute Details

#absoluteObject (readonly)

Returns the value of attribute absolute.



8
9
10
# File 'lib/brakeman/file_path.rb', line 8

def absolute
  @absolute
end

#relativeObject (readonly)

Returns the value of attribute relative.



8
9
10
# File 'lib/brakeman/file_path.rb', line 8

def relative
  @relative
end

Class Method Details

.from_app_tree(app_tree, path) ⇒ Object

Create a new FilePath using an AppTree object.

Note that if the path is already a FilePath, that path will be returned unaltered.

Additionally, paths are cached. If the absolute path already has a FilePath in the cache, that existing FilePath will be returned.



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/brakeman/file_path.rb', line 18

def self.from_app_tree app_tree, path
  return path if path.is_a? Brakeman::FilePath

  absolute = app_tree.expand_path(path).freeze

  if fp = @cache[absolute]
    return fp
  end

  relative = app_tree.relative_path(path).freeze

  self.new(absolute, relative).tap { |fp| @cache[absolute] = fp }
end

Instance Method Details

#<=>(rhs) ⇒ Object

Compare FilePaths. Raises an ArgumentError unless both objects are FilePaths.

Raises:

  • (ArgumentError)


54
55
56
57
# File 'lib/brakeman/file_path.rb', line 54

def <=> rhs
  raise ArgumentError unless rhs.is_a? Brakeman::FilePath
  self.relative <=> rhs.relative
end

#==(rhs) ⇒ Object

Compare FilePaths. Raises an ArgumentError unless both objects are FilePaths.



60
61
62
63
64
# File 'lib/brakeman/file_path.rb', line 60

def == rhs
  return false unless rhs.is_a? Brakeman::FilePath

  self.absolute == rhs.absolute
end

#basenameObject

Just the file name, no path



39
40
41
# File 'lib/brakeman/file_path.rb', line 39

def basename
  @basename ||= File.basename(self.relative)
end

#eql?(rhs) ⇒ Boolean

Returns:

  • (Boolean)


80
81
82
83
# File 'lib/brakeman/file_path.rb', line 80

def eql? rhs
  @absolute == rhs.absolute and
    @relative == rhs.relative
end

#exists?Boolean

Check if absolute path exists.

Returns:

  • (Boolean)


49
50
51
# File 'lib/brakeman/file_path.rb', line 49

def exists?
  File.exist? self.absolute
end

#hashObject



76
77
78
# File 'lib/brakeman/file_path.rb', line 76

def hash
  @hash ||= [@absolute, @relative].hash
end

#readObject

Read file from absolute path.



44
45
46
# File 'lib/brakeman/file_path.rb', line 44

def read
  File.read self.absolute
end

#to_sObject

Returns a string with the absolute path.



72
73
74
# File 'lib/brakeman/file_path.rb', line 72

def to_s
  self.to_str
end

#to_strObject

Returns a string with the absolute path.



67
68
69
# File 'lib/brakeman/file_path.rb', line 67

def to_str
  self.absolute
end