NAME
Farly::Object::Aggregate - Group objects with common identity.
SYNOPSIS
use Farly::Object;
my $list = Farly::Object::List->new();
my $object1 = Farly::Object->new();
my $object2 = Farly::Object->new();
$object1->set( 'id', Farly::Value::String->new('id1234') );
$object2->set( 'id', Farly::Value::String->new('id1234') );
.
.
.
More $object attributes
$list->add($object1);
$list->add($object2);
my $aggregate = Farly::Object::Aggregate->new( $list );
$aggregate->groupby( 'id' );
my $id = Farly::Object->new();
$id->set( 'id', Farly::Value::String->new('id1234') );
my $list = $aggregate->matches( $id );
DESCRIPTION
Farly::Object::Aggregate groups Farly::Objects with a common identity (equal key/value pairs) into Farly::Object::Lists.
METHODS
new()
The constructor. An Farly::Object::List must be provided.
$aggregate = Farly::Object::Aggregate->new( $list<Farly::Object::List> );
groupby( 'key1', 'key2', 'key3' ... )
All objects in the supplied list of keys, with equal values for the specified keys, will be grouped into a Farly::Object::List.
Farly::Objects without the specified property/key will be skipped.
$aggregate->groupby( 'key1', 'key2', 'key3' );
matches( $search<Farly::Object> )
Return the Farly::Object::List with the specified identity.
$set = $aggregate->matches( $identity<Farly::Object> );
update( $search<Farly::Object>, $new_list<Farly::Object::List> )
Search for the identity specified by $search and update the __AGG__ with $new_list
$set = $aggregate->matches( $identity<Farly::Object> );
iter()
Return an array of aggregate objects.
@objects = $aggregate->iter();
list_iterator()
Return an iterator code reference to an iterator function which iterates over all __AGG__'s defined in the aggregate. The __AGG__'s contain objects with the same identity as defined by the 'groupby' method.
use Farly::Object::Aggregate qw(NEXTVAL);
$it = $aggregate->list_iterator()
id_iterator()
Return an iterator code reference to an iterator function which iterates over all identities defined in the aggregate. The identities are Farly::Objects with the identity as defined by the 'groupby' method.
use Farly::Object::Aggregate qw(NEXTVAL);
$it = $aggregate->id_iterator()
FUNCTIONS
NEXTVAL()
Advance the iterator to the next aggregate object.
while ( my $list = NEXTVAL($it) ) {
# do something with $list
}
COPYRIGHT AND LICENCE
Farly::Object::Aggregate Copyright (C) 2013 Trystan Johnson
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.