Permalink
Browse files

* 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
  • Loading branch information...
jeremy committed Mar 1, 2009
1 parent 6ed42eb commit a4e3aac40a7545285e4d1ccd78adfc41ca3d5f83
Showing with 163 additions and 331 deletions.
  1. +9 −0 activesupport/lib/active_support/base64.rb
  2. +3 −3 activesupport/lib/active_support/core_ext.rb
  3. +3 −15 activesupport/lib/active_support/core_ext/array.rb
  4. +18 −0 activesupport/lib/active_support/core_ext/array/wrap.rb
  5. +0 −24 activesupport/lib/active_support/core_ext/array/wrapper.rb
  6. +0 −4 activesupport/lib/active_support/core_ext/base64.rb
  7. +0 −16 activesupport/lib/active_support/core_ext/base64/encoding.rb
  8. +3 −0 activesupport/lib/active_support/core_ext/big_decimal.rb
  9. 0 activesupport/lib/active_support/core_ext/{bigdecimal → big_decimal}/conversions.rb
  10. +0 −6 activesupport/lib/active_support/core_ext/bigdecimal.rb
  11. +0 −4 activesupport/lib/active_support/core_ext/cgi.rb
  12. +14 −20 activesupport/lib/active_support/core_ext/cgi/escape_skipping_slashes.rb
  13. +2 −9 activesupport/lib/active_support/core_ext/date.rb
  14. +3 −4 activesupport/lib/active_support/core_ext/date_time.rb
  15. +1 −5 activesupport/lib/active_support/core_ext/exception.rb
  16. +0 −4 activesupport/lib/active_support/core_ext/file.rb
  17. +34 −40 activesupport/lib/active_support/core_ext/file/atomic.rb
  18. +0 −6 activesupport/lib/active_support/core_ext/float.rb
  19. +14 −20 activesupport/lib/active_support/core_ext/float/rounding.rb
  20. +0 −27 activesupport/lib/active_support/core_ext/float/time.rb
  21. +2 −14 activesupport/lib/active_support/core_ext/hash.rb
  22. +2 −9 activesupport/lib/active_support/core_ext/integer.rb
  23. +2 −9 activesupport/lib/active_support/core_ext/numeric.rb
  24. +0 −6 activesupport/lib/active_support/core_ext/pathname.rb
  25. +7 −11 activesupport/lib/active_support/core_ext/pathname/clean_within.rb
  26. +17 −19 activesupport/lib/active_support/core_ext/process/daemon.rb
  27. +2 −11 activesupport/lib/active_support/core_ext/range.rb
  28. +1 −1 activesupport/lib/active_support/core_ext/rexml.rb
  29. +13 −13 activesupport/lib/active_support/core_ext/symbol.rb
  30. +2 −11 activesupport/lib/active_support/core_ext/time.rb
  31. +10 −0 activesupport/lib/active_support/core_ext/util.rb
  32. +0 −20 activesupport/test/core_ext/duration_test.rb
  33. +1 −0 activesupport/test/core_ext/float_ext_test.rb
@@ -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
@@ -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
@@ -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)
@@ -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
@@ -1,24 +0,0 @@
-module ActiveSupport #:nodoc:
- module CoreExtensions #:nodoc:
- module Array #:nodoc:
- module Wrapper
- # 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 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
- end
- end
-end
@@ -1,4 +0,0 @@
-require 'active_support/base64'
-require 'active_support/core_ext/base64/encoding'
-
-ActiveSupport::Base64.extend ActiveSupport::CoreExtensions::Base64::Encoding
@@ -1,16 +0,0 @@
-module ActiveSupport #:nodoc:
- module CoreExtensions #:nodoc:
- module Base64 #:nodoc:
- module Encoding
- # 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 encode64s(value)
- encode64(value).gsub(/\n/, '')
- end
- end
- end
- end
-end
@@ -0,0 +1,3 @@
+require 'active_support/core_ext/util'
+require 'bigdecimal'
+ActiveSupport.core_ext BigDecimal, %w(conversions)
@@ -1,6 +0,0 @@
-require 'bigdecimal'
-require 'active_support/core_ext/bigdecimal/conversions'
-
-class BigDecimal#:nodoc:
- include ActiveSupport::CoreExtensions::BigDecimal::Conversions
-end
@@ -1,5 +1 @@
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:
- 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
@@ -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)
@@ -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)
@@ -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.
@@ -1,5 +1 @@
require 'active_support/core_ext/file/atomic'
-
-class File #:nodoc:
- extend ActiveSupport::CoreExtensions::File::Atomic
-end
@@ -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
@@ -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
@@ -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
@@ -1,27 +0,0 @@
-module ActiveSupport #:nodoc:
- module CoreExtensions #:nodoc:
- module Float #:nodoc:
- module Time
- # Deprication helper methods not available as core_ext is loaded first.
- def years
- ::ActiveSupport::Deprecation.warn(self.class.deprecated_method_warning(:years, "Fractional years are not respected. Convert value to integer before calling #years."), caller)
- years_without_deprecation
- end
- def months
- ::ActiveSupport::Deprecation.warn(self.class.deprecated_method_warning(:months, "Fractional months are not respected. Convert value to integer before calling #months."), caller)
- months_without_deprecation
- end
-
- def months_without_deprecation
- ActiveSupport::Duration.new(self * 30.days, [[:months, self]])
- end
- alias :month :months
-
- def years_without_deprecation
- ActiveSupport::Duration.new(self * 365.25.days, [[:years, self]])
- end
- alias :year :years
- end
- end
- end
-end
@@ -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)
@@ -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)
Oops, something went wrong.

0 comments on commit a4e3aac

Please sign in to comment.