diff options
author | Pratik Naik <pratiknaik@gmail.com> | 2008-12-16 12:05:27 +0000 |
---|---|---|
committer | Pratik Naik <pratiknaik@gmail.com> | 2008-12-16 12:05:27 +0000 |
commit | ce0e2084107a20a773a587335cfe54bf70ade795 (patch) | |
tree | fded8e2f6a2d459bdd4676bb9646d3b54cc9f3fe /activesupport | |
parent | 016fffff6d6e434ee7fa69531b08b07d99f48583 (diff) | |
parent | 9e2b4a10f7f091868b3c3701efb4c04048455706 (diff) | |
download | rails-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.rb | 2 | ||||
-rw-r--r-- | activesupport/lib/active_support/deprecation.rb | 2 | ||||
-rw-r--r-- | activesupport/lib/active_support/ordered_hash.rb | 42 | ||||
-rw-r--r-- | activesupport/test/ordered_hash_test.rb | 59 |
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 |