Sha256: eb23f5193f5a034f26f1685f7771c6504a649cb016e519f25495663ba022db58

Contents?: true

Size: 1.92 KB

Versions: 1

Compression:

Stored size: 1.92 KB

Contents

module RailsApiResponse
  module ControllerHelpers
    module Responses

      # Response methods
      def respond_success(message: '', data: {})
        render json: ResponseTemplate.success(message_metadata(message), data)
      end

      def respond_error(message: '', instance: nil, data: {})
        metadata = instance.present? ? error_instance_metadata(instance) : message_metadata(message)
        render json: ResponseTemplate.error(metadata, data)
      end

      def respond_exception_error(exception:, data: {})
        render json: ResponseTemplate.error(error_exception_metadata(exception), data)
      end

      def respond_create_success(message: "", data: {})
        render json: ResponseTemplate.create_success(message_metadata(message), data)
      end

      def respond_error_credential(message:, data: {})
        render json: ResponseTemplate.error_credential(message_metadata(message), data)
      end

      def respond_error_not_found(message:, data: {})
        render json: ResponseTemplate.error_not_found(message_metadata(message), data)
      end

      def respond_json(code: 200, message: '', data: {})
        render json: ResponseTemplate.template(code, message_metadata(message), data)
      end

      private

      # Convert instance to error metadata
      def error_instance_metadata(instance)
        errors = []
        instance.errors.to_hash.each do |k,v|
          errors << {
              field: k.to_s,
              description: v
          }
        end
        {
            message: instance.errors.full_messages,
            errors: errors
        }
      end

      # Convert exception to metadata
      def error_exception_metadata(exception)
        {
            message: exception.message,
            error_details: exception.backtrace
        }
      end

      # Convert message text to error metadata
      def message_metadata(message)
        { message: message }
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails_api_response-1.2.0 lib/rails_api_response/controller_helpers/responses.rb