Class: Protobuf::Rpc::Service
- Inherits:
-
Object
- Object
- Protobuf::Rpc::Service
- Includes:
- Logging, ServiceFilters
- Defined in:
- lib/protobuf/rpc/service.rb
Overview
Object to encapsulate the request/response types for a given service method
Constant Summary collapse
- DEFAULT_HOST =
'127.0.0.1'.freeze
- DEFAULT_PORT =
9399
Class Attribute Summary collapse
-
.host ⇒ Object
The host location of the service.
-
.port ⇒ Object
The port of the service on the destination server.
Instance Attribute Summary collapse
-
#env ⇒ Object
readonly
Returns the value of attribute env.
-
#request ⇒ Object
readonly
Returns the value of attribute request.
Class Method Summary collapse
-
.client(options = {}) ⇒ Object
Class Methods.
-
.configure(config = {}) ⇒ Object
Allows service-level configuration of location.
-
.implemented_services ⇒ Object
An array of defined service classes that contain implementation code.
-
.located_at(location) ⇒ Object
Shorthand call to configure, passing a string formatted as hostname:port e.g.
-
.rpc(method, request_type, response_type, &options_block) ⇒ Object
Define an rpc method with the given request and response types.
-
.rpc_method?(name) ⇒ Boolean
Check if the given method name is a known rpc endpoint.
-
.rpcs ⇒ Object
Hash containing the set of methods defined via
rpc
.
Instance Method Summary collapse
- #call(method_name) ⇒ Object
-
#initialize(env) ⇒ Service
constructor
Constructor!.
-
#response ⇒ Object
Response object for this rpc cycle.
-
#rpc_method?(name) ⇒ Boolean
Convenience method to get back to class method.
-
#rpcs ⇒ Object
Convenience method to get back to class rpcs hash.
Methods included from Logging
initialize_logger, #log_exception, #log_signature, #logger, #sign_message
Constructor Details
#initialize(env) ⇒ Service
Constructor!
Initialize a service with the rpc endpoint name and the bytes for the request.
27 28 29 30 |
# File 'lib/protobuf/rpc/service.rb', line 27 def initialize(env) @env = env.dup # Dup the env so it doesn't change out from under us @request = env.request end |
Class Attribute Details
.host ⇒ Object
The host location of the service.
57 58 59 |
# File 'lib/protobuf/rpc/service.rb', line 57 def self.host @host ||= DEFAULT_HOST end |
.port ⇒ Object
The port of the service on the destination server.
91 92 93 |
# File 'lib/protobuf/rpc/service.rb', line 91 def self.port @port ||= DEFAULT_PORT end |
Instance Attribute Details
#env ⇒ Object (readonly)
Returns the value of attribute env.
20 21 22 |
# File 'lib/protobuf/rpc/service.rb', line 20 def env @env end |
#request ⇒ Object (readonly)
Returns the value of attribute request.
20 21 22 |
# File 'lib/protobuf/rpc/service.rb', line 20 def request @request end |
Class Method Details
.client(options = {}) ⇒ Object
Class Methods
Create a new client for the given service. See Client#initialize and ClientConnection::DEFAULT_OPTIONS for all available options.
39 40 41 42 43 |
# File 'lib/protobuf/rpc/service.rb', line 39 def self.client( = {}) ::Protobuf::Rpc::Client.new({ :service => self, :host => host, :port => port }.merge()) end |
.configure(config = {}) ⇒ Object
Allows service-level configuration of location. Useful for system-startup configuration of a service so that any Clients using the Service.client sugar will not have to configure the location each time.
50 51 52 53 |
# File 'lib/protobuf/rpc/service.rb', line 50 def self.configure(config = {}) self.host = config[:host] if config.key?(:host) self.port = config[:port] if config.key?(:port) end |
.implemented_services ⇒ Object
An array of defined service classes that contain implementation code
69 70 71 72 73 74 75 76 77 |
# File 'lib/protobuf/rpc/service.rb', line 69 def self.implemented_services classes = (subclasses || []).select do |subclass| subclass.rpcs.any? do |(name, _)| subclass.method_defined? name end end classes.map(&:name) end |
.located_at(location) ⇒ Object
Shorthand call to configure, passing a string formatted as hostname:port e.g. 127.0.0.1:9933 e.g. localhost:0
83 84 85 86 87 |
# File 'lib/protobuf/rpc/service.rb', line 83 def self.located_at(location) return if location.nil? || location.downcase.strip !~ /.+:\d+/ host, port = location.downcase.strip.split ':' configure(:host => host, :port => port.to_i) end |
.rpc(method, request_type, response_type, &options_block) ⇒ Object
Define an rpc method with the given request and response types. This methods is only used by the generated service definitions and not useful for user code.
105 106 107 |
# File 'lib/protobuf/rpc/service.rb', line 105 def self.rpc(method, request_type, response_type, &) rpcs[method] = RpcMethod.new(method, request_type, response_type, &) end |
.rpc_method?(name) ⇒ Boolean
Check if the given method name is a known rpc endpoint.
117 118 119 |
# File 'lib/protobuf/rpc/service.rb', line 117 def self.rpc_method?(name) rpcs.key?(name) end |
.rpcs ⇒ Object
Hash containing the set of methods defined via rpc
.
111 112 113 |
# File 'lib/protobuf/rpc/service.rb', line 111 def self.rpcs @rpcs ||= {} end |
Instance Method Details
#call(method_name) ⇒ Object
121 122 123 |
# File 'lib/protobuf/rpc/service.rb', line 121 def call(method_name) run_filters(method_name) end |
#response ⇒ Object
Response object for this rpc cycle. Not assignable.
127 128 129 |
# File 'lib/protobuf/rpc/service.rb', line 127 def response @response ||= response_type.new end |
#rpc_method?(name) ⇒ Boolean
Convenience method to get back to class method.
133 134 135 |
# File 'lib/protobuf/rpc/service.rb', line 133 def rpc_method?(name) self.class.rpc_method?(name) end |
#rpcs ⇒ Object
Convenience method to get back to class rpcs hash.
139 140 141 |
# File 'lib/protobuf/rpc/service.rb', line 139 def rpcs self.class.rpcs end |