package Data::Transpose::Group;
use strict;
use warnings;
=head1 NAME
Data::Transpose::Group - Group class for Data::Transpose
=head1 SYNOPSIS
$group = $tp->group('fullname', $tp->field('firstname'),
$tp->field('lastname'));
=head1 METHODS
=head2 new
$group = Data::Transpose::Group->new(name => 'mygroup',
objects => [$field_one, $field_two]);
=cut
sub new {
my ($class, $self, %args);
$class = shift;
%args = @_;
$self = {
# name
name => $args{name},
# joiner
join => ' ',
# objects
objects => $args{objects},
};
bless $self, $class;
return $self;
}
=head2 name
Set name of the group:
$group->name('fullname');
Get name of the group:
$group->name;
=cut
sub name {
my ($self, $name) = @_;
if (defined $name) {
$self->{name} = $name;
return $self;
}
return $self->{name};
}
=head2 fields
Returns field objects for this group:
$group->fields;
=cut
sub fields {
return shift->{objects};
}
=head2 join
Set string for joining field values:
$group->join(',');
Get string for joining field values:
$group->join;
The default string is a single blank character.
=cut
sub join {
my ($self, $join) = @_;
if (defined $join) {
$self->{join} = $join;
return $self;
}
return $self->{join};
}
=head2 value
Returns value for output:
$output = $group->value;
=cut
sub value {
my $self = shift;
my $token;
if (@_) {
$self->{output} = shift;
}
else {
# combine field values
$self->{output} = CORE::join($self->join,
map {my $value = $_->value;
defined $value ? $value : '';
} @{$self->{objects}});
}
return $self->{output};
}
=head2 target
Set target name for target operation:
$group->target('name');
Get target name:
$group->target;
=cut
sub target {
my ($self, $name) = @_;
if (defined $name) {
$self->{target} = $name;
return $self;
}
return $self->{target};
}
=head1 LICENSE AND COPYRIGHT
Copyright 2012-2014 Stefan Hornburg (Racke) <racke@linuxia.de>.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.
=cut
1;