jumph4x/canonical-rails

Failure in Spree's frontend on Ruby 2.0

Closed this issue · 1 comments

Hello! By the issue title you're probably thinking that you should close this issue. Please don't!

I get this error when I run Spree's frontend build on Ruby 2.0.0:

  1) Visiting Products should be able to display products priced under 10 dollars
     Failure/Error: within(:css, '#sidebar_products_search') { click_button "Search" }
     ActionView::Template::Error:
       undefined method `encoding' for {"price_range_any"=>["Under $10.00"]}:ActiveSupport::HashWithIndifferentAccess
     # /Users/ryanbigg/.rbenv/versions/2.0.0-p451/lib/ruby/2.0.0/cgi/util.rb:7:in `escape'
     # /Users/ryanbigg/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/canonical-rails-0.0.6/app/helpers/canonical_rails/tag_helper.rb:36:in `block in whitelisted_query_string'
     # /Users/ryanbigg/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/canonical-rails-0.0.6/app/helpers/canonical_rails/tag_helper.rb:36:in `each'
     # /Users/ryanbigg/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/canonical-rails-0.0.6/app/helpers/canonical_rails/tag_helper.rb:36:in `map'
     # /Users/ryanbigg/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/canonical-rails-0.0.6/app/helpers/canonical_rails/tag_helper.rb:36:in `whitelisted_query_string'
     # /Users/ryanbigg/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/canonical-rails-0.0.6/app/helpers/canonical_rails/tag_helper.rb:21:in `canonical_href'
     # /Users/ryanbigg/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/canonical-rails-0.0.6/app/helpers/canonical_rails/tag_helper.rb:25:in `canonical_tag'
     # ./app/views/spree/shared/_head.html.erb:7:in `_1a267b5e5f91d9723f931f318739dddf'

I think it also happens on Ruby 1.9.

I am not familiar with your library, but I think it is to blame since it is at the root of this issue.

I believe this parameter is the problem:

    35: def whitelisted_query_string
 => 36:   binding.pry
    37:   "?#{whitelisted_params.map{ |key, val| "#{CGI.escape(key)}=#{CGI.escape(val)}" }.join('&')}" if whitelisted_params.present?
    38: end

[1] pry(#<#<Class:0x007fc0d0fd3070>>)> whitelisted_params
=> {"search"=>{"price_range_any"=>["Under $10.00"]}}

What should be proper way of dealing with that parameter being a Hash?