module GrpcRequiredAnnotator::ClassMethods

Attributes

_required_hash[R]

Public Instance Methods

method_added(name) click to toggle source
Calls superclass method
# File lib/grpc_required_annotator.rb, line 24
def method_added(name)
  @_required_hash ||= {}

  if @_last_required
    @_required_hash[name] = @_last_required
    @_last_required = nil
    define_required_validate(name)
  end

  super
end
required(*fields) click to toggle source
# File lib/grpc_required_annotator.rb, line 12
def required(*fields)
  raise TypeError.new("cannot annotate `required` without GRPC::GenericService module") unless self < GRPC::GenericService

  @_last_required = Required.new(fields)
end
required_fields(method_name) click to toggle source
# File lib/grpc_required_annotator.rb, line 18
def required_fields(method_name)
  return nil unless @_required_hash[method_name]

  @_required_hash[method_name].fields
end

Private Instance Methods

define_required_validate(name) click to toggle source
# File lib/grpc_required_annotator.rb, line 38
def define_required_validate(name)
  old_name = "#{name}_".to_sym

  class_eval {
    alias_method old_name, name
    private old_name

    define_method(name) do |request, call|
      self.class._required_hash[name].validate!(request)
      send(old_name, request, call)
    end
  }
end