From 1497522ab0b84f39a04774b4a6a86dea32aa9a3e Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Tue, 11 Jan 2005 22:06:05 +0000 Subject: Fixed the half applied 393 changeset git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@395 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- activesupport/lib/core_ext/fixnum_ext.rb | 52 ---------------------- activesupport/lib/core_ext/hash.rb | 6 +++ activesupport/lib/core_ext/hash/keys.rb | 36 +++++++++++++++ activesupport/lib/core_ext/hash_ext.rb | 6 --- activesupport/lib/core_ext/numeric.rb | 8 ++++ activesupport/lib/core_ext/numeric/bytes.rb | 33 ++++++++++++++ activesupport/lib/core_ext/numeric/time.rb | 58 +++++++++++++++++++++++++ activesupport/test/core_ext/fixnum_ext_test.rb | 23 ---------- activesupport/test/core_ext/numeric_ext_test.rb | 42 ++++++++++++++++++ 9 files changed, 183 insertions(+), 81 deletions(-) delete mode 100644 activesupport/lib/core_ext/fixnum_ext.rb create mode 100644 activesupport/lib/core_ext/hash.rb create mode 100644 activesupport/lib/core_ext/hash/keys.rb delete mode 100644 activesupport/lib/core_ext/hash_ext.rb create mode 100644 activesupport/lib/core_ext/numeric.rb create mode 100644 activesupport/lib/core_ext/numeric/bytes.rb create mode 100644 activesupport/lib/core_ext/numeric/time.rb delete mode 100644 activesupport/test/core_ext/fixnum_ext_test.rb create mode 100644 activesupport/test/core_ext/numeric_ext_test.rb (limited to 'activesupport') diff --git a/activesupport/lib/core_ext/fixnum_ext.rb b/activesupport/lib/core_ext/fixnum_ext.rb deleted file mode 100644 index 14944df3bb..0000000000 --- a/activesupport/lib/core_ext/fixnum_ext.rb +++ /dev/null @@ -1,52 +0,0 @@ -class Fixnum - def minutes - self * 60 - end - alias :minute :minutes - - def hours - self * 60.minutes - end - alias :hour :hours - - def days - self * 24.hours - end - alias :day :days - - def weeks - self * 7.days - end - alias :week :weeks - - def fortnights - self * 2.weeks - end - alias :fortnight :fortnights - - def months - self * 30.days - end - alias :month :months - - def years - self * 365.days - end - alias :year :years - - # Reads best without arguments: 10.minutes.ago - def ago(time = Time.now) - time - self - end - - # Reads best with argument: 10.minutes.until(time) - alias :until :ago - - # Reads best with argument: 10.minutes.since(time) - def since(time = Time.now) - time + self - end - - # Reads best without arguments: 10.minutes.from_now - alias :from_now :since -end diff --git a/activesupport/lib/core_ext/hash.rb b/activesupport/lib/core_ext/hash.rb new file mode 100644 index 0000000000..2aa7843e75 --- /dev/null +++ b/activesupport/lib/core_ext/hash.rb @@ -0,0 +1,6 @@ +$:.unshift(File.dirname(__FILE__)) +require 'hash/keys' + +class Hash + include ActiveSupport::CoreExtensions::Hash::Keys +end diff --git a/activesupport/lib/core_ext/hash/keys.rb b/activesupport/lib/core_ext/hash/keys.rb new file mode 100644 index 0000000000..0db37a6374 --- /dev/null +++ b/activesupport/lib/core_ext/hash/keys.rb @@ -0,0 +1,36 @@ +module ActiveSupport + module CoreExtensions + module Hash + module Keys + + # Return a new hash with all keys converted to symbols. + def symbolize_keys + inject({}) do |options, (key, value)| + options[key.to_sym] = value + options + end + end + + # Destructively convert all keys to symbols. + def symbolize_keys! + keys.each do |key| + unless key.is_a?(Symbol) + self[key.to_sym] = self[key] + delete(key) + end + end + self + end + + alias_method :to_options, :symbolize_keys + alias_method :to_options!, :symbolize_keys! + + def assert_valid_keys(valid_keys) + unknown_keys = keys - valid_keys + raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(", ")}") unless unknown_keys.empty? + end + + end + end + end +end diff --git a/activesupport/lib/core_ext/hash_ext.rb b/activesupport/lib/core_ext/hash_ext.rb deleted file mode 100644 index 90670c42c7..0000000000 --- a/activesupport/lib/core_ext/hash_ext.rb +++ /dev/null @@ -1,6 +0,0 @@ -class Hash - def assert_valid_keys(valid_keys) - unknown_keys = keys - valid_keys - raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(", ")}") unless unknown_keys.empty? - end -end \ No newline at end of file diff --git a/activesupport/lib/core_ext/numeric.rb b/activesupport/lib/core_ext/numeric.rb new file mode 100644 index 0000000000..ddc3d21c38 --- /dev/null +++ b/activesupport/lib/core_ext/numeric.rb @@ -0,0 +1,8 @@ +$:.unshift(File.dirname(__FILE__)) +require 'numeric/time' +require 'numeric/bytes' + +class Numeric + include ActiveSupport::CoreExtensions::Numeric::Time + include ActiveSupport::CoreExtensions::Numeric::Bytes +end diff --git a/activesupport/lib/core_ext/numeric/bytes.rb b/activesupport/lib/core_ext/numeric/bytes.rb new file mode 100644 index 0000000000..59846ff37e --- /dev/null +++ b/activesupport/lib/core_ext/numeric/bytes.rb @@ -0,0 +1,33 @@ +module ActiveSupport + module CoreExtensions + module Numeric + module Bytes + + def bytes + self + end + alias :byte :bytes + + def kilobytes + self * 1024 + end + alias :kilobyte :kilobytes + + def megabytes + self * 1024.kilobytes + end + alias :megabyte :megabytes + + def gigabytes + self * 1024.megabytes + end + alias :gigabyte :gigabytes + + def terabytes + self * 1024.gigabytes + end + alias :terabyte :terabytes + end + end + end +end diff --git a/activesupport/lib/core_ext/numeric/time.rb b/activesupport/lib/core_ext/numeric/time.rb new file mode 100644 index 0000000000..850dc9a783 --- /dev/null +++ b/activesupport/lib/core_ext/numeric/time.rb @@ -0,0 +1,58 @@ +module ActiveSupport + module CoreExtensions + module Numeric + module Time + def minutes + self * 60 + end + alias :minute :minutes + + def hours + self * 60.minutes + end + alias :hour :hours + + def days + self * 24.hours + end + alias :day :days + + def weeks + self * 7.days + end + alias :week :weeks + + def fortnights + self * 2.weeks + end + alias :fortnight :fortnights + + def months + self * 30.days + end + alias :month :months + + def years + self * 365.days + end + alias :year :years + + # Reads best without arguments: 10.minutes.ago + def ago(time = Time.now) + time - self + end + + # Reads best with argument: 10.minutes.until(time) + alias :until :ago + + # Reads best with argument: 10.minutes.since(time) + def since(time = Time.now) + time + self + end + + # Reads best without arguments: 10.minutes.from_now + alias :from_now :since + end + end + end +end diff --git a/activesupport/test/core_ext/fixnum_ext_test.rb b/activesupport/test/core_ext/fixnum_ext_test.rb deleted file mode 100644 index 12ef69596d..0000000000 --- a/activesupport/test/core_ext/fixnum_ext_test.rb +++ /dev/null @@ -1,23 +0,0 @@ -require 'test/unit' -require File.dirname(__FILE__) + '/../../lib/core_ext/fixnum_ext' - -class FixnumExtTest < Test::Unit::TestCase - def setup - @now = Time.now - @seconds = { - 1.minute => 60, - 10.minutes => 600, - 1.hour + 15.minutes => 4500, - 2.days + 4.hours + 30.minutes => 189000, - 5.years + 1.month + 1.fortnight => 161481600 - } - end - - def test_time_units - @seconds.each do |actual, expected| - assert_equal expected, actual - assert_equal expected.since(@now), @now + actual - assert_equal expected.until(@now), @now - actual - end - end -end diff --git a/activesupport/test/core_ext/numeric_ext_test.rb b/activesupport/test/core_ext/numeric_ext_test.rb new file mode 100644 index 0000000000..6057c8f8c3 --- /dev/null +++ b/activesupport/test/core_ext/numeric_ext_test.rb @@ -0,0 +1,42 @@ +require 'test/unit' +require File.dirname(__FILE__) + '/../../lib/core_ext/numeric' + +class NumericExtTimeTest < Test::Unit::TestCase + def setup + @now = Time.now + @seconds = { + 1.minute => 60, + 10.minutes => 600, + 1.hour + 15.minutes => 4500, + 2.days + 4.hours + 30.minutes => 189000, + 5.years + 1.month + 1.fortnight => 161481600 + } + end + + def test_time_units + @seconds.each do |actual, expected| + assert_equal expected, actual + assert_equal expected.since(@now), @now + actual + assert_equal expected.until(@now), @now - actual + end + end +end + +class NumericExtSizeTest < Test::Unit::TestCase + + def test_unit_in_terms_of_another + relationships = { + 1024.kilobytes => 1.megabyte, + 3584.0.kilobytes => 3.5.megabytes, + 3584.0.megabytes => 3.5.gigabytes, + 1.kilobyte ** 4 => 1.terabyte, + 1024.kilobytes + 2.megabytes => 3.megabytes, + 2.gigabytes / 4 => 512.megabytes, + 256.megabytes * 20 + 5.gigabytes => 10.gigabytes + } + + relationships.each do |left, right| + assert_equal right, left + end + end +end -- cgit v1.2.3