use strict;

package Salvation::MacroProcessor::Field;

use Moose;

has 'description'	=> ( is => 'rw', isa => 'Salvation::MacroProcessor::MethodDescription', required => 1, handles => { ( map{ ( $_ )x2 } ( 'required_shares', 'required_filters', 'excludes_filters', 'connector_chain' ) ), ( name => 'method' ) } );

has 'value'	=> ( is => 'rw', isa => 'Any', required => 1 );


sub query        { $_[ 0 ] -> description() -> query       ( ( ( scalar( @_ ) == 2 ) ? $_[ 1 ] : () ), $_[ 0 ] -> value() ) }
sub postfilter { $_[ 0 ] -> description() -> postfilter( $_[ 1 ], $_[ 0 ] -> value() ) }


__PACKAGE__ -> meta() -> make_immutable();

no Moose;

-1;

__END__

# ABSTRACT: Query field object

=pod

=head1 NAME

Salvation::MacroProcessor::Field - Query field object

=head1 REQUIRES

L<Moose> 

=head1 METHODS

=head2 new

 Salvation::MacroProcessor::Field -> new(
 	description => $description,
	value => $value
 )

Constructor.

Returns B<Salvation::MacroProcessor::Field> instance.

All arguments documented at this section below.

=head2 description

 $field -> description()

Returns an appropriate L<Salvation::MacroProcessor::MethodDescription> instance for this field.

=head2 value

 $field -> value()

Returns a value supplied by you, or any other developer, as a condition for the filter.

=head2 postfilter

 $field -> postfilter( $object );

C<$object> is an object representing a single row of data returned by the query.

Shortcut for L<Salvation::MacroProcessor::MethodDescription>C<::postfilter>.

=head2 query

 $field -> query();
 $field -> query( $shares );

Shortcut for L<Salvation::MacroProcessor::MethodDescription>C<::query>.

=cut