Changeset 8525
- Timestamp:
- 01/02/08 09:14:34 (4 months ago)
- Files:
-
- trunk/activeresource/CHANGELOG (modified) (1 diff)
- trunk/activeresource/lib/active_resource/base.rb (modified) (1 diff)
- trunk/activeresource/test/base/load_test.rb (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/activeresource/CHANGELOG
r8503 r8525 1 1 *SVN* 2 3 * find_or_create_resource_for handles module nesting. #10646 [xavier] 2 4 3 5 * Allow setting ActiveResource::Base#format before #site. [rick] trunk/activeresource/lib/active_resource/base.rb
r8503 r8525 846 846 end 847 847 848 # Tries to find a resource in a non empty list of nested modules 849 # Raises a NameError if it was not found in any of the given nested modules 850 def find_resource_in_modules(resource_name, module_names) 851 receiver = Object 852 namespaces = module_names[0, module_names.size-1].map do |module_name| 853 receiver = receiver.const_get(module_name) 854 end 855 if namespace = namespaces.reverse.detect { |ns| ns.const_defined?(resource_name) } 856 return namespace.const_get(resource_name) 857 else 858 raise NameError 859 end 860 end 861 848 862 # Tries to find a resource for a given name; if it fails, then the resource is created 849 863 def find_or_create_resource_for(name) 850 864 resource_name = name.to_s.camelize 851 852 # FIXME: Make it generic enough to support any depth of module nesting 853 if (ancestors = self.class.name.split("::")).size > 1 854 begin 855 ancestors.first.constantize.const_get(resource_name) 856 rescue NameError 857 self.class.const_get(resource_name) 858 end 865 ancestors = self.class.name.split("::") 866 if ancestors.size > 1 867 find_resource_in_modules(resource_name, ancestors) 859 868 else 860 869 self.class.const_get(resource_name) trunk/activeresource/test/base/load_test.rb
r7719 r8525 11 11 self.site = "http://37s.sunrise.i:3000" 12 12 end 13 14 module Deeply 15 module Nested 16 17 class Note < ActiveResource::Base 18 self.site = "http://37s.sunrise.i:3000" 19 end 20 21 class Comment < ActiveResource::Base 22 self.site = "http://37s.sunrise.i:3000" 23 end 24 25 module TestDifferentLevels 26 27 class Note < ActiveResource::Base 28 self.site = "http://37s.sunrise.i:3000" 29 end 30 31 end 32 33 end 34 end 35 13 36 end 14 37 … … 109 132 assert_kind_of Highrise::Comment, n.comments.first 110 133 end 134 135 def test_nested_collections_within_deeply_nested_namespace 136 n = Highrise::Deeply::Nested::Note.new(:comments => [{ :name => "1" }]) 137 assert_kind_of Highrise::Deeply::Nested::Comment, n.comments.first 138 end 139 140 def test_nested_collections_in_different_levels_of_namespaces 141 n = Highrise::Deeply::Nested::TestDifferentLevels::Note.new(:comments => [{ :name => "1" }]) 142 assert_kind_of Highrise::Deeply::Nested::Comment, n.comments.first 143 end 144 145 111 146 end