diff options
author | David Heinemeier Hansson <david@loudthinking.com> | 2007-04-26 19:38:16 +0000 |
---|---|---|
committer | David Heinemeier Hansson <david@loudthinking.com> | 2007-04-26 19:38:16 +0000 |
commit | 234b0b7ca021cff6e36376c38b7c70321b8550f1 (patch) | |
tree | 19286d784104a3071e532978b1238345f8cf37c0 /activeresource/lib/active_resource | |
parent | 37e8e35c92222537ff82aa3c47cadebad4c32ce0 (diff) | |
download | rails-234b0b7ca021cff6e36376c38b7c70321b8550f1.tar.gz rails-234b0b7ca021cff6e36376c38b7c70321b8550f1.tar.bz2 rails-234b0b7ca021cff6e36376c38b7c70321b8550f1.zip |
Added support for using classes from within a single nested module [DHH]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6587 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activeresource/lib/active_resource')
-rw-r--r-- | activeresource/lib/active_resource/base.rb | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index 4635a5009e..3f7121a7ca 100644 --- a/activeresource/lib/active_resource/base.rb +++ b/activeresource/lib/active_resource/base.rb @@ -112,8 +112,11 @@ module ActiveResource returning(self.new(attributes)) { |res| res.save } end - # Core method for finding resources. Used similarly to ActiveRecord's find method. - # Person.find(1) # => GET /people/1.xml + # Core method for finding resources. Used similarly to Active Record's find method. + # Person.find(1) # => GET /people/1.xml + # Person.find(:all) # => GET /people.xml + # Person.find(:all, :title => "CEO") # => GET /people.xml?title=CEO + # Person.find(:managers) # => GET /people/managers.xml # StreetAddress.find(1, :person_id => 1) # => GET /people/1/street_addresses/1.xml def find(*arguments) scope = arguments.slice!(0) @@ -290,7 +293,9 @@ module ActiveResource # Update the resource on the remote service. def update - connection.put(element_path(prefix_options), to_xml) + returning connection.put(element_path(prefix_options), to_xml) do |response| + load_attributes_from_response(response) + end end # Create (i.e., save to the remote service) the new resource. @@ -329,7 +334,13 @@ module ActiveResource # Tries to find a resource for a given name; if it fails, then the resource is created def find_or_create_resource_for(name) resource_name = name.to_s.camelize - self.class.const_get(resource_name) + + # FIXME: Make it generic enough to support any depth of module nesting + if (ancestors = self.class.name.split("::")).size > 1 + ancestors.first.constantize.const_get(resource_name) + else + self.class.const_get(resource_name) + end rescue NameError resource = self.class.const_set(resource_name, Class.new(ActiveResource::Base)) resource.prefix = self.class.prefix |