switch snippets across to object based
Matt S Trout [Thu, 5 Mar 2009 11:01:28 +0000 (06:01 -0500)]
lib/LolCatalyst/Lite/Snippet.pm [new file with mode: 0644]
lib/LolCatalyst/Lite/SnippetStore.pm
t/snippet_store/basic.t

diff --git a/lib/LolCatalyst/Lite/Snippet.pm b/lib/LolCatalyst/Lite/Snippet.pm
new file mode 100644 (file)
index 0000000..ed5fd15
--- /dev/null
@@ -0,0 +1,17 @@
+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;
index b5a1735..facc6c6 100644 (file)
@@ -1,9 +1,19 @@
 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) = @_;
@@ -17,9 +27,13 @@ sub all {
 
 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;
index 5a46a3f..ada3887 100644 (file)
@@ -1,11 +1,18 @@
 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(