module Backable::ControllerConcern

Public Instance Methods

backable_back_path( fallback=nil ) click to toggle source
# File lib/backable/controller_concern.rb, line 32
def backable_back_path( fallback=nil )
  back = backable_history.last
  fallback = Backable.fallback_url
  return fallback unless back

  back_param = backable_param( backable_history[0..-2] )
  back.index('?') ? "#{back}&back=#{CGI::escape(back_param)}" : "#{back}?back=#{CGI::escape(back_param)}"
end
backable_future() click to toggle source
# File lib/backable/controller_concern.rb, line 28
def backable_future
  @backable_future ||= []
end
backable_history() click to toggle source
# File lib/backable/controller_concern.rb, line 20
def backable_history
  @backable_history ||= begin
    (params[:back] || "").split('|').map do |v|
      v
    end
  end
end
backable_param( history=nil) click to toggle source
# File lib/backable/controller_concern.rb, line 15
def backable_param( history=nil)
  history ||= (backable_history + backable_future)
  history.map{ |bi| bi.to_s }.join("|")
end
backable_push(path) click to toggle source
# File lib/backable/controller_concern.rb, line 41
def backable_push(path)
  path = polymorphic_path(path) if !path.kind_of?( String )
  backable_future << path.to_s
end
backable_url_for( link_options, extra_options = {} ) click to toggle source
# File lib/backable/controller_concern.rb, line 46
def backable_url_for( link_options, extra_options = {} )
  args = extra_options.merge( back: backable_param )

  # support for strings
  if link_options.kind_of?( String )
    url = link_options
    url << ( link_options.index('?') ? '&' : '?' )
    url << args.to_query
    url
  else
    polymorphic_url( link_options, args )
  end
end