removing noise (comments and warnings)
[catagits/Catalyst-Runtime.git] / lib / Catalyst / IOC.pm
index dbb0184..a71bddb 100644 (file)
@@ -3,11 +3,8 @@ use strict;
 use warnings;
 use Bread::Board qw/depends_on/;
 use Catalyst::IOC::ConstructorInjection;
+no strict 'refs';
 
-# FIXME - All of these imports need to get the importing package
-#         as the customise_container and current_container variables
-#         NEED to be in the containers package so there can be multiple
-#         containers..
 use Sub::Exporter -setup => {
     exports => [qw/
         depends_on
@@ -22,71 +19,54 @@ use Sub::Exporter -setup => {
         container
     /]},
 };
-#use Sub::Exporter -setup => [
-#    qw(
-#        Bread::Board::as
-#        Bread::Board::container
-#        Bread::Board::depends_on
-#        Bread::Board::service
-#        Bread::Board::alias
-#        Bread::Board::wire_names
-#        Bread::Board::include
-#        Bread::Board::typemap
-#        Bread::Board::infer
-#    )
-#];
-# I'm probably doing it wrong.
-# Anyway, I'll just use Moose::Exporter. Do I really have to use Sub::Exporter?
-#use Moose::Exporter;
-#Moose::Exporter->setup_import_methods(
-#    also => ['Bread::Board'],
-#);
-our $customise_container;
-our $current_container;
 
 sub container (&) {
     my $code = shift;
-    $customise_container = sub {
-        warn("In customise container");
-        local $current_container = shift();
+    my $caller = caller;
+    ${"${caller}::customise_container"} = sub {
+        local ${"${caller}::current_container"} = shift;
         $code->();
     };
 }
 
 sub model (&) {
     my $code = shift;
-    local $current_container = $current_container->get_sub_container('model');
+    my $caller = caller;
+    local ${"${caller}::current_container"} = ${"${caller}::current_container"}->get_sub_container('model');
     $code->();
 }
 
 sub component {
     my ($name, %args) = @_;
+    my $caller = caller;
     $args{dependencies} ||= {};
     $args{dependencies}{application_name} = depends_on( '/application_name' );
 
+    my $lifecycle = $args{lifecycle};
+    my %catalyst_lifecycles = map { $_ => 1 } qw/ COMPONENTSingleton Request /;
+    $args{lifecycle} = $lifecycle
+                     ? $catalyst_lifecycles{$lifecycle} ? "+Catalyst::IOC::LifeCycle::$lifecycle" : $lifecycle
+                     : 'Singleton'
+                     ;
+
     # FIXME - check $args{type} here!
 
     my $component_name = join '::', (
-        $current_container->resolve(service => '/application_name'),
-        ucfirst($current_container->name),
+        ${"${caller}::current_container"}->resolve(service => '/application_name'),
+        ucfirst(${"${caller}::current_container"}->name),
         $name
     );
 
     my $service = Catalyst::IOC::ConstructorInjection->new(
         %args,
-        name             => $name,
-        lifecycle        => 'Singleton',
-        # XX FIXME - needs to become possible to intuit catalyst_component_name
-        #            from dependencies (like config)
+        name => $name,
         catalyst_component_name => $component_name,
     );
-    $current_container->add_service($service);
+    ${"${caller}::current_container"}->add_service($service);
 }
 
 1;
 
-# FIXME - should the code example below be on this file or Catalyst::IOC::Container?
-
 __END__
 
 =pod