From 0101d27de606db25c244aae2243f337cfbba6ed0 Mon Sep 17 00:00:00 2001 From: Mark McSpadden Date: Mon, 13 Feb 2012 22:22:46 -0600 Subject: Allow ActiveResource subclasses to inherit headers from parent --- activeresource/lib/active_resource/base.rb | 6 ++++ activeresource/test/cases/base_test.rb | 46 ++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) (limited to 'activeresource') 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 -- cgit v1.2.3