Class: Sprockets::Base

Inherits:
Object
  • Object
show all
Includes:
Bower, Configuration, DigestUtils, Loader, Npm, PathDependencyUtils, PathDigestUtils, PathUtils, Resolve, Server, SourceMapUtils
Defined in:
lib/sprockets/base.rb

Overview

Base class for Environment and CachedEnvironment.

Direct Known Subclasses

CachedEnvironment, Environment

Constant Summary

Constants included from Bower

Sprockets::Bower::POSSIBLE_BOWER_JSONS

Constants included from PathUtils

PathUtils::RELATIVE_PATH_PATTERN, PathUtils::SEPARATOR_PATTERN

Constants included from ProcessorUtils

ProcessorUtils::VALID_METADATA_COMPOUND_TYPES, ProcessorUtils::VALID_METADATA_COMPOUND_TYPES_HASH, ProcessorUtils::VALID_METADATA_TYPES, ProcessorUtils::VALID_METADATA_VALUE_TYPES, ProcessorUtils::VALID_METADATA_VALUE_TYPES_HASH

Constants included from DigestUtils

DigestUtils::DIGEST_SIZES, DigestUtils::HASH_ALGORITHMS

Constants included from Server

Server::ALLOWED_REQUEST_METHODS, Server::VARY, Server::X_CASCADE

Constants included from SourceMapUtils

SourceMapUtils::BASE64_DIGITS, SourceMapUtils::BASE64_VALUES, SourceMapUtils::VLQ_BASE, SourceMapUtils::VLQ_BASE_MASK, SourceMapUtils::VLQ_BASE_SHIFT, SourceMapUtils::VLQ_CONTINUATION_BIT

Instance Attribute Summary collapse

Attributes included from Configuration

#config, #context_class, #logger

Instance Method Summary collapse

Methods included from Npm

#read_package_directives, #resolve_alternates

Methods included from Bower

#read_bower_main, #resolve_alternates

Methods included from Resolve

#resolve, #resolve!

Methods included from HTTPUtils

#find_best_mime_type_match, #find_best_q_match, #find_mime_type_matches, #find_q_matches, #match_mime_type?, #match_mime_type_keys, #parse_q_values

Methods included from PathDependencyUtils

#entries_with_dependencies, #stat_directory_with_dependencies, #stat_sorted_tree_with_dependencies

Methods included from URIUtils

#build_asset_uri, #build_file_digest_uri, #encode_uri_query_params, #join_file_uri, #join_uri, #parse_asset_uri, #parse_file_digest_uri, #parse_uri_query_params, #split_file_uri, #split_uri, #valid_asset_uri?

Methods included from PathUtils

#absolute_path?, #atomic_write, #directory?, #entries, #file?, #find_matching_path_for_extensions, #find_upwards, #join, #match_path_extname, #path_extnames, #path_parents, #paths_split, #relative_path?, #relative_path_from, #set_pipeline, #split_subpath, #stat, #stat_directory, #stat_sorted_tree, #stat_tree

Methods included from Loader

#load

Methods included from Mime

#mime_exts, #mime_type_charset_detecter, #mime_types, #read_file, #register_mime_type

Methods included from Utils

#concat_javascript_sources, #dfs, #dfs_paths, #duplicable?, #hash_reassoc, #hash_reassoc1, #module_include, #string_end_with_semicolon?

Methods included from Processing

#bundle_processors, #pipelines, #postprocessors, #preprocessors, #register_bundle_metadata_reducer, #register_bundle_processor, #register_pipeline, #register_postprocessor, #register_preprocessor, #unregister_bundle_processor, #unregister_postprocessor, #unregister_preprocessor

Methods included from ProcessorUtils

#call_processor, #call_processors, #compose_processors, #processor_cache_key, #processors_cache_keys, #validate_processor_result!

Methods included from Transformers

#compose_transformers, #expand_transform_accepts, #register_transformer, #register_transformer_suffix, #resolve_transform_type, #transformers

Methods included from DigestUtils

#already_digested?, #detect_digest_class, #digest, #digest_class, #hexdigest, #hexdigest_integrity_uri, #integrity_uri, #pack_base64digest, #pack_hexdigest, #pack_urlsafe_base64digest, #unpack_hexdigest

Methods included from Server

#call

Methods included from Configuration

#digest_class, #digest_class=, #initialize_configuration, #version, #version=

Methods included from Paths

#append_path, #clear_paths, #each_file, #paths, #prepend_path, #root

Methods included from Exporting

#export_concurrent, #export_concurrent=, #exporters, #register_exporter, #unregister_exporter

Methods included from Compressing

