package Chart::GGPlot::Range;

# ABSTRACT: The role for range

use Chart::GGPlot::Role qw(:pdl);
use namespace::autoclean;

our $VERSION = '0.0010_01'; # TRIAL VERSION

use Types::PDL qw(Piddle PiddleFromAny);

use Chart::GGPlot::Types qw(:all);


has range => (
    is      => 'rw',
    isa     => Piddle->plus_coercions(PiddleFromAny),
    coerce  => 1,
    builder => '_build_range'
);

sub _build_range { null; }


method reset () {
    $self->range( $self->_build_range );
}


requires 'train';

1;

__END__

=pod

=encoding UTF-8

=head1 NAME

Chart::GGPlot::Range - The role for range

=head1 VERSION

version 0.0010_01

=head1 DESCRIPTION

Mutable ranges have two methods (C<train> and C<reset>), and make
it possible to build up complete ranges with multiple passes.

=head1 ATTRIBUTES

=head2 range

For continuous range it has two elements to indicate the start
and end of the range. For discrete range the arrayref contains
the discrete items of the range.

=head1 METHODS

=head2 reset()

Resets the range.

=head2 train($piddle)

Train the range according to given data.

=head1 AUTHOR

Stephan Loyd <sloyd@cpan.org>

=head1 COPYRIGHT AND LICENSE

This software is copyright (c) 2019 by Stephan Loyd.

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