Module: Backable::ControllerConcern

Extended by:
ActiveSupport::Concern
Defined in:
lib/backable/controller_concern.rb

Instance Method Summary collapse

Instance Method Details

#backable_back_path(fallback = nil) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/backable/controller_concern.rb', line 35

def backable_back_path( fallback=nil )
  back = backable_history.last
  fallback = Rails.env.development? ? "http://watbenjedan.nl/" : :back
  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 ⇒ Object



30
31
32
# File 'lib/backable/controller_concern.rb', line 30

def backable_future
  @backable_future ||= []
end

#backable_history ⇒ Object



21
22
23
24
25
26
27
# File 'lib/backable/controller_concern.rb', line 21

def backable_history
  @backable_history ||= begin
    (params[:back]||"").split('|').map do |v|
      v
    end
  end
end

#backable_param(history = nil) ⇒ Object



15
16
17
18
# 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) ⇒ Object



44
45
46
47
# File 'lib/backable/controller_concern.rb', line 44

def backable_push(path)
  path = polymorphic_path(path) if !path.kind_of?( String )
  backable_future << "#{path}"
end

#backable_url_for(link_options, extra_options = {}) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/backable/controller_concern.rb', line 50

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