73 lines
1.3 KiB
Perl
73 lines
1.3 KiB
Perl
package SQL::Abstract::Role::Plugin;
|
|
|
|
use Moo::Role;
|
|
|
|
has sqla => (
|
|
is => 'ro', init_arg => undef,
|
|
handles => [ qw(
|
|
expand_expr render_aqt join_query_parts
|
|
) ],
|
|
);
|
|
|
|
sub cb {
|
|
my ($self, $method, @args) = @_;
|
|
return sub {
|
|
local $self->{sqla} = shift;
|
|
$self->$method(@args, @_)
|
|
};
|
|
}
|
|
|
|
sub register {
|
|
my ($self, @pairs) = @_;
|
|
my $sqla = $self->sqla;
|
|
while (my ($method, $cases) = splice(@pairs, 0, 2)) {
|
|
my @cases = @$cases;
|
|
while (my ($name, $case) = splice(@cases, 0, 2)) {
|
|
$sqla->$method($name, $self->cb($case));
|
|
}
|
|
}
|
|
return $self;
|
|
}
|
|
|
|
sub apply_to {
|
|
my ($self, $sqla) = @_;
|
|
$self = $self->new unless ref($self);
|
|
local $self->{sqla} = $sqla;
|
|
$self->register_extensions($sqla);
|
|
}
|
|
|
|
requires 'register_extensions';
|
|
|
|
1;
|
|
|
|
__END__
|
|
|
|
=head1 NAME
|
|
|
|
SQL::Abstract::Role::Plugin - helpful methods for plugin authors
|
|
|
|
=head1 METHODS
|
|
|
|
=head2 apply_to
|
|
|
|
Applies the plugin to an L<SQL::Abstract> object.
|
|
|
|
=head2 register_extensions
|
|
|
|
Provided by the plugin, registers its extensions to the sqla object.
|
|
|
|
=head2 cb
|
|
|
|
Creates a callback to call a method on the plugin.
|
|
|
|
=head2 register
|
|
|
|
Calls methods on the sqla object with arguments wrapped as callbacks.
|
|
|
|
=head2 sqla
|
|
|
|
Available only during plugin callback executions, contains the currently
|
|
active L<SQL::Abstract> object.
|
|
|
|
=cut
|