diff --git a/lib/attentive/compass_patches.rb b/lib/attentive/compass_patches.rb new file mode 100644 index 0000000..8d74caf --- /dev/null +++ b/lib/attentive/compass_patches.rb @@ -0,0 +1,21 @@ +module Compass::RailsImageFunctionPatch + private + + def image_path_for_size(image_file) + begin + file = ::Attentive::Server.sprockets_env.find_asset(image_file) + return file + rescue ::Sprockets::FileOutsidePaths + return super(image_file) + end + end +end + +module Sass::Script::Functions + include Compass::RailsImageFunctionPatch +end + +# Wierd that this has to be re-included to pick up sub-modules. Ruby bug? +class Sass::Script::Functions::EvaluationContext + include Sass::Script::Functions +end \ No newline at end of file diff --git a/lib/attentive/server.rb b/lib/attentive/server.rb index c66f2da..7d896ca 100644 --- a/lib/attentive/server.rb +++ b/lib/attentive/server.rb @@ -2,6 +2,7 @@ require 'sprockets' require 'sprockets-vendor_gems' require 'sprockets-sass' require 'compass' +require 'attentive/compass_patches' require 'sinatra' require 'nokogiri' require 'rdiscount' @@ -13,7 +14,23 @@ require 'rack/builder' require 'forwardable' module Attentive + module Helpers + def image_path(path, options) + if resolve(path, options) + return "/assets/#{path}" + end + + nil + end + + + end class Server < Rack::Builder + + def self.sprockets_env + @sprockets_env ||= Sprockets::EnvironmentWithVendoredGems.new + end + def self.start(options) require 'rack' require 'pygments' @@ -31,12 +48,13 @@ module Attentive def self.call(env) @app ||= Rack::Builder.new do map '/assets' do - env = Sprockets::EnvironmentWithVendoredGems.new + env = ::Attentive::Server.sprockets_env env.append_path 'assets/javascripts' env.append_path 'assets/stylesheets' env.append_path 'assets/images' env.append_path Attentive.root.join('lib/assets/javascripts') env.append_path Attentive.root.join('lib/assets/stylesheets') + env.context_class.send(:include, ::Attentive::Helpers) run env end