diff --git a/lib/active_resource/base.rb b/lib/active_resource/base.rb index edf92e5c25..c85edcfca3 100644 --- a/lib/active_resource/base.rb +++ b/lib/active_resource/base.rb @@ -818,12 +818,14 @@ def prefix=(value = "/") # Clear prefix parameters in case they have been cached @prefix_parameters = nil + code, line = <<-RUBY_EVAL, __LINE__ + 1 + def prefix_source() "#{value}" end + def prefix(options={}) "#{prefix_call}" end + RUBY_EVAL + silence_warnings do # Redefine the new methods. - instance_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1 - def prefix_source() "#{value}" end - def prefix(options={}) "#{prefix_call}" end - RUBY_EVAL + instance_eval code, __FILE__, line end rescue Exception => e logger.error "Couldn't set prefix: #{e}\n #{code}" if logger diff --git a/test/cases/base_test.rb b/test/cases/base_test.rb index 462920ac92..40b4aa8d26 100644 --- a/test/cases/base_test.rb +++ b/test/cases/base_test.rb @@ -43,6 +43,17 @@ def test_site_accessor_accepts_uri_or_string_argument assert_equal site, Person.site end + def test_prefix_error_message + previous_prefix = Person.prefix + previous_logger, Person.logger = Person.logger, ActiveSupport::Logger.new(output = StringIO.new) + + error = assert_raises(NoMethodError) { Person.prefix = nil } + assert_equal "Couldn't set prefix: #{error}", output.string.strip + ensure + Person.prefix = previous_prefix + Person.logger = previous_logger + end + def test_should_use_site_prefix_and_credentials assert_equal "http://foo:bar@beast.caboo.se", Forum.site.to_s assert_equal "http://foo:bar@beast.caboo.se/forums/:forum_id", Topic.site.to_s