Module: ActionWebService::Container::Delegated::ClassMethods

Defined in:
lib/action_web_service/container/delegated_container.rb

Instance Method Summary collapse

Instance Method Details

#add_web_service_definition_callback(&block) ⇒ Object

:nodoc:



63
64
65
# File 'lib/action_web_service/container/delegated_container.rb', line 63

def add_web_service_definition_callback(&block) # :nodoc:
  write_inheritable_array("web_service_definition_callbacks", [block])
end

#has_web_service?(name) ⇒ Boolean

Whether this service contains a service with the given name

Returns:

  • (Boolean)


55
56
57
# File 'lib/action_web_service/container/delegated_container.rb', line 55

def has_web_service?(name)
  web_services.has_key?(name.to_sym)
end

#web_service(name, object = nil, &block) ⇒ Object

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


40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/action_web_service/container/delegated_container.rb', line 40

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

#web_servicesObject

:nodoc:



59
60
61
# File 'lib/action_web_service/container/delegated_container.rb', line 59

def web_services # :nodoc:
  read_inheritable_attribute("web_services") || {}
end