class Rails::Paths::Path

def <<(path)

def <<(path)
  @paths << path
end

def absolute_current # :nodoc:

:nodoc:
def absolute_current # :nodoc:
  File.expand_path(@current, @root.path)
end

def children

def children
  keys = @root.keys.find_all { |k|
    k.start_with?(@current) && k != @current
  }
  @root.values_at(*keys.sort)
end

def concat(paths)

def concat(paths)
  @paths.concat paths
end

def each(&block)

def each(&block)
  @paths.each(&block)
end

def existent

Returns all expanded paths but only if they exist in the filesystem.
def existent
  expanded.select do |f|
    does_exist = File.exist?(f)
    if !does_exist && File.symlink?(f)
      raise "File #{f.inspect} is a symlink that does not point to a valid file"
    end
    does_exist
  end
end

def existent_directories

def existent_directories
  expanded.select { |d| File.directory?(d) }
end

def expanded

Expands all paths against the root and return all unique values.
def expanded
  raise "You need to set a path root" unless @root.path
  result = []
  each do |path|
    path = File.expand_path(path, @root.path)
    if @glob && File.directory?(path)
      result.concat files_in(path)
    else
      result << path
    end
  end
  result.uniq!
  result
end

def extensions # :nodoc:

:nodoc:
def extensions # :nodoc:
  $1.split(",") if @glob =~ /\{([\S]+)\}/
end

def files_in(path)

def files_in(path)
  files = Dir.glob(@glob, base: path)
  files -= @exclude if @exclude
  files.map! { |file| File.join(path, file) }
  files.sort
end

def first

def first
  expanded.first
end

def initialize(root, current, paths, options = {})

def initialize(root, current, paths, options = {})
  @paths   = paths
  @current = current
  @root    = root
  @glob    = options[:glob]
  @exclude = options[:exclude]
  options[:autoload_once] ? autoload_once! : skip_autoload_once!
  options[:eager_load]    ? eager_load!    : skip_eager_load!
  options[:autoload]      ? autoload!      : skip_autoload!
  options[:load_path]     ? load_path!     : skip_load_path!
end

def last

def last
  expanded.last
end

def paths

def paths
  raise "You need to set a path root" unless @root.path
  map do |p|
    Pathname.new(@root.path).join(p)
  end
end

def to_ary

def to_ary
  @paths
end

def unshift(*paths)

def unshift(*paths)
  @paths.unshift(*paths)
end