sketch out some service code
[scpubgit/Clifton.git] / lib / App / Clifton / ServiceContainer.pm
diff --git a/lib/App/Clifton/ServiceContainer.pm b/lib/App/Clifton/ServiceContainer.pm
new file mode 100644 (file)
index 0000000..a426a01
--- /dev/null
@@ -0,0 +1,38 @@
+package App::Clifton::ServiceContainer;
+
+use aliased 'App::Clifton::JabberService';
+use aliased 'App::Clifton::IRCService';
+use aliased 'App::Clifton::ConsoleService';
+use Log::Contextual qw(:log);
+use Moo;
+
+extends 'App::Clifton::Component';
+
+has jabber => (is => 'lazy');
+has irc => (is => 'lazy');
+has console => (is => 'lazy');
+
+sub BUILD {
+  my ($self) = @_;
+  $self->$_ for qw(console irc jabber);
+}
+
+sub _build_jabber {
+  my ($self) = @_;
+  log_debug { "Spawning jabber service" };
+  $self->_new_child(JabberService, { irc_service => $self->irc });
+}
+
+sub _build_irc {
+  my ($self) = @_;
+  log_debug { "Spawning IRC service" };
+  $self->_new_child(IRCService, {});
+}
+
+sub _build_console {
+  my ($self) = @_;
+  log_debug { "Spawning console service" };
+  $self->_new_child(ConsoleService, {});
+}
+
+1;