The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Email::MIME::RFC2047::AddressList;
$Email::MIME::RFC2047::AddressList::VERSION = '0.92';
use strict;
use warnings;

# ABSTRACT: Handling of MIME encoded address lists

use base qw(Email::MIME::RFC2047::Parser);

use Email::MIME::RFC2047::Decoder;
use Email::MIME::RFC2047::Address;

sub new {
    my $class = shift;

    my $self = [ @_ ];

    return bless($self, $class);
}

sub parse {
    my ($class, $string, $decoder) = @_;
    my $string_ref = ref($string) ? $string : \$string;
    $decoder ||= Email::MIME::RFC2047::Decoder->new();
    
    my @addresses;

    do {
        my $address = $class->_parse_item($string_ref, $decoder); 
        push(@addresses, $address);
    } while($$string_ref =~ /\G,/cg);
    
    if(!ref($string) && pos($string) < length($string)) {
        return $class->_parse_error($string_ref);
    }

    return $class->new(@addresses);
}

sub _parse_item {
    my ($class, $string_ref, $decoder) = @_;

    return Email::MIME::RFC2047::Address->parse(
        $string_ref, $decoder
    );
}

sub items {
    my $self;

    return @$self;
}

sub push {
    my $self = shift;

    push(@$self, @_);

    return;
}

sub format {
    my ($self, $encoder) = @_;
    $encoder ||= Email::MIME::RFC2047::Encoder->new();

    return join(', ', map { $_->format($encoder) } @$self);
}

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Email::MIME::RFC2047::AddressList - Handling of MIME encoded address lists

=head1 VERSION

version 0.92

=head1 SYNOPSIS

 use Email::MIME::RFC2047::AddressList;

 my $address_list = Email::MIME::RFC2047::AddressList->parse($string);
 my @items = $address_list->items();

 my $address_list = Email::MIME::RFC2047::AddressList->new();
 $address_list->push($mailbox);
 $address_list->push($group);
 $email->header_set('To', $address_list->format());

=head1 DESCRIPTION

This module handles RFC 2822 'address-lists'.

=head1 CLASS METHODS

=head2 parse

 my $address_list = Email::MIME::RFC2047::AddressList->parse(
    $string, [$decoder]
 );

Parse a RFC 2822 'address-list'. Returns a Email::MIME::RFC2047::AddressList
object containing L<Email::MIME::RFC2047::Address> items.

=head1 CONSTRUCTOR

=head2 new

 my $address_list = Email::MIME::RFC2047::AddressList->new([@items]);

Creates a new Email::MIME::RFC2047::AddressList object, with optional items
@items.

=head1 METHODS

=head2 items

 my @items = $address_list->items();

Gets the items of the address list.

=head2 push

 $address_list->address(@items);

Appends items to the address list.

=head2 format

 my $string = $address_list->format([$encoder]);

Returns the formatted address list string for use in a message header.

$encoder is an optional L<Email::MIME::RFC2047::Encoder> object used for
encoding display names with non-ASCII characters.

=head1 AUTHOR

Nick Wellnhofer <wellnhofer@aevum.de>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by Nick Wellnhofer.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.

=cut