aboutsummaryrefslogtreecommitdiffstats
path: root/actionwebservice/lib/action_web_service/container/delegated_container.rb
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2007-11-21 15:17:04 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2007-11-21 15:17:04 +0000
commit9b83e3396180d0dbcb23ec3d71adb198eae7629b (patch)
tree01ea5352514acfede892ada48c58ec7f28be2a8e /actionwebservice/lib/action_web_service/container/delegated_container.rb
parent440f2890af5462402d1a77daaf1751a66742b974 (diff)
downloadrails-9b83e3396180d0dbcb23ec3d71adb198eae7629b.tar.gz
rails-9b83e3396180d0dbcb23ec3d71adb198eae7629b.tar.bz2
rails-9b83e3396180d0dbcb23ec3d71adb198eae7629b.zip
Ousted ActionWebService from Rails 2.0
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@8180 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'actionwebservice/lib/action_web_service/container/delegated_container.rb')
-rw-r--r--actionwebservice/lib/action_web_service/container/delegated_container.rb86
1 files changed, 0 insertions, 86 deletions
diff --git a/actionwebservice/lib/action_web_service/container/delegated_container.rb b/actionwebservice/lib/action_web_service/container/delegated_container.rb
deleted file mode 100644
index 5477f8d103..0000000000
--- a/actionwebservice/lib/action_web_service/container/delegated_container.rb
+++ /dev/null
@@ -1,86 +0,0 @@
-module ActionWebService # :nodoc:
- module Container # :nodoc:
- module Delegated # :nodoc:
- class ContainerError < ActionWebServiceError # :nodoc:
- end
-
- def self.included(base) # :nodoc:
- base.extend(ClassMethods)
- base.send(:include, ActionWebService::Container::Delegated::InstanceMethods)
- end
-
- module ClassMethods
- # Declares a web service that will provide access to the API of the given
- # +object+. +object+ must be an ActionWebService::Base derivative.
- #
- # Web service object creation can either be _immediate_, where the object
- # instance is given at class definition time, or _deferred_, where
- # object instantiation is delayed until request time.
- #
- # ==== Immediate web service object example
- #
- # class ApiController < ApplicationController
- # web_service_dispatching_mode :delegated
- #
- # web_service :person, PersonService.new
- # end
- #
- # For deferred instantiation, a block should be given instead of an
- # object instance. This block will be executed in controller instance
- # context, so it can rely on controller instance variables being present.
- #
- # ==== Deferred web service object example
- #
- # class ApiController < ApplicationController
- # web_service_dispatching_mode :delegated
- #
- # web_service(:person) { PersonService.new(request.env) }
- # end
- def web_service(name, object=nil, &block)
- if (object && block_given?) || (object.nil? && block.nil?)
- raise(ContainerError, "either service, or a block must be given")
- end
- name = name.to_sym
- if block_given?
- info = { name => { :block => block } }
- else
- info = { name => { :object => object } }
- end
- write_inheritable_hash("web_services", info)
- call_web_service_definition_callbacks(self, name, info)
- end
-
- # Whether this service contains a service with the given +name+
- def has_web_service?(name)
- web_services.has_key?(name.to_sym)
- end
-
- def web_services # :nodoc:
- read_inheritable_attribute("web_services") || {}
- end
-
- def add_web_service_definition_callback(&block) # :nodoc:
- write_inheritable_array("web_service_definition_callbacks", [block])
- end
-
- private
- def call_web_service_definition_callbacks(container_class, web_service_name, service_info)
- (read_inheritable_attribute("web_service_definition_callbacks") || []).each do |block|
- block.call(container_class, web_service_name, service_info)
- end
- end
- end
-
- module InstanceMethods # :nodoc:
- def web_service_object(web_service_name)
- info = self.class.web_services[web_service_name.to_sym]
- unless info
- raise(ContainerError, "no such web service '#{web_service_name}'")
- end
- service = info[:block]
- service ? self.instance_eval(&service) : info[:object]
- end
- end
- end
- end
-end