lib/smallcage/commands/update.rb in smallcage-0.0.8 vs lib/smallcage/commands/update.rb in smallcage-0.0.9

- old
+ new

@@ -12,29 +12,110 @@ target = Pathname.new(@opts[:path]) unless target.exist? raise "target directory or file does not exist.: " + target.to_s end - loader = SmallCage::Loader.new(target) - renderer = SmallCage::Renderer.new(loader) + @loader = SmallCage::Loader.new(target) + @renderer = SmallCage::Renderer.new(@loader) + + urilist = render_smc_files + if list_file.exist? + urilist = delete_expired_files(urilist) + end + save_list(urilist) + end + + def render_smc_files + urilist = [] + @loader.each_smc_obj do |obj| + urilist << obj["uri"].smc + mark = obj["path"].exist? ? "U " : "A " + render_smc_obj(obj) + puts mark + obj["uri"] unless @opts[:quiet] + end + return urilist + end + private :render_smc_files + + def render_smc_obj(obj) + result = @renderer.render(obj["template"], obj) + result = after_rendering_filters(obj, result) + output_result(obj, result) + end + private :render_smc_obj + + def delete_expired_files(urilist) + old_urilist = load_list + root = @loader.root + target_uri = SmallCage::DocumentPath.new(root, @loader.target).uri + + if @loader.target.file? + old_urilist << target_uri unless old_urilist.include?(target_uri) + return old_urilist + end - loader.each_smc_obj do |obj| - result = renderer.render(obj["template"], obj) - - filters = loader.filters("after_rendering_filters") - filters.each do |f| - result = f.after_rendering_filter(obj, result) + target_uris = [] + not_target_uris = [] + old_urilist.each do |uri| + if uri.index(target_uri) == 0 + target_uris << uri + else + not_target_uris << uri end + end + + deletelist = target_uris - urilist - output_result(obj, result) - puts obj["uri"] if @opts[:quiet].nil? + deletelist.each do |uri| + delfile = SmallCage::DocumentPath.new(root, root + ("." + uri)).outfile + next unless delfile.path.file? + + File.delete(delfile.path) + puts "D #{delfile.uri}" unless @opts[:quiet] end + + return (not_target_uris + urilist).sort end + private :delete_expired_files + def after_rendering_filters(obj, result) + filters = @loader.filters("after_rendering_filters") + filters.each do |f| + result = f.after_rendering_filter(obj, result) + end + return result + end + private :after_rendering_filters + + def save_list(urilist) + f = list_file + FileUtils.makedirs(f.parent) + open(f, "w") do |io| + io << "version: " + SmallCage::VERSION::STRING + "\n" + urilist.each do |u| + io << u + "\n" + end + end + end + private :save_list + + def load_list + txt = File.read(list_file) + result = txt.split(/\n/) + result.shift + return result + end + private :load_list + + def list_file + @loader.root + "./_smc/tmp/list.txt" + end + private :list_file + def output_result(obj, str) open(obj["path"], "w") do |io| io << str end end private :output_result end -end \ No newline at end of file +end