Sha256: 69842657e01b7085100c22b1eb51a1e4c6aebac7faaa7d1e819f0064b11302ec

Contents?: true

Size: 1.61 KB

Versions: 1

Compression:

Stored size: 1.61 KB

Contents

module Lev

  # 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
  # @errors and @results objects with the return values 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.
  #
  # Specifying 'params' is optional.  If you don't specify it, HandleWith will
  # use the entire params hash from the request.
  #
  module HandleWith
    def handle_with(handler, options)
      success_action = options.delete(:success) || lambda {}
      failure_action = options.delete(:failure) || lambda {}
      complete_action = options.delete(:complete) || lambda {}

      options[:params]  ||= params
      options[:request] ||= request
      options[:caller] ||= current_user

      @results, @errors = handler.handle(options)

      if complete_action.nil?
        @errors.empty? ?
          success_action.call :
          failure_action.call    
      else
        complete_action.call
      end
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
lev-0.0.2 lib/lev/handle_with.rb