module Roda::RodaPlugins::Assets::ClassMethods

Public Instance Methods

assets_opts() click to toggle source

Return the assets options for this class.

# File lib/roda/plugins/assets.rb, line 51
def assets_opts
  opts[:assets]
end
assets_unique_id(type) click to toggle source

Generates a unique id, this is used to keep concat/compiled files from caching in the browser when they are generated

# File lib/roda/plugins/assets.rb, line 57
def assets_unique_id(type)
  if unique_id = instance_variable_get("@#{type}")
    unique_id
  else
    path    = "#{assets_opts[:compiled_path]}/#{assets_opts[:"#{type}_folder"]}"
    file    = "#{path}/#{assets_opts[:compiled_name]}.#{type}"
    content = File.exist?(file) ? File.read(file) : ''

    instance_variable_set("@#{type}", Digest::SHA1.hexdigest(content))
  end
end
compile_assets(concat_only = false) click to toggle source
# File lib/roda/plugins/assets.rb, line 69
def compile_assets(concat_only = false)
  assets_opts[:concat_only] = concat_only

  %w(css js).each do |type|
    files = assets_opts[type.to_sym]

    if files.is_a? Array
      compile_process_files files, type, type
    else
      files.each do |folder, f|
        compile_process_files f, type, folder
      end
    end
  end
end
inherited(subclass) click to toggle source

Copy the assets options into the subclass, duping them as necessary to prevent changes in the subclass affecting the parent class.

Calls superclass method
# File lib/roda/plugins/assets.rb, line 44
def inherited(subclass)
  super
  opts         = subclass.opts[:assets] = assets_opts.dup
  opts[:cache] = thread_safe_cache if opts[:cache]
end

Private Instance Methods

compile_process_files(files, type, folder) click to toggle source
# File lib/roda/plugins/assets.rb, line 87
def compile_process_files(files, type, folder)
  require 'yuicompressor'

  # start app instance
  app = new

  # content to render to file
  content = ''

  files.each do |file|
    if type != folder && !file[/^\.\//] && !file[/^http/]
      file = "#{folder}/#{file}"
    end

    content += app.read_asset_file file, type
  end

  path = assets_opts[:compiled_path] \
         + "/#{assets_opts[:"#{type}_folder"]}/" \
         + assets_opts[:compiled_name] \
         + (type != folder ? ".#{folder}" : '') \
         + ".#{type}"

  unless assets_opts[:concat_only]
    content = YUICompressor.send("compress_#{type}", content, munge: true)
  end

  File.write path, content
end