NAME
Flux::Mapper - interface for transforming input or output streams.
VERSION
version 1.03
SYNOPSIS
$new_item = $mapper->write($item);
# or when you know that mapper can generate multiple items from one:
@items = $mapper->write($item);
$new_chunk = $mapper->write_chunk(\@items);
@last_items = $mapper->commit; # some mappers keep items in internal buffer and process them at commit step
$mapped_in = $in | $mapper; # resulting object is a input stream
$double_mapper = $mapper1 | $mapper2; # resulting object is a mapper too
$mapped_out = $mapper | $out # resulting object is a output stream
DESCRIPTION
Flux::Mapper
is a role for mapper classes. Mappers can be attached to other streams to filter, expand and transform their data.
Mapper API is identical to Flux::Out
, consisting of write
, write_chunk
and commit
methods, but unlike common output streams, values returned from these methods are always getting used.
Depending on the context, mappers can map input or output streams, or be attached to other mappers to construct more complex mappers.
The common way to create a new mapper is to use mapper(&)
function from Flux::Simple
. Alternatively, you can consume Flux::Mapper
role in your class and implement write
, write_chunk
and commit
methods.
|
operator is overloaded by all mappers. It works differently depending on a second argument. Synopsis contains some examples which show the details.
Mappers don't have to return all results after each write
call, and results don't have to match mapper's input in one-to-one fashion. On the other hand, there are some mapper clients which assume it to be so. In the future there'll probably emerge some specializations expressed in roles.
INTERFACE
- write($item)
-
Process one item and return some "mapped" (rewritten) items.
Number of returned items can be any, from zero to several, so returned data should always be processed in the list context, unless you're sure that your mapper is of one-to-one kind.
- write_chunk($chunk)
-
Process one chunk and returns another, rewritten chunk.
Rewritten chunk can contain any number of items, independently from the original chunk, but it should be an arrayref, even if it's empty.
- commit()
-
commit
method can flush cached data and return remaining transformed items as plain list.If you don't need flushing, just return
()
, or useFlux::Mapper::Role::Easy
instead of this role.
SEE ALSO
mapper()
function from Flux::Simple.
AUTHOR
Vyacheslav Matyukhin <me@berekuk.ru>
COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by Yandex LLC.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.