summaryrefslogtreecommitdiffstats
path: root/lib/Bread/Board.pm
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2012-12-28 08:38:35 -0600
committerJesse Luehrs <doy@tozt.net>2012-12-28 08:38:35 -0600
commit806b062f87e94fb2491cb8e3c66116e164fbcb56 (patch)
tree48cdec712b500d8334b264dc210793b7be00ab66 /lib/Bread/Board.pm
parent8652d04dd23d1f2a6ba6220a18dab8d82d66a680 (diff)
downloadp6-bread-board-806b062f87e94fb2491cb8e3c66116e164fbcb56.tar.gz
p6-bread-board-806b062f87e94fb2491cb8e3c66116e164fbcb56.zip
refactor
Diffstat (limited to 'lib/Bread/Board.pm')
-rw-r--r--lib/Bread/Board.pm50
1 files changed, 41 insertions, 9 deletions
diff --git a/lib/Bread/Board.pm b/lib/Bread/Board.pm
index 35b281f..36c53a5 100644
--- a/lib/Bread/Board.pm
+++ b/lib/Bread/Board.pm
@@ -46,6 +46,18 @@ role Traversable {
role Service does Traversable {
has Str $.name;
+ method get {...}
+
+ method get_enclosing_container {
+ return $.parent;
+ }
+
+ method _fetch_single (Str $name) {
+ die "Couldn't find $name in $.name";
+ }
+}
+
+role HasDependencies {
# PERL6: typed hashes NYI
# has Hash of Dependency $.dependencies = {};
has $.dependencies = {};
@@ -65,18 +77,11 @@ role Service does Traversable {
return;
}
- method get {...}
-
method get_dependency ($name) {
return $.dependencies.{$name};
}
- method get_enclosing_container {
- return $.parent;
- }
-
method _fetch_single (Str $name) {
- # XXX parameters?
return self.get_dependency($name)
// die "No dependency $name found for $.name";
}
@@ -113,6 +118,11 @@ role HasParameters {
# weird
return;
}
+
+ method _fetch_single (Str $name) {
+ return self.get_parameter($name)
+ // die "No parameter $name found for $.name";
+ }
}
class Dependency does Traversable {
@@ -136,7 +146,7 @@ class Dependency does Traversable {
}
}
-class ConstructorInjection does Service does HasParameters {
+class ConstructorInjection does Service does HasParameters does HasDependencies {
has $.class;
has Str $.constructor_name is rw = 'new';
@@ -166,6 +176,17 @@ class ConstructorInjection does Service does HasParameters {
}
return $.class."$.constructor_name"(|%params);
}
+
+ method _fetch_single (Str $name) {
+ # PERL6: self.Role::method calls the method with the role type object
+ # as the invocant, rather than self
+ #return try { self.HasDependencies::_fetch_single($name) }
+ # // try { self.HasParameters::_fetch_single($name) }
+ # // die "Couldn't find dependency or parameter $name in $.name";
+ return self.get_dependency($name)
+ // self.get_parameter($name)
+ // die "Couldn't find dependency or parameter $name in $.name";
+ }
}
class Parameters {
@@ -179,7 +200,7 @@ class Parameters {
}
}
-class BlockInjection does Service does HasParameters {
+class BlockInjection does Service does HasParameters does HasDependencies {
has Callable $.block;
has $.class = Any;
@@ -214,6 +235,17 @@ class BlockInjection does Service does HasParameters {
)
);
}
+
+ method _fetch_single (Str $name) {
+ # PERL6: self.Role::method calls the method with the role type object
+ # as the invocant, rather than self
+ #return try { self.HasDependencies::_fetch_single($name) }
+ # // try { self.HasParameters::_fetch_single($name) }
+ # // die "Couldn't find dependency or parameter $name in $.name";
+ return self.get_dependency($name)
+ // self.get_parameter($name)
+ // die "Couldn't find dependency or parameter $name in $.name";
+ }
}
class Literal does Service {