On 15-Jul-06, at 8:30 PM, Alexandru Popescu wrote:

> To my understanding: creates
> Array.new(6){rand(256).chr} => array of 6 random chars
> array.join => string of 6 chars
> [array.join] => array with 1 string of length 6
> newarray.pack("m") => encode base64
>
> and the last chomp assures that the last generated char is not a  
> newline.

Close - the pack('m') always pads its result with = if necessary (to  
get to a multiple of 4 characters for the encoded string) and adds a  
newline.  As we start with  6 characters, and base64 encoding turns  
three characters into four, we end up with an 8 character string plus  
a new line. The chomp deletes that newline.

In irb:

ratdog:~ mike$ irb --prompt simple
 >> Array.new(6){rand(256).chr}
=> ["\332", "w", "\035", "!", "\237", "\030"]
 >> ["\332", "w", "\035", "!", "\237", "\030"].join
=> "\332w\035!\237\030"
 >> ["\332w\035!\237\030"].pack('m')
=> "2ncdIZ8Y\n"
 >> "2ncdIZ8Y\n".chomp
=> "2ncdIZ8Y"

Mike

>
> hth (even if I am not completely sure about it, and I would like to
> hear from more experienced guys).
>
> ./alex
> --
> .w( the_mindstorm )p.
>
>
>
> On 7/16/06, Alexandre Hudelot <alexandre.hudelot / gmail.com> wrote:
>> This is a line taken from the "authentification" recipe in the 'Rails
>> Recipes' book.
>> I can see that it generates a string of random characters but I am
>> unsure of all that's going on here.
>>
>> The strings that are generated have 8 characters, how come when the
>> array is initialized with the arg '6' ?
>>
>> What exactly is .join doing here?
>>
>> What does .pack("m") do?
>>
>> And why the .chomp? I thought that was a func to remove newline
>> characters.
>>
>> Thanks in advance for the help.
>>
>> -Alex
>>
>> --
>> Posted via http://www.ruby-forum.com/.
>>
>>
>
>

-- 

Mike Stok <mike / stok.ca>
http://www.stok.ca/~mike/

The "`Stok' disclaimers" apply.