module SimpleWorkflow::Detour

Utility methods to manage the breadcrumb history

Public Instance Methods

pop_detour(session, origin_options = nil) click to toggle source
# File lib/simple_workflow/detour.rb, line 21
def pop_detour(session, origin_options = nil)
  detours = session[:detours]
  return nil unless detours

  detour = detours.delete(origin_options) || detours.pop
  Rails.logger.debug { "popped detour: #{detour.inspect} #{session[:detours].size} more" }
  reset_workflow(session) if detours.empty?
  detour
end
reset_workflow(session) click to toggle source
# File lib/simple_workflow/detour.rb, line 31
def reset_workflow(session)
  session.delete(:detours)
end
store_detour_in_session(session, options) click to toggle source
# File lib/simple_workflow/detour.rb, line 5
def store_detour_in_session(session, options)
  if session[:detours]
    if session[:detours].last == options
      Rails.logger.try(:debug, "Ignored duplicate detour: #{options.inspect}")
      return
    end
    if session[:detours].delete(options)
      Rails.logger.try(:debug, "Deleted duplicate detour: #{options.inspect}")
    end
  else
    session[:detours] = []
  end
  session[:detours] << options
  Rails.logger.try(:debug, "Added detour (#{session[:detours].try(:size) || 0}): #{options.inspect}")
end