--- /dev/null
+package LolCatalyst::Lite::Snippet;
+
+use Moose;
+use namespace::clean -except => 'meta';
+
+has 'id' => (is => 'ro', required => 1);
+has 'text' => (is => 'ro', required => 1);
+has '_translator' => (is => 'ro', required => 1, init_arg => 'translator');
+
+sub translate {
+ my ($self) = @_;
+ $self->_translator->translate($self->text);
+}
+
+__PACKAGE__->meta->make_immutable;
+
+1;
package LolCatalyst::Lite::SnippetStore;
use Moose;
+use aliased 'LolCatalyst::Lite::Snippet';
use namespace::clean -except => 'meta';
has '_snippets' => (is => 'ro', default => sub { [] });
+has '_translator' => (
+ is => 'ro',
+ required => 1,
+ lazy => 1,
+ default => sub {
+ confess "_translator object requested but never supplied"
+ },
+ init_arg => 'translator'
+);
sub find {
my ($self, $id) = @_;
sub create {
my ($self, $new) = @_;
- $new->{id} = @{$self->_snippets} + 1;
- push(@{$self->_snippets}, $new);
- $new;
+ my $snippet = Snippet->new(
+ %$new,
+ id => (@{$self->_snippets} + 1),
+ translator => $self->_translator
+ );
+ push(@{$self->_snippets}, $snippet);
+ $snippet;
}
__PACKAGE__->meta->make_immutable;
use strict;
use warnings;
use Test::More qw(no_plan);
+use Test::Exception;
use_ok "LolCatalyst::Lite::SnippetStore";
my $store = LolCatalyst::Lite::SnippetStore->new;
+dies_ok {
+ $store->create({ text => "earth shattering kaboom" });
+} 'Create without translator object fails';
+
+$store = LolCatalyst::Lite::SnippetStore->new(translator => 'DUMMY');
+
my $num_snips = 3;
ok(