class GrpcRequiredAnnotator::Required

Attributes

fields[R]

Public Class Methods

new(fields) click to toggle source
# File lib/grpc_required_annotator/required.rb, line 10
def initialize(fields)
  @fields = fields
end

Public Instance Methods

validate!(request) click to toggle source
# File lib/grpc_required_annotator/required.rb, line 14
def validate!(request)
  @fields.each do |field|
    unless request.respond_to?(field)
      raise NotExistFieldError.new("#{field} does not exist in #{request.class}")
    end

    value = request.public_send(field)

    case value
    when Integer
      raise GRPC::InvalidArgument.new("`#{field}` is required") if value == 0
    when String
      raise GRPC::InvalidArgument.new("`#{field}` is required") if value == ""
    when Google::Protobuf::FieldMask
      raise GRPC::InvalidArgument.new("`#{field}` is required") if value.paths.empty?
    when Google::Protobuf::RepeatedField
      raise GRPC::InvalidArgument.new("`#{field}` is required") if value.empty?
    when Symbol
      raise GRPC::InvalidArgument.new("`#{field}` is required") if value.to_s.include?("UNSPECIFIED") # https://developers.google.com/protocol-buffers/docs/style#enums
    when nil
      raise GRPC::InvalidArgument.new("`#{field}` is required")
    else
      raise UnsupportedTypeError.new("#{value.class} is not supported. value is #{value}")
    end
  end

  true
end