lib/sprockets/sass/importer.rb in sprockets-sass-1.0.1 vs lib/sprockets/sass/importer.rb in sprockets-sass-1.0.2

- old
+ new

@@ -3,28 +3,28 @@ module Sprockets module Sass class Importer < ::Sass::Importers::Base GLOB = /\*|\[.+\]/ - + # Reference to the Sprockets context attr_reader :context - - # + + # def initialize(context) @context = context end - + # @see Sass::Importers::Base#find_relative def find_relative(path, base_path, options) if path =~ GLOB engine_from_glob(path, base_path, options) else engine_from_path(path, base_path, options) end end - + # @see Sass::Importers::Base#find def find(path, options) engine_from_path(path, nil, options) end @@ -45,24 +45,24 @@ # @see Sass::Importers::Base#to_s def to_s "#{self.class.name}:#{context.pathname}" end - + protected - + # Create a Sass::Engine from the given path. def engine_from_path(path, base_path, options) pathname = resolve(path, base_path) or return nil context.depend_on pathname ::Sass::Engine.new evaluate(pathname), options.merge( :filename => pathname.to_s, :syntax => syntax(pathname), :importer => self ) end - + # Create a Sass::Engine that will handle importing # a glob of files. def engine_from_glob(glob, base_path, options) imports = resolve_glob(glob, base_path).inject('') do |imports, path| context.depend_on path @@ -74,62 +74,62 @@ :filename => base_path.to_s, :syntax => :scss, :importer => self ) end - + # Finds an asset from the given path. This is where # we make Sprockets behave like Sass, and import partial # style paths. def resolve(path, base_path) possible_files(path, base_path).each do |file| context.resolve(file) { |found| return found if context.asset_requirable?(found) } end nil end - + # Finds all of the assets using the given glob. def resolve_glob(glob, base_path) base_path = Pathname.new(base_path) path_with_glob = base_path.dirname.join(glob).to_s - + Pathname.glob(path_with_glob).sort.select do |path| path != context.pathname && context.asset_requirable?(path) end end - + # Returns all of the possible paths (including partial variations) # to attempt to resolve with the given path. def possible_files(path, base_path) path = Pathname.new(path) base_path = Pathname.new(base_path).dirname root_path = Pathname.new(context.root_path) paths = [ path, partialize_path(path) ] # Add the relative path from the root, if necessary - if path.relative? && base_path != root_path && path.to_s !~ /\A\.\// + if path.relative? && base_path != root_path relative_path = base_path.relative_path_from(root_path).join path - + paths.unshift(relative_path, partialize_path(relative_path)) end paths.compact end - + # Returns the partialized version of the given path. # Returns nil if the path is already to a partial. def partialize_path(path) if path.basename.to_s !~ /\A_/ Pathname.new path.to_s.sub(/([^\/]+)\Z/, '_\1') end end - + # Returns the Sass syntax of the given path. def syntax(path) path.to_s.include?('.sass') ? :sass : :scss end - + # Returns the string to be passed to the Sass engine. We use # Sprockets to process the file, but we remove any Sass processors # because we need to let the Sass::Engine handle that. def evaluate(path) processors = context.environment.attributes_for(path).processors.dup