aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-01-11 22:06:05 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-01-11 22:06:05 +0000
commit1497522ab0b84f39a04774b4a6a86dea32aa9a3e (patch)
tree86a8908581bb23153c20f6c3026a0e0ecb95a405 /activesupport
parentd44deadd3912ee44d12edfc4579ed58323e4c393 (diff)
downloadrails-1497522ab0b84f39a04774b4a6a86dea32aa9a3e.tar.gz
rails-1497522ab0b84f39a04774b4a6a86dea32aa9a3e.tar.bz2
rails-1497522ab0b84f39a04774b4a6a86dea32aa9a3e.zip
Fixed the half applied 393 changeset
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@395 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/core_ext/fixnum_ext.rb52
-rw-r--r--activesupport/lib/core_ext/hash.rb6
-rw-r--r--activesupport/lib/core_ext/hash/keys.rb36
-rw-r--r--activesupport/lib/core_ext/hash_ext.rb6
-rw-r--r--activesupport/lib/core_ext/numeric.rb8
-rw-r--r--activesupport/lib/core_ext/numeric/bytes.rb33
-rw-r--r--activesupport/lib/core_ext/numeric/time.rb58
-rw-r--r--activesupport/test/core_ext/fixnum_ext_test.rb23
-rw-r--r--activesupport/test/core_ext/numeric_ext_test.rb42
9 files changed, 183 insertions, 81 deletions
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