Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Curry your delegations with methods
Perl
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib/MooseX
t
.gitignore
.travis.yml
Changes
LICENSE
README.mkdn
cpanfile
dist.ini

README.mkdn

Build Status Kwalitee status

NAME

MooseX::CurriedDelegation - Curry your delegations with methods

VERSION

This document describes version 0.003 of MooseX::CurriedDelegation - released April 24, 2015 as part of MooseX-CurriedDelegation.

SYNOPSIS

use Moose;
use MooseX::CurriedDelegation;

has one => (is => 'ro', isa => 'Str', default => 'default');

has foo => (

    is      => 'rw',
    isa     => 'TestClass::Delagatee', # has method curried()
    default => sub { TestClass::Delagatee->new },

    handles => {

        # method-curry
        #   Note the hashref, not arrayref, we employ
        #   first arg is the remote method to delegate to
        #   second is an arrayref comprising:
        #       coderef to call as a method on the instance, followed by
        #       "static" curry args
        #
        # so, essentially:
        #   $self->foo->remote_method($self->$coderef(), @remaining_args);
        #
        # foo_del_one => {
        #   remote_method => [ sub { ... }, qw{ static args } ],
        # },

        foo_del_one => { curried => [ sub { shift->one }, qw{ more curry args } ] },

        # curry_to_self() always returns: sub { shift }
        foo_del_two => { other_method => [ curry_to_self ] },
    },
);

DESCRIPTION

Method delegation is awfully handy -- but sometimes it'd be awfully handier if it was a touch more dynamic. This is an attribute trait that provides for a delegated method to be curried.

USAGE

Using this package will cause the relevant attribute trait to be applied without requiring further intervention. We use the standard

handles => { local_method => delegate_info, ... }

delegation methodology, however our currying is invoked when delegate_info is a hashref. We expect delegate info to look like:

{ remote_method => [ $coderef, @more_curry_args ] }

Only $coderef is ever executed by the delegation. This means that it is safe to have any number of additional coderefs in @more_curry_args: they will be passed through to remote_method without additional manipulation.

ADDITIONAL SUGAR

In addition, we export a number of helper functions.

curry_to_self()

This function always returns a coderef like "sub { shift }". That is, this:

local => { remote => [ curry_to_self ] }

is equivalent to:

local => { remote => [ sub { shift } ] }

is equivalent to:

$self->attribute_accessor->remote($self)

TRAIT ALIASES

CurriedDelegation

Resolves out to the full name of our attribute trait; you can use it as:

has foo => (traits => [CurriedDelegation], ...)

SEE ALSO

Please see those modules/websites for more information related to this module.

SOURCE

The development version is on github at http://https://github.com/RsrchBoy/moosex-currieddelegation and may be cloned from git://https://github.com/RsrchBoy/moosex-currieddelegation.git

BUGS

Please report any bugs or feature requests on the bugtracker website https://github.com/RsrchBoy/moosex-currieddelegation/issues

When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.

AUTHOR

Chris Weyl cweyl@alumni.drew.edu

I'm a material boy in a material world

Please note I do not expect to be gittip'ed or flattr'ed for this work, rather it is simply a very pleasant surprise. I largely create and release works like this because I need them or I find it enjoyable; however, don't let that stop you if you feel like it ;)

Flattr this, gittip me, or indulge my Amazon Wishlist... If you so desire.

COPYRIGHT AND LICENSE

This software is Copyright (c) 2012 by Chris Weyl.

This is free software, licensed under:

The GNU Lesser General Public License, Version 2.1, February 1999
Something went wrong with that request. Please try again.