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.



12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/sprockets/uri_tar.rb', line 12

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.



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

def path
  @path
end

#rootObject (readonly)

Returns the value of attribute root.



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

def root
  @root
end

#schemeObject (readonly)

Returns the value of attribute scheme.



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

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.

Returns:

  • (Boolean)


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

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



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

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



83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/sprockets/uri_tar.rb', line 83

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



59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/sprockets/uri_tar.rb', line 59

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