aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport
diff options
context:
space:
mode:
authorPratik Naik <pratiknaik@gmail.com>2008-12-16 12:05:27 +0000
committerPratik Naik <pratiknaik@gmail.com>2008-12-16 12:05:27 +0000
commitce0e2084107a20a773a587335cfe54bf70ade795 (patch)
treefded8e2f6a2d459bdd4676bb9646d3b54cc9f3fe /activesupport
parent016fffff6d6e434ee7fa69531b08b07d99f48583 (diff)
parent9e2b4a10f7f091868b3c3701efb4c04048455706 (diff)
downloadrails-ce0e2084107a20a773a587335cfe54bf70ade795.tar.gz
rails-ce0e2084107a20a773a587335cfe54bf70ade795.tar.bz2
rails-ce0e2084107a20a773a587335cfe54bf70ade795.zip
Merge commit 'mainstream/master'
Diffstat (limited to 'activesupport')
-rw-r--r--activesupport/lib/active_support/dependencies.rb2
-rw-r--r--activesupport/lib/active_support/deprecation.rb2
-rw-r--r--activesupport/lib/active_support/ordered_hash.rb42
-rw-r--r--activesupport/test/ordered_hash_test.rb59
4 files changed, 99 insertions, 6 deletions
diff --git a/activesupport/lib/active_support/dependencies.rb b/activesupport/lib/active_support/dependencies.rb
index 23b7aee514..7ce9adec2c 100644
--- a/activesupport/lib/active_support/dependencies.rb
+++ b/activesupport/lib/active_support/dependencies.rb
@@ -559,7 +559,7 @@ module ActiveSupport #:nodoc:
# Old style environment.rb referenced this method directly. Please note, it doesn't
# actually *do* anything any more.
def self.root(*args)
- if defined? Rails && Rails.logger
+ if defined?(Rails) && Rails.logger
Rails.logger.warn "Your environment.rb uses the old syntax, it may not continue to work in future releases."
Rails.logger.warn "For upgrade instructions please see: http://manuals.rubyonrails.com/read/book/19"
end
diff --git a/activesupport/lib/active_support/deprecation.rb b/activesupport/lib/active_support/deprecation.rb
index f18ea197a5..25b26e9c96 100644
--- a/activesupport/lib/active_support/deprecation.rb
+++ b/activesupport/lib/active_support/deprecation.rb
@@ -13,7 +13,7 @@ module ActiveSupport
$stderr.puts callstack.join("\n ") if debug
},
'development' => Proc.new { |message, callstack|
- logger = defined? Rails ? Rails.logger : Logger.new($stderr)
+ logger = defined?(Rails) ? Rails.logger : Logger.new($stderr)
logger.warn message
logger.debug callstack.join("\n ") if debug
}
diff --git a/activesupport/lib/active_support/ordered_hash.rb b/activesupport/lib/active_support/ordered_hash.rb
index 1ed7737017..3def0be639 100644
--- a/activesupport/lib/active_support/ordered_hash.rb
+++ b/activesupport/lib/active_support/ordered_hash.rb
@@ -18,13 +18,23 @@ module ActiveSupport
end
def delete(key)
- array_index = has_key?(key) && index(key)
- if array_index
- @keys.delete_at(array_index)
+ if has_key? key
+ index = @keys.index(key)
+ @keys.delete_at index
end
super
end
+ def reject!
+ super
+ sync_keys!
+ self
+ end
+
+ def reject(&block)
+ dup.reject!(&block)
+ end
+
def keys
@keys
end
@@ -48,6 +58,32 @@ module ActiveSupport
def each
keys.each {|key| yield [key, self[key]]}
end
+
+ alias_method :each_pair, :each
+
+ def clear
+ super
+ @keys.clear
+ self
+ end
+
+ def shift
+ k = @keys.first
+ v = delete(k)
+ [k, v]
+ end
+
+ def merge(other_hash)
+ result = dup
+ other_hash.each {|k,v| result[k]=v}
+ result
+ end
+
+ private
+
+ def sync_keys!
+ @keys.delete_if {|k| !has_key?(k)}
+ end
end
end
end
diff --git a/activesupport/test/ordered_hash_test.rb b/activesupport/test/ordered_hash_test.rb
index 094f9316d6..0e2aa4543d 100644
--- a/activesupport/test/ordered_hash_test.rb
+++ b/activesupport/test/ordered_hash_test.rb
@@ -36,9 +36,11 @@ class OrderedHashTest < Test::Unit::TestCase
@ordered_hash[key] = value
assert_equal @keys.length + 1, @ordered_hash.length
+ assert_equal @ordered_hash.keys.length, @ordered_hash.length
assert_equal value, @ordered_hash.delete(key)
assert_equal @keys.length, @ordered_hash.length
+ assert_equal @ordered_hash.keys.length, @ordered_hash.length
assert_nil @ordered_hash.delete(bad_key)
end
@@ -83,4 +85,59 @@ class OrderedHashTest < Test::Unit::TestCase
def test_each_with_index
@ordered_hash.each_with_index { |pair, index| assert_equal [@keys[index], @values[index]], pair}
end
-end
+
+ def test_each_pair
+ values = []
+ keys = []
+ @ordered_hash.each_pair do |key, value|
+ keys << key
+ values << value
+ end
+ assert_equal @values, values
+ assert_equal @keys, keys
+ end
+
+ def test_delete_if
+ (copy = @ordered_hash.dup).delete('pink')
+ assert_equal copy, @ordered_hash.delete_if { |k, _| k == 'pink' }
+ assert !@ordered_hash.keys.include?('pink')
+ end
+
+ def test_reject!
+ (copy = @ordered_hash.dup).delete('pink')
+ @ordered_hash.reject! { |k, _| k == 'pink' }
+ assert_equal copy, @ordered_hash
+ assert !@ordered_hash.keys.include?('pink')
+ end
+
+ def test_reject
+ copy = @ordered_hash.dup
+ new_ordered_hash = @ordered_hash.reject { |k, _| k == 'pink' }
+ assert_equal copy, @ordered_hash
+ assert !new_ordered_hash.keys.include?('pink')
+ end
+
+ def test_clear
+ @ordered_hash.clear
+ assert_equal [], @ordered_hash.keys
+ end
+
+ def test_merge
+ other_hash = ActiveSupport::OrderedHash.new
+ other_hash['purple'] = '800080'
+ other_hash['violet'] = 'ee82ee'
+ merged = @ordered_hash.merge other_hash
+ assert_equal merged.length, @ordered_hash.length + other_hash.length
+ assert_equal @keys + ['purple', 'violet'], merged.keys
+
+ @ordered_hash.merge! other_hash
+ assert_equal @ordered_hash, merged
+ assert_equal @ordered_hash.keys, merged.keys
+ end
+
+ def test_shift
+ pair = @ordered_hash.shift
+ assert_equal [@keys.first, @values.first], pair
+ assert !@ordered_hash.keys.include?(pair.first)
+ end
+end \ No newline at end of file