close #90 + close #89 (use sprockets) + close #87, #86 (new version of the mounter)

did committed Jul 07, 2013
commit b27a89831b2168c40bed2ec907ce9f9e0860f0a6
Showing 4 changed files with 26 additions and 15 deletions
Gemfile +1 -1
@@ @@ -4,6 +4,6 @@ source 'https://rubygems.org'
gemspec
# Development
- gem 'locomotivecms_mounter', path: '../gems/mounter', require: false
+ # gem 'locomotivecms_mounter', path: '../gems/mounter', require: false
gem 'rb-fsevent', '~> 0.9.1'
\ No newline at end of file
locomotive/wagon/server.rb b/lib/locomotive/wagon/server.rb +3 -1
@@ @@ -1,5 +1,7 @@
require 'better_errors'
require 'coffee_script'
+ require 'sprockets'
+ require "sprockets-sass"
require 'locomotive/wagon/listen'
require 'locomotive/wagon/server/middleware'
@@ @@ -58,7 +60,7 @@ module Locomotive::Wagon
}
use Favicon
- use DynamicAssets
+ use DynamicAssets, reader.mounting_point.path
use Logging
locomotive/wagon/server/dynamic_assets.rb b/lib/locomotive/wagon/server/dynamic_assets.rb +19 -12
@@ @@ -3,22 +3,29 @@ module Locomotive::Wagon
class DynamicAssets < Middleware
- def call(env)
- self.set_accessors(env)
+ attr_reader :app, :sprockets, :regexp
- path = env['PATH_INFO']
+ def initialize(app, root)
+ super(app)
- if path =~ /^\/(stylesheets|javascripts)\//
+ @regexp = /^\/(javascripts|stylesheets)\/(.*)$/
- mime_type = MIME::Types.type_for(path).first.try(:to_s) || 'text/plain'
- asset = self.mounting_point.theme_assets.detect do |_asset|
- _asset.path == path
- end
+ # make sure Compass is correctly configured
+ Locomotive::Mounter::Extensions::Compass.configure(root)
+
+ @sprockets = Sprockets::Environment.new
+ @sprockets.append_path File.join(root, 'public/stylesheets')
+ @sprockets.append_path File.join(root, 'public/javascripts')
+ end
+
+ def call(env)
+ if env['PATH_INFO'] =~ self.regexp
+ env['PATH_INFO'] = $2
- if asset
- [200, { 'Content-Type' => mime_type }, [asset.content!]]
- else
- [404, { 'Content-Type' => mime_type }, ['Asset not found']]
+ begin
+ self.sprockets.call(env)
+ rescue Exception => e
+ raise Locomotive::Wagon::DefaultException.new "Unable to serve a dynamic asset. Please check the logs.", e
end
else
app.call(env)
locomotivecms_wagon.gemspec +3 -1
@@ @@ -24,6 +24,8 @@ Gem::Specification.new do |gem|
gem.add_dependency 'locomotive_liquid', '~> 2.4.1'
gem.add_dependency 'RedCloth', '~> 4.2.9'
gem.add_dependency 'dragonfly', '~> 0.9.12'
+ gem.add_dependency 'sprockets', '~> 2.0'
+ gem.add_dependency 'sprockets-sass', '~> 1.0.1'
gem.add_dependency 'rack-cache', '~> 1.1'
gem.add_dependency 'better_errors', '~> 0.7.2'
@@ @@ -31,7 +33,7 @@ Gem::Specification.new do |gem|
gem.add_dependency 'httmultiparty', '0.3.8'
gem.add_dependency 'will_paginate', '~> 3.0.3'
- # gem.add_dependency 'locomotivecms_mounter', '~> 1.1.0'
+ gem.add_dependency 'locomotivecms_mounter', '~> 1.2.0'
gem.add_dependency 'faker', '~> 0.9.5'