Language_redirect


#1

Hello!

did somebody noticed that language_redirect does not handle windows line
endings?
it redirects me to something like /uk/%0D instead of just /uk/

i tried to fix it myself but this:

q = lambda { |str| /;q=/ =~ str ? Float($’) : 1 }
langs = langs.collect do |ele|
[q.call(ele), ele.split(/;/)[0].downcase]
end.sort { |l, r| r[0] <=> l[0] }.collect { |ele| ele[1] }

is strangest code i’ve ever seen in my life :smiley:
isn’t ruby supposed to be easy-readable? :wink:


#2

That code is quite interesting actually. John did you write it?

The first line (q= …) defines a lambda, that is a proc, that is a
method that can be assigned to a variable.

It’s equal to

def q(str)
if str.match(/;q=/)
$’.to_f # $’ returns the string that follows the matched part
else
1
end
end

The second line uses Array#collect to build an array of size-two
arrays. Each one has the result of q as first element and the language
code as second element.

The last part sorts this array by priority (which is the result of q)
and then collects only the language names.

The final result then is an array of languages ordered by priority.


#3

thanks :slight_smile:
anyway problem is few lines upper:

— app/models/language_redirect_page.rb (revision 3)
+++ app/models/language_redirect_page.rb (working copy)
@@ -18,7 +18,9 @@

protected
def config

  •  Hash[*render_part(:config).split(/[\n:]/)]
    
  •  rules = render_part(:config)
    
  •  rules[/\r\n/] = "\n"
    
  •  Hash[*rules.split(/[\n:]/)]
    

    end

    def languages

this fixes problem for me

if somebody can - commit this to repository

thanks :slight_smile: