class Trusona::Services::BaseService

The starting point for building other services that interact with the Trusona API

Attributes

resource_path[RW]

Public Class Methods

new(client: Trusona::Api::HTTPClient.new, mapper: Trusona::Mappers::BaseMapper.new) click to toggle source
# File lib/trusona/services/base_service.rb, line 11
def initialize(client: Trusona::Api::HTTPClient.new,
               mapper: Trusona::Mappers::BaseMapper.new)
  @client = client
  @mapper = mapper
  @resource_path = '/base-service'
end

Public Instance Methods

collection_path() click to toggle source
# File lib/trusona/services/base_service.rb, line 46
def collection_path
  @resource_path
end
create(resource) click to toggle source
# File lib/trusona/services/base_service.rb, line 28
def create(resource)
  raise Trusona::InvalidResourceError unless resource.valid?

  handle(@client.post(collection_path, resource.to_json), resource)
end
delete(resource) click to toggle source
# File lib/trusona/services/base_service.rb, line 40
def delete(resource)
  raise Trusona::InvalidResourceError unless resource.id

  handle(@client.delete(member_path(resource)), resource)
end
get(resource) click to toggle source
# File lib/trusona/services/base_service.rb, line 22
def get(resource)
  raise Trusona::InvalidResourceError unless resource.id

  handle(@client.get(member_path(resource)), resource)
end
index() click to toggle source
# File lib/trusona/services/base_service.rb, line 18
def index
  handle(@client.get(collection_path))
end
member_path(resource) click to toggle source
# File lib/trusona/services/base_service.rb, line 50
def member_path(resource)
  [collection_path, resource.id].join('/')
end
update(resource) click to toggle source
# File lib/trusona/services/base_service.rb, line 34
def update(resource)
  raise Trusona::InvalidResourceError unless resource.id

  handle(@client.patch(member_path(resource), resource.to_json), resource)
end

Private Instance Methods

bad_request() click to toggle source
# File lib/trusona/services/base_service.rb, line 94
def bad_request
  raise Trusona::BadRequestError, readable_error
end
failed_dependency() click to toggle source
# File lib/trusona/services/base_service.rb, line 102
def failed_dependency
  raise Trusona::FailedDependencyError, readable_error
end
handle(response, resource = {}) click to toggle source

rubocop:disable Metrics/MethodLength rubocop:disable Metrics/CyclomaticComplexity

# File lib/trusona/services/base_service.rb, line 62
def handle(response, resource = {})
  @response = response

  raise if resource.nil?

  case response.code
  when 200..299
    success(response, resource)
  when 400
    bad_request
  when 404
    not_found
  when 403
    unauthorized
  when 422
    unprocessable_entity
  when 424
    failed_dependency
  when 500..599
    server_error
  else
    raise Trusona::RequestError, readable_error
  end
end
not_found() click to toggle source
# File lib/trusona/services/base_service.rb, line 106
def not_found
  raise Trusona::ResourceNotFoundError, readable_error
end
readable_error() click to toggle source
# File lib/trusona/services/base_service.rb, line 118
def readable_error
  default = '[UNKNOWN] Error - An unknown error has occurred.'
  return default unless @response

  body = @response.to_h
  msg = []
  msg << "[#{body['error']}] #{body['message']} - #{body['description']}"
  return msg.join("\n") unless body['field_errors']

  body['field_errors'].each do |field|
    msg << "\t #{field.join(' => ')}"
  end

  msg.join("\n")
end
server_error() click to toggle source
# File lib/trusona/services/base_service.rb, line 114
def server_error
  raise Trusona::ApiError
end
success(response, resource) click to toggle source

rubocop:enable Metrics/MethodLength rubocop:enable Metrics/CyclomaticComplexity

# File lib/trusona/services/base_service.rb, line 89
def success(response, resource)
  verify_response(response)
  @mapper.map(response, resource)
end
unauthorized() click to toggle source
# File lib/trusona/services/base_service.rb, line 110
def unauthorized
  raise Trusona::UnauthorizedRequestError, readable_error
end
unprocessable_entity() click to toggle source
# File lib/trusona/services/base_service.rb, line 98
def unprocessable_entity
  raise Trusona::UnprocessableEntityError, readable_error
end
verify_response(response) click to toggle source
# File lib/trusona/services/base_service.rb, line 56
def verify_response(response)
  raise Trusona::SigningError unless response.verified?
end