Skip to content
This repository has been archived by the owner on Jun 16, 2020. It is now read-only.

Refactored and simplified Sprockets asset caching #153

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion Gemfile
Expand Up @@ -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'
Expand Down
5 changes: 0 additions & 5 deletions lib/jasmine/headless.rb
Expand Up @@ -21,11 +21,6 @@ module Headless
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'
Expand Down
20 changes: 0 additions & 20 deletions lib/jasmine/headless/coffee_script_cache.rb

This file was deleted.

36 changes: 0 additions & 36 deletions lib/jasmine/headless/coffee_template.rb

This file was deleted.

19 changes: 0 additions & 19 deletions lib/jasmine/headless/css_template.rb

This file was deleted.

2 changes: 2 additions & 0 deletions lib/jasmine/headless/file_checker.rb
@@ -1,3 +1,5 @@
require 'rainbow'

module Jasmine::Headless::FileChecker
def excluded_formats
::Jasmine::Headless::EXCLUDED_FORMATS
Expand Down
47 changes: 40 additions & 7 deletions lib/jasmine/headless/files_list.rb
Expand Up @@ -39,6 +39,10 @@ def reset!
@sprockets_environment = nil
end

def sprockets_environment
@sprockets_environment ||= Sprockets::Environment.new
end

def registered_engines
@registered_engines ||= {}
end
Expand Down Expand Up @@ -138,7 +142,7 @@ def search_paths
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)
Expand All @@ -149,11 +153,10 @@ def sprockets_environment
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
Expand Down Expand Up @@ -207,7 +210,28 @@ def to_html(files)
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 = %{<script type="text/javascript" src="#{File.expand_path(cache_file)}"></script>}
# 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<script type="text/javascript">window.CSTF['#{File.basename(cache_file)}'] = '#{file}';</script>}
end
when 'text/css'
html = %{<link rel="stylesheet" href="#{File.expand_path(cache_file)}" type="text/css" />}
else
html = asset.body
end
html
end.compact.reject(&:empty?)
end

Expand Down Expand Up @@ -270,7 +294,12 @@ def extension_filter
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

Expand Down Expand Up @@ -326,6 +355,10 @@ def spec_helper
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
Expand Down
23 changes: 0 additions & 23 deletions lib/jasmine/headless/js_template.rb

This file was deleted.

15 changes: 0 additions & 15 deletions lib/jasmine/headless/jst_template.rb

This file was deleted.

21 changes: 0 additions & 21 deletions spec/lib/jasmine/headless/coffee_script_cache_spec.rb

This file was deleted.

55 changes: 0 additions & 55 deletions spec/lib/jasmine/headless/coffee_template_spec.rb

This file was deleted.

25 changes: 0 additions & 25 deletions spec/lib/jasmine/headless/css_template_spec.rb

This file was deleted.

14 changes: 14 additions & 0 deletions spec/lib/jasmine/headless/files_list_spec.rb
Expand Up @@ -189,6 +189,20 @@
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

31 changes: 0 additions & 31 deletions spec/lib/jasmine/headless/js_template_spec.rb

This file was deleted.