diff options
author | Jesse Luehrs <doy@tozt.net> | 2011-07-27 11:03:04 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2011-07-27 11:38:56 -0500 |
commit | 2d95b92582166f711e05c973f3e22950bbce6b2f (patch) | |
tree | 8b6306d7973c494f8739c40251ab83b70b4a0428 | |
parent | 5660beb67176142342f9392ebbb21066e7e084b6 (diff) | |
download | bread-board-declare-2d95b92582166f711e05c973f3e22950bbce6b2f.tar.gz bread-board-declare-2d95b92582166f711e05c973f3e22950bbce6b2f.zip |
allow specifying parameters for services (not sure how i missed this)
-rw-r--r-- | lib/Bread/Board/Declare/Meta/Role/Attribute.pm | 16 | ||||
-rw-r--r-- | t/parameters.t | 71 |
2 files changed, 87 insertions, 0 deletions
diff --git a/lib/Bread/Board/Declare/Meta/Role/Attribute.pm b/lib/Bread/Board/Declare/Meta/Role/Attribute.pm index aa988ff..0fddfca 100644 --- a/lib/Bread/Board/Declare/Meta/Role/Attribute.pm +++ b/lib/Bread/Board/Declare/Meta/Role/Attribute.pm @@ -83,6 +83,19 @@ has dependencies => ( predicate => 'has_dependencies', ); +=attr parameters + +The parameter specification to use when creating the service. See L<Bread::Board::Service::WithParameters>. + +=cut + +has parameters => ( + is => 'ro', + isa => 'Bread::Board::Service::Parameters', + coerce => 1, + predicate => 'has_parameters', +); + =attr infer If true, the dependency list will be inferred as much as possible from the @@ -136,6 +149,9 @@ after attach_to_class => sub { ($self->has_dependencies ? (dependencies => $self->dependencies) : ()), + ($self->has_parameters + ? (parameters => $self->parameters) + : ()), ($self->has_constructor_name ? (constructor_name => $self->constructor_name) : ()), diff --git a/t/parameters.t b/t/parameters.t new file mode 100644 index 0000000..2c37629 --- /dev/null +++ b/t/parameters.t @@ -0,0 +1,71 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Test::More; +use Test::Fatal; + +{ + package Schema; + use Moose; +} + +{ + package Thing; + use Moose; + + has schema => ( + is => 'ro', + isa => 'Schema', + required => 1, + ); + + has foo => ( + is => 'ro', + required => 1, + ); + + has bar => ( + is => 'ro', + required => 1, + ); +} + +{ + package Model; + use Moose; + use Bread::Board::Declare; + + has schema => ( + is => 'ro', + isa => 'Schema', + ); + + has thing => ( + is => 'ro', + isa => 'Thing', + dependencies => ['schema'], + parameters => ['foo', 'bar'], + ); +} + +my $m = Model->new; +like( + exception { $m->thing }, + qr/Mandatory parameters .* missing/, + "error with unsatisfied parameters" +); +is( + exception { + my $thing = $m->resolve( + service => 'thing', + parameters => { foo => 'a', bar => 'b' }, + ); + is($thing->foo, 'a'); + is($thing->bar, 'b'); + isa_ok($thing->schema, 'Schema'); + }, + undef, + "no error with satisfied parameters" +); + +done_testing; |