Sha256: e01f0ecd248ecacfef55d85139251d13aa3e04b59fc35697f5c5521793480ba7
Contents?: true
Size: 1.72 KB
Versions: 2
Compression:
Stored size: 1.72 KB
Contents
module Voom module Commands module ControllerResponse def handle_response(response, &block) if response.success? redirect_url = redirect_url(response, &block) if redirect_url redirect_to redirect_url, status: :see_other else render json: response.data, status: 200 end else render json: response.messages, status: response.status end end # If you pass a block then return a hash for any parameters you want to add to the redirect # If you want to forward some parameters from the response, pass the parameter names in pluck def redirect_url(response = nil, pluck: [], &block) redirect_url = params.fetch(:redirect) {nil} return unless redirect_url data = response ? response.data : {} data = block.call(data) if block data = data.to_hash if data.respond_to?(:to_hash) data = data.attributes if data.respond_to?(:attributes) data = data.deep_symbolize_keys if data.respond_to?(:deep_symbolize_keys) trace {"Data: #{data.inspect}"} pluck = Array(params.fetch(:pluck) {pluck}).map(&:to_sym) trace {"Plucking: #{pluck.inspect}"} data = pluck.map do |key| [key, data.fetch(key) {params[key]}] end.to_h data[:snackbar] = response.messages.snackbar if response&.messages&.snackbar query = data.to_query trace {"Query: #{query.inspect}"} redirect_url = "#{redirect_url}#{url_seperator(redirect_url)}#{query}" unless query.empty? redirect_url end private def url_seperator(redirect_url) redirect_url.include?('?') ? '&' : '?' end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
voom-commands-0.1.1 | lib/voom/commands/controller_response.rb |
voom-commands-0.1.0 | lib/voom/commands/controller_response.rb |