class Pakyow::Assets::Pack

Attributes

name[R]
public_path[R]

Public Class Methods

new(name, config, prefix: "/") click to toggle source
# File lib/pakyow/assets/pack.rb, line 18
def initialize(name, config, prefix: "/")
  @name, @config = name, config
  @assets = []
  @packed = { js: [], css: [] }
  @public_path = String.normalize_path(
    File.join(config.prefix, prefix, "packs", name.to_s)
  )
end

Public Instance Methods

<<(asset) click to toggle source
# File lib/pakyow/assets/pack.rb, line 41
def <<(asset)
  @assets << asset.disable_source_map
end
finalize() click to toggle source
# File lib/pakyow/assets/pack.rb, line 27
def finalize
  tap do
    if @config.fingerprint
      extension = File.extname(@public_path)
      @public_path = File.join(
        File.dirname(@public_path),
        File.basename(@public_path, extension) + "__" + fingerprint + extension
      )
    end

    pack_assets!
  end
end
fingerprint() click to toggle source
# File lib/pakyow/assets/pack.rb, line 69
def fingerprint
  @assets.flat_map(&:fingerprint).sort.each_with_object(Digest::MD5.new) { |fingerprint, digest|
    digest.update(fingerprint)
  }.hexdigest
end
javascripts() click to toggle source
# File lib/pakyow/assets/pack.rb, line 53
def javascripts
  @packed[:js]
end
javascripts?() click to toggle source
# File lib/pakyow/assets/pack.rb, line 61
def javascripts?
  javascripts.any?
end
packed(path) click to toggle source
# File lib/pakyow/assets/pack.rb, line 45
def packed(path)
  if path.start_with?(@public_path + ".")
    @packed[File.extname(path)[1..-1].to_sym]
  else
    nil
  end
end
public_css_path() click to toggle source
# File lib/pakyow/assets/pack.rb, line 79
def public_css_path
  @public_path + ".css"
end
public_js_path() click to toggle source
# File lib/pakyow/assets/pack.rb, line 75
def public_js_path
  @public_path + ".js"
end
stylesheets() click to toggle source
# File lib/pakyow/assets/pack.rb, line 57
def stylesheets
  @packed[:css]
end
stylesheets?() click to toggle source
# File lib/pakyow/assets/pack.rb, line 65
def stylesheets?
  stylesheets.any?
end

Private Instance Methods

pack_assets!() click to toggle source
# File lib/pakyow/assets/pack.rb, line 85
def pack_assets!
  @packed[:js] = PackedAssets.new(@assets.select { |asset|
    asset.mime_suffix == "javascript"
  }, public_js_path, @config, @name)

  @packed[:css] = PackedAssets.new(@assets.select { |asset|
    asset.mime_suffix == "css"
  }, public_css_path, @config, @name)
end