lib/barista.rb in barista-0.3.0 vs lib/barista.rb in barista-0.4.0
- old
+ new
@@ -1,20 +1,33 @@
require 'active_support'
require 'pathname'
module Barista
+ Error = Class.new(StandardError)
+ CompilationError = Class.new(Error)
+ CompilerUnavailableError = Class.new(Error)
+
autoload :Compiler, 'barista/compiler'
autoload :Filter, 'barista/filter'
autoload :Framework, 'barista/framework'
class << self
def configure
yield self if block_given?
end
+ def exception_on_error?
+ @exception_on_error = true if !defined?(@exception_on_error)
+ !!@exception_on_error
+ end
+
+ def exception_on_error=(value)
+ @exception_on_error = value
+ end
+
def root
@root ||= Rails.root.join("app", "coffeescripts")
end
def root=(value)
@@ -28,80 +41,92 @@
def output_root=(value)
@output_root = Pathname(value.to_s)
end
- def compile_file!(file, force = false)
+ def compile_file!(file, force = false, silence_error = false)
+ # Ensure we have a coffeescript compiler available.
+ if !Compiler.check_availability!(silence_error)
+ debug "The coffeescript compiler at '#{Compiler.bin_path}' is currently unavailable."
+ return ""
+ end
+ # Expand the path from the framework.
origin_path, framework = Framework.full_path_for(file)
return if origin_path.blank?
destination_path = self.output_path_for(file)
return unless force || Compiler.dirty?(origin_path, destination_path)
debug "Compiling #{file} from framework '#{framework.name}'"
FileUtils.mkdir_p File.dirname(destination_path)
- content = Compiler.compile(origin_path)
+ content = Compiler.compile(origin_path, :silence_error => silence_error)
# Write the rendered content to file.
- File.open(destination_path, "w+") { |f| f.write content }
- content
+ # nil is only when silence_error is true.
+ if content.nil?
+ debug "An error occured compiling '#{file}' - Leaving file as is."
+ else
+ File.open(destination_path, "w+") { |f| f.write content }
+ content
+ end
rescue SystemCallError
+ debug "An unknown error occured attempting to compile '#{file}'"
""
end
-
- def compile_all!(force = false)
+
+ def compile_all!(force = false, silence_error = true)
debug "Compiling all coffeescripts"
Framework.exposed_coffeescripts.each do |coffeescript|
- compile_file! coffeescript, force
+ compile_file! coffeescript, force, silence_error
end
true
end
-
+
def change_output_prefix!(framework, prefix = nil)
framework = framework.is_a?(Barista::Framework) ? framework : Barista::Framework[framework]
return unless framework
framework.output_prefix = prefix
end
-
+
def each_framework(include_default = false)
Framework.all(include_default).each { yield if block_given? }
end
-
+
def output_path_for(file)
output_root.join(file.to_s.gsub(/^\/+/, '')).to_s.gsub(/\.coffee$/, '.js')
end
-
+
def debug(message)
Rails.logger.debug "[Barista] #{message}" if defined?(Rails.logger) && Rails.logger
end
-
+
# By default, only add it in dev / test
def add_filter?
Rails.env.test? || Rails.env.development?
end
-
+
def no_wrap?
defined?(@no_wrap) && @no_wrap
end
-
+
def no_wrap!
self.no_wrap = true
end
-
+
def no_wrap=(value)
@no_wrap = !!value
end
-
+
end
-
+
if defined?(Rails::Engine)
class Engine < Rails::Engine
-
+
rake_tasks do
load File.expand_path('./barista/tasks/barista.rake', File.dirname(__FILE__))
end
-
+
initializer "barista.wrap_filter" do
ActionController::Base.before_filter(Barista::Filter) if Barista.add_filter?
end
-
+
end
end
-
+
end