class Dominate::Assets::Middleware

Attributes

app[R]
env[R]
res[R]

Public Class Methods

new(app) click to toggle source
# File lib/dominate/assets/middleware.rb, line 9
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/dominate/assets/middleware.rb, line 13
def call env
  dup.call! env
end
call!(env) click to toggle source
# File lib/dominate/assets/middleware.rb, line 17
def call! env
  @env = env

  if assets_path
    render_assets
  else
    res
  end
end

Private Instance Methods

assets_path() click to toggle source
# File lib/dominate/assets/middleware.rb, line 43
def assets_path
  path[Regexp.new("^#{Dominate.config.asset_url}($|.*)")]
end
ext() click to toggle source
# File lib/dominate/assets/middleware.rb, line 68
def ext
  if matched = path.match(/(?<=\.).*$/)
    matched[0]
  else
    false
  end
end
name() click to toggle source
# File lib/dominate/assets/middleware.rb, line 59
def name
  @name ||= begin
    cleaned = path.gsub(/\.#{ext}$/, '')
    cleaned = cleaned.gsub(/^#{Dominate.config.asset_url}\//, '')
    cleaned = cleaned.gsub(/^#{type}\//, '')
    cleaned
  end
end
path() click to toggle source
# File lib/dominate/assets/middleware.rb, line 47
def path
  env['PATH_INFO']
end
render_all_files() click to toggle source
# File lib/dominate/assets/middleware.rb, line 107
def render_all_files
  content = ''
  files   = Dominate.config.assets[ext]
  path    = "#{Dominate.config.asset_path}/#{type}"

  files.each do |file|
    if file[/^http/]
      content += open(file).string
    else
      content += Dominate::HTML.load_file("#{path}/#{file}")
    end
  end

  content
end
render_assets() click to toggle source
# File lib/dominate/assets/middleware.rb, line 76
def render_assets
  case type
  when 'css', 'stylesheet', 'stylesheets'
    content_type = 'text/css; charset=utf-8'
  when 'js', 'javascript', 'javascripts'
    content_type = 'text/javascript; charset=utf-8'
  else
    content_type = Rack::Mime.mime_type ext
  end

  res.headers.merge!({
    "Content-Type"              => content_type,
    "Cache-Control"             => 'public, max-age=2592000, no-transform',
    'Connection'                => 'keep-alive',
    'Age'                       => '25637',
    'Strict-Transport-Security' => 'max-age=31536000',
    'Content-Disposition'       => 'inline'
  })

  if name == "all-#{sha}"
    @name = 'dominate-compiled'
    res.write render_single_file
  elsif name == 'all'
    res.write render_all_files
  else
    res.write render_single_file
  end

  res.finish
end
render_single_file() click to toggle source
# File lib/dominate/assets/middleware.rb, line 123
def render_single_file
  path  = "#{Dominate.config.asset_path}/#{type}"
  Dominate::HTML.load_file "#{path}/#{name}.#{ext}"
end
req() click to toggle source
# File lib/dominate/assets/middleware.rb, line 39
def req
  @req ||= Rack::Request.new env
end
sha() click to toggle source
# File lib/dominate/assets/middleware.rb, line 128
def sha
  Thread.current[:_sha] ||= (Dominate.config.sha || `git rev-parse HEAD`.strip)
end
type() click to toggle source
# File lib/dominate/assets/middleware.rb, line 51
def type
  if matched = path.match(/(?<=#{Dominate.config.asset_url}\/).*(?=\/)/)
    matched[0]
  else
    ''
  end
end