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