mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-02-27 01:43:22 +00:00
Bring responder from spree_core
This commit is contained in:
45
lib/spree/responder.rb
Normal file
45
lib/spree/responder.rb
Normal file
@@ -0,0 +1,45 @@
|
||||
module Spree
|
||||
class Responder < ::ActionController::Responder #:nodoc:
|
||||
|
||||
attr_accessor :on_success, :on_failure
|
||||
|
||||
def initialize(controller, resources, options={})
|
||||
super
|
||||
|
||||
class_name = controller.class.name.to_sym
|
||||
action_name = options.delete(:action_name)
|
||||
|
||||
if result = Spree::BaseController.spree_responders[class_name].try(:[], action_name).try(:[], self.format.to_sym)
|
||||
self.on_success = handler(controller, result, :success)
|
||||
self.on_failure = handler(controller, result, :failure)
|
||||
end
|
||||
end
|
||||
|
||||
def to_html
|
||||
super and return if !(on_success || on_failure)
|
||||
has_errors? ? controller.instance_exec(&on_failure) : controller.instance_exec(&on_success)
|
||||
end
|
||||
|
||||
def to_format
|
||||
super and return if !(on_success || on_failure)
|
||||
has_errors? ? controller.instance_exec(&on_failure) : controller.instance_exec(&on_success)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def handler(controller, result, status)
|
||||
return result if result.respond_to? :call
|
||||
|
||||
case result
|
||||
when Hash
|
||||
if result[status].is_a? Symbol
|
||||
controller.method(result[status])
|
||||
else
|
||||
result[status]
|
||||
end
|
||||
when Symbol
|
||||
controller.method(result)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user