module Shaf::Payload
Constants
- NO_VALUE
Private Instance Methods
add_cache_headers(payload, kwargs)
click to toggle source
# File lib/shaf/helpers/payload.rb, line 83 def add_cache_headers(payload, kwargs) return unless kwargs.delete(:http_cache) { Settings.http_cache } chksum, kind = etag_for(payload) etag(chksum, kind: kind) if chksum end
etag_for(payload)
click to toggle source
# File lib/shaf/helpers/payload.rb, line 90 def etag_for(payload) return if payload.nil? || payload.empty? sha1 = Digest::SHA1.hexdigest payload [sha1, :weak] # Weak or Strong?? end
parse_payload()
click to toggle source
# File lib/shaf/helpers/payload.rb, line 19 def parse_payload return unless Parser.input? request parser = Parser.for(request) raise Errors::UnsupportedMediaTypeError.new(request: request) unless parser log.debug "Parsing input using: #{parser.class}" parser.call rescue Parser::Error => e raise Errors::BadRequestError, "Failed to parse input payload: #{e.message}" end
payload()
click to toggle source
# File lib/shaf/helpers/payload.rb, line 14 def payload return @payload if defined? @payload @payload = parse_payload end
profile(value = NO_VALUE)
click to toggle source
# File lib/shaf/helpers/payload.rb, line 43 def profile(value = NO_VALUE) return @profile if value == NO_VALUE @profile = value end
respond_with(resource, status: nil, serializer: nil, collection: false, preload: [], **kwargs)
click to toggle source
# File lib/shaf/helpers/payload.rb, line 59 def respond_with(resource, status: nil, serializer: nil, collection: false, preload: [], **kwargs) status ||= resource.respond_to?(:http_status) ? resource.http_status : 200 status(status) kwargs.merge!(serializer: serializer, collection: collection) kwargs[:profile] ||= profile log.info "#{request.request_method} #{request.path_info} => #{status}" responder = Responder.for(request, resource) payload = responder.call(self, resource, preload: preload, **kwargs) add_cache_headers(payload, kwargs) payload rescue StandardError => err log.error "Failure: #{err.message}\n#{err.backtrace}" if status == 500 content_type mime_type(:json) body JSON.generate(failure: err.message) elsif err.is_a? Errors::ServerError respond_with(err) else respond_with(Errors::ServerError.new(err.message)) end end
respond_with_collection(resource, status: nil, serializer: nil, preload: [], **kwargs)
click to toggle source
# File lib/shaf/helpers/payload.rb, line 48 def respond_with_collection(resource, status: nil, serializer: nil, preload: [], **kwargs) respond_with( resource, status: status, serializer: serializer, collection: true, preload: preload, **kwargs ) end
safe_params(*fields)
click to toggle source
# File lib/shaf/helpers/payload.rb, line 31 def safe_params(*fields) return {} unless payload fields = fields.map { |f| f.to_sym.downcase }.to_set fields << :id fields.each_with_object({}) do |f, allowed| allowed[f] = payload[f] if payload.key? f allowed[f] ||= payload[f.to_s] if payload.key? f.to_s end end