Sha256: 1613e8fe071543ab6bd78a3bf5824384e5d6ac49228e427d210445e706fb09cb

Contents?: true

Size: 1.83 KB

Versions: 34

Compression:

Stored size: 1.83 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
  # 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.
  #
  module HandleWith
    def handle_with(handler, options={})
      success_action = options.delete(:success)
      failure_action = options.delete(:failure)
      complete_action = options.delete(:complete)

      complete_action ||= lambda { render } if !(success_action || failure_action)

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

      @handler_result = handler.handle(options)

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

end

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
lev-12.1.0 lib/lev/handle_with.rb
lev-12.0.0 lib/lev/handle_with.rb
lev-11.0.0 lib/lev/handle_with.rb
lev-10.1.0 lib/lev/handle_with.rb
lev-10.0.0 lib/lev/handle_with.rb
lev-9.0.4 lib/lev/handle_with.rb
lev-9.0.3 lib/lev/handle_with.rb
lev-9.0.2 lib/lev/handle_with.rb
lev-9.0.1 lib/lev/handle_with.rb
lev-9.0.0 lib/lev/handle_with.rb
lev-8.1.0 lib/lev/handle_with.rb
lev-8.0.0 lib/lev/handle_with.rb
lev-7.1.0 lib/lev/handle_with.rb
lev-7.0.3 lib/lev/handle_with.rb
lev-2.2.2 lib/lev/handle_with.rb
lev-7.0.2 lib/lev/handle_with.rb
lev-7.0.1 lib/lev/handle_with.rb
lev-7.0.0 lib/lev/handle_with.rb
lev-6.0.0 lib/lev/handle_with.rb
lev-5.0.0 lib/lev/handle_with.rb