Email-Assets
view release on metacpan or search on metacpan
lib/Email/Assets/File.pm view on Meta::CPAN
relative path and filename for a file
=head1 METHODS
=head2 filename
Object accessor method, returns full filename and path (which may not exist if the asset was created from data instead of a file).
=head2 mime_type
Object accessor method, returns MIME type / content-type of the asset
=head2 BUILD
moose method called by constructor, handles validating path to file
=head2 inline_data
Object method to get file as inline-data string, including content type and base64 encoded file contents
<img src="data:[% assets.include('static/foo.gif', {inline_only => 1}).inline_data -%]">
my $base64_url_asset = $assets->include_base64($base_64_url_image, 'codeworks.jpg', { url_encoding => 1 } );
is($base64_url_asset->mime_type, 'image/jpeg', 'detected mime type ok');
my $fh = File::Temp->new();
my $fname = $fh->filename;
print $fh decode_base64($base64_url_asset->file_as_base64);
close $fh;
ok(compare($fname, 't/aa/codeworks.jpg') == 0, 'file matches from base64 url data after decoding');
my $mime_part = $base64_url_asset->as_mime_part;
isa_ok($mime_part, 'MIME::Lite');
is($mime_part->attr("content-type"), 'image/jpeg', 'content type correct');
my $mime_body_string = $mime_part->body_as_string;
eq_or_diff($mime_body_string, $base64_url_asset->file_as_base64, "mime lite output matches");
$fh = File::Temp->new();
$fname = $fh->filename;
print $fh decode_base64($mime_body_string);
close $fh;
ok(compare($fname, 't/aa/codeworks.jpg') == 0, 'file matches from base64 url data after decoding');
# This asset won't get attached twice, as Email::Assets will ignore repeats of a path
my $cid = $assets->include($existing_image)->cid;
is ($cid, $asset->cid, 'cid matches for same image');
my $png_filename;
# Or you can iterate (in order)
for my $asset ($assets->exports) {
my $mime_part = $asset->as_mime_part;
isa_ok($mime_part, 'MIME::Lite');
is($mime_part->attr("content-type"), 'image/png', 'content type correct');
my $data_string = $asset->inline_data;
my ($content_type, $encoding) = $data_string =~ m/(.*?);(.*?),.*/m;
is($content_type, 'image/png', 'inline data content type correct');
is($encoding, 'base64', 'inline data encoding type correct');
my $fh = File::Temp->new();
my $fname = $fh->filename;
$data_string =~ s|image/png;base64,||;
print $fh decode_base64($data_string);
close $fh;
$assets = Email::Assets->new( base => [ @test_paths ] );
my $base64 = $asset->file_as_base64;
my $new_asset = $assets->include_base64($base64, 'nosuchfile.png');
is($new_asset->mime_type, 'image/x-png', 'detected mime type ok');
is($new_asset->filename, 'nosuchfile.png');
my $mime_part = $new_asset->as_mime_part;
isa_ok($mime_part, 'MIME::Lite');
is($mime_part->attr("content-type"), 'image/x-png', 'content type correct');
my $fh = File::Temp->new();
my $fname = $fh->filename;
print $fh decode_base64($new_asset->file_as_base64);
close $fh;
ok(compare($fname, $png_filename) == 0, 'file matches from base64 data after decoding');
isa_ok(shift($assets->to_mime_parts), 'MIME::Lite', 'to_mime_parts works ok');
done_testing();
( run in 2.428 seconds using v1.01-cache-2.11-cpan-524268b4103 )