summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormakoto kuwata <kwa@kuwata-lab.com>2011-03-21 09:03:59 +0900
committermakoto kuwata <kwa@kuwata-lab.com>2011-03-21 09:03:59 +0900
commit5f4e4cd9bbe277d6b8ab40b4ba7ff06ffec0dec9 (patch)
tree6825ece6619e6699d062234ee9f6a6592a437403
parent2c7f043f66d80b0b72217c79162d912a73dc80b9 (diff)
downloaderubis-5f4e4cd9bbe277d6b8ab40b4ba7ff06ffec0dec9.tar.gz
[change] 'Erubis::Engine.load_file()' to set cache timestamp to be the same value as original file
-rw-r--r--lib/erubis/engine.rb4
-rw-r--r--test/test-erubis.rb20
2 files changed, 15 insertions, 9 deletions
diff --git a/lib/erubis/engine.rb b/lib/erubis/engine.rb
index 0ef9a47..1df7e28 100644
--- a/lib/erubis/engine.rb
+++ b/lib/erubis/engine.rb
@@ -48,7 +48,8 @@ module Erubis
def self.load_file(filename, properties={})
cachename = properties[:cachename] || (filename + '.cache')
properties[:filename] = filename
- if test(?f, cachename) && File.mtime(filename) <= File.mtime(cachename)
+ timestamp = File.mtime(filename)
+ if test(?f, cachename) && timestamp == File.mtime(cachename)
engine = self.new(nil, properties)
engine.src = File.read(cachename)
else
@@ -57,6 +58,7 @@ module Erubis
tmpname = cachename + rand().to_s[1,8]
File.open(tmpname, 'wb') {|f| f.write(engine.src) }
File.rename(tmpname, cachename)
+ File.utime(timestamp, timestamp, cachename)
end
engine.src.untaint # ok?
return engine
diff --git a/test/test-erubis.rb b/test/test-erubis.rb
index a1cb4c2..ad00e5e 100644
--- a/test/test-erubis.rb
+++ b/test/test-erubis.rb
@@ -119,32 +119,36 @@ END
filename = 'tmp.load_file_timestamp1'
cachename = filename + '.cache'
begin
+ ## when cache doesn't exist then it is created automatically
File.open(filename, 'w') { |f| f.write(@input) }
- assert_block() { !test(?f, cachename) }
+ mtime = Time.now - 2.0
+ File.utime(mtime, mtime, filename)
+ !test(?f, cachename) or raise "** failed"
engine = @klass.load_file(filename)
assert_block() { test(?f, cachename) }
assert_block() { File.mtime(filename) <= File.mtime(cachename) }
assert_text_equal(@src, engine.src)
- #
+ ## when cache has different timestamp then it is recreated
input2 = @input.gsub(/ul>/, 'ol>')
src2 = @src.gsub(/ul>/, 'ol>')
- mtime = File.mtime(filename)
File.open(filename, 'w') { |f| f.write(input2) }
t1 = Time.now()
sleep(1)
t2 = Time.now()
+ #
File.utime(t1, t1, filename)
File.utime(t2, t2, cachename)
- assert_block('cache should be newer') { File.mtime(filename) < File.mtime(cachename) }
+ File.mtime(filename) < File.mtime(cachename) or raise "** failed"
engine = @klass.load_file(filename)
- assert_block('cache should be newer') { File.mtime(filename) < File.mtime(cachename) }
- assert_text_equal(@src, engine.src)
+ assert_block('cache should have same timestamp') { File.mtime(filename) == File.mtime(cachename) }
+ #assert_text_equal(@src, engine.src)
+ assert_text_equal(src2, engine.src)
#
File.utime(t2, t2, filename)
File.utime(t1, t1, cachename)
- assert_block('cache should be older') { File.mtime(filename) > File.mtime(cachename) }
+ File.mtime(filename) > File.mtime(cachename) or raise "** failed"
engine = @klass.load_file(filename)
- assert_block('cache should be newer') { File.mtime(filename) <= File.mtime(cachename) }
+ assert_block('cache should have same timestamp') { File.mtime(filename) == File.mtime(cachename) }
assert_text_equal(src2, engine.src)
ensure
File.unlink(cachename) if File.file?(cachename)