Module: Lev::HandleWith
- Defined in:
- lib/lev/handle_with.rb
Overview
A utility method for calling handlers from controllers. To use, include this in your relevant controllers (or in your ApplicationController), e.g.:
class ApplicationController
include Lev::HandleWith
...
end
Then, call it from your various controller actions, e.g.:
handle_with(MyFormHandler,
params: params,
success: lambda { redirect_to 'show', notice: 'Success!'},
failure: lambda { render 'new', alert: 'Error' })
handle_with takes care of calling the handler and populates a @handler_result object with the return value from the handler
The ‘success’ and ‘failure’ lambdas are called if there aren’t or are errors, respectively. Alternatively, if you supply a ‘complete’ lambda, that lambda will be called regardless of whether there are any errors. Inside these lambdas (and inside the views they connect to), there will be the @handler_outcome variable containing the errors and results from the handler.
Specifying ‘params’ is optional. If you don’t specify it, HandleWith will use the entire params hash from the request.
Instance Method Summary collapse
Instance Method Details
#handle_with(handler, options = {}) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/lev/handle_with.rb', line 33 def handle_with(handler, ={}) success_action = .delete(:success) failure_action = .delete(:failure) complete_action = .delete(:complete) complete_action ||= lambda { render } if !(success_action || failure_action) [:params] ||= params [:request] ||= request [:caller] ||= current_user @handler_result = handler.handle() if complete_action.nil? @handler_result.errors.empty? ? success_action.call : failure_action.call else complete_action.call end end |