Aniki
view release on metacpan or search on metacpan
lib/Aniki/Row.pm view on Meta::CPAN
package Aniki::Row;
use 5.014002;
use namespace::autoclean;
use Mouse v2.4.5;
use Carp qw/croak/;
has table_name => (
is => 'ro',
required => 1,
);
has row_data => (
is => 'ro',
required => 1,
);
has is_new => (
is => 'rw',
default => 0,
);
has relay_data => (
is => 'ro',
default => sub { +{} },
);
my %handler;
sub BUILD {
my ($self, $args) = @_;
$handler{0+$self} = delete $args->{handler};
}
sub handler { $handler{0+shift} }
sub schema { shift->handler->schema }
sub filter { shift->handler->filter }
sub table {
my $self = shift;
return $self->handler->schema->get_table($self->table_name);
}
sub get {
my ($self, $column) = @_;
return $self->{__instance_cache}{get}{$column} if exists $self->{__instance_cache}{get}{$column};
return undef unless exists $self->row_data->{$column}; ## no critic
my $data = $self->get_column($column);
return $self->{__instance_cache}{get}{$column} = $self->filter->inflate_column($self->table_name, $column, $data);
}
sub relay {
my ($self, $key) = @_;
unless (exists $self->relay_data->{$key}) {
$self->relay_data->{$key} = $self->relay_fetch($key);
}
my $relay_data = $self->relay_data->{$key};
return unless defined $relay_data;
return wantarray ? @$relay_data : $relay_data if ref $relay_data eq 'ARRAY';
return $relay_data;
}
( run in 0.651 second using v1.01-cache-2.11-cpan-5a3173703d6 )