From 2d95b92582166f711e05c973f3e22950bbce6b2f Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Wed, 27 Jul 2011 11:03:04 -0500 Subject: allow specifying parameters for services (not sure how i missed this) --- lib/Bread/Board/Declare/Meta/Role/Attribute.pm | 16 ++++++ t/parameters.t | 71 ++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100644 t/parameters.t 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. + +=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; -- cgit v1.2.3