... | ... |
@@ -1,5 +1,8 @@ |
1 |
+0.1613 |
|
2 |
+ added experimental register_method() method |
|
3 |
+ added experimental methods attribute |
|
1 | 4 |
0.1612 |
2 |
- add tests |
|
5 |
+ added tests |
|
3 | 6 |
updated document |
4 | 7 |
removed DBIx::Custom::SQLite last_insert_rawid() mehtod(not backword compatible) |
5 | 8 |
removed DBIx::Custom::MySQL last_insert_id() method(not backword compatible) |
... | ... |
@@ -474,13 +474,39 @@ sub _check_filter { |
474 | 474 |
} |
475 | 475 |
} |
476 | 476 |
|
477 |
+__PACKAGE__->attr('methods' => sub { {} }); |
|
478 |
+ |
|
479 |
+sub register_method { |
|
480 |
+ my $self = shift; |
|
481 |
+ |
|
482 |
+ # Register method |
|
483 |
+ my $methods = ref $_[0] eq 'HASH' ? $_[0] : {@_}; |
|
484 |
+ $self->methods({%{$self->methods}, %$methods}); |
|
485 |
+ |
|
486 |
+ return $self; |
|
487 |
+} |
|
488 |
+ |
|
489 |
+our $AUTOLOAD; |
|
490 |
+sub AUTOLOAD { |
|
491 |
+ my $self = shift; |
|
492 |
+ my $method = $AUTOLOAD; |
|
493 |
+ $method =~ s/.*:://; |
|
494 |
+ |
|
495 |
+ return if $method eq 'DESTROY'; |
|
496 |
+ |
|
497 |
+ croak qq{Method "$method" is not registered"} |
|
498 |
+ unless $self->methods->{$method}; |
|
499 |
+ |
|
500 |
+ return $self->methods->{$method}->($self, @_); |
|
501 |
+} |
|
502 |
+ |
|
477 | 503 |
=head1 NAME |
478 | 504 |
|
479 | 505 |
DBIx::Custom - DBI interface, having hash parameter binding and filtering system |
480 | 506 |
|
481 | 507 |
=cut |
482 | 508 |
|
483 |
-our $VERSION = '0.1612'; |
|
509 |
+our $VERSION = '0.1613'; |
|
484 | 510 |
|
485 | 511 |
=head1 STABILITY |
486 | 512 |
|
... | ... |
@@ -1213,6 +1239,13 @@ Default to 1. |
1213 | 1239 |
This check maybe damege performance. |
1214 | 1240 |
If you require performance, set C<filter_check> attribute to 0. |
1215 | 1241 |
|
1242 |
+=head2 C<(experimental) methods> |
|
1243 |
+ |
|
1244 |
+ my $methods = $dbi->methods; |
|
1245 |
+ $dbi = $dbi->methods(\%methods); |
|
1246 |
+ |
|
1247 |
+Additional methods. |
|
1248 |
+ |
|
1216 | 1249 |
=head1 METHODS |
1217 | 1250 |
|
1218 | 1251 |
L<DBIx::Custom> inherits all methods from L<Object::Simple> |
... | ... |
@@ -1475,6 +1508,21 @@ B<Example:> |
1475 | 1508 |
} |
1476 | 1509 |
); |
1477 | 1510 |
|
1511 |
+=head2 C<(experimental) register_method> |
|
1512 |
+ |
|
1513 |
+ $dbi->register_method( |
|
1514 |
+ begin_work => sub { shift->dbh->begin_work }, |
|
1515 |
+ commit => sub { shift->dbh->commit }, |
|
1516 |
+ rollback => sub { shift->dbh->rollback} |
|
1517 |
+ ); |
|
1518 |
+ |
|
1519 |
+Register methods to the object. You can call these methods |
|
1520 |
+from the object. |
|
1521 |
+ |
|
1522 |
+ $dbi->begin_work; |
|
1523 |
+ $dbi->commit; |
|
1524 |
+ $dbi->rollback; |
|
1525 |
+ |
|
1478 | 1526 |
=head1 BUGS |
1479 | 1527 |
|
1480 | 1528 |
Please tell me bugs if found. |
... | ... |
@@ -21,6 +21,8 @@ sub test { |
21 | 21 |
$test = shift; |
22 | 22 |
} |
23 | 23 |
|
24 |
+use DBIx::Custom::SQLite; |
|
25 |
+ |
|
24 | 26 |
# Constant varialbes for test |
25 | 27 |
my $CREATE_TABLE = { |
26 | 28 |
0 => 'create table table1 (key1 char(255), key2 char(255));', |
... | ... |
@@ -554,3 +556,14 @@ ok($@, "$test: execute fail"); |
554 | 556 |
eval{$dbi->create_query('select * from table1 where {0 key1}')}; |
555 | 557 |
like($@, qr/\Q.t /, "$test : caller spec"); |
556 | 558 |
|
559 |
+ |
|
560 |
+test 'register_method'; |
|
561 |
+$dbi = DBIx::Custom::SQLite->new; |
|
562 |
+$dbi->register_method( |
|
563 |
+ one => sub { 1 }, |
|
564 |
+); |
|
565 |
+$dbi->register_method({ |
|
566 |
+ two => sub { 2 } |
|
567 |
+}); |
|
568 |
+is($dbi->one, 1, "$test : hash"); |
|
569 |
+is($dbi->two, 2, "$test : hash reference"); |