module Twirp::ServiceDSL

Public Instance Methods

package(name) click to toggle source

Configure service package name.

# File lib/twirp/service_dsl.rb, line 19
def package(name)
  @package = name.to_s
end
package_name() click to toggle source

Get configured package name as String. An empty value means that there's no package.

# File lib/twirp/service_dsl.rb, line 50
def package_name
  @package.to_s
end
rpc(rpc_method, input_class, output_class, opts) click to toggle source

Configure service rpc methods.

# File lib/twirp/service_dsl.rb, line 29
def rpc(rpc_method, input_class, output_class, opts)
  raise ArgumentError.new("rpc_method can not be empty") if rpc_method.to_s.empty?
  raise ArgumentError.new("input_class must be a Protobuf Message class") unless input_class.is_a?(Class)
  raise ArgumentError.new("output_class must be a Protobuf Message class") unless output_class.is_a?(Class)
  raise ArgumentError.new("opts[:ruby_method] is mandatory") unless opts && opts[:ruby_method]

  rpcdef = {
    rpc_method: rpc_method.to_sym, # as defined in the Proto file.
    input_class: input_class, # google/protobuf Message class to serialize the input (proto request).
    output_class: output_class, # google/protobuf Message class to serialize the output (proto response).
    ruby_method: opts[:ruby_method].to_sym, # method on the handler or client to handle this rpc requests.
  }

  @rpcs ||= {}
  @rpcs[rpc_method.to_s] = rpcdef

  rpc_define_method(rpcdef) if respond_to? :rpc_define_method # hook for the client to implement the methods on the class
end
rpcs() click to toggle source

Get raw definitions for rpc methods. This values are used as base env for handler methods.

# File lib/twirp/service_dsl.rb, line 69
def rpcs
  @rpcs || {}
end
service(name) click to toggle source

Configure service name.

# File lib/twirp/service_dsl.rb, line 24
def service(name)
  @service = name.to_s
end
service_full_name() click to toggle source

Service name with package prefix, which should uniquelly identifiy the service, for example “example.v3.Haberdasher” for package “example.v3” and service “Haberdasher”. This can be used as a path prefix to route requests to the service, because a Twirp URL is: “#{base_url}/#{service_full_name}/#{method]”

# File lib/twirp/service_dsl.rb, line 63
def service_full_name
  package_name.empty? ? service_name : "#{package_name}.#{service_name}"
end
service_name() click to toggle source

Service name as String. Defaults to the class name.

# File lib/twirp/service_dsl.rb, line 55
def service_name
  (@service || self.name.split("::").last).to_s
end