Defer evaluation of an edited file's contents
authorTom Hughes <tom@compton.nu>
Sat, 23 Nov 2013 11:48:42 +0000 (11:48 +0000)
committerTom Hughes <tom@compton.nu>
Sat, 23 Nov 2013 11:50:46 +0000 (11:50 +0000)
We want to make sure we don't build the contents until the resource
is asctually being run, as it may rely on template files installed by
a previous resource.

cookbooks/chef/libraries/edit_file.rb

index 1c8e263..400e196 100644 (file)
@@ -1,9 +1,22 @@
 class Chef
+  class Util
+    class EditedFile
+      def initialize(file, block)
+        @file = file
+        @block = block
+      end
+
+      def to_s
+        ::File.new(@file).collect do |line|
+          line = @block.call(line)
+        end.join("")
+      end
+    end
+  end
+
   class Recipe
     def edit_file(file, &block)
-      ::File.new(file).collect do |line|
-        line = yield line
-      end.join("")
+      Chef::Util::EditedFile.new(file, block)
     end
   end
 end