I'm packing up a file into an e-mail attachment using base64 encoding
and I'm only getting the first line of the file. I've discovered that
it's a misunderstanding I have about the pack method:
irb(main):001:0> ["a", "b", "c"].pack("m").unpack("m")
=> ["a"]
How do I get the whole array packed?
Quoteing sandspace@gmail.com, on Sat, Dec 04, 2004 at 08:36:11AM +0900:
I'm packing up a file into an e-mail attachment using base64 encoding
and I'm only getting the first line of the file. I've discovered that
it's a misunderstanding I have about the pack method:
irb(main):001:0> ["a", "b", "c"].pack("m").unpack("m")
=> ["a"]
How do I get the whole array packed?
Not sure why you think that pack wil concatenate the array before
base64ing it. Check out lib/base64.rb in the ruby lib directory for
an example of base64 encoding/decoding.
Sam
The Array in Array#pack is like a C struct, and the argument to pack is the format string to pack the Array into, so ["a", "b", "c"].pack "m" only packs one of the strings you provided.
You certainly don't want to pack the strings individually (["a", "b", "c"].pack "mmm"), instead you simply need to join the Array before packing:
body = ["a", "b", "c"].join("\n")
[body].pack("m")
···
On 03 Dec 2004, at 15:36, John Sands wrote:
I'm packing up a file into an e-mail attachment using base64 encoding
and I'm only getting the first line of the file. I've discovered that
it's a misunderstanding I have about the pack method:
irb(main):001:0> ["a", "b", "c"].pack("m").unpack("m")
=> ["a"]
How do I get the whole array packed?
Thanks. It works now.
I did it that way because The Ruby Way (page 92) has "the easiest way
to do a base64 encode/decode is the use the built-in features of Ruby.
The Array class has a pack method..." and it doesn't mention the
base64 class; so I didn't look for one.
Thanks.
···
On Sat, 4 Dec 2004 09:27:17 +0900, Sam Roberts <sroberts@uniserve.com> wrote:
Quoteing sandspace@gmail.com, on Sat, Dec 04, 2004 at 08:36:11AM +0900:
> I'm packing up a file into an e-mail attachment using base64 encoding
> and I'm only getting the first line of the file. I've discovered that
> it's a misunderstanding I have about the pack method:
>
> irb(main):001:0> ["a", "b", "c"].pack("m").unpack("m")
> => ["a"]
>
> How do I get the whole array packed?
Not sure why you think that pack wil concatenate the array before
base64ing it. Check out lib/base64.rb in the ruby lib directory for
an example of base64 encoding/decoding.
Sam
Quoteing sandspace@gmail.com, on Sat, Dec 04, 2004 at 10:04:55AM +0900:
Thanks. It works now.
I did it that way because The Ruby Way (page 92) has "the easiest way
to do a base64 encode/decode is the use the built-in features of Ruby.
The Array class has a pack method..." and it doesn't mention the
base64 class; so I didn't look for one.
Its got good advice, thats an odd-ball header, and I wouldn't actually
use it, but it saved me typing example code...
Cheers,
Sam