class Fluent::Counter::Validator

def self.request(data)

def self.request(data)
  errors = []
  raise "Received data is not Hash: #{data}" unless data.is_a?(Hash)
  unless data['id']
    errors << Fluent::Counter::InvalidRequest.new('Request should include `id`')
  end
  if !data['method']
    errors << Fluent::Counter::InvalidRequest.new('Request should include `method`')
  elsif !(VALID_NAME =~ data['method'])
    errors << Fluent::Counter::InvalidRequest.new('`method` is the invalid format')
  elsif !VALID_METHODS.include?(data['method'])
    errors << Fluent::Counter::MethodNotFound.new("Unknown method name passed: #{data['method']}")
  end
  errors.map(&:to_hash)
end

def call(data)

def call(data)
  success = []
  errors = []
  if @empty && data.empty?
    errors << Fluent::Counter::InvalidParams.new('One or more `params` are required')
  else
    data.each do |d|
      begin
        @types.each { |type| dispatch(type, d) }
        success << d
      rescue => e
        errors << e
      end
    end
  end
  [success, errors]
end

def dispatch(type, data)

def dispatch(type, data)
  send("validate_#{type}!", data)
rescue NoMethodError => e
  raise Fluent::Counter::InternalServerError.new(e)
end

def initialize(*types)

def initialize(*types)
  @types = types.map(&:to_s)
  @empty = @types.delete('empty')
end