summaryrefslogtreecommitdiff
path: root/tool/generic_erb.rb
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2016-01-07 14:58:32 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2021-03-13 09:10:45 +0900
commit2148ee78a5bc5e679903f5839c66578bfcf94a39 (patch)
treea99cbd86b6fe41c2713f32efaef7c862f2819b71 /tool/generic_erb.rb
parent722e6c1d0479332c0f44c4408fa578cac0e3e479 (diff)
Extracted AtomicWrite
Diffstat (limited to 'tool/generic_erb.rb')
-rw-r--r--tool/generic_erb.rb35
1 files changed, 5 insertions, 30 deletions
diff --git a/tool/generic_erb.rb b/tool/generic_erb.rb
index 6af995fc13..3227e7a5ac 100644
--- a/tool/generic_erb.rb
+++ b/tool/generic_erb.rb
@@ -6,30 +6,22 @@
require 'erb'
require 'optparse'
require_relative 'lib/vpath'
-require_relative 'lib/colorize'
+require_relative 'lib/atomic_write'
vpath = VPath.new
-timestamp = nil
-output = nil
-ifchange = nil
+aw = AtomicWrite.new
+aw.vpath = vpath
source = false
-color = nil
templates = []
ARGV.options do |o|
- o.on('-t', '--timestamp[=PATH]') {|v| timestamp = v || true}
o.on('-i', '--input=PATH') {|v| template << v}
- o.on('-o', '--output=PATH') {|v| output = v}
- o.on('-c', '--[no-]if-change') {|v| ifchange = v}
o.on('-x', '--source') {source = true}
- o.on('--color') {color = true}
+ aw.def_options(o)
vpath.def_options(o)
o.order!(ARGV)
templates << (ARGV.shift or abort o.to_s) if templates.empty?
end
-color = Colorize.new(color)
-unchanged = color.pass("unchanged")
-updated = color.fail("updated")
result = templates.map do |template|
if ERB.instance_method(:initialize).parameters.assoc(:key) # Ruby 2.6+
@@ -41,21 +33,4 @@ result = templates.map do |template|
source ? erb.src : proc{erb.result(binding)}.call
end
result = result.size == 1 ? result[0] : result.join("")
-if output
- if ifchange and (vpath.open(output, "rb") {|f| f.read} rescue nil) == result
- puts "#{output} #{unchanged}"
- else
- open(output, "wb") {|f| f.print result}
- puts "#{output} #{updated}"
- end
- if timestamp
- if timestamp == true
- dir, base = File.split(output)
- timestamp = File.join(dir, ".time." + base)
- end
- File.open(timestamp, 'a') {}
- File.utime(nil, nil, timestamp)
- end
-else
- print result
-end
+aw.emit(result)