aboutsummaryrefslogtreecommitdiffstats
path: root/activeresource
diff options
context:
space:
mode:
authorMark McSpadden <markmcspadden@gmail.com>2012-02-13 22:22:46 -0600
committerMark McSpadden <markmcspadden@gmail.com>2012-02-13 22:22:46 -0600
commit0101d27de606db25c244aae2243f337cfbba6ed0 (patch)
tree6db4f6902dfa23833b29576ce2f4746feb3dcbff /activeresource
parent11d1bdc09e91f1d77c36b7afeef912de0b94f331 (diff)
downloadrails-0101d27de606db25c244aae2243f337cfbba6ed0.tar.gz
rails-0101d27de606db25c244aae2243f337cfbba6ed0.tar.bz2
rails-0101d27de606db25c244aae2243f337cfbba6ed0.zip
Allow ActiveResource subclasses to inherit headers from parent
Diffstat (limited to 'activeresource')
-rw-r--r--activeresource/lib/active_resource/base.rb6
-rw-r--r--activeresource/test/cases/base_test.rb46
2 files changed, 52 insertions, 0 deletions
diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb
index 5ef50b6e03..0c2d070aef 100644
--- a/activeresource/lib/active_resource/base.rb
+++ b/activeresource/lib/active_resource/base.rb
@@ -588,6 +588,12 @@ module ActiveResource
def headers
@headers ||= {}
+
+ if superclass != Object && superclass.headers
+ @headers = superclass.headers.merge(@headers)
+ else
+ @headers
+ end
end
attr_writer :element_name
diff --git a/activeresource/test/cases/base_test.rb b/activeresource/test/cases/base_test.rb
index f5a58793d1..e89c5b19d3 100644
--- a/activeresource/test/cases/base_test.rb
+++ b/activeresource/test/cases/base_test.rb
@@ -437,6 +437,52 @@ class BaseTest < ActiveSupport::TestCase
assert_not_equal(first_connection, second_connection, 'Connection should be re-created')
end
+ def test_header_inheritance
+ fruit = Class.new(ActiveResource::Base)
+ apple = Class.new(fruit)
+ fruit.site = 'http://market'
+
+ fruit.headers['key'] = 'value'
+ assert_equal 'value', apple.headers['key']
+ end
+
+ def test_header_inheritance_set_at_multiple_points
+ fruit = Class.new(ActiveResource::Base)
+ apple = Class.new(fruit)
+ fruit.site = 'http://market'
+
+ fruit.headers['key'] = 'value'
+ assert_equal 'value', apple.headers['key']
+
+ apple.headers['key2'] = 'value2'
+ fruit.headers['key3'] = 'value3'
+
+ assert_equal 'value', apple.headers['key']
+ assert_equal 'value2', apple.headers['key2']
+ assert_equal 'value3', apple.headers['key3']
+ end
+
+ def test_header_inheritance_should_not_leak_upstream
+ fruit = Class.new(ActiveResource::Base)
+ apple = Class.new(fruit)
+ fruit.site = 'http://market'
+
+ fruit.headers['key'] = 'value'
+
+ apple.headers['key2'] = 'value2'
+ assert_equal nil, fruit.headers['key2']
+ end
+
+ def test_header_inheritance_should_not_leak_upstream
+ fruit = Class.new(ActiveResource::Base)
+ apple = Class.new(fruit)
+ fruit.site = 'http://market'
+
+ fruit.headers['key'] = 'value'
+
+ apple.headers['key2'] = 'value2'
+ assert_equal nil, fruit.headers['key2']
+ end
########################################################################
# Tests for setting up remote URLs for a given model (including adding