From 56b6cd0a1cb461a99ae2bd92d94059a489e8c3a8 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Mon, 31 Dec 2012 15:02:09 -0600 Subject: factor this out into a method too --- lib/Bread/Board.pm | 85 ++++++++++++++++++++++-------------------------------- 1 file changed, 35 insertions(+), 50 deletions(-) diff --git a/lib/Bread/Board.pm b/lib/Bread/Board.pm index eb82126..5964c23 100644 --- a/lib/Bread/Board.pm +++ b/lib/Bread/Board.pm @@ -68,6 +68,33 @@ role HasDependencies { # has Hash of Dependency $.dependencies = {}; has $.dependencies = {}; + # PERL6: type coercions NYI + method _coerce_dependencies ($deps is copy) { + if $deps ~~ Array { + $deps = $deps.map(-> $dep { + my ($name, $obj); + if ($dep ~~ Dependency) { + $name = $dep.service_path.split('/').[*-1]; + $obj = $dep; + } + else { + $name = $dep.split('/').[*-1]; + $obj = Dependency.new(service_path => $dep); + } + $name => $obj + }).hash; + } + + my $ret = {}; + for $deps.keys -> $name { + my $dep = $deps.{$name}; + $ret.{$name} = $dep.isa(Dependency) + ?? $dep + !! Dependency.new(service => $dep); + } + return $ret; + } + # PERL6: there doesn't appear to be any way for roles to do things at # ' # construction time without breaking things - so, just call this method # in the constructor of all classes that use this role manually @@ -164,33 +191,12 @@ class Dependency does Traversable { class ConstructorInjection does Service does HasParameters does HasDependencies does HasClass { has Str $.constructor_name is rw = 'new'; - # PERL6: type coercions NYI method new (*%params is copy) { - if %params. { - if %params. ~~ Array { - %params. = %params..map(-> $dep { - my ($name, $obj); - if ($dep ~~ Dependency) { - $name = $dep.service_path.split('/').[*-1]; - $obj = $dep; - } - else { - $name = $dep.split('/').[*-1]; - $obj = Dependency.new(service_path => $dep); - } - $name => $obj - }).hash; - } - - my $deps = {}; - for %params..keys -> $name { - my $dep = %params..{$name}; - $deps.{$name} = $dep.isa(Dependency) - ?? $dep - !! Dependency.new(service => $dep); - } - %params. = $deps; + if my $deps = %params. { + # PERL6: type coercions NYI + %params. = self._coerce_dependencies($deps); } + my $self = callwith(|%params); # XXX see above @@ -237,33 +243,12 @@ class Parameters { class BlockInjection does Service does HasParameters does HasDependencies does HasClass { has Callable $.block; - # PERL6: type coercions NYI method new (*%params is copy) { - if %params. { - if %params. ~~ Array { - %params. = %params..map(-> $dep { - my ($name, $obj); - if ($dep ~~ Dependency) { - $name = $dep.service_path.split('/').[*-1]; - $obj = $dep; - } - else { - $name = $dep.split('/').[*-1]; - $obj = Dependency.new(service_path => $dep); - } - $name => $obj - }).hash; - } - - my $deps = {}; - for %params..keys -> $name { - my $dep = %params..{$name}; - $deps.{$name} = $dep.isa(Dependency) - ?? $dep - !! Dependency.new(service => $dep); - } - %params. = $deps; + if my $deps = %params. { + # PERL6: type coercions NYI + %params. = self._coerce_dependencies($deps); } + my $self = callwith(|%params); # XXX see above -- cgit v1.2.3