diff options
author | Gaston Ramos <ramos.gaston@gmail.com> | 2010-09-13 17:05:52 -0300 |
---|---|---|
committer | Gaston Ramos <ramos.gaston@gmail.com> | 2010-09-27 15:25:16 -0300 |
commit | a71e07d61e8bb69788b7120a5cf0d3620c6094be (patch) | |
tree | 2e1b6900b9f38e32b48582b88c285e5fa88fa6da /activeresource | |
parent | e3d6434dd9ef052ce703b36f968eb9f6fe1f0a11 (diff) | |
download | rails-a71e07d61e8bb69788b7120a5cf0d3620c6094be.tar.gz rails-a71e07d61e8bb69788b7120a5cf0d3620c6094be.tar.bz2 rails-a71e07d61e8bb69788b7120a5cf0d3620c6094be.zip |
- elmenth_path raise an ActiveResource::MissingPrefixParam exception when prefix_options does not has all required prefix_options ex: class StreetAddress < ActiveResource::Base self.site = "http://37s.sunrise.i:3000/people/:person_id/" end
StreetAddress.element_path(1)
# => ActiveResource::MissingPrefixParam
Diffstat (limited to 'activeresource')
-rw-r--r-- | activeresource/lib/active_resource/base.rb | 6 | ||||
-rw-r--r-- | activeresource/lib/active_resource/exceptions.rb | 3 | ||||
-rw-r--r-- | activeresource/test/cases/base_test.rb | 8 | ||||
-rw-r--r-- | activeresource/test/cases/finder_test.rb | 2 |
4 files changed, 18 insertions, 1 deletions
diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index d31db9f0ba..80af7e7adf 100644 --- a/activeresource/lib/active_resource/base.rb +++ b/activeresource/lib/active_resource/base.rb @@ -621,6 +621,12 @@ module ActiveResource # # => /posts/5/comments/1.xml?active=1 # def element_path(id, prefix_options = {}, query_options = nil) + + p_options = HashWithIndifferentAccess.new(prefix_options) + prefix_parameters.each do |p| + raise MissingPrefixParam if p_options[p].blank? + end + prefix_options, query_options = split_options(prefix_options) if query_options.nil? "#{prefix(prefix_options)}#{collection_name}/#{URI.escape id.to_s}.#{format.extension}#{query_string(query_options)}" end diff --git a/activeresource/lib/active_resource/exceptions.rb b/activeresource/lib/active_resource/exceptions.rb index 0f4549fd73..6b953b28ad 100644 --- a/activeresource/lib/active_resource/exceptions.rb +++ b/activeresource/lib/active_resource/exceptions.rb @@ -36,6 +36,9 @@ module ActiveResource def to_s; response['Location'] ? "#{super} => #{response['Location']}" : super; end end + # Raised when ... + class MissingPrefixParam < ArgumentError; end # :nodoc: + # 4xx Client Error class ClientError < ConnectionError; end # :nodoc: diff --git a/activeresource/test/cases/base_test.rb b/activeresource/test/cases/base_test.rb index 6fabeeebcd..eb1a747c0a 100644 --- a/activeresource/test/cases/base_test.rb +++ b/activeresource/test/cases/base_test.rb @@ -475,6 +475,12 @@ class BaseTest < Test::Unit::TestCase assert_equal '/people/ann%20mary/addresses/ann%20mary.xml', StreetAddress.element_path(:'ann mary', 'person_id' => 'ann mary') end + def test_custom_element_path_without_parent_id + assert_raise ActiveResource::MissingPrefixParam do + assert_equal '/people/1/addresses/1.xml', StreetAddress.element_path(1) + end + end + def test_module_element_path assert_equal '/sounds/1.xml', Asset::Sound.element_path(1) end @@ -560,6 +566,8 @@ class BaseTest < Test::Unit::TestCase 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 + person_class.prefix = "the_prefix/:the_param1/other_prefix/:the_param2" + assert_equal Set.new([:the_param2, :the_param1]), person_class.prefix_parameters end end diff --git a/activeresource/test/cases/finder_test.rb b/activeresource/test/cases/finder_test.rb index fd09ef46d7..ebb783996d 100644 --- a/activeresource/test/cases/finder_test.rb +++ b/activeresource/test/cases/finder_test.rb @@ -84,7 +84,7 @@ class FinderTest < Test::Unit::TestCase def test_find_by_id_not_found assert_raise(ActiveResource::ResourceNotFound) { Person.find(99) } - assert_raise(ActiveResource::ResourceNotFound) { StreetAddress.find(1) } + assert_raise(ActiveResource::ResourceNotFound) { StreetAddress.find(99, :params => {:person_id => 1}) } end def test_find_all_sub_objects |