lib/condenser/transformers/sass_transformer/importer.rb in condenser-0.0.5 vs lib/condenser/transformers/sass_transformer/importer.rb in condenser-0.0.7
- old
+ new
@@ -1,65 +1,36 @@
-require 'sass/importers'
-
class Condenser::SassTransformer
- class Importer < Sass::Importers::Base
-
- GLOB = /(\A|\/)(\*|\*\*\/\*)\z/
-
- def key(name, options)
- [self.class.name + ':' + File.dirname(expand_path(name)), File.basename(name)]
- end
-
- def public_url(name, sourcemap_directory)
- Sass::Util.file_uri_from_path(name)
- end
-
- def find_relative(name, base, options)
+ class Importer < SassC::Importer
+
+ def imports(name, base)
name = expand_path(name, base)
env = options[:condenser][:environment]
accept = extensions.keys.map { |x| options[:condenser][:environment].extensions[x] }
options[:asset][:dependencies] << [name, accept.map{ |i| [i] }]
- if name.match(GLOB)
- contents = ""
- env.resolve(name, accept: accept).sort_by(&:filename).each do |asset|
- next if asset.filename == options[:filename]
- contents << "@import \"#{asset.filename}\";\n"
- end
-
- return nil if contents == ""
- Sass::Engine.new(contents, options.merge(
- filename: name,
- importer: self,
- syntax: :scss
- ))
- else
- asset = options[:condenser][:environment].find(name, accept: accept)
- if asset
- asset.process
- Sass::Engine.new(asset.source, options.merge(
- filename: asset.filename,
- importer: self,
- syntax: extensions[asset.ext]
- ))
- else
- nil
- end
+ imports = []
+ env.resolve(name, accept: accept).sort_by(&:filename).each do |asset|
+ next if asset.filename == options[:filename]
+ imports << Import.new(asset.filename, source: asset.source, source_map_path: nil)
end
- end
- def find(name, options)
- if options[:condenser]
- # globs must be relative
- return if name =~ GLOB
- super
- else
- super
+ if imports.empty? && env.npm_path
+ package = File.join(env.npm_path, name, 'package.json')
+ if File.exists?(package)
+ package = JSON.parse(File.read(package))
+ if package['style']
+ imports << Import.new(name, source: File.read(File.join(env.npm_path, name, package['style'])), source_map_path: nil)
+ end
+ end
end
- end
- # Allow .css files to be @import'd
+ raise Condenser::FileNotFound, "couldn't find file '#{name}'" if imports.empty?
+
+ imports
+ end
+
+ # Allow .css files to be @imported
def extensions
{ '.sass' => :sass, '.scss' => :scss, '.css' => :scss }
end
private
\ No newline at end of file