assets.thor 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. class AssetsCLI < Thor
  2. def self.to_s
  3. 'Assets'
  4. end
  5. def initialize(*args)
  6. ENV['RACK_ENV'] = 'production'
  7. require 'app'
  8. super
  9. end
  10. desc 'compile [--clean] [--keep=<n>] [--verbose]', 'Compile all assets'
  11. option :clean, type: :boolean, desc: 'Clean old assets after compilation'
  12. option :keep, type: :numeric, default: 0, desc: 'Number of old assets to keep'
  13. option :verbose, type: :boolean
  14. def compile
  15. load 'tasks/sprites.thor'
  16. invoke 'sprites:generate', [], :remove_public_icons => true, :verbose => options[:verbose]
  17. manifest.compile App.assets_compile
  18. manifest.clean(options[:keep]) if options[:clean]
  19. end
  20. desc 'clean [--keep=<n>] [--verbose]', 'Clean old assets'
  21. option :keep, type: :numeric, default: 0, desc: 'Number of old assets to keep'
  22. option :verbose, type: :boolean
  23. def clean
  24. manifest.clean(options[:keep])
  25. end
  26. private
  27. def sprockets
  28. @sprockets ||= App.sprockets.tap do |sprockets|
  29. sprockets.logger = logger
  30. sprockets.cache = nil
  31. end
  32. end
  33. def manifest
  34. @manifest ||= Sprockets::Manifest.new sprockets.index, App.assets_manifest_path
  35. end
  36. def logger
  37. @logger ||= Logger.new($stdout).tap do |logger|
  38. logger.level = options[:verbose] ? Logger::DEBUG : Logger::INFO
  39. logger.formatter = proc { |severity, datetime, progname, msg| "#{msg}\n" }
  40. end
  41. end
  42. end