From 645b50833806fba1918ed8797186ffcefe892975 Mon Sep 17 00:00:00 2001 From: David Genord II Date: Wed, 25 Feb 2009 11:20:55 -0500 Subject: [PATCH 01/4] Fixed non eager loading resource lookup --- activeresource/lib/active_resource/base.rb | 10 ++++++++-- 1 files changed, 8 insertions(+), 2 deletions(-) diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index c1ec855..27bc125 100644 --- a/activeresource/lib/active_resource/base.rb +++ b/activeresource/lib/active_resource/base.rb @@ -1353,8 +1353,14 @@ module ActiveResource namespaces = module_names[0, module_names.size-1].map do |module_name| receiver = receiver.const_get(module_name) end - if namespace = namespaces.reverse.detect { |ns| ns.const_defined?(resource_name) } - return namespace.const_get(resource_name) + resource = namespaces.reverse.inject(nil) do |s,ns| + begin + break ns.const_get(resource_name) + rescue NameError + end + end + if resource + return resource else raise NameError end -- 1.7.1 From 0b079a1e8b343ffa54791d5d60b0f639b2799ac4 Mon Sep 17 00:00:00 2001 From: David Genord II Date: Mon, 9 Mar 2009 12:45:18 -0400 Subject: [PATCH 2/4] Tests for active resource namespace eager load bug --- activeresource/test/cases/base/load_test.rb | 19 +++++++++++++++++++ activeresource/test/fixtures/accounts/address.rb | 5 +++++ activeresource/test/fixtures/accounts/user.rb | 5 +++++ 3 files changed, 29 insertions(+), 0 deletions(-) create mode 100644 activeresource/test/fixtures/accounts/address.rb create mode 100644 activeresource/test/fixtures/accounts/user.rb diff --git a/activeresource/test/cases/base/load_test.rb b/activeresource/test/cases/base/load_test.rb index 7745a94..f143f36 100644 --- a/activeresource/test/cases/base/load_test.rb +++ b/activeresource/test/cases/base/load_test.rb @@ -166,3 +166,22 @@ class BaseLoadTest < Test::Unit::TestCase assert_kind_of Highrise::Deeply::Nested::Comment, n.comments.first end end + + +class NamespaceLoadTest < Test::Unit::TestCase + def setup + ActiveSupport::Dependencies.load_paths << "#{File.dirname(__FILE__)}/../../test/fixtures" + @user = Accounts::User.new + end + + def teardown + ActiveSupport::Dependencies.load_paths.delete "#{File.dirname(__FILE__)}/../../test/fixtures" + end + + def test_user_load + @user.load(:addresses => [{:street => '123 Main'}]) + assert_kind_of Accounts::Address, @user.addresses.first + end + + +end diff --git a/activeresource/test/fixtures/accounts/address.rb b/activeresource/test/fixtures/accounts/address.rb new file mode 100644 index 0000000..a074bd2 --- /dev/null +++ b/activeresource/test/fixtures/accounts/address.rb @@ -0,0 +1,5 @@ +module Accounts + class Address < ActiveResource::Base + self.site = "http://37s.sunrise.i:3000" + end +end diff --git a/activeresource/test/fixtures/accounts/user.rb b/activeresource/test/fixtures/accounts/user.rb new file mode 100644 index 0000000..ae38a89 --- /dev/null +++ b/activeresource/test/fixtures/accounts/user.rb @@ -0,0 +1,5 @@ +module Accounts + class User < ActiveResource::Base + self.site = "http://37s.sunrise.i:3000" + end +end -- 1.7.1 From 8f224bf5b99aa72d43fec53e7fd18c52c8ea45a9 Mon Sep 17 00:00:00 2001 From: David Genord II Date: Wed, 16 Jun 2010 16:40:54 -0400 Subject: [PATCH 3/4] Corrected load_path and added require for active_support dependencies --- activeresource/test/cases/base/load_test.rb | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-) diff --git a/activeresource/test/cases/base/load_test.rb b/activeresource/test/cases/base/load_test.rb index f143f36..9b04b1b 100644 --- a/activeresource/test/cases/base/load_test.rb +++ b/activeresource/test/cases/base/load_test.rb @@ -2,6 +2,7 @@ require 'abstract_unit' require "fixtures/person" require "fixtures/street_address" require 'active_support/core_ext/hash/conversions' +require 'active_support/dependencies' module Highrise class Note < ActiveResource::Base @@ -170,12 +171,12 @@ end class NamespaceLoadTest < Test::Unit::TestCase def setup - ActiveSupport::Dependencies.load_paths << "#{File.dirname(__FILE__)}/../../test/fixtures" + ActiveSupport::Dependencies.load_paths << "#{File.dirname(__FILE__)}/../../fixtures" @user = Accounts::User.new end def teardown - ActiveSupport::Dependencies.load_paths.delete "#{File.dirname(__FILE__)}/../../test/fixtures" + ActiveSupport::Dependencies.load_paths.delete "#{File.dirname(__FILE__)}/../../fixtures" end def test_user_load -- 1.7.1 From def74e6f5aca93ce63265a7e8ec5a6896658292c Mon Sep 17 00:00:00 2001 From: David Genord II Date: Wed, 16 Jun 2010 16:41:27 -0400 Subject: [PATCH 4/4] Rescue ArgumentError to catch not missing constant error --- activeresource/lib/active_resource/base.rb | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb index 27bc125..4f0f743 100644 --- a/activeresource/lib/active_resource/base.rb +++ b/activeresource/lib/active_resource/base.rb @@ -1356,7 +1356,7 @@ module ActiveResource resource = namespaces.reverse.inject(nil) do |s,ns| begin break ns.const_get(resource_name) - rescue NameError + rescue NameError, ArgumentError end end if resource -- 1.7.1