class ApiResponse
Constants
- EMPTY_SERIALIZER
- ERROR_SERIALIZER
- SENSITIVE_REQUEST_PARAMS
- SERIALIZER_SUFFIX
Attributes
custom_serializer[RW]
result[RW]
Public Class Methods
new(result, custom_serializer = nil)
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 10 def initialize(result, custom_serializer = nil) @result = result @custom_serializer = custom_serializer end
serialize(result, options = {})
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 23 def self.serialize(result, options = {}) serializer = options.delete(:serializer) new(result, serializer).serialize(options) end
Public Instance Methods
serialize(options = {})
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 15 def serialize(options = {}) request = options.delete(:request) serializer.new( result, options.merge(collection_options(request)) ).serializable_hash end
Private Instance Methods
array?()
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 33 def array? result.is_a?(Array) end
collection?()
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 37 def collection? result.is_a?(ActiveRecord::Relation) end
collection_options(request = nil)
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 72 def collection_options(request = nil) options = {} return options if error? options[:is_collection] = array? || collection? if collection? && result.respond_to?(:total_count) options[:meta] = { page_size: result.limit_value, total_count: result.total_count, total_pages: result.total_pages } options[:links] = { prev: link(result.prev_page, request), next: link(result.next_page, request) } end options end
empty?()
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 50 def empty? (array? || collection?) && result.empty? end
error?()
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 41 def error? [ result.is_a?(ActiveModel::Errors), result.is_a?(ActiveResource::Errors), result.is_a?(StandardError), result.is_a?(String) ].any? end
link(page, request)
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 95 def link(page, request) return page if page.blank? || request.blank? uri = URI.parse(request) params = Rack::Utils.parse_query(uri.query) params.delete_if{ |key| SENSITIVE_REQUEST_PARAMS.include?(key) } params['page[number]'] = page parsed_params = params.map{ |key, value| "#{key}=#{value}" }.join('&') "#{uri.scheme}:://#{uri.host}#{uri.path}?#{parsed_params}" end
resource?()
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 54 def resource? !array && !collection? && !error? end
resource_type()
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 58 def resource_type return custom_serializer.to_s.classify if custom_serializer return ERROR_SERIALIZER if error? return EMPTY_SERIALIZER if empty? return result.first.class.name if array? return result.class.to_s.deconstantize if collection? result.class.name end
serializer()
click to toggle source
# File lib/generators/disco_app/react/templates/app/models/api_response.rb, line 68 def serializer "#{resource_type}#{SERIALIZER_SUFFIX}".constantize end