#compressors, #css_compressor, #css_compressor=, #gzip=, #gzip?, #js_compressor, #js_compressor=, #register_compressor, #skip_gzip?

Methods included from Dependencies

#add_dependency, #dependencies, #dependency_resolvers, #register_dependency_resolver, #resolve_dependency

Methods included from PathDigestUtils

#files_digest, #stat_digest

Methods included from SourceMapUtils

#bsearch_mappings, #combine_source_maps, #compare_source_offsets, #concat_source_maps, #decode_source_map, #decode_vlq_mappings, #encode_source_map, #encode_vlq_mappings, #format_source_map, #make_index_map, #vlq_decode, #vlq_decode_mappings, #vlq_encode, #vlq_encode_mappings

Instance Attribute Details

#cacheObject

Get persistent cache store



41
42
43
# File 'lib/sprockets/base.rb', line 41

def cache
  @cache
end

#ignore_mtimeObject

By default sprockets tries to quickly revalidate the cache for a source file by comparing its last modified time. This is efficient in development, but in some CI or producton environments where the source files are restored from version control, the last modified time tend to be somewhat random, and checking it is just needless overhead.



63
64
65
# File 'lib/sprockets/base.rb', line 63

def ignore_mtime
  @ignore_mtime
end

Instance Method Details

#[](*args, **options) ⇒ Object

Preferred find_asset shorthand.

environment['application.js']


129
130
131
# File 'lib/sprockets/base.rb', line 129

def [](*args, **options)
  find_asset(*args, **options)
end

#cachedObject Also known as: index

Return an CachedEnvironment. Must be implemented by the subclass.



53
54
55
# File 'lib/sprockets/base.rb', line 53

def cached
  raise NotImplementedError
end

#compress_from_root(uri) ⇒ Object



150
151
152
# File 'lib/sprockets/base.rb', line 150

def compress_from_root(uri)
  URITar.new(uri, self).compress
end

#expand_from_root(uri) ⇒ Object



154
155
156
# File 'lib/sprockets/base.rb', line 154

def expand_from_root(uri)
  URITar.new(uri, self).expand
end

#file_digest(path) ⇒ Object

Internal: Compute digest for path.

path - String filename or directory path.

Returns a String digest or nil.



70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/sprockets/base.rb', line 70

def file_digest(path)
  if stat = self.stat(path)
    if ignore_mtime
      self.stat_digest(path, stat)
    else
      # Caveat: Digests are cached by the path's current mtime. Its possible
      # for a files contents to have changed and its mtime to have been
      # negligently reset thus appearing as if the file hasn't changed on
      # disk. Also, the mtime is only read to the nearest second. It's
      # also possible the file was updated more than once in a given second.
      key = UnloadedAsset.new(path, self).file_digest_key(stat.mtime.to_i)
      cache.fetch(key) do
        self.stat_digest(path, stat)
      end
    end
  end
end

#find_all_linked_assets(*args) {|asset| ... } ⇒ Object

Yields:

  • (asset)


96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/sprockets/base.rb', line 96

def find_all_linked_assets(*args)
  return to_enum(__method__, *args) unless block_given?

  parent_asset = asset = find_asset(*args)
  return unless asset

  yield asset
  stack = asset.links.to_a
  linked_paths = {}

  while uri = stack.shift
    yield asset = load(uri)

    last_filename = linked_paths[asset.logical_path]
    if last_filename && last_filename != asset.filename
      raise DoubleLinkError.new(
        parent_filename: parent_asset.filename,
        last_filename:   last_filename,
        logical_path:    asset.logical_path,
        filename:        asset.filename
      )
    end
    linked_paths[asset.logical_path] = asset.filename
    stack = asset.links.to_a + stack
  end

  nil
end

#find_asset(*args, **options) ⇒ Object

Find asset by logical path or expanded path.



89
90
91
92
93
94
# File 'lib/sprockets/base.rb', line 89

def find_asset(*args, **options)
  uri, _ = resolve(*args, **options)
  if uri
    load(uri)
  end
end

#find_asset!(*args) ⇒ Object

Find asset by logical path or expanded path.

If the asset is not found an error will be raised.



136
137
138
139
140
141
# File 'lib/sprockets/base.rb', line 136

def find_asset!(*args)
  uri, _ = resolve!(*args)
  if uri
    load(uri)
  end
end

#inspectObject

Pretty inspect



144
145
146
147
148
# File 'lib/sprockets/base.rb', line 144

def inspect
  "#<#{self.class}:0x#{object_id.to_s(16)} " +
    "root=#{root.to_s.inspect}, " +
    "paths=#{paths.inspect}>"
end