Class: Ronin::Path

Inherits:
Pathname show all
Defined in:
lib/ronin/path.rb

Overview

The Path class extends Pathname to allow representing directory traversal paths.

Instance Attribute Summary (collapse)

Class Method Summary (collapse)

Instance Method Summary (collapse)

Constructor Details

- (Path) initialize(path, separator = File::SEPARATOR)

Initializes a new Path.

Parameters:

  • path (String)

    The path.

  • separator (String) (defaults to: File::SEPARATOR)

    The directory separator to use.



43
44
45
46
47
# File 'lib/ronin/path.rb', line 43

def initialize(path,separator=File::SEPARATOR)
  @separator = separator

  super(path)
end

Instance Attribute Details

- (Object) separator

The separator to join paths together with



32
33
34
# File 'lib/ronin/path.rb', line 32

def separator
  @separator
end

Class Method Details

+ (Path) root

The root path.

Returns:

  • (Path)

    The root path.



55
56
57
# File 'lib/ronin/path.rb', line 55

def Path.root
  Path.new('/')
end

+ (Path) up(n, separator = File::SEPARATOR)

Creates a new path object for upward directory traversal.

Examples:

Generate a relative path that goes up 7 directories:

Path.up(7)
# => #<Ronin::Path:../../../../../../..>

Generate multiple relative paths, going up 1 to 3 directories:

Path.up(1..3)
# => [#<Ronin::Path:..>, #<Ronin::Path:../..>,
#<Ronin::Path:../../..>]

Parameters:

  • n (Integer, Array, Range)

    The number of directories to go up.

  • separator (String) (defaults to: File::SEPARATOR)

    Path separator.

Returns:

  • (Path)

    The new path object.

Raises:

  • (ArgumentError)

    A negative number was given as the first argument.



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/ronin/path.rb', line 83

def self.up(n,separator=File::SEPARATOR)
  case n
  when Integer
    if n == 0
      separator
    elsif n > 0
      path = new('..',separator)
      path.join(*(['..'] * (n-1)))
    else
      raise(ArgumentError,"negative argument")
    end
  when Enumerable
    n.map { |i| up(i) }
  else
    raise(ArgumentError,"The first argument of Path.up must be either an Integer or Enumerable")
  end
end

Instance Method Details

- (Path) join(*names) Also known as: /

Joins directory names together with the path, but does not resolve the resulting path.

Examples:

Path.up(7).join('etc/passwd')
# => #<Ronin::Path:../../../../../../../etc/passwd>

Parameters:

  • names (Array)

    The names to join together.

Returns:

  • (Path)

    The joined path.



115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/ronin/path.rb', line 115

def join(*names)
  joined_path = if root? then ''
                else          self.to_s
                end

  names.each do |name|
    name = name.to_s

    joined_path << @separator unless name.start_with?(@separator)
    joined_path << name       unless name == @separator
  end

  return self.class.new(joined_path,@separator)
end