Module: ReturnHook::Controller

Defined in:
lib/return_hook/controller.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



3
4
5
# File 'lib/return_hook/controller.rb', line 3

def self.included(base)
  base.send :helper_method, :url_for_return, :forward_return_hook
end

Instance Method Details

#forward_return_hook(url) ⇒ Object



32
33
34
35
36
37
38
39
40
41
# File 'lib/return_hook/controller.rb', line 32

def forward_return_hook(url)
  if params[:return]
    if url.is_a? String
      url = url.include?('?') ? url + '&return=' + params[:return] : url + '?return=' + params[:return]
    elsif url.is_a? Hash
     url[:return] = params[:return]
    end
  end
  url_for url
end

#smart_redirect(options = {}, response_status = {}) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/return_hook/controller.rb', line 6

def smart_redirect(options = {}, response_status = {})
  if !((response_status.include?(:override_return) ||
      (options.is_a?(Hash) && options.include?(:override_return))))
    uri = params[:return]
    if uri
      redirect_to CGI.unescape(uri), response_status
    elsif (options == :back)  && request.env['HTTP_REFERER'].blank?
      redirect_to '/'
    else
      redirect_to options, response_status
    end
  elsif (options == :back)  && request.env['HTTP_REFERER'].blank?
    redirect_to '/'
  else
    redirect_to options, response_status
  end
end

#url_for_return(params) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/return_hook/controller.rb', line 23

def url_for_return(params)
  escaped_url = CGI.escape request.url
  if params.is_a? String
    params = params.include?('?') ? params + '&return=' + escaped_url : params + '?return=' + CGI.escape(escaped_url)
  elsif params.is_a? Hash
    params[:return] = escaped_url
  end
  url_for params
end