Sha256: d7e662d63052d8829440c6beb521c90f7083ab82781a774d0f144dcc830753de

Contents?: true

Size: 1.03 KB

Versions: 9

Compression:

Stored size: 1.03 KB

Contents

# Make redirects for SEO needs
class SeoAssist
  def initialize(app)
    @app = app
  end

  def call(env)
    request = Rack::Request.new(env)
    params = request.params
    taxon_id = params['taxon']
    if !taxon_id.blank? && !taxon_id.is_a?(Hash) && @taxon = Taxon.find(taxon_id)
      params.delete('taxon')
      query = build_query(params)
      permalink = @taxon.permalink[0...-1] #ensures no trailing / for taxon urls
      return [301, { 'Location'=> "/t/#{permalink}?#{query}" }, []]
    elsif env["PATH_INFO"] =~ /^\/(t|products)(\/\S+)?\/$/
      #ensures no trailing / for taxon and product urls
      query = build_query(params)
      new_location = env["PATH_INFO"][0...-1]
      new_location += '?' + query unless query.blank?
      return [301, { 'Location'=> new_location }, []]
    end
    @app.call(env)
  end

  private

  def build_query(params)
    params.map { |k, v|
      if v.class == Array
        build_query(v.map { |x| ["#{k}[]", x] })
      else
        k + "=" + Rack::Utils.escape(v)
      end
    }.join("&")
  end

end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
spree_core-0.30.2 lib/seo_assist.rb
spree_core-0.40.4 lib/seo_assist.rb
spree_core-0.40.3 lib/seo_assist.rb
spree_core-0.40.2 lib/seo_assist.rb
spree_core-0.40.1 lib/seo_assist.rb
spree_core-0.40.0 lib/seo_assist.rb
spree_core-0.30.1 lib/seo_assist.rb
spree_core-0.30.0 lib/seo_assist.rb
spree_core-0.30.0.beta1 lib/seo_assist.rb