aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRick Olson <technoweenie@gmail.com>2006-12-13 02:15:27 +0000
committerRick Olson <technoweenie@gmail.com>2006-12-13 02:15:27 +0000
commit011f4e7413f1bde83aa62a5fc46afd6957ff9b3e (patch)
tree3d7a2bc5998994c6ba2ee1759914dac15254beef
parent2f184c338b6379baecde8c882f72c4fa806a3a0b (diff)
downloadrails-011f4e7413f1bde83aa62a5fc46afd6957ff9b3e.tar.gz
rails-011f4e7413f1bde83aa62a5fc46afd6957ff9b3e.tar.bz2
rails-011f4e7413f1bde83aa62a5fc46afd6957ff9b3e.zip
Allow subclassed resources to share the site info [Rick]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@5717 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-rw-r--r--activeresource/CHANGELOG15
-rw-r--r--activeresource/lib/active_resource/base.rb15
-rw-r--r--activeresource/test/base_test.rb6
-rw-r--r--activeresource/test/fixtures/beast.rb14
4 files changed, 49 insertions, 1 deletions
diff --git a/activeresource/CHANGELOG b/activeresource/CHANGELOG
index 144264cd5a..679fb832d4 100644
--- a/activeresource/CHANGELOG
+++ b/activeresource/CHANGELOG
@@ -1,5 +1,20 @@
*SVN*
+* Allow subclassed resources to share the site info [Rick]
+
+ class BeastResource < ActiveResource::Base
+ self.site = 'http://beast.caboo.se'
+ end
+
+ class Forum < BeastResource
+ # taken from BeastResource
+ # self.site = 'http://beast.caboo.se'
+ end
+
+ class Topic < BeastResource
+ site << '/forums/:forum_id'
+ end
+
* Fix issues with ActiveResource collection handling. Closes #6291. [bmilekic]
* Use attr_accessor_with_default to dry up attribute initialization. References #6538. [Stuart Halloway]
diff --git a/activeresource/lib/active_resource/base.rb b/activeresource/lib/active_resource/base.rb
index 5f3820b2be..fd583d40e9 100644
--- a/activeresource/lib/active_resource/base.rb
+++ b/activeresource/lib/active_resource/base.rb
@@ -6,11 +6,16 @@ module ActiveResource
# calls.
cattr_accessor :logger
+ def self.inherited(base)
+ base.site = site.to_s if site
+ super
+ end
+
class << self
attr_reader :site
def site=(site)
- @site = site.is_a?(URI) ? site : URI.parse(site)
+ @site = create_site_uri_from(site)
@connection = nil
@site
end
@@ -78,6 +83,14 @@ module ActiveResource
def find_single(scope, options)
new(connection.get(element_path(scope, options)), options)
end
+
+ def create_site_uri_from(site)
+ returning site.is_a?(URI) ? site : URI.parse(site) do |uri|
+ def uri.<<(extra)
+ path << extra
+ end unless uri.respond_to?(:<<)
+ end
+ end
end
attr_accessor :attributes
diff --git a/activeresource/test/base_test.rb b/activeresource/test/base_test.rb
index 685f9aa994..e0bbdc00bf 100644
--- a/activeresource/test/base_test.rb
+++ b/activeresource/test/base_test.rb
@@ -1,6 +1,7 @@
require "#{File.dirname(__FILE__)}/abstract_unit"
require "fixtures/person"
require "fixtures/street_address"
+require "fixtures/beast"
class BaseTest < Test::Unit::TestCase
def setup
@@ -171,4 +172,9 @@ class BaseTest < Test::Unit::TestCase
def test_delete
assert Person.delete(1)
end
+
+ def test_should_use_site_prefix_and_credentials
+ assert_equal 'http://foo:bar@beast.caboo.se', Forum.site.to_s
+ assert_equal 'http://foo:bar@beast.caboo.se/forums/:forum_id', Topic.site.to_s
+ end
end
diff --git a/activeresource/test/fixtures/beast.rb b/activeresource/test/fixtures/beast.rb
new file mode 100644
index 0000000000..1fe81da425
--- /dev/null
+++ b/activeresource/test/fixtures/beast.rb
@@ -0,0 +1,14 @@
+class BeastResource < ActiveResource::Base
+ self.site = 'http://beast.caboo.se'
+ site.user = 'foo'
+ site.password = 'bar'
+end
+
+class Forum < BeastResource
+ # taken from BeastResource
+ # self.site = 'http://beast.caboo.se'
+end
+
+class Topic < BeastResource
+ site << '/forums/:forum_id'
+end \ No newline at end of file