class Stasis::Extensions::Assets

Public Class Methods

new(stasis) click to toggle source
# File lib/stasis/extensions/assets.rb, line 8
def initialize(stasis)
  @stasis = stasis
  reset
end

Public Instance Methods

assets() click to toggle source
# File lib/stasis/extensions/assets.rb, line 13
def assets
  @assets
end
before_all() click to toggle source
# File lib/stasis/extensions/assets.rb, line 17
def before_all
  define_helpers
  fingerprint_assets
  Stasis::Options.set_template_option 'scss', { asset_resolver: self }
end
reset() click to toggle source
# File lib/stasis/extensions/assets.rb, line 23
def reset
  @assets = {}
end
resolve_path(path, dirpath) click to toggle source
# File lib/stasis/extensions/assets.rb, line 27
def resolve_path(path, dirpath)
  path = File.expand_path(path, dirpath).sub("#{@stasis.root}/", '')
  "/#{assets[path] || path}"
end

Protected Instance Methods

asset_path(path) click to toggle source
# File lib/stasis/extensions/assets.rb, line 36
def asset_path(path)
  return path if path =~ %r"\A(?:https?:)?//[^/]+"
  return asset_path(path[1..-1]) if path =~ %r"\A/"
  "/#{assets[path] || path}"
end
asset_url(path) click to toggle source
# File lib/stasis/extensions/assets.rb, line 42
def asset_url(path)
  "#{root_url}#{asset_path(path)}"
end
define_helpers() click to toggle source
# File lib/stasis/extensions/assets.rb, line 34
def define_helpers
  @stasis.controller.helpers do
    def asset_path(path)
      return path if path =~ %r"\A(?:https?:)?//[^/]+"
      return asset_path(path[1..-1]) if path =~ %r"\A/"
      "/#{assets[path] || path}"
    end

    def asset_url(path)
      "#{root_url}#{asset_path(path)}"
    end
  end
end
fingerprint_asset(source) click to toggle source
# File lib/stasis/extensions/assets.rb, line 48
def fingerprint_asset(source)
  digest = Digest::MD5.file(source)
  render_asset source, source.sub(/\.(?:erb|haml|scss)$/, ''), source.sub(/(\.(?:\w+))(\.(?:erb|haml|scss))?$/) { |m| "-#{digest}#{$1}" }
end
fingerprint_assets() click to toggle source
# File lib/stasis/extensions/assets.rb, line 53
def fingerprint_assets
  Dir["{css,images,js}/**/*"].each do |source|
    next unless File.file?(source)
    fingerprint_asset(source)
  end
end
render_asset(source, asset, output) click to toggle source
# File lib/stasis/extensions/assets.rb, line 60
def render_asset(source, asset, output)
  @assets[asset] = output
  @stasis.controller.before output do
    begin
      @asset_path = asset
      instead render(source, write: false)
    ensure
      @asset_path = nil
    end
  end
end