Sha256: f11e9baf05944fbf55398f94ed6fd1d21eb0be2f5953da4933eef9ee7217fdad

Contents?: true

Size: 1.87 KB

Versions: 1

Compression:

Stored size: 1.87 KB

Contents

module Wicked::Controller::Concerns::RenderRedirect
  extend ActiveSupport::Concern

  def render_wizard(resource = nil, options = {}, params = {})
    process_resource!(resource, options)

    if @skip_to
      url_params = (@wicked_redirect_params || {}).merge(params)
      redirect_to wizard_path(@skip_to, url_params), options
    else
      render_step(wizard_value(step), options, params)
    end
  end

  def process_resource!(resource, options = {})
    return unless resource

    if options[:context]
      did_save = resource.save(context: options[:context])
    else
      did_save = resource.save
    end

    if did_save
      @skip_to ||= @next_step
    else
      @skip_to = nil
      # Do not override user-provided status for render
      options[:status] ||= :unprocessable_entity
    end
  end

  def render_step(the_step, options = {}, params = {})
    if the_step.nil? || the_step.to_s == Wicked::FINISH_STEP
      redirect_to_finish_wizard options, params
    else
      render the_step, options
    end
  end

  def redirect_to_next(next_step, options = {}, params = {})
    if next_step.nil?
      redirect_to_finish_wizard(options, params)
    else
      redirect_to wizard_path(next_step, params), options
    end
  end

  # TODO redirect to resource if one is passed to render_wizard
  def finish_wizard_path(params = {})
    url = '/'
    url = "#{url}?#{params.to_query}" unless params.blank?
    url
  end

  def redirect_to_finish_wizard(options = {}, params = {})
    wicked_final_redirect_path = method(:finish_wizard_path).arity == 1 ? finish_wizard_path(params) : finish_wizard_path
    Rails.logger.debug("Wizard has finished, redirecting to finish_wizard_path: #{wicked_final_redirect_path.inspect}")
    # flash.keep is required for Rails 3 where a flash message is lost on a second redirect.
    flash.keep
    redirect_to wicked_final_redirect_path, options
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
wicked-2.0.0 lib/wicked/controller/concerns/render_redirect.rb