class AssetsCLI < Thor def self.to_s 'Assets' end def initialize(*args) ENV['RACK_ENV'] = 'production' require 'app' super end desc 'compile [--clean] [--keep=] [--verbose]', 'Compile all assets' option :clean, type: :boolean, desc: 'Clean old assets after compilation' option :keep, type: :numeric, default: 0, desc: 'Number of old assets to keep' option :verbose, type: :boolean def compile load 'tasks/sprites.thor' invoke 'sprites:generate', [], :remove_public_icons => true, :verbose => options[:verbose] manifest.compile App.assets_compile manifest.clean(options[:keep]) if options[:clean] end desc 'clean [--keep=] [--verbose]', 'Clean old assets' option :keep, type: :numeric, default: 0, desc: 'Number of old assets to keep' option :verbose, type: :boolean def clean manifest.clean(options[:keep]) end private def sprockets @sprockets ||= App.sprockets.tap do |sprockets| sprockets.logger = logger sprockets.cache = nil end end def manifest @manifest ||= Sprockets::Manifest.new sprockets.index, App.assets_manifest_path end def logger @logger ||= Logger.new($stdout).tap do |logger| logger.level = options[:verbose] ? Logger::DEBUG : Logger::INFO logger.formatter = proc { |severity, datetime, progname, msg| "#{msg}\n" } end end end