diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index 7e4a75aa709bf18d880806c923b11c55e749d955..4af30ea13f1bee28616a4a980f6f4955622dae1b 100644 --- a/activeresource/lib/active_resource/base.rb +++ b/activeresource/lib/active_resource/base.rb @@ -356,6 +356,9 @@ def prefix=(value = '/') # Replace :placeholders with '#{embedded options[:lookups]}' prefix_call = value.gsub(/:\w+/) { |key| "\#{options[#{key}]}" } + # Clear prefix parameters in case they have been cached + @prefix_parameters = nil + # Redefine the new methods. code = <<-end_code def prefix_source() "#{value}" end diff --git a/activeresource/test/base_test.rb b/activeresource/test/base_test.rb index 0d997b2a2f9d03039f4be5fe1f891e02ad71703d..9a0789e0b4540370bacbfa6cfaffad8c9b37dd4d 100644 --- a/activeresource/test/base_test.rb +++ b/activeresource/test/base_test.rb @@ -485,6 +485,15 @@ def test_set_prefix_with_inline_keys end end + def test_set_prefix_twice_should_clear_params + SetterTrap.rollback_sets(Person) do |person_class| + person_class.prefix = "the_prefix/:the_param1" + assert_equal Set.new([:the_param1]), person_class.prefix_parameters + person_class.prefix = "the_prefix/:the_param2" + assert_equal Set.new([:the_param2]), person_class.prefix_parameters + end + end + def test_set_prefix_with_default_value SetterTrap.rollback_sets(Person) do |person_class| person_class.set_prefix