aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/file
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-02-28 16:48:14 -0800
committerJeremy Kemper <jeremy@bitsweat.net>2009-03-21 04:35:15 -0700
commita4e3aac40a7545285e4d1ccd78adfc41ca3d5f83 (patch)
tree1cf432cdb6fb06c24faceee1a8554b75daaf5bc5 /activesupport/lib/active_support/core_ext/file
parent6ed42ebdff05f9d28a60e91093d8f9afad03a958 (diff)
downloadrails-a4e3aac40a7545285e4d1ccd78adfc41ca3d5f83.tar.gz
rails-a4e3aac40a7545285e4d1ccd78adfc41ca3d5f83.tar.bz2
rails-a4e3aac40a7545285e4d1ccd78adfc41ca3d5f83.zip
* Introduce ActiveSupport.core_ext Integer, %w(conversions time etc)
* Convert some extension modules to simply reopening the class * Remove deprecated Float time extensions * Fold Base64 extension into ActiveSupport::Base64 since stdlib Base64 is gone
Diffstat (limited to 'activesupport/lib/active_support/core_ext/file')
-rw-r--r--activesupport/lib/active_support/core_ext/file/atomic.rb74
1 files changed, 34 insertions, 40 deletions
diff --git a/activesupport/lib/active_support/core_ext/file/atomic.rb b/activesupport/lib/active_support/core_ext/file/atomic.rb
index 8cc5654a4b..249fb1362d 100644
--- a/activesupport/lib/active_support/core_ext/file/atomic.rb
+++ b/activesupport/lib/active_support/core_ext/file/atomic.rb
@@ -1,46 +1,40 @@
-module ActiveSupport #:nodoc:
- module CoreExtensions #:nodoc:
- module File #:nodoc:
- module Atomic
- # Write to a file atomically. Useful for situations where you don't
- # want other processes or threads to see half-written files.
- #
- # File.atomic_write("important.file") do |file|
- # file.write("hello")
- # end
- #
- # If your temp directory is not on the same filesystem as the file you're
- # trying to write, you can provide a different temporary directory.
- #
- # File.atomic_write("/data/something.important", "/data/tmp") do |f|
- # file.write("hello")
- # end
- def atomic_write(file_name, temp_dir = Dir.tmpdir)
- require 'tempfile' unless defined?(Tempfile)
+class File
+ # Write to a file atomically. Useful for situations where you don't
+ # want other processes or threads to see half-written files.
+ #
+ # File.atomic_write("important.file") do |file|
+ # file.write("hello")
+ # end
+ #
+ # If your temp directory is not on the same filesystem as the file you're
+ # trying to write, you can provide a different temporary directory.
+ #
+ # File.atomic_write("/data/something.important", "/data/tmp") do |f|
+ # file.write("hello")
+ # end
+ def self.atomic_write(file_name, temp_dir = Dir.tmpdir)
+ require 'tempfile' unless defined?(Tempfile)
- temp_file = Tempfile.new(basename(file_name), temp_dir)
- yield temp_file
- temp_file.close
+ temp_file = Tempfile.new(basename(file_name), temp_dir)
+ yield temp_file
+ temp_file.close
- begin
- # Get original file permissions
- old_stat = stat(file_name)
- rescue Errno::ENOENT
- # No old permissions, write a temp file to determine the defaults
- check_name = join(dirname(file_name), ".permissions_check.#{Thread.current.object_id}.#{Process.pid}.#{rand(1000000)}")
- open(check_name, "w") { }
- old_stat = stat(check_name)
- unlink(check_name)
- end
+ begin
+ # Get original file permissions
+ old_stat = stat(file_name)
+ rescue Errno::ENOENT
+ # No old permissions, write a temp file to determine the defaults
+ check_name = join(dirname(file_name), ".permissions_check.#{Thread.current.object_id}.#{Process.pid}.#{rand(1000000)}")
+ open(check_name, "w") { }
+ old_stat = stat(check_name)
+ unlink(check_name)
+ end
- # Overwrite original file with temp file
- rename(temp_file.path, file_name)
+ # Overwrite original file with temp file
+ rename(temp_file.path, file_name)
- # Set correct permissions on new file
- chown(old_stat.uid, old_stat.gid, file_name)
- chmod(old_stat.mode, file_name)
- end
- end
- end
+ # Set correct permissions on new file
+ chown(old_stat.uid, old_stat.gid, file_name)
+ chmod(old_stat.mode, file_name)
end
end