class Guard::RailsAssets::RailsRunner

Attributes

digest[RW]
rails_booted[R]
rails_env[RW]

Public Class Methods

apply_hacks() click to toggle source
# File lib/guard/rails-assets/rails_runner.rb, line 22
def self.apply_hacks
  # TODO: Hack due to Rails 3.1 issue: https://github.com/rails/rails/issues/2663#issuecomment-1990121
  ENV['RAILS_GROUPS'] ||= 'assets'
  ENV['RAILS_ENV']    ||= rails_env
end
boot_rails() click to toggle source

Methods to run the asset pipeline See as a reference github.com/rails/rails/blob/master/actionpack/lib/sprockets/assets.rake

# File lib/guard/rails-assets/rails_runner.rb, line 30
def self.boot_rails
  return if @rails_booted
  puts "Booting Rails for #{rails_env} environment."
  require 'fileutils'

  apply_hacks
  require 'rake'
  require "#{Dir.pwd}/config/environment.rb"
  app = ::Rails.application

  app.assets.cache = nil # don't touch my FS pls. (can we use `app.config.assets.cache_store = false` instead)?
  app.load_tasks
  @rails_booted = true
end
new(options = {}) click to toggle source
# File lib/guard/rails-assets/rails_runner.rb, line 17
def initialize(options = {})
  self.class.rails_env = (options[:rails_env] || 'test').to_s unless self.class.rails_booted
  self.class.digest = options[:digest]
end

Public Instance Methods

clean() click to toggle source
# File lib/guard/rails-assets/rails_runner.rb, line 45
def clean
  Rake::Task['tmp:cache:clear'].execute
  # copy from the "assets:clean" Rake task
  config = ::Rails.application.config
  public_asset_path = File.join(::Rails.public_path, config.assets.prefix)
  rm_rf public_asset_path, secure: true
end
compile_assets() click to toggle source

Runs the asset pipeline compiler.

@return [ Boolean ] Whether the compilation was successful or not

# File lib/guard/rails-assets/rails_runner.rb, line 84
def compile_assets
  self.class.boot_rails
  return false unless self.class.rails_booted
  begin
    clean
    precompile
    true
  rescue => e
    puts "An error occurred compiling assets: #{e}"
    false
  ensure
    ::Rails.application.assets.instance_eval { expire_index! }
  end
end
precompile() click to toggle source
# File lib/guard/rails-assets/rails_runner.rb, line 53
def precompile
  config = ::Rails.application.config
  unless config.assets.enabled
    warn 'Cannot precompile assets if sprockets is disabled. Enabling it.'
    config.assets.enabled = true
  end

  # Ensure that action view is loaded and the appropriate
  # sprockets hooks get executed
  _ = ActionView::Base

  digest = self.class.digest.nil? ? config.assets.digest : self.class.digest

  config.assets.compile = true
  config.assets.digest  = digest
  config.assets.digests = {}

  env      = ::Rails.application.assets
  target   = File.join(::Rails.public_path, config.assets.prefix)
  compiler = Sprockets::StaticCompiler.new(env,
                                           target,
                                           config.assets.precompile,
                                           manifest_path: config.assets.manifest,
                                           digest: config.assets.digest,
                                           manifest: config.assets.digest.nil?)
  compiler.compile
end