class Sprockets::URITar

Internal: used to “expand” and “compress” values for storage

Attributes

path[R]
root[R]
scheme[R]

Public Class Methods

new(uri, env) click to toggle source

Internal: Initialize object for compression or expansion

uri - A String containing URI that may or may not contain the scheme env - The current “environment” that assets are being loaded into.

# File lib/sprockets/uri_tar.rb, line 13
def initialize(uri, env)
  @root = env.root
  @env  = env
  uri   = uri.to_s
  if uri.include?("://".freeze)
    @scheme, _, @path = uri.partition("://".freeze)
    @scheme << "://".freeze
  else
    @scheme = "".freeze
    @path   = uri
  end
end

Public Instance Methods

absolute_path?() click to toggle source

Internal: Tells us if we are using an absolute path

Nix* systems start with a ‘/` like /Users/schneems. Windows systems start with a drive letter than colon and slash like C:/Schneems.

# File lib/sprockets/uri_tar.rb, line 44
def absolute_path?
  PathUtils.absolute_path?(path)
end
compress() click to toggle source

Internal: Converts full uri to a “compressed” uri

If a uri is inside of an environment’s root it will be shortened to be a relative path.

If a uri is outside of the environment’s root the original uri will be returned.

Returns String

# File lib/sprockets/uri_tar.rb, line 35
def compress
  scheme + compressed_path
end
compressed_path() click to toggle source

Internal: Returns “compressed” path

If the input uri is relative to the environment root it will return a path relative to the environment root. Otherwise an absolute path will be returned.

Only path information is returned, and not scheme.

Returns String

# File lib/sprockets/uri_tar.rb, line 84
def compressed_path
  # windows
  if !@root.start_with?("/".freeze) && path.start_with?("/".freeze)
    consistent_root = "/".freeze + @root
  else
    consistent_root = @root
  end

  if compressed_path = PathUtils.split_subpath(consistent_root, path)
    compressed_path
  else
    path
  end
end
expand() click to toggle source

Internal: Convert a “compressed” uri to an absolute path

If a uri is inside of the environment’s root it will not start with a slash for example:

file://this/is/a/relative/path

If a uri is outside the root, it will start with a slash:

file:///This/is/an/absolute/path

Returns String

# File lib/sprockets/uri_tar.rb, line 60
def expand
  if absolute_path?
    # Stored path was absolute, don't add root
    scheme + path
  else
    if scheme.empty?
      File.join(root, path)
    else
      # We always want to return an absolute uri,
      # make sure the path starts with a slash.
      scheme + File.join("/".freeze, root, path)
    end
  end
end