Module: RightScale::Actor::ClassMethods

Defined in:
lib/right_agent/actor.rb

Instance Method Summary collapse

Instance Method Details

#default_prefixObject

Construct default prefix by which actor is identified in requests

Return

prefix(String)

Default prefix



58
59
60
# File 'lib/right_agent/actor.rb', line 58

def default_prefix
  prefix = to_s.to_const_path
end

#exception_callbackObject

Get exception callback procedure

Return

@exception_callback(Proc)

Callback procedure



155
156
157
# File 'lib/right_agent/actor.rb', line 155

def exception_callback
  @exception_callback
end

#expose_idempotent(*methods) ⇒ Object

Add methods to list of services supported by actor and mark these methods as idempotent

Parameters

methods(Array)

Symbol names for methods being exposed as actor idempotent services

Return

true

Always return true



70
71
72
73
74
75
76
77
78
79
80
# File 'lib/right_agent/actor.rb', line 70

def expose_idempotent(*methods)
  @exposed ||= {}
  methods.each do |m|
    if @exposed[m] == false
      Log.warning("Method #{m} declared both idempotent and non-idempotent, assuming non-idempotent")
    else
      @exposed[m] = true
    end
  end
  true
end

#expose_non_idempotent(*methods) ⇒ Object Also known as: expose

Add methods to list of services supported by actor By default these methods are not idempotent

Parameters

meths(Array)

Symbol names for methods being exposed as actor services

Return

true

Always return true



90
91
92
93
94
95
96
97
# File 'lib/right_agent/actor.rb', line 90

def expose_non_idempotent(*methods)
  @exposed ||= {}
  methods.each do |m|
    Log.warning("Method #{m} declared both idempotent and non-idempotent, assuming non-idempotent") if @exposed[m]
    @exposed[m] = false
  end
  true
end

#idempotent?(method) ⇒ Boolean

Determine whether actor method is idempotent

Parameters

method(Symbol)

Name for actor method

Return

(Boolean)

true if idempotent, false otherwise

Returns:

  • (Boolean)


127
128
129
# File 'lib/right_agent/actor.rb', line 127

def idempotent?(method)
  @exposed[method] if @exposed
end

#on_exception(proc = nil, &blk) ⇒ Object

Set method called when dispatching to this actor fails

The callback method is required to accept the following parameters:

method(Symbol):: Actor method being dispatched to
deliverable(Packet):: Packet delivered to dispatcher
exception(Exception):: Exception raised

Parameters

proc(Proc|Symbol|String)

Procedure to be called on exception

Block

Block to be executed if no Proc provided

Return

@exception_callback(Proc)

Callback procedure



146
147
148
149
# File 'lib/right_agent/actor.rb', line 146

def on_exception(proc = nil, &blk)
  raise 'No callback provided for on_exception' unless proc || blk
  @exception_callback = proc || blk
end

#provides_for(prefix) ⇒ Object

Get /prefix/method paths that actor responds to

Parameters

prefix(String)

Prefix by which actor is identified in requests

Return

(Array)

/prefix/method strings



108
109
110
111
112
113
114
115
116
117
118
# File 'lib/right_agent/actor.rb', line 108

def provides_for(prefix)
  return [] unless @exposed
  @exposed.each_key.select do |method|
    if instance_methods.include?(method.to_s) or instance_methods.include?(method.to_sym)
      true
    else
      Log.warning("Exposing non-existing method #{method} in actor #{prefix}")
      false
    end
  end.map { |method| "/#{prefix}/#{method}".squeeze('/') }
end