Skip to content

Instantly share code, notes, and snippets.

@nekoya
Created October 19, 2009 05:27
Show Gist options
  • Select an option

  • Save nekoya/213117 to your computer and use it in GitHub Desktop.

Select an option

Save nekoya/213117 to your computer and use it in GitHub Desktop.
diff --git a/lib/DBIx/Skinny/Schema.pm b/lib/DBIx/Skinny/Schema.pm
index e9438a6..d3308fc 100644
--- a/lib/DBIx/Skinny/Schema.pm
+++ b/lib/DBIx/Skinny/Schema.pm
@@ -19,7 +19,7 @@ sub import {
install_inflate_rule
inflate deflate call_inflate call_deflate
callback _do_inflate
- trigger call_trigger
+ install_common_trigger trigger call_trigger
install_utf8_columns
is_utf8_column utf8_on utf8_off
/;
@@ -32,6 +32,8 @@ sub import {
*{"$caller\::schema_info"} = sub { $_schema_info };
my $_schema_inflate_rule = {};
*{"$caller\::inflate_rules"} = sub { $_schema_inflate_rule };
+ my $_schema_common_triggers = {};
+ *{"$caller\::common_triggers"} = sub { $_schema_common_triggers };
my $_utf8_columns = {};
*{"$caller\::utf8_columns"} = sub { $_utf8_columns };
@@ -83,6 +85,11 @@ sub trigger ($$) {
sub call_trigger {
my ($class, $skinny, $table, $trigger_name, $args) = @_;
+ my $common_triggers = $class->common_triggers->{$trigger_name};
+ for my $code (@$common_triggers) {
+ $code->($skinny,$args);
+ }
+
my $triggers = $class->schema_info->{$table}->{trigger}->{$trigger_name};
for my $code (@$triggers) {
$code->($skinny, $args);
@@ -142,6 +149,13 @@ sub _do_inflate {
sub callback (&) { shift }
+sub install_common_trigger ($$) {
+ my ($trigger_name, $code) = @_;
+
+ my $class = _get_caller_class;
+ push @{$class->common_triggers->{$trigger_name}}, $code;
+}
+
sub install_utf8_columns (@) {
my @columns = @_;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment