module Api::Responder

Public Instance Methods

array_serializer() click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 150
def array_serializer
  ActiveModel::Serializer::CollectionSerializer
end
extract_options(resource, options, collection = false) click to toggle source

extract options i.e. serializer = nil, options = {}, additional_response = {}

# File lib/generators/kriangle/templates/responder.rb, line 49
def extract_options resource, options, collection = false
  # identify serializer
  @serializer = options[:serializer]
  unless @serializer
    if collection
      class_name = resource&.first&.class
      if class_name.present? && class_name != NilClass
        @serializer = "#{class_name}Serializer".constantize
      end
    else
      @serializer = "#{resource.class}Serializer".constantize
    end
  end

  # additional params
  @serializer_options = options[:serializer_options] || {}
  @additional_response = options[:additional_response] || {}
end
format_aggregation(aggs) click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 77
def format_aggregation(aggs)
  return [] if aggs.blank?

  aggregations = []
  aggs.each do |k, value|
    value['buckets'].each do |bucket|
      bucket['count'] = bucket.delete('doc_count')
    end
    aggregations << { name: k, buckets: value['buckets'] }
  end
  aggregations
end
json_error_response(response = {}) click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 146
def json_error_response response = {}, status = 422
  error!(JsonResponse.new(response.merge(status: true)).as_json, status)
end
json_success_response(response = {}) click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 142
def json_success_response response = {}
  JsonResponse.new(response.merge(status: true)).as_json
end
render_error() click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 122
def render_error
  render_error_response(['Something went wrong. Please try after sometime.'], :unprocessable_entity)
end
render_error_response(errors = [], status = 422) click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 138
def render_error_response(errors = [], status = 422)
  json_error_response({ errors: errors }, status)
end
render_errors(object) click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 118
def render_errors(object)
  render_error_response(object.errors, :unprocessable_entity)
end
render_interval_server_error() click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 126
def render_interval_server_error
  render_error_response(['Internal server error.'], 500)
end
render_not_found(resource) click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 114
def render_not_found(resource)
  render_error_response(["#{ resource } not found."], :not_found)
end
render_object(object, **options) click to toggle source

render single object with serializer

# File lib/generators/kriangle/templates/responder.rb, line 69
def render_object object, **options
  extract_options(object, options) # extract required options

  json_success_response({
    data: @serializer.present? ? single_serializer.new(object, serializer: @serializer, serializer_options: @serializer_options) : {}
  }.merge(@additional_response))
end
render_objects(objects, **options) click to toggle source

render collection of objects with serializer

# File lib/generators/kriangle/templates/responder.rb, line 91
def render_objects objects, **options
  extract_options(objects.to_a, options, true) # extract required options

  # collect meta data if any present there
  meta = options[:extra_params].present? ? options[:extra_params] : {}
  meta[:suggestions]  = objects.suggestions if objects.respond_to?(:suggestions) && objects.suggestions.present?
  meta[:aggregations] = format_aggregation(objects.aggs) if objects.respond_to?(:aggs)
  if objects.respond_to?(:total_count)
    meta[:pagination] = {
      total_count: objects.total_count,
      current_page: objects.current_page,
      next_page: objects.next_page,
      per_page: objects.try(:per_page) || objects.try(:limit_value) || 10000
    }
  end

  # send data & meta
  json_success_response({
    data: @serializer.present? ? array_serializer.new(objects, serializer: @serializer, serializer_options: @serializer_options) : [],
    meta: meta
  }.merge(@additional_response))
end
render_unauthorized_access() click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 134
def render_unauthorized_access
  render_error_response(['Invalid or expired token.'], 401) and return
end
render_unprocessable_entity(errors) click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 130
def render_unprocessable_entity(errors)
  render_error_response(errors, 422) and return
end
single_serializer() click to toggle source
# File lib/generators/kriangle/templates/responder.rb, line 154
def single_serializer
  ActiveModelSerializers::SerializableResource
end