module AssetPages::Jekyll::LiquidHelper::InstanceMethods

Public Instance Methods

compute_asset_path(path, options = {}) click to toggle source
Calls superclass method
# File lib/asset_pages/jekyll/liquid_helper.rb, line 54
def compute_asset_path(path, options = {})
  asset = lookup_asset_for_path(path, options)

  if asset
    if debug_assets && options[:debug] != false
      asset.to_a.each do |subasset|
        write_static_asset({}.tap { |h| subasset.encode_with(h) }.tap { |h| h["source"] ||= subasset.source })
      end
    else
      write_static_asset({}.tap { |h| asset.encode_with(h) }.tap { |h| h["source"] ||= asset.source })
    end
  elsif !assets_environment
    asset_filename = assets_manifest.assets[path]

    write_static_asset({"filename" => asset_filename}) \
      if asset_filename
  end

  # Use relative paths, since the filesystem might be used to serve up pages.
  super(path, options)
end

Protected Instance Methods

page_dir() click to toggle source
# File lib/asset_pages/jekyll/liquid_helper.rb, line 82
def page_dir
  Pathname.new(@context.registers[:page]["dir"])
end
site() click to toggle source
# File lib/asset_pages/jekyll/liquid_helper.rb, line 78
def site
  @context.registers[:site]
end

Private Instance Methods

write_static_asset(asset_hash) click to toggle source
# File lib/asset_pages/jekyll/liquid_helper.rb, line 88
def write_static_asset(asset_hash)
  assets_dir = Pathname.new(assets_prefix).relative_path_from(Root)

  if !asset_hash["filename"]
    staging_dir = ::Rails.application.root + "tmp/cache/_#{::Rails.env}"
    site_file_relative = assets_dir + asset_hash["logical_path"]
    site_file = staging_dir + site_file_relative

    parent_dir = site_file.parent

    parent_dir.mkpath \
      if !parent_dir.directory?

    # Write the asset into the staging directory.
    site_file.open("wb") { |f| f.write(asset_hash["source"]) } \
      if !site_file.file? \
        || site_file.mtime < Time.at(asset_hash["mtime"]) \
        || (asset_hash["dependency_paths"] || []).find { |dep| site_file.mtime < dep["mtime"] }
  else
    staging_dir = Root.relative_path_from(Pathname.new(assets_prefix)).expand_path(assets_manifest.dir)
    site_file_relative = assets_dir + asset_hash["filename"]
  end

  # Add to Jekyll's static file manifest, which ensures that said asset is moved into place.
  site.static_files \
    .push(::Jekyll::StaticFile.new(site,
                                   staging_dir,
                                   site_file_relative.dirname,
                                   site_file_relative.basename)) \
    .uniq!
end