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
Expand Up @@ -30,4 +30,13 @@ def self.decode64(data)
end end
end 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 end
6 changes: 3 additions & 3 deletions activesupport/lib/active_support/core_ext.rb
@@ -1,4 +1,4 @@
Dir[File.dirname(__FILE__) + "/core_ext/*.rb"].sort.each do |path| require 'active_support/core_ext/util'
filename = File.basename(path, '.rb') Dir["#{File.dirname(__FILE__)}/core_ext/*.rb"].sort.each do |path|
require "active_support/core_ext/#{filename}" require "active_support/core_ext/#{File.basename(path, '.rb')}"
end end
18 changes: 3 additions & 15 deletions activesupport/lib/active_support/core_ext/array.rb
@@ -1,15 +1,3 @@
require 'active_support/core_ext/array/access' require 'active_support/core_ext/util'
require 'active_support/core_ext/array/conversions' require 'active_support/core_ext/array/wrap'
require 'active_support/core_ext/array/extract_options' ActiveSupport.core_ext Array, %w(access conversions extract_options grouping random_access)
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
18 changes: 18 additions & 0 deletions activesupport/lib/active_support/core_ext/array/wrap.rb
@@ -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
@@ -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
@@ -1,5 +1 @@
require 'active_support/core_ext/cgi/escape_skipping_slashes' require 'active_support/core_ext/cgi/escape_skipping_slashes'

class CGI #:nodoc:
extend ActiveSupport::CoreExtensions::CGI::EscapeSkippingSlashes
end
@@ -1,23 +1,17 @@
module ActiveSupport #:nodoc: class CGI #:nodoc:
module CoreExtensions #:nodoc: if RUBY_VERSION >= '1.9'
module CGI #:nodoc: def self.escape_skipping_slashes(str)
module EscapeSkippingSlashes #:nodoc: str = str.join('/') if str.respond_to? :join
if RUBY_VERSION >= '1.9' str.gsub(/([^ \/a-zA-Z0-9_.-])/n) do
def escape_skipping_slashes(str) "%#{$1.unpack('H2' * $1.bytesize).join('%').upcase}"
str = str.join('/') if str.respond_to? :join end.tr(' ', '+')
str.gsub(/([^ \/a-zA-Z0-9_.-])/n) do end
"%#{$1.unpack('H2' * $1.bytesize).join('%').upcase}" else
end.tr(' ', '+') def self.escape_skipping_slashes(str)
end str = str.join('/') if str.respond_to? :join
else str.gsub(/([^ \/a-zA-Z0-9_.-])/n) do
def escape_skipping_slashes(str) "%#{$1.unpack('H2').first.upcase}"
str = str.join('/') if str.respond_to? :join end.tr(' ', '+')
str.gsub(/([^ \/a-zA-Z0-9_.-])/n) do
"%#{$1.unpack('H2').first.upcase}"
end.tr(' ', '+')
end
end
end
end end
end end
end end
11 changes: 2 additions & 9 deletions activesupport/lib/active_support/core_ext/date.rb
@@ -1,10 +1,3 @@
require 'active_support/core_ext/util'
require 'date' require 'date'
require 'active_support/core_ext/date/behavior' ActiveSupport.core_ext Date, %w(behavior calculations conversions)
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
7 changes: 3 additions & 4 deletions activesupport/lib/active_support/core_ext/date_time.rb
@@ -1,12 +1,11 @@
require 'active_support/core_ext/util'
require 'date' require 'date'
require 'active_support/core_ext/time/behavior' require 'active_support/core_ext/time/behavior'
require 'active_support/core_ext/time/zones' 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 class DateTime
include ActiveSupport::CoreExtensions::Time::Behavior include ActiveSupport::CoreExtensions::Time::Behavior
include ActiveSupport::CoreExtensions::Time::Zones include ActiveSupport::CoreExtensions::Time::Zones
include ActiveSupport::CoreExtensions::DateTime::Calculations
include ActiveSupport::CoreExtensions::DateTime::Conversions
end end

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


