Class: SpreeRedirects::RedirectMiddleware

Inherits:
Object
  • Object
show all
Defined in:
lib/spree_redirects/redirect_middleware.rb

Instance Method Summary collapse

Constructor Details

#initialize(app) ⇒ RedirectMiddleware

Returns a new instance of RedirectMiddleware.



4
5
6
# File 'lib/spree_redirects/redirect_middleware.rb', line 4

def initialize(app)
  @app = app
end

Instance Method Details

#call(env) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/spree_redirects/redirect_middleware.rb', line 8

def call(env)
  # execute the request using our Rails app
  status, headers, body = @app.call(env)
  
  if status == 404 && url = find_redirect([ env["PATH_INFO"], env["QUERY_STRING"] ].join("?").sub(/[\?\s]*$/, "").strip)
    # Issue a "Moved permanently" response with the redirect location
    [ 301, { "Location" => url }, [ "Redirecting..." ] ]
  else
    # Not a 404 or no redirect found, just send the response as is
    [ status, headers, body ]
  end
end

#find_redirect(url) ⇒ Object



21
22
23
24
25
# File 'lib/spree_redirects/redirect_middleware.rb', line 21

def find_redirect(url)
  redirect = Redirect.find_by_old_url(url) rescue nil
  return if redirect.nil?
  redirect.new_url
end