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_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