Module: Flightdeck::Assets

Defined in:
lib/flightdeck/assets.rb

Overview

In-memory view of the precompiled asset manifest committed under app/assets/flightdeck/. Loaded lazily and memoized: the gem must boot cleanly in a checkout where rake assets:build has not run yet.

Constant Summary collapse

CONTENT_TYPES =
{
  ".css" => "text/css; charset=utf-8",
  ".js" => "text/javascript; charset=utf-8"
}.freeze
LOGICAL_NAMES =
%w[flightdeck.css flightdeck.js].freeze

Class Method Summary collapse

Class Method Details

.by_digested_nameObject

Reverse index: digested filename => entry. The only lookup the controller performs, so a request can never name a file we did not build.



32
33
34
35
36
# File 'lib/flightdeck/assets.rb', line 32

def by_digested_name
  @by_digested_name ||= manifest.each_with_object({}) do |(logical, entry), index|
    index[entry["file"]] = entry.merge("logical" => logical)
  end.freeze
end

.content_type_for(file) ⇒ Object



57
58
59
# File 'lib/flightdeck/assets.rb', line 57

def content_type_for(file)
  CONTENT_TYPES.fetch(File.extname(file), "application/octet-stream")
end

.digested_name(logical) ⇒ Object



38
39
40
41
# File 'lib/flightdeck/assets.rb', line 38

def digested_name(logical)
  entry = manifest[logical.to_s]
  entry && entry["file"]
end

.find(digested_name) ⇒ Object



43
44
45
# File 'lib/flightdeck/assets.rb', line 43

def find(digested_name)
  by_digested_name[digested_name.to_s]
end

.manifestObject



23
24
25
26
27
# File 'lib/flightdeck/assets.rb', line 23

def manifest
  return @manifest if defined?(@manifest) && @manifest

  @manifest = load_manifest
end

.read(digested_name) ⇒ Object



47
48
49
50
51
52
53
54
55
# File 'lib/flightdeck/assets.rb', line 47

def read(digested_name)
  entry = find(digested_name)
  return nil unless entry

  path = root.join(entry["file"])
  return nil unless path.file?

  path.binread
end

.rootObject



19
20
21
# File 'lib/flightdeck/assets.rb', line 19

def root
  @root ||= Pathname.new(File.expand_path("../../app/assets/flightdeck", __dir__))
end