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.