The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

DBIx::Class::ResultSet::ModifyMethods - Wrap modifiers around your methods

SYNOPSIS

Given a DBIx::Class::ResultSet that consumes this component, such as the following:

    package MySchema::ResultSet::Bar;

    use strict;
    use warnings;
    use base 'DBIx::Class::ResultSet';

    __PACKAGE__->load_components('ResultSet::ModifyMethods');

    ## Additional custom resultset methods, if any

    1;

Then later when you have a resulset of that class:

    my $rs = $schema->resultset('Bar');

You can modify instance methods similarly to Moose method modifiers.

    $rs->around( search => sub {
      my ($orig, $rs, @args) = @_;
      print "Search was called!";
      return $rs->$orig(@args);
    });

The above would wrap the search method such that when someone called it on $rs you'd see "Search was called!"" in STDOUT

DESCRIPTION

There may be times when you wish to hook a resultset before passing a resultset to another method. Since the anonymous coderef can be a closure, this opens some possibilties for enabling observer style patterns. You can also use this to modify @args, etc, just as in Moose, or even change the return value.

METHODS

This component defines the following methods.

around

Arguments: $method||\@methods, $coderef Returns: Wrapped ResultSet (A Proxy instance)

Allows you to dynamically add a Moose style around method modifier for this single ResultSet only which wraps a method or arrayref of methods and grants you full control over how the wrapped method is called. You can even use this to inspect and modify arguments.

Example:

    $rs->around( search => sub {
      my ($orig, $rs, @args) = @_;
      return $rs->$orig(@args);
    });

before

Arguments: $method||\@methods, $coderef Returns: Wrapped ResultSet (A Proxy instance)

Allows you to run some code before a method or arrayref of methods on your ResultSet instance before it actually runs. You can't use this to modify incoming args to a method or control the method. Use this to safely hook a method when you want to do something and not potentially effect the actually running of the wrapped method.

    $rs->before( search => sub {
      my ($rs, @args) = @_;
      return $rs->$orig(@args);
    });

after

Arguments: $method||\@methods, $coderef Returns: Wrapped ResultSet (A Proxy instance)

Allows you to run some code before a method or arrayref of methods on your ResultSet instance after it actually runs. You can't use this to modify incoming args to a method or control the method. Use this to safely hook a method when you want to do something and not potentially effect the actually running of the wrapped method.

    $rs->after( search => sub {
      my ($rs, @args) = @_;
      return $rs->$orig(@args);
    });

AUTHOR

John Napiorkowski email:jjnapiork@cpan.org

SEE ALSO

DBIx::Class

COPYRIGHT & LICENSE

Copyright 2017, John Napiorkowski email:jjnapiork@cpan.org

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.