lib/dassets/source_file.rb in dassets-0.3.0 vs lib/dassets/source_file.rb in dassets-0.4.0
- old
+ new
@@ -5,32 +5,31 @@
module Dassets
class SourceFile
+ def self.find_by_digest_path(path)
+ # always look at the freshest source list to make sure you get all sources
+ # not just the ones Dassets has cached
+ sources = Dassets::SourceList.new(Dassets.config).map{ |p| self.new(p) }
+
+ # get the last matching one in case two sources have the same digest path
+ # the last one *should* be correct since it was last to be digested
+ sources.select{ |s| s.digest_path == path }.last || NullSourceFile.new(path)
+ end
+
attr_reader :file_path
def initialize(file_path)
@file_path = file_path
@ext_list = File.basename(@file_path).split('.').reverse
end
- def exists?
- File.file?(@file_path)
+ def asset_file
+ @asset_file ||= Dassets::AssetFile.new(self.digest_path)
end
- def digest
- return if !self.exists?
-
- Dassets::AssetFile.new(self.digest_path, self.fingerprint).tap do |asset_file|
- FileUtils.mkdir_p(File.dirname(asset_file.output_path))
- File.open(asset_file.output_path, "w"){ |f| f.write(self.compiled) }
- Dassets.digests[self.digest_path] = self.fingerprint
- Dassets.digests.save!
- end
- end
-
def digest_path
@digest_path ||= begin
digest_basename = @ext_list.inject([]) do |digest_ext_list, ext|
digest_ext_list << Dassets.config.engines[ext].ext(ext)
end.reject{ |e| e.empty? }.reverse.join('.')
@@ -50,10 +49,22 @@
def fingerprint
@fingerprint ||= Digest::MD5.new.hexdigest(self.compiled)
end
+ def exists?
+ File.file?(@file_path)
+ end
+
+ def mtime
+ File.mtime(@file_path).httpdate
+ end
+
+ def ==(other_source_file)
+ self.file_path == other_source_file.file_path
+ end
+
private
def digest_dirname(file_path, source_path)
slash_path(File.dirname(file_path)).sub(slash_path(source_path), '')
end
@@ -64,8 +75,21 @@
def read_file(path)
File.send(File.respond_to?(:binread) ? :binread : :read, path.to_s)
end
+ end
+
+ class NullSourceFile < SourceFile
+ attr_reader :file_path, :digest_path, :compiled, :fingerprint
+ def initialize(digest_path)
+ @file_path = ''
+ @ext_list = []
+ @digest_path = digest_path
+ end
+ def digest; end
+ def ==(other_source_file)
+ self.file_path == other_source_file.file_path
+ end
end
end