diff --git a/Gemfile b/Gemfile
index b736b0d..c663190 100644
--- a/Gemfile
+++ b/Gemfile
@@ -23,7 +23,7 @@ gem 'mocha'
gem 'cucumber'
-gem 'jquery-rails', '~> 1.0.0'
+gem 'jquery-rails', '> 1.0'
gem 'ejs'
gem 'guard-jasmine-headless-webkit', :git => 'git://github.com/johnbintz/guard-jasmine-headless-webkit.git'
diff --git a/lib/jasmine/headless.rb b/lib/jasmine/headless.rb
index 0a60efa..97998d1 100644
--- a/lib/jasmine/headless.rb
+++ b/lib/jasmine/headless.rb
@@ -21,11 +21,6 @@ module Jasmine
autoload :TemplateWriter, 'jasmine/headless/template_writer'
autoload :FileChecker, 'jasmine/headless/file_checker'
-
- autoload :CoffeeTemplate, 'jasmine/headless/coffee_template'
- autoload :JSTemplate, 'jasmine/headless/js_template'
- autoload :JSTTemplate, 'jasmine/headless/jst_template'
- autoload :CSSTemplate, 'jasmine/headless/css_template'
autoload :NilTemplate, 'jasmine/headless/nil_template'
autoload :Report, 'jasmine/headless/report'
diff --git a/lib/jasmine/headless/coffee_script_cache.rb b/lib/jasmine/headless/coffee_script_cache.rb
deleted file mode 100644
index 5ae5efe..0000000
--- a/lib/jasmine/headless/coffee_script_cache.rb
+++ /dev/null
@@ -1,20 +0,0 @@
-require 'coffee_script'
-require 'digest/sha1'
-require 'fileutils'
-
-module Jasmine
- module Headless
- class CoffeeScriptCache < CacheableAction
- class << self
- def cache_type
- "coffee_script"
- end
- end
-
- def action
- CoffeeScript.compile(File.read(file))
- end
- end
- end
-end
-
diff --git a/lib/jasmine/headless/coffee_template.rb b/lib/jasmine/headless/coffee_template.rb
deleted file mode 100644
index cfaaec2..0000000
--- a/lib/jasmine/headless/coffee_template.rb
+++ /dev/null
@@ -1,36 +0,0 @@
-require 'tilt/template'
-require 'rainbow'
-
-module Jasmine::Headless
- class CoffeeTemplate < Tilt::Template
- include Jasmine::Headless::FileChecker
-
- self.default_mime_type = 'application/javascript'
-
- def prepare ; end
-
- def evaluate(scope, locals, &block)
- if bad_format?(file)
- alert_bad_format(file)
- return ''
- end
- begin
- cache = Jasmine::Headless::CoffeeScriptCache.new(file)
- source = cache.handle
- if cache.cached?
- %{
- }
- else
- %{}
- end
- rescue CoffeeScript::CompilationError => ne
- puts "[%s] %s: %s" % [ 'coffeescript'.color(:red), file.color(:yellow), "#{ne.message}".color(:white) ]
- raise ne
- rescue StandardError => e
- puts "[%s] Error in compiling file: %s" % [ 'coffeescript'.color(:red), file.color(:yellow) ]
- raise e
- end
- end
- end
-end
-
diff --git a/lib/jasmine/headless/css_template.rb b/lib/jasmine/headless/css_template.rb
deleted file mode 100644
index 7053772..0000000
--- a/lib/jasmine/headless/css_template.rb
+++ /dev/null
@@ -1,19 +0,0 @@
-require 'tilt/template'
-
-module Jasmine::Headless
- class CSSTemplate < Tilt::Template
- include Jasmine::Headless::FileChecker
- self.default_mime_type = 'text/css'
-
- def prepare ; end
-
- def evaluate(scope, locals, &block)
- if bad_format?(file)
- alert_bad_format(file)
- return ''
- end
- file ? %{} : data
- end
- end
-end
-
diff --git a/lib/jasmine/headless/file_checker.rb b/lib/jasmine/headless/file_checker.rb
index 6795a5b..6011bc0 100644
--- a/lib/jasmine/headless/file_checker.rb
+++ b/lib/jasmine/headless/file_checker.rb
@@ -1,3 +1,5 @@
+require 'rainbow'
+
module Jasmine::Headless::FileChecker
def excluded_formats
::Jasmine::Headless::EXCLUDED_FORMATS
diff --git a/lib/jasmine/headless/files_list.rb b/lib/jasmine/headless/files_list.rb
index aad2d62..a390b17 100644
--- a/lib/jasmine/headless/files_list.rb
+++ b/lib/jasmine/headless/files_list.rb
@@ -39,6 +39,10 @@ module Jasmine::Headless
@sprockets_environment = nil
end
+ def sprockets_environment
+ @sprockets_environment ||= Sprockets::Environment.new
+ end
+
def registered_engines
@registered_engines ||= {}
end
@@ -138,7 +142,7 @@ module Jasmine::Headless
def sprockets_environment
return @sprockets_environment if @sprockets_environment
- @sprockets_environment = Sprockets::Environment.new
+ @sprockets_environment = self.class.sprockets_environment #|| Sprockets::Environment.new
search_paths.each { |path| @sprockets_environment.append_path(path) }
@sprockets_environment.unregister_postprocessor('application/javascript', Sprockets::SafetyColons)
@@ -149,11 +153,10 @@ module Jasmine::Headless
register_engine ".#{extension}", Jasmine::Headless::NilTemplate
end
- register_engine '.coffee', Jasmine::Headless::CoffeeTemplate
- register_engine '.js', Jasmine::Headless::JSTemplate
- register_engine '.css', Jasmine::Headless::CSSTemplate
- register_engine '.jst', Jasmine::Headless::JSTTemplate
end
+
+ @sprockets_environment.logger = Logger.new(STDOUT)
+ @sprockets_environment.logger.level = Logger::WARN
@sprockets_environment
end
@@ -207,7 +210,28 @@ module Jasmine::Headless
alert_time = nil
end
- sprockets_environment.find_asset(file, :bundle => false).body
+ asset = sprockets_environment.find_asset(file, :bundle => false)
+ cache_file = File.join('.jhw-cache', 'code', asset.logical_path)
+ # Process & cache the asset only if needed
+ unless File.exist?(cache_file) && (File.mtime(file) < File.mtime(cache_file))
+ FileUtils.mkdir_p File.dirname(cache_file)
+ asset.write_to(cache_file)
+ end
+
+ html = ''
+ case asset.content_type
+ when 'application/javascript'
+ html = %{}
+ # NOTE: In future sprockets versions below could be simplified w/ asset.extensions.include?('.coffee')
+ if asset.pathname.basename.to_s.scan(/\.[^.]+/).include?('.coffee')
+ html += %{\n}
+ end
+ when 'text/css'
+ html = %{}
+ else
+ html = asset.body
+ end
+ html
end.compact.reject(&:empty?)
end
@@ -270,7 +294,12 @@ module Jasmine::Headless
end
def add_path(path, type = nil)
- asset = sprockets_environment.find_asset(path)
+ begin
+ asset = sprockets_environment.find_asset(path)
+ rescue => e
+ sprockets_environment.logger.error "#{e.message} (#{e.class})"
+ raise e
+ end
@required_files << asset
@@ -326,6 +355,10 @@ end
module Jasmine::Headless
extend self
+ def sprockets_environment
+ Jasmine::Headless::FilesList.sprockets_environment
+ end
+
def register_engine(file_extension, template_class)
Jasmine::Headless::FilesList.register_engine(file_extension, template_class)
end
diff --git a/lib/jasmine/headless/js_template.rb b/lib/jasmine/headless/js_template.rb
deleted file mode 100644
index 49eb5b6..0000000
--- a/lib/jasmine/headless/js_template.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require 'tilt/template'
-
-module Jasmine::Headless
- class JSTemplate < Tilt::Template
- include Jasmine::Headless::FileChecker
- self.default_mime_type = 'application/javascript'
-
- def prepare ; end
-
- def evaluate(scope, locals, &block)
- if bad_format?(file)
- alert_bad_format(file)
- return ''
- end
- if data[%r{^} : data
- end
- end
- end
-end
-
diff --git a/lib/jasmine/headless/jst_template.rb b/lib/jasmine/headless/jst_template.rb
deleted file mode 100644
index b6d8f1c..0000000
--- a/lib/jasmine/headless/jst_template.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-require 'sprockets/jst_processor'
-
-module Jasmine::Headless
- class JSTTemplate < Sprockets::JstProcessor
- include Jasmine::Headless::FileChecker
- def evaluate(*args)
- if bad_format?(file)
- alert_bad_format(file)
- return ''
- end
- %{}
- end
- end
-end
-
diff --git a/spec/lib/jasmine/headless/coffee_script_cache_spec.rb b/spec/lib/jasmine/headless/coffee_script_cache_spec.rb
deleted file mode 100644
index 9952270..0000000
--- a/spec/lib/jasmine/headless/coffee_script_cache_spec.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-require 'spec_helper'
-
-describe Jasmine::Headless::CoffeeScriptCache do
- include FakeFS::SpecHelpers
-
- describe '#action' do
- let(:file) { 'file' }
- let(:data) { 'data' }
- let(:compiled) { 'compiled' }
-
- before do
- CoffeeScript.expects(:compile).with(data).returns(compiled)
- File.open(file, 'wb') { |fh| fh.print(data) }
- end
-
- it 'should compile coffeescript' do
- described_class.new(file).action.should == compiled
- end
- end
-end
-
diff --git a/spec/lib/jasmine/headless/coffee_template_spec.rb b/spec/lib/jasmine/headless/coffee_template_spec.rb
deleted file mode 100644
index f07e769..0000000
--- a/spec/lib/jasmine/headless/coffee_template_spec.rb
+++ /dev/null
@@ -1,55 +0,0 @@
-require 'spec_helper'
-
-describe Jasmine::Headless::CoffeeTemplate do
- let(:data) { 'data' }
- let(:path) { 'path.coffee' }
-
- let(:template) { described_class.new(path) { data } }
-
- subject { template.render }
-
- let(:handle_expectation) { Jasmine::Headless::CoffeeScriptCache.any_instance.stubs(:handle) }
-
- context 'compilation error' do
- let(:error) { CoffeeScript::CompilationError.new("fail") }
-
- before do
- handle_expectation.raises(error)
- end
-
- it 'should pass along the error' do
- expect { subject }.to raise_error(CoffeeScript::CompilationError)
- end
- end
-
- context 'compiles fine' do
- let(:source) { 'source' }
-
- before do
- Jasmine::Headless::CoffeeScriptCache.any_instance.stubs(:cached?).returns(cache_return)
- handle_expectation.returns(source)
- end
-
- context 'cached' do
- let(:file_path) { 'dir/file.js' }
- let(:cache_return) { true }
-
- before do
- Jasmine::Headless::CoffeeScriptCache.any_instance.stubs(:cache_file).returns(file_path)
- end
-
- it 'should return the cached file' do
- subject.should include(%{})
- end
- end
-
- context 'not cached' do
- let(:cache_return) { false }
-
- it 'should return the generated js' do
- subject.should include(%{})
- end
- end
- end
-end
-
diff --git a/spec/lib/jasmine/headless/css_template_spec.rb b/spec/lib/jasmine/headless/css_template_spec.rb
deleted file mode 100644
index ca180e8..0000000
--- a/spec/lib/jasmine/headless/css_template_spec.rb
+++ /dev/null
@@ -1,25 +0,0 @@
-require 'spec_helper'
-
-describe Jasmine::Headless::CSSTemplate do
- include FakeFS::SpecHelpers
-
- let(:template) { described_class.new(file) { data } }
- let(:file) { 'file' }
- let(:data) { 'data' }
-
- subject { template.render }
-
- before do
- File.open(file, 'wb') if file
- end
-
- context "no file'" do
- let(:file) { nil }
-
- it { should == data }
- end
-
- context 'file' do
- it { should == %{} }
- end
-end
diff --git a/spec/lib/jasmine/headless/files_list_spec.rb b/spec/lib/jasmine/headless/files_list_spec.rb
index 542e8f8..d9ca10f 100644
--- a/spec/lib/jasmine/headless/files_list_spec.rb
+++ b/spec/lib/jasmine/headless/files_list_spec.rb
@@ -189,6 +189,20 @@ describe Jasmine::Headless::FilesList do
end
end
+
+ describe "#sprockets_environment" do
+
+ before(:each) do
+ Jasmine::Headless::FilesList.reset!
+ end
+
+ it "should return shared class-level sprockets environment that will be used when tests are run" do
+ processor = Object.new
+ described_class.sprockets_environment.register_postprocessor "application/javascript", processor
+ described_class.new.sprockets_environment.postprocessors["application/javascript"].should include(processor)
+ end
+
+ end
end
end
diff --git a/spec/lib/jasmine/headless/js_template_spec.rb b/spec/lib/jasmine/headless/js_template_spec.rb
deleted file mode 100644
index 3e07ca7..0000000
--- a/spec/lib/jasmine/headless/js_template_spec.rb
+++ /dev/null
@@ -1,31 +0,0 @@
-require 'spec_helper'
-
-describe Jasmine::Headless::JSTemplate do
- include FakeFS::SpecHelpers
-
- let(:template) { described_class.new(file) { data } }
- let(:file) { 'file' }
- let(:data) { 'data' }
-
- subject { template.render }
-
- before do
- File.open(file, 'wb') if file
- end
-
- context "no file'" do
- let(:file) { nil }
-
- it { should == data }
- end
-
- context 'file' do
- it { should == %{} }
- end
-
- context 'script as first thing' do
- let(:data) { '