Class: Sprockets::URITar

Inherits:
Object
  • Object
show all
Defined in:
lib/sprockets/uri_tar.rb

Overview

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(uri, env) ⇒ URITar

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.


13
14
15
16
17
18
19
20
21
22
23
24
# 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

Instance Attribute Details

#pathObject (readonly)

Returns the value of attribute path


7
8
9
# File 'lib/sprockets/uri_tar.rb', line 7

def path
  @path
end

#rootObject (readonly)

Returns the value of attribute root


7
8
9
# File 'lib/sprockets/uri_tar.rb', line 7

def root
  @root
end

#schemeObject (readonly)

Returns the value of attribute scheme


7
8
9
# File 'lib/sprockets/uri_tar.rb', line 7

def scheme
  @scheme
end

Instance Method Details

#absolute_path?Boolean

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.


44
45
46
# File 'lib/sprockets/uri_tar.rb', line 44

def absolute_path?
  PathUtils.absolute_path?(path)
end

#compressObject

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


35
36
37
# File 'lib/sprockets/uri_tar.rb', line 35

def compress
  scheme + compressed_path
end

#compressed_pathObject

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


84
85
86
87
88
89
90
91
92
93
94
95
96
97
# 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

#expandObject

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


60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 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