diff options
author | John Mileham <jmileham@gmail.com> | 2011-08-23 19:04:35 -0400 |
---|---|---|
committer | John Mileham <jmileham@gmail.com> | 2011-09-11 14:46:50 -0400 |
commit | a06d17480ff533fbc375df219a4e70886fb4899b (patch) | |
tree | 55a5054486b2a5bb76fd17ea6c17d9205ce0b15f /activeresource | |
parent | f776661fd2d93f9a8c01f97a4c4bc3ca97c3718d (diff) | |
download | rails-a06d17480ff533fbc375df219a4e70886fb4899b.tar.gz rails-a06d17480ff533fbc375df219a4e70886fb4899b.tar.bz2 rails-a06d17480ff533fbc375df219a4e70886fb4899b.zip |
ActiveResource shouldn't rely on the presence of Content-Length
Diffstat (limited to 'activeresource')
-rw-r--r-- | activeresource/lib/active_resource/base.rb | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index 693bd0592e..236dc565f3 100644 --- a/activeresource/lib/active_resource/base.rb +++ b/activeresource/lib/active_resource/base.rb @@ -1357,7 +1357,9 @@ module ActiveResource end def load_attributes_from_response(response) - if !response['Content-Length'].blank? && response['Content-Length'] != "0" && !response.body.nil? && response.body.strip.size > 0 + if (response_code_allows_body?(response.code) && + (response['Content-Length'].nil? || response['Content-Length'] != "0") && + !response.body.nil? && response.body.strip.size > 0) load(self.class.format.decode(response.body), true) @persisted = true end @@ -1381,6 +1383,12 @@ module ActiveResource end private + + # Determine whether the response is allowed to have a body per HTTP 1.1 spec section 4.4.1 + def response_code_allows_body?(c) + !((100..199).include?(c) || [204,304].include?(c)) + end + # Tries to find a resource for a given collection name; if it fails, then the resource is created def find_or_create_resource_for_collection(name) find_or_create_resource_for(ActiveSupport::Inflector.singularize(name.to_s)) |