# TODO: Turn all this into using the BacktraceCleaner. # TODO: Turn all this into using the BacktraceCleaner.
Expand Down
4 changes: 0 additions & 4 deletions activesupport/lib/active_support/core_ext/file.rb
@@ -1,5 +1 @@
require 'active_support/core_ext/file/atomic' 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
@@ -1,46 +1,40 @@
module ActiveSupport #:nodoc: class File
module CoreExtensions #:nodoc: # Write to a file atomically. Useful for situations where you don't
module File #:nodoc: # want other processes or threads to see half-written files.
module Atomic #
# Write to a file atomically. Useful for situations where you don't # File.atomic_write("important.file") do |file|
# want other processes or threads to see half-written files. # file.write("hello")
# # end
# File.atomic_write("important.file") do |file| #
# file.write("hello") # If your temp directory is not on the same filesystem as the file you're
# end # trying to write, you can provide a different temporary directory.
# #
# If your temp directory is not on the same filesystem as the file you're # File.atomic_write("/data/something.important", "/data/tmp") do |f|
# trying to write, you can provide a different temporary directory. # file.write("hello")
# # end
# File.atomic_write("/data/something.important", "/data/tmp") do |f| def self.atomic_write(file_name, temp_dir = Dir.tmpdir)
# file.write("hello") require 'tempfile' unless defined?(Tempfile)
# end
def atomic_write(file_name, temp_dir = Dir.tmpdir)
require 'tempfile' unless defined?(Tempfile)


temp_file = Tempfile.new(basename(file_name), temp_dir) temp_file = Tempfile.new(basename(file_name), temp_dir)
yield temp_file yield temp_file
temp_file.close temp_file.close


begin begin
# Get original file permissions # Get original file permissions
old_stat = stat(file_name) old_stat = stat(file_name)
rescue Errno::ENOENT rescue Errno::ENOENT
# No old permissions, write a temp file to determine the defaults # 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)}") check_name = join(dirname(file_name), ".permissions_check.#{Thread.current.object_id}.#{Process.pid}.#{rand(1000000)}")
open(check_name, "w") { } open(check_name, "w") { }
old_stat = stat(check_name) old_stat = stat(check_name)
unlink(check_name) unlink(check_name)
end end


# Overwrite original file with temp file # Overwrite original file with temp file
rename(temp_file.path, file_name) rename(temp_file.path, file_name)


# Set correct permissions on new file # Set correct permissions on new file
chown(old_stat.uid, old_stat.gid, file_name) chown(old_stat.uid, old_stat.gid, file_name)
chmod(old_stat.mode, file_name) chmod(old_stat.mode, file_name)
end
end
end
end end
end end
6 changes: 0 additions & 6 deletions activesupport/lib/active_support/core_ext/float.rb
@@ -1,7 +1 @@
require 'active_support/core_ext/float/rounding' 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
@@ -1,24 +1,18 @@
module ActiveSupport #:nodoc: class Float
module CoreExtensions #:nodoc: remove_method :round
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


# Rounds the float with the specified precision. # Rounds the float with the specified precision.
# #
# x = 1.337 # x = 1.337
# x.round # => 1 # x.round # => 1
# x.round(1) # => 1.3 # x.round(1) # => 1.3
# x.round(2) # => 1.34 # x.round(2) # => 1.34
def round_with_precision(precision = nil) def round(precision = nil)
precision.nil? ? round_without_precision : (self * (10 ** precision)).round / (10 ** precision).to_f if precision
end magnitude = 10.0 ** precision
end (self * magnitude).round / magnitude
else
super()
end end
end 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
@@ -1,14 +1,2 @@
%w(keys indifferent_access deep_merge reverse_merge conversions diff slice except).each do |ext| require 'active_support/core_ext/util'
require "active_support/core_ext/hash/#{ext}" ActiveSupport.core_ext Hash, %w(keys indifferent_access deep_merge reverse_merge conversions diff slice except)
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
11 changes: 2 additions & 9 deletions activesupport/lib/active_support/core_ext/integer.rb
@@ -1,9 +1,2 @@
require 'active_support/core_ext/integer/even_odd' require 'active_support/core_ext/util'
require 'active_support/core_ext/integer/inflections' ActiveSupport.core_ext Integer, %w(even_odd inflections time)
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

0 comments on commit a4e3aac

Please sign in to comment.