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.

[View source]

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.

[View source]

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)
[View source]

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.

[View source]

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

[View source]

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

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

#eql?(rhs) ⇒ Boolean

Returns:

  • (Boolean)
[View source]

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)
[View source]

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

def exists?
  File.exist? self.absolute
end

#hashObject

[View source]

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

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

#readObject

Read file from absolute path.

[View source]

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.

[View source]

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.

[View source]

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

def to_str
  self.absolute
end