From b274df4c9da24b117a22e287acd03b3fa87233a8 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 21 Feb 2011 16:04:51 -0600 Subject: rename MooseX::Bread::Board -> Bread::Board::Declare --- .gitignore | 2 +- Changes | 2 +- dist.ini | 4 +- lib/Bread/Board/Declare.pm | 36 +++++ lib/Bread/Board/Declare/BlockInjection.pm | 10 ++ lib/Bread/Board/Declare/ConstructorInjection.pm | 10 ++ lib/Bread/Board/Declare/Literal.pm | 10 ++ lib/Bread/Board/Declare/Meta/Role/Accessor.pm | 26 ++++ lib/Bread/Board/Declare/Meta/Role/Attribute.pm | 185 ++++++++++++++++++++++++ lib/Bread/Board/Declare/Meta/Role/Class.pm | 32 ++++ lib/Bread/Board/Declare/Meta/Role/Instance.pm | 9 ++ lib/Bread/Board/Declare/Role/Object.pm | 36 +++++ lib/Bread/Board/Declare/Role/Service.pm | 40 +++++ lib/MooseX/Bread/Board.pm | 36 ----- lib/MooseX/Bread/Board/BlockInjection.pm | 10 -- lib/MooseX/Bread/Board/ConstructorInjection.pm | 10 -- lib/MooseX/Bread/Board/Literal.pm | 10 -- lib/MooseX/Bread/Board/Meta/Role/Accessor.pm | 26 ---- lib/MooseX/Bread/Board/Meta/Role/Attribute.pm | 185 ------------------------ lib/MooseX/Bread/Board/Meta/Role/Class.pm | 32 ---- lib/MooseX/Bread/Board/Meta/Role/Instance.pm | 9 -- lib/MooseX/Bread/Board/Role/Object.pm | 36 ----- lib/MooseX/Bread/Board/Role/Service.pm | 40 ----- t/01-basic.t | 8 +- t/02-deps.t | 2 +- t/03-lifecycle.t | 2 +- t/04-block.t | 2 +- t/10-inlining.t | 2 +- t/20-inheritance.t | 4 +- t/21-roles.t | 8 +- t/22-more-inheritance.t | 8 +- t/30-type-checks.t | 2 +- t/31-auto-deref.t | 2 +- t/32-defaults.t | 2 +- t/33-constructor-name.t | 2 +- t/34-extends.t | 10 +- t/40-mop.t | 2 +- 37 files changed, 426 insertions(+), 426 deletions(-) create mode 100644 lib/Bread/Board/Declare.pm create mode 100644 lib/Bread/Board/Declare/BlockInjection.pm create mode 100644 lib/Bread/Board/Declare/ConstructorInjection.pm create mode 100644 lib/Bread/Board/Declare/Literal.pm create mode 100644 lib/Bread/Board/Declare/Meta/Role/Accessor.pm create mode 100644 lib/Bread/Board/Declare/Meta/Role/Attribute.pm create mode 100644 lib/Bread/Board/Declare/Meta/Role/Class.pm create mode 100644 lib/Bread/Board/Declare/Meta/Role/Instance.pm create mode 100644 lib/Bread/Board/Declare/Role/Object.pm create mode 100644 lib/Bread/Board/Declare/Role/Service.pm delete mode 100644 lib/MooseX/Bread/Board.pm delete mode 100644 lib/MooseX/Bread/Board/BlockInjection.pm delete mode 100644 lib/MooseX/Bread/Board/ConstructorInjection.pm delete mode 100644 lib/MooseX/Bread/Board/Literal.pm delete mode 100644 lib/MooseX/Bread/Board/Meta/Role/Accessor.pm delete mode 100644 lib/MooseX/Bread/Board/Meta/Role/Attribute.pm delete mode 100644 lib/MooseX/Bread/Board/Meta/Role/Class.pm delete mode 100644 lib/MooseX/Bread/Board/Meta/Role/Instance.pm delete mode 100644 lib/MooseX/Bread/Board/Role/Object.pm delete mode 100644 lib/MooseX/Bread/Board/Role/Service.pm diff --git a/.gitignore b/.gitignore index ba8158d..25831ce 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,4 @@ nytprof.out MANIFEST.bak *.sw[po] .build -MooseX-Bread-Board-* +Bread-Board-Declare-* diff --git a/Changes b/Changes index 26fa893..45295fa 100644 --- a/Changes +++ b/Changes @@ -1,4 +1,4 @@ -Revision history for MooseX-Bread-Board +Revision history for Bread-Board-Declare {{$NEXT}} - Initial release diff --git a/dist.ini b/dist.ini index a8bc513..e9b9af8 100644 --- a/dist.ini +++ b/dist.ini @@ -1,10 +1,10 @@ -name = MooseX-Bread-Board +name = Bread-Board-Declare author = Jesse Luehrs license = Perl_5 copyright_holder = Jesse Luehrs [@DOY] -dist = MooseX-Bread-Board +dist = Bread-Board-Declare [Prereqs] Moose = 1.21 diff --git a/lib/Bread/Board/Declare.pm b/lib/Bread/Board/Declare.pm new file mode 100644 index 0000000..51ec744 --- /dev/null +++ b/lib/Bread/Board/Declare.pm @@ -0,0 +1,36 @@ +package Bread::Board::Declare; +use Moose::Exporter; + +use Bread::Board (); + +my (undef, undef, $init_meta) = Moose::Exporter->build_import_methods( + install => ['import', 'unimport'], + class_metaroles => { + attribute => ['Bread::Board::Declare::Meta::Role::Attribute'], + class => ['Bread::Board::Declare::Meta::Role::Class'], + instance => ['Bread::Board::Declare::Meta::Role::Instance'], + }, + (Moose->VERSION >= 1.9900 + ? (role_metaroles => { + applied_attribute => + ['Bread::Board::Declare::Meta::Role::Attribute'], + }) + : ()), + base_class_roles => ['Bread::Board::Declare::Role::Object'], +); + +sub init_meta { + my $package = shift; + my %options = @_; + if (my $meta = Class::MOP::class_of($options{for_class})) { + if ($meta->isa('Class::MOP::Class')) { + my @supers = $meta->superclasses; + $meta->superclasses('Bread::Board::Container') + if @supers == 1 && $supers[0] eq 'Moose::Object'; + } + } + $package->$init_meta(%options); +} + + +1; diff --git a/lib/Bread/Board/Declare/BlockInjection.pm b/lib/Bread/Board/Declare/BlockInjection.pm new file mode 100644 index 0000000..9219206 --- /dev/null +++ b/lib/Bread/Board/Declare/BlockInjection.pm @@ -0,0 +1,10 @@ +package Bread::Board::Declare::BlockInjection; +use Moose; + +extends 'Bread::Board::BlockInjection'; +with 'Bread::Board::Declare::Role::Service'; + +__PACKAGE__->meta->make_immutable; +no Moose; + +1; diff --git a/lib/Bread/Board/Declare/ConstructorInjection.pm b/lib/Bread/Board/Declare/ConstructorInjection.pm new file mode 100644 index 0000000..38499fb --- /dev/null +++ b/lib/Bread/Board/Declare/ConstructorInjection.pm @@ -0,0 +1,10 @@ +package Bread::Board::Declare::ConstructorInjection; +use Moose; + +extends 'Bread::Board::ConstructorInjection'; +with 'Bread::Board::Declare::Role::Service'; + +__PACKAGE__->meta->make_immutable; +no Moose; + +1; diff --git a/lib/Bread/Board/Declare/Literal.pm b/lib/Bread/Board/Declare/Literal.pm new file mode 100644 index 0000000..50b4229 --- /dev/null +++ b/lib/Bread/Board/Declare/Literal.pm @@ -0,0 +1,10 @@ +package Bread::Board::Declare::Literal; +use Moose; + +extends 'Bread::Board::Literal'; +with 'Bread::Board::Declare::Role::Service'; + +__PACKAGE__->meta->make_immutable; +no Moose; + +1; diff --git a/lib/Bread/Board/Declare/Meta/Role/Accessor.pm b/lib/Bread/Board/Declare/Meta/Role/Accessor.pm new file mode 100644 index 0000000..e38236b --- /dev/null +++ b/lib/Bread/Board/Declare/Meta/Role/Accessor.pm @@ -0,0 +1,26 @@ +package Bread::Board::Declare::Meta::Role::Accessor; +use Moose::Role; + +around _inline_get => sub { + my $orig = shift; + my $self = shift; + my ($instance) = @_; + + my $attr = $self->associated_attribute; + + return 'do {' . "\n" + . 'my $val;' . "\n" + . 'if (' . $self->_inline_has($instance) . ') {' . "\n" + . '$val = ' . $self->$orig($instance) . ';' . "\n" + . '}' . "\n" + . 'else {' . "\n" + . '$val = ' . $instance . '->get_service(\'' . $attr->name . '\')->get;' . "\n" + . $self->_inline_check_constraint('$val') + . '}' . "\n" + . '$val' . "\n" + . '}'; +}; + +no Moose::Role; + +1; diff --git a/lib/Bread/Board/Declare/Meta/Role/Attribute.pm b/lib/Bread/Board/Declare/Meta/Role/Attribute.pm new file mode 100644 index 0000000..5cd4434 --- /dev/null +++ b/lib/Bread/Board/Declare/Meta/Role/Attribute.pm @@ -0,0 +1,185 @@ +package Bread::Board::Declare::Meta::Role::Attribute; +use Moose::Role; +Moose::Util::meta_attribute_alias('Service'); + +use Bread::Board::Types; +use List::MoreUtils qw(any); + +use Bread::Board::Declare::BlockInjection; +use Bread::Board::Declare::ConstructorInjection; +use Bread::Board::Declare::Literal; + +has service => ( + is => 'ro', + isa => 'Bool', + default => 1, +); + +has block => ( + is => 'ro', + isa => 'CodeRef', + predicate => 'has_block', +); + +# has_value is already a method +has literal_value => ( + is => 'ro', + isa => 'Str|CodeRef', + init_arg => 'value', + predicate => 'has_literal_value', +); + +has lifecycle => ( + is => 'ro', + isa => 'Str', + predicate => 'has_lifecycle', +); + +has dependencies => ( + is => 'ro', + isa => 'Bread::Board::Service::Dependencies', + coerce => 1, + predicate => 'has_dependencies', +); + +has constructor_name => ( + is => 'ro', + isa => 'Str', + predicate => 'has_constructor_name', +); + +has associated_service => ( + is => 'rw', + isa => 'Bread::Board::Service', + predicate => 'has_associated_service', +); + +after attach_to_class => sub { + my $self = shift; + + return unless $self->service; + + my %params = ( + associated_attribute => $self, + name => $self->name, + ($self->has_lifecycle + ? (lifecycle => $self->lifecycle) + : ()), + ($self->has_dependencies + ? (dependencies => $self->dependencies) + : ()), + ($self->has_constructor_name + ? (constructor_name => $self->constructor_name) + : ()), + ); + + my $service; + if ($self->has_block) { + $service = Bread::Board::Declare::BlockInjection->new( + %params, + block => $self->block, + ); + } + elsif ($self->has_literal_value) { + $service = Bread::Board::Declare::Literal->new( + %params, + value => $self->literal_value, + ); + } + elsif ($self->has_type_constraint) { + my $tc = $self->type_constraint; + if ($tc->isa('Moose::Meta::TypeConstraint::Class')) { + $service = Bread::Board::Declare::ConstructorInjection->new( + %params, + class => $tc->class, + ); + } + } + + $self->associated_service($service) if $service; +}; + +after _process_options => sub { + my $class = shift; + my ($name, $opts) = @_; + + return unless exists $opts->{default} + || exists $opts->{builder}; + return unless exists $opts->{class} + || exists $opts->{block} + || exists $opts->{value}; + + # XXX: uggggh + return if any { $_ eq 'Moose::Meta::Attribute::Native::Trait::String' + || $_ eq 'Moose::Meta::Attribute::Native::Trait::Counter' } + @{ $opts->{traits} }; + + my $exists = exists($opts->{default}) ? 'default' : 'builder'; + die "$exists is not valid when Bread::Board service options are set"; +}; + +around get_value => sub { + my $orig = shift; + my $self = shift; + my ($instance) = @_; + + return $self->$orig($instance) + if $self->has_value($instance); + + my $val = $instance->get_service($self->name)->get; + + $self->verify_against_type_constraint($val, instance => $instance) + if $self->has_type_constraint; + + if ($self->should_auto_deref) { + if (ref($val) eq 'ARRAY') { + return wantarray ? @$val : $val; + } + elsif (ref($val) eq 'HASH') { + return wantarray ? %$val : $val; + } + else { + die 'XXX'; + } + } + else { + return $val; + } +}; + +if (Moose->VERSION > 1.9900) { + around _inline_instance_get => sub { + my $orig = shift; + my $self = shift; + my ($instance) = @_; + return 'do {' . "\n" + . 'my $val;' . "\n" + . 'if (' . $self->_inline_instance_has($instance) . ') {' . "\n" + . '$val = ' . $self->$orig($instance) . ';' . "\n" + . '}' . "\n" + . 'else {' . "\n" + . '$val = ' . $instance . '->get_service(\'' . $self->name . '\')->get;' . "\n" + . $self->_inline_check_constraint( + '$val', '$type_constraint', '$type_constraint_obj' + ) + . '}' . "\n" + . '$val' . "\n" + . '}'; + }; +} +else { + around accessor_metaclass => sub { + my $orig = shift; + my $self = shift; + + return Moose::Meta::Class->create_anon_class( + superclasses => [ $self->$orig(@_) ], + roles => [ 'Bread::Board::Declare::Meta::Role::Accessor' ], + cache => 1 + )->name; + }; +} + +no Moose::Role; + +1; diff --git a/lib/Bread/Board/Declare/Meta/Role/Class.pm b/lib/Bread/Board/Declare/Meta/Role/Class.pm new file mode 100644 index 0000000..2869f7e --- /dev/null +++ b/lib/Bread/Board/Declare/Meta/Role/Class.pm @@ -0,0 +1,32 @@ +package Bread::Board::Declare::Meta::Role::Class; +use Moose::Role; + +use Bread::Board::Service; +use List::MoreUtils qw(any); + +sub get_all_services { + my $self = shift; + return map { $_->associated_service } + grep { $_->has_associated_service } + grep { Moose::Util::does_role($_, 'Bread::Board::Declare::Meta::Role::Attribute') } + $self->get_all_attributes; +} + +before superclasses => sub { + my $self = shift; + + return unless @_; + + die "Multiple inheritance is not supported for Bread::Board::Declare classes" + if @_ > 1; + + return if $_[0]->isa('Bread::Board::Container'); + + die "Cannot inherit from " . join(', ', @_) + . " because Bread::Board::Declare classes must inherit" + . " from Bread::Board::Container"; +}; + +no Moose::Role; + +1; diff --git a/lib/Bread/Board/Declare/Meta/Role/Instance.pm b/lib/Bread/Board/Declare/Meta/Role/Instance.pm new file mode 100644 index 0000000..3745b82 --- /dev/null +++ b/lib/Bread/Board/Declare/Meta/Role/Instance.pm @@ -0,0 +1,9 @@ +package Bread::Board::Declare::Meta::Role::Instance; +use Moose::Role; + +# XXX: ugh, this should be settable at the attr level, fix this in moose +sub inline_get_is_lvalue { 0 } + +no Moose::Role; + +1; diff --git a/lib/Bread/Board/Declare/Role/Object.pm b/lib/Bread/Board/Declare/Role/Object.pm new file mode 100644 index 0000000..f0f0048 --- /dev/null +++ b/lib/Bread/Board/Declare/Role/Object.pm @@ -0,0 +1,36 @@ +package Bread::Board::Declare::Role::Object; +use Moose::Role; + +has name => ( + is => 'rw', + isa => 'Str', + lazy => 1, + default => sub { shift->meta->name }, +); + +sub BUILD { } +after BUILD => sub { + my $self = shift; + + my $meta = Class::MOP::class_of($self); + + for my $service ($meta->get_all_services) { + if ($service->isa('Bread::Board::Declare::BlockInjection')) { + my $block = $service->block; + $self->add_service( + $service->clone( + block => sub { + $block->(@_, $self) + }, + ) + ); + } + else { + $self->add_service($service->clone); + } + } +}; + +no Moose::Role; + +1; diff --git a/lib/Bread/Board/Declare/Role/Service.pm b/lib/Bread/Board/Declare/Role/Service.pm new file mode 100644 index 0000000..b25069f --- /dev/null +++ b/lib/Bread/Board/Declare/Role/Service.pm @@ -0,0 +1,40 @@ +package Bread::Board::Declare::Role::Service; +use Moose::Role; + +has associated_attribute => ( + is => 'ro', + isa => 'Class::MOP::Attribute', + required => 1, + weak_ref => 1, +); + +around get => sub { + my $orig = shift; + my $self = shift; + + my $container = $self->parent_container; + + if ($self->associated_attribute->has_value($container)) { + return $self->associated_attribute->get_value($container); + } + + return $self->$orig(@_); +}; + +sub parent_container { + my $self = shift; + + my $container = $self; + until (!defined($container) + || ($container->isa('Bread::Board::Container') + && $container->does('Bread::Board::Declare::Role::Object'))) { + $container = $container->parent; + } + die "Couldn't find associated object!" unless defined $container; + + return $container; +} + +no Moose::Role; + +1; diff --git a/lib/MooseX/Bread/Board.pm b/lib/MooseX/Bread/Board.pm deleted file mode 100644 index 56a0949..0000000 --- a/lib/MooseX/Bread/Board.pm +++ /dev/null @@ -1,36 +0,0 @@ -package MooseX::Bread::Board; -use Moose::Exporter; - -use Bread::Board (); - -my (undef, undef, $init_meta) = Moose::Exporter->build_import_methods( - install => ['import', 'unimport'], - class_metaroles => { - attribute => ['MooseX::Bread::Board::Meta::Role::Attribute'], - class => ['MooseX::Bread::Board::Meta::Role::Class'], - instance => ['MooseX::Bread::Board::Meta::Role::Instance'], - }, - (Moose->VERSION >= 1.9900 - ? (role_metaroles => { - applied_attribute => - ['MooseX::Bread::Board::Meta::Role::Attribute'], - }) - : ()), - base_class_roles => ['MooseX::Bread::Board::Role::Object'], -); - -sub init_meta { - my $package = shift; - my %options = @_; - if (my $meta = Class::MOP::class_of($options{for_class})) { - if ($meta->isa('Class::MOP::Class')) { - my @supers = $meta->superclasses; - $meta->superclasses('Bread::Board::Container') - if @supers == 1 && $supers[0] eq 'Moose::Object'; - } - } - $package->$init_meta(%options); -} - - -1; diff --git a/lib/MooseX/Bread/Board/BlockInjection.pm b/lib/MooseX/Bread/Board/BlockInjection.pm deleted file mode 100644 index e1dca1e..0000000 --- a/lib/MooseX/Bread/Board/BlockInjection.pm +++ /dev/null @@ -1,10 +0,0 @@ -package MooseX::Bread::Board::BlockInjection; -use Moose; - -extends 'Bread::Board::BlockInjection'; -with 'MooseX::Bread::Board::Role::Service'; - -__PACKAGE__->meta->make_immutable; -no Moose; - -1; diff --git a/lib/MooseX/Bread/Board/ConstructorInjection.pm b/lib/MooseX/Bread/Board/ConstructorInjection.pm deleted file mode 100644 index f3b345b..0000000 --- a/lib/MooseX/Bread/Board/ConstructorInjection.pm +++ /dev/null @@ -1,10 +0,0 @@ -package MooseX::Bread::Board::ConstructorInjection; -use Moose; - -extends 'Bread::Board::ConstructorInjection'; -with 'MooseX::Bread::Board::Role::Service'; - -__PACKAGE__->meta->make_immutable; -no Moose; - -1; diff --git a/lib/MooseX/Bread/Board/Literal.pm b/lib/MooseX/Bread/Board/Literal.pm deleted file mode 100644 index bf5944a..0000000 --- a/lib/MooseX/Bread/Board/Literal.pm +++ /dev/null @@ -1,10 +0,0 @@ -package MooseX::Bread::Board::Literal; -use Moose; - -extends 'Bread::Board::Literal'; -with 'MooseX::Bread::Board::Role::Service'; - -__PACKAGE__->meta->make_immutable; -no Moose; - -1; diff --git a/lib/MooseX/Bread/Board/Meta/Role/Accessor.pm b/lib/MooseX/Bread/Board/Meta/Role/Accessor.pm deleted file mode 100644 index 10748e0..0000000 --- a/lib/MooseX/Bread/Board/Meta/Role/Accessor.pm +++ /dev/null @@ -1,26 +0,0 @@ -package MooseX::Bread::Board::Meta::Role::Accessor; -use Moose::Role; - -around _inline_get => sub { - my $orig = shift; - my $self = shift; - my ($instance) = @_; - - my $attr = $self->associated_attribute; - - return 'do {' . "\n" - . 'my $val;' . "\n" - . 'if (' . $self->_inline_has($instance) . ') {' . "\n" - . '$val = ' . $self->$orig($instance) . ';' . "\n" - . '}' . "\n" - . 'else {' . "\n" - . '$val = ' . $instance . '->get_service(\'' . $attr->name . '\')->get;' . "\n" - . $self->_inline_check_constraint('$val') - . '}' . "\n" - . '$val' . "\n" - . '}'; -}; - -no Moose::Role; - -1; diff --git a/lib/MooseX/Bread/Board/Meta/Role/Attribute.pm b/lib/MooseX/Bread/Board/Meta/Role/Attribute.pm deleted file mode 100644 index 2622e84..0000000 --- a/lib/MooseX/Bread/Board/Meta/Role/Attribute.pm +++ /dev/null @@ -1,185 +0,0 @@ -package MooseX::Bread::Board::Meta::Role::Attribute; -use Moose::Role; -Moose::Util::meta_attribute_alias('Service'); - -use Bread::Board::Types; -use List::MoreUtils qw(any); - -use MooseX::Bread::Board::BlockInjection; -use MooseX::Bread::Board::ConstructorInjection; -use MooseX::Bread::Board::Literal; - -has service => ( - is => 'ro', - isa => 'Bool', - default => 1, -); - -has block => ( - is => 'ro', - isa => 'CodeRef', - predicate => 'has_block', -); - -# has_value is already a method -has literal_value => ( - is => 'ro', - isa => 'Str|CodeRef', - init_arg => 'value', - predicate => 'has_literal_value', -); - -has lifecycle => ( - is => 'ro', - isa => 'Str', - predicate => 'has_lifecycle', -); - -has dependencies => ( - is => 'ro', - isa => 'Bread::Board::Service::Dependencies', - coerce => 1, - predicate => 'has_dependencies', -); - -has constructor_name => ( - is => 'ro', - isa => 'Str', - predicate => 'has_constructor_name', -); - -has associated_service => ( - is => 'rw', - isa => 'Bread::Board::Service', - predicate => 'has_associated_service', -); - -after attach_to_class => sub { - my $self = shift; - - return unless $self->service; - - my %params = ( - associated_attribute => $self, - name => $self->name, - ($self->has_lifecycle - ? (lifecycle => $self->lifecycle) - : ()), - ($self->has_dependencies - ? (dependencies => $self->dependencies) - : ()), - ($self->has_constructor_name - ? (constructor_name => $self->constructor_name) - : ()), - ); - - my $service; - if ($self->has_block) { - $service = MooseX::Bread::Board::BlockInjection->new( - %params, - block => $self->block, - ); - } - elsif ($self->has_literal_value) { - $service = MooseX::Bread::Board::Literal->new( - %params, - value => $self->literal_value, - ); - } - elsif ($self->has_type_constraint) { - my $tc = $self->type_constraint; - if ($tc->isa('Moose::Meta::TypeConstraint::Class')) { - $service = MooseX::Bread::Board::ConstructorInjection->new( - %params, - class => $tc->class, - ); - } - } - - $self->associated_service($service) if $service; -}; - -after _process_options => sub { - my $class = shift; - my ($name, $opts) = @_; - - return unless exists $opts->{default} - || exists $opts->{builder}; - return unless exists $opts->{class} - || exists $opts->{block} - || exists $opts->{value}; - - # XXX: uggggh - return if any { $_ eq 'Moose::Meta::Attribute::Native::Trait::String' - || $_ eq 'Moose::Meta::Attribute::Native::Trait::Counter' } - @{ $opts->{traits} }; - - my $exists = exists($opts->{default}) ? 'default' : 'builder'; - die "$exists is not valid when Bread::Board service options are set"; -}; - -around get_value => sub { - my $orig = shift; - my $self = shift; - my ($instance) = @_; - - return $self->$orig($instance) - if $self->has_value($instance); - - my $val = $instance->get_service($self->name)->get; - - $self->verify_against_type_constraint($val, instance => $instance) - if $self->has_type_constraint; - - if ($self->should_auto_deref) { - if (ref($val) eq 'ARRAY') { - return wantarray ? @$val : $val; - } - elsif (ref($val) eq 'HASH') { - return wantarray ? %$val : $val; - } - else { - die 'XXX'; - } - } - else { - return $val; - } -}; - -if (Moose->VERSION > 1.9900) { - around _inline_instance_get => sub { - my $orig = shift; - my $self = shift; - my ($instance) = @_; - return 'do {' . "\n" - . 'my $val;' . "\n" - . 'if (' . $self->_inline_instance_has($instance) . ') {' . "\n" - . '$val = ' . $self->$orig($instance) . ';' . "\n" - . '}' . "\n" - . 'else {' . "\n" - . '$val = ' . $instance . '->get_service(\'' . $self->name . '\')->get;' . "\n" - . $self->_inline_check_constraint( - '$val', '$type_constraint', '$type_constraint_obj' - ) - . '}' . "\n" - . '$val' . "\n" - . '}'; - }; -} -else { - around accessor_metaclass => sub { - my $orig = shift; - my $self = shift; - - return Moose::Meta::Class->create_anon_class( - superclasses => [ $self->$orig(@_) ], - roles => [ 'MooseX::Bread::Board::Meta::Role::Accessor' ], - cache => 1 - )->name; - }; -} - -no Moose::Role; - -1; diff --git a/lib/MooseX/Bread/Board/Meta/Role/Class.pm b/lib/MooseX/Bread/Board/Meta/Role/Class.pm deleted file mode 100644 index 66c18ac..0000000 --- a/lib/MooseX/Bread/Board/Meta/Role/Class.pm +++ /dev/null @@ -1,32 +0,0 @@ -package MooseX::Bread::Board::Meta::Role::Class; -use Moose::Role; - -use Bread::Board::Service; -use List::MoreUtils qw(any); - -sub get_all_services { - my $self = shift; - return map { $_->associated_service } - grep { $_->has_associated_service } - grep { Moose::Util::does_role($_, 'MooseX::Bread::Board::Meta::Role::Attribute') } - $self->get_all_attributes; -} - -before superclasses => sub { - my $self = shift; - - return unless @_; - - die "Multiple inheritance is not supported for MooseX::Bread::Board classes" - if @_ > 1; - - return if $_[0]->isa('Bread::Board::Container'); - - die "Cannot inherit from " . join(', ', @_) - . " because MooseX::Bread::Board classes must inherit" - . " from Bread::Board::Container"; -}; - -no Moose::Role; - -1; diff --git a/lib/MooseX/Bread/Board/Meta/Role/Instance.pm b/lib/MooseX/Bread/Board/Meta/Role/Instance.pm deleted file mode 100644 index 93648e2..0000000 --- a/lib/MooseX/Bread/Board/Meta/Role/Instance.pm +++ /dev/null @@ -1,9 +0,0 @@ -package MooseX::Bread::Board::Meta::Role::Instance; -use Moose::Role; - -# XXX: ugh, this should be settable at the attr level, fix this in moose -sub inline_get_is_lvalue { 0 } - -no Moose::Role; - -1; diff --git a/lib/MooseX/Bread/Board/Role/Object.pm b/lib/MooseX/Bread/Board/Role/Object.pm deleted file mode 100644 index e99e5ed..0000000 --- a/lib/MooseX/Bread/Board/Role/Object.pm +++ /dev/null @@ -1,36 +0,0 @@ -package MooseX::Bread::Board::Role::Object; -use Moose::Role; - -has name => ( - is => 'rw', - isa => 'Str', - lazy => 1, - default => sub { shift->meta->name }, -); - -sub BUILD { } -after BUILD => sub { - my $self = shift; - - my $meta = Class::MOP::class_of($self); - - for my $service ($meta->get_all_services) { - if ($service->isa('MooseX::Bread::Board::BlockInjection')) { - my $block = $service->block; - $self->add_service( - $service->clone( - block => sub { - $block->(@_, $self) - }, - ) - ); - } - else { - $self->add_service($service->clone); - } - } -}; - -no Moose::Role; - -1; diff --git a/lib/MooseX/Bread/Board/Role/Service.pm b/lib/MooseX/Bread/Board/Role/Service.pm deleted file mode 100644 index 5e06eee..0000000 --- a/lib/MooseX/Bread/Board/Role/Service.pm +++ /dev/null @@ -1,40 +0,0 @@ -package MooseX::Bread::Board::Role::Service; -use Moose::Role; - -has associated_attribute => ( - is => 'ro', - isa => 'Class::MOP::Attribute', - required => 1, - weak_ref => 1, -); - -around get => sub { - my $orig = shift; - my $self = shift; - - my $container = $self->parent_container; - - if ($self->associated_attribute->has_value($container)) { - return $self->associated_attribute->get_value($container); - } - - return $self->$orig(@_); -}; - -sub parent_container { - my $self = shift; - - my $container = $self; - until (!defined($container) - || ($container->isa('Bread::Board::Container') - && $container->does('MooseX::Bread::Board::Role::Object'))) { - $container = $container->parent; - } - die "Couldn't find associated object!" unless defined $container; - - return $container; -} - -no Moose::Role; - -1; diff --git a/t/01-basic.t b/t/01-basic.t index 5aff0eb..e978101 100644 --- a/t/01-basic.t +++ b/t/01-basic.t @@ -13,7 +13,7 @@ my $i; { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has foo => ( is => 'ro', @@ -54,9 +54,9 @@ $i = 0; for qw(bar baz quux); ok(!$foo->has_service($_), "doesn't have service $_") for qw(foo baz2); - isa_ok($foo->get_service('bar'), 'MooseX::Bread::Board::Literal'); - isa_ok($foo->get_service('baz'), 'MooseX::Bread::Board::ConstructorInjection'); - isa_ok($foo->get_service('quux'), 'MooseX::Bread::Board::BlockInjection'); + isa_ok($foo->get_service('bar'), 'Bread::Board::Declare::Literal'); + isa_ok($foo->get_service('baz'), 'Bread::Board::Declare::ConstructorInjection'); + isa_ok($foo->get_service('quux'), 'Bread::Board::Declare::BlockInjection'); } { diff --git a/t/02-deps.t b/t/02-deps.t index 578db20..21e0c7f 100644 --- a/t/02-deps.t +++ b/t/02-deps.t @@ -19,7 +19,7 @@ my $i; { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has bar => ( is => 'ro', diff --git a/t/03-lifecycle.t b/t/03-lifecycle.t index 8b39175..c101929 100644 --- a/t/03-lifecycle.t +++ b/t/03-lifecycle.t @@ -19,7 +19,7 @@ my $i; { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has bar => ( is => 'ro', diff --git a/t/04-block.t b/t/04-block.t index 3d31d6d..3ce9f48 100644 --- a/t/04-block.t +++ b/t/04-block.t @@ -7,7 +7,7 @@ use Test::Moose; { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has foo => ( is => 'ro', diff --git a/t/10-inlining.t b/t/10-inlining.t index 080cefc..cb1b8d8 100644 --- a/t/10-inlining.t +++ b/t/10-inlining.t @@ -6,7 +6,7 @@ use Test::More; { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has foo => ( reader => 'get_foo', diff --git a/t/20-inheritance.t b/t/20-inheritance.t index 2324673..b1517e8 100644 --- a/t/20-inheritance.t +++ b/t/20-inheritance.t @@ -7,7 +7,7 @@ use Test::Moose; { package Parent; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has foo => ( is => 'ro', @@ -29,7 +29,7 @@ use Test::Moose; { package Child; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; extends 'Parent'; diff --git a/t/21-roles.t b/t/21-roles.t index 60a8c45..704b13c 100644 --- a/t/21-roles.t +++ b/t/21-roles.t @@ -7,7 +7,7 @@ use Test::Moose; { package Role1; use Moose::Role; - use MooseX::Bread::Board; + use Bread::Board::Declare; has role1 => ( (Moose->VERSION < 1.9900 @@ -22,7 +22,7 @@ use Test::Moose; { package Parent; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; with 'Role1'; @@ -46,7 +46,7 @@ use Test::Moose; { package Role2; use Moose::Role; - use MooseX::Bread::Board; + use Bread::Board::Declare; has role2 => ( (Moose->VERSION < 1.9900 @@ -61,7 +61,7 @@ use Test::Moose; { package Child; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; extends 'Parent'; with 'Role2'; diff --git a/t/22-more-inheritance.t b/t/22-more-inheritance.t index b32a7d1..d13639b 100644 --- a/t/22-more-inheritance.t +++ b/t/22-more-inheritance.t @@ -6,7 +6,7 @@ use Test::More; { package Parent; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has foo => ( is => 'ro', @@ -28,7 +28,7 @@ use Test::More; { package Child1; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; extends 'Parent'; @@ -42,7 +42,7 @@ use Test::More; { package Child2; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; extends 'Parent'; @@ -60,7 +60,7 @@ use Test::More; { package Child3; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; extends 'Child1'; diff --git a/t/30-type-checks.t b/t/30-type-checks.t index bca6134..9133da3 100644 --- a/t/30-type-checks.t +++ b/t/30-type-checks.t @@ -8,7 +8,7 @@ use Test::Moose; { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has foo => ( is => 'ro', diff --git a/t/31-auto-deref.t b/t/31-auto-deref.t index 57719b8..06762f6 100644 --- a/t/31-auto-deref.t +++ b/t/31-auto-deref.t @@ -7,7 +7,7 @@ use Test::Moose; { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has foo => ( is => 'ro', diff --git a/t/32-defaults.t b/t/32-defaults.t index a40a235..7350d52 100644 --- a/t/32-defaults.t +++ b/t/32-defaults.t @@ -7,7 +7,7 @@ use Test::Fatal; { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; ::like(::exception { has foo => ( diff --git a/t/33-constructor-name.t b/t/33-constructor-name.t index abe367d..5ae1258 100644 --- a/t/33-constructor-name.t +++ b/t/33-constructor-name.t @@ -13,7 +13,7 @@ use Test::Moose; { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has bar => ( is => 'ro', diff --git a/t/34-extends.t b/t/34-extends.t index c6eec1f..8e45869 100644 --- a/t/34-extends.t +++ b/t/34-extends.t @@ -12,25 +12,25 @@ use Test::Fatal; { package Baz; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; } { package Quux; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; } { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; ::like(::exception { extends 'Bar' }, - qr/^Cannot inherit from Bar because MooseX::Bread::Board classes must inherit from Bread::Board::Container/, + qr/^Cannot inherit from Bar because Bread::Board::Declare classes must inherit from Bread::Board::Container/, "error when inheriting from a non-container"); ::like(::exception { extends 'Baz', 'Quux' }, - qr/^Multiple inheritance is not supported for MooseX::Bread::Board classes/, + qr/^Multiple inheritance is not supported for Bread::Board::Declare classes/, "error when inheriting from multiple containers"); } diff --git a/t/40-mop.t b/t/40-mop.t index a3a2a34..c3a943f 100644 --- a/t/40-mop.t +++ b/t/40-mop.t @@ -7,7 +7,7 @@ use Test::Moose; { package Foo; use Moose; - use MooseX::Bread::Board; + use Bread::Board::Declare; has foo => ( is => 'ro', -- cgit v1.2.3