NAME

Bubblegum::Role - Class Component System for Bubblegum via Moo::Role

VERSION

version 0.35

SYNOPSIS

package CheckingService;

use Bubblegum::Role;

sub deposit {
    my $self = shift;
    my $amount = $self->balance + shift // 0;
    return $self->balance($amount);
}

sub withdrawal {
    my $self = shift;
    my $amount = $self->balance - shift // 0;
    return $self->balance($amount);
}

package BankAccount;

use Bubblegum::Class;

with 'CheckingService';

has balance => (
    is      => 'rw',
    default => 0
);

And elsewhere:

my $account = BankAccount->new(balance => 100000);
say $account->withdrawal(1500);

DESCRIPTION

Bubblegum::Role provides an object orientated system for defining class components (often referred to as traits or roles) by way of Moo::Role; and activates all of the options enabled by the Bubblegum module. Using this module allows you to define Moo roles as if you were using Moo::Role directly.

use Bubblegum::Role;

is equivalent to

use 5.10.0;
use strict;
use warnings;
use autobox;
use autodie ':all';
use feature ':5.10';
use English -no_match_vars;
use utf8::all;
use mro 'c3';
use Moo::Role;

AUTHOR

Al Newkirk <anewkirk@ana.io>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Al Newkirk.

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