Skip to content

Commit

Permalink
* Introduce ActiveSupport.core_ext Integer, %w(conversions time etc)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
jeremy committed Mar 21, 2009
1 parent 6ed42eb commit a4e3aac
Show file tree
Hide file tree
Showing 33 changed files with 163 additions and 331 deletions.
9 changes: 9 additions & 0 deletions activesupport/lib/active_support/base64.rb
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,13 @@ def self.decode64(data)
end
end
end

# Encodes the value as base64 without the newline breaks. This makes the base64 encoding readily usable as URL parameters
# or memcache keys without further processing.
#
# ActiveSupport::Base64.encode64s("Original unencoded string")
# # => "T3JpZ2luYWwgdW5lbmNvZGVkIHN0cmluZw=="
def Base64.encode64s(value)
encode64(value).gsub(/\n/, '')
end
end
6 changes: 3 additions & 3 deletions activesupport/lib/active_support/core_ext.rb
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
Dir[File.dirname(__FILE__) + "/core_ext/*.rb"].sort.each do |path|
filename = File.basename(path, '.rb')
require "active_support/core_ext/#{filename}"
require 'active_support/core_ext/util'
Dir["#{File.dirname(__FILE__)}/core_ext/*.rb"].sort.each do |path|
require "active_support/core_ext/#{File.basename(path, '.rb')}"
end
18 changes: 3 additions & 15 deletions activesupport/lib/active_support/core_ext/array.rb
Original file line number Diff line number Diff line change
@@ -1,15 +1,3 @@
require 'active_support/core_ext/array/access'
require 'active_support/core_ext/array/conversions'
require 'active_support/core_ext/array/extract_options'
require 'active_support/core_ext/array/grouping'
require 'active_support/core_ext/array/random_access'
require 'active_support/core_ext/array/wrapper'

class Array #:nodoc:
include ActiveSupport::CoreExtensions::Array::Access
include ActiveSupport::CoreExtensions::Array::Conversions
include ActiveSupport::CoreExtensions::Array::ExtractOptions
include ActiveSupport::CoreExtensions::Array::Grouping
include ActiveSupport::CoreExtensions::Array::RandomAccess
extend ActiveSupport::CoreExtensions::Array::Wrapper
end
require 'active_support/core_ext/util'
require 'active_support/core_ext/array/wrap'
ActiveSupport.core_ext Array, %w(access conversions extract_options grouping random_access)
18 changes: 18 additions & 0 deletions activesupport/lib/active_support/core_ext/array/wrap.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
class Array
# Wraps the object in an Array unless it's an Array. Converts the
# object to an Array using #to_ary if it implements that.
def self.wrap(object)
case object
when nil
[]
when self
object
else
if object.respond_to?(:to_ary)
object.to_ary
else
[object]
end
end
end
end
24 changes: 0 additions & 24 deletions activesupport/lib/active_support/core_ext/array/wrapper.rb

This file was deleted.

4 changes: 0 additions & 4 deletions activesupport/lib/active_support/core_ext/base64.rb

This file was deleted.

16 changes: 0 additions & 16 deletions activesupport/lib/active_support/core_ext/base64/encoding.rb

This file was deleted.

3 changes: 3 additions & 0 deletions activesupport/lib/active_support/core_ext/big_decimal.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
require 'active_support/core_ext/util'
require 'bigdecimal'
ActiveSupport.core_ext BigDecimal, %w(conversions)
6 changes: 0 additions & 6 deletions activesupport/lib/active_support/core_ext/bigdecimal.rb

This file was deleted.

4 changes: 0 additions & 4 deletions activesupport/lib/active_support/core_ext/cgi.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
require 'active_support/core_ext/cgi/escape_skipping_slashes'

class CGI #:nodoc:
extend ActiveSupport::CoreExtensions::CGI::EscapeSkippingSlashes
end
Original file line number Diff line number Diff line change
@@ -1,23 +1,17 @@
module ActiveSupport #:nodoc:
module CoreExtensions #:nodoc:
module CGI #:nodoc:
module EscapeSkippingSlashes #:nodoc:
if RUBY_VERSION >= '1.9'
def escape_skipping_slashes(str)
str = str.join('/') if str.respond_to? :join
str.gsub(/([^ \/a-zA-Z0-9_.-])/n) do
"%#{$1.unpack('H2' * $1.bytesize).join('%').upcase}"
end.tr(' ', '+')
end
else
def escape_skipping_slashes(str)
str = str.join('/') if str.respond_to? :join
str.gsub(/([^ \/a-zA-Z0-9_.-])/n) do
"%#{$1.unpack('H2').first.upcase}"
end.tr(' ', '+')
end
end
end
class CGI #:nodoc:
if RUBY_VERSION >= '1.9'
def self.escape_skipping_slashes(str)
str = str.join('/') if str.respond_to? :join
str.gsub(/([^ \/a-zA-Z0-9_.-])/n) do
"%#{$1.unpack('H2' * $1.bytesize).join('%').upcase}"
end.tr(' ', '+')
end
else
def self.escape_skipping_slashes(str)
str = str.join('/') if str.respond_to? :join
str.gsub(/([^ \/a-zA-Z0-9_.-])/n) do
"%#{$1.unpack('H2').first.upcase}"
end.tr(' ', '+')
end
end
end
11 changes: 2 additions & 9 deletions activesupport/lib/active_support/core_ext/date.rb
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
require 'active_support/core_ext/util'
require 'date'
require 'active_support/core_ext/date/behavior'
require 'active_support/core_ext/date/calculations'
require 'active_support/core_ext/date/conversions'

class Date#:nodoc:
include ActiveSupport::CoreExtensions::Date::Behavior
include ActiveSupport::CoreExtensions::Date::Calculations
include ActiveSupport::CoreExtensions::Date::Conversions
end
ActiveSupport.core_ext Date, %w(behavior calculations conversions)
7 changes: 3 additions & 4 deletions activesupport/lib/active_support/core_ext/date_time.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
require 'active_support/core_ext/util'
require 'date'
require 'active_support/core_ext/time/behavior'
require 'active_support/core_ext/time/zones'
require 'active_support/core_ext/date_time/calculations'
require 'active_support/core_ext/date_time/conversions'

class DateTime
include ActiveSupport::CoreExtensions::Time::Behavior
include ActiveSupport::CoreExtensions::Time::Zones
include ActiveSupport::CoreExtensions::DateTime::Calculations
include ActiveSupport::CoreExtensions::DateTime::Conversions
end

ActiveSupport.core_ext DateTime, %w(calculations conversions)
6 changes: 1 addition & 5 deletions activesupport/lib/active_support/core_ext/exception.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
module ActiveSupport
if RUBY_VERSION >= '1.9'
FrozenObjectError = RuntimeError
else
FrozenObjectError = TypeError
end
FrozenObjectError = RUBY_VERSION < '1.9' ? TypeError : RuntimeError
end

# TODO: Turn all this into using the BacktraceCleaner.
Expand Down
4 changes: 0 additions & 4 deletions activesupport/lib/active_support/core_ext/file.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
require 'active_support/core_ext/file/atomic'

class File #:nodoc:
extend ActiveSupport::CoreExtensions::File::Atomic
end
74 changes: 34 additions & 40 deletions activesupport/lib/active_support/core_ext/file/atomic.rb
Original file line number Diff line number Diff line change
@@ -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
6 changes: 0 additions & 6 deletions activesupport/lib/active_support/core_ext/float.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1 @@
require 'active_support/core_ext/float/rounding'
require 'active_support/core_ext/float/time'

class Float #:nodoc:
include ActiveSupport::CoreExtensions::Float::Rounding
include ActiveSupport::CoreExtensions::Float::Time
end
34 changes: 14 additions & 20 deletions activesupport/lib/active_support/core_ext/float/rounding.rb
Original file line number Diff line number Diff line change
@@ -1,24 +1,18 @@
module ActiveSupport #:nodoc:
module CoreExtensions #:nodoc:
module Float #:nodoc:
module Rounding
def self.included(base) #:nodoc:
base.class_eval do
alias_method :round_without_precision, :round
alias_method :round, :round_with_precision
end
end
class Float
remove_method :round

# Rounds the float with the specified precision.
#
# x = 1.337
# x.round # => 1
# x.round(1) # => 1.3
# x.round(2) # => 1.34
def round_with_precision(precision = nil)
precision.nil? ? round_without_precision : (self * (10 ** precision)).round / (10 ** precision).to_f
end
end
# Rounds the float with the specified precision.
#
# x = 1.337
# x.round # => 1
# x.round(1) # => 1.3
# x.round(2) # => 1.34
def round(precision = nil)
if precision
magnitude = 10.0 ** precision
(self * magnitude).round / magnitude
else
super()
end
end
end
27 changes: 0 additions & 27 deletions activesupport/lib/active_support/core_ext/float/time.rb

This file was deleted.

16 changes: 2 additions & 14 deletions activesupport/lib/active_support/core_ext/hash.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,2 @@
%w(keys indifferent_access deep_merge reverse_merge conversions diff slice except).each do |ext|
require "active_support/core_ext/hash/#{ext}"
end

class Hash #:nodoc:
include ActiveSupport::CoreExtensions::Hash::Keys
include ActiveSupport::CoreExtensions::Hash::IndifferentAccess
include ActiveSupport::CoreExtensions::Hash::DeepMerge
include ActiveSupport::CoreExtensions::Hash::ReverseMerge
include ActiveSupport::CoreExtensions::Hash::Conversions
include ActiveSupport::CoreExtensions::Hash::Diff
include ActiveSupport::CoreExtensions::Hash::Slice
include ActiveSupport::CoreExtensions::Hash::Except
end
require 'active_support/core_ext/util'
ActiveSupport.core_ext Hash, %w(keys indifferent_access deep_merge reverse_merge conversions diff slice except)
11 changes: 2 additions & 9 deletions activesupport/lib/active_support/core_ext/integer.rb
Original file line number Diff line number Diff line change
@@ -1,9 +1,2 @@
require 'active_support/core_ext/integer/even_odd'
require 'active_support/core_ext/integer/inflections'
require 'active_support/core_ext/integer/time'

class Integer #:nodoc:
include ActiveSupport::CoreExtensions::Integer::EvenOdd
include ActiveSupport::CoreExtensions::Integer::Inflections
include ActiveSupport::CoreExtensions::Integer::Time
end
require 'active_support/core_ext/util'
ActiveSupport.core_ext Integer, %w(even_odd inflections time)
Loading

0 comments on commit a4e3aac

Please sign in to comment.