Initial trait for doing per request schema
Tomas Doran [Tue, 30 Aug 2011 11:23:26 +0000 (12:23 +0100)]
lib/Catalyst/TraitFor/Model/DBIC/Schema/PerRequestSchema.pm [new file with mode: 0644]

diff --git a/lib/Catalyst/TraitFor/Model/DBIC/Schema/PerRequestSchema.pm b/lib/Catalyst/TraitFor/Model/DBIC/Schema/PerRequestSchema.pm
new file mode 100644 (file)
index 0000000..dcbd61f
--- /dev/null
@@ -0,0 +1,26 @@
+package Catalyst::TraitFor::Model::DBIC::Schema::PerRequestSchema;
+use Moose;
+use namespace::autoclean;
+
+sub BUILD {}
+after BUILD => sub {
+    my ($self) = @_;
+    confess("You have not implemented a per_request_schema_attributes method in " . ref($self))
+        unless $self->can('per_request_schema_attributes');
+};
+
+with 'Catalyst::Component::InstancePerContext';
+
+sub build_per_context_instance {
+    my ( $self, $ctx ) = @_;
+    return $self unless blessed($ctx);
+
+    my $new = bless {%$self}, ref $self;
+
+    $new->schema( $new->schema->clone($self->per_request_schema_attributes($ctx)) );
+
+    return $new;
+}
+
+__PACKAGE__->meta->make_immutable;
+