NAME
    MooseX::Privacy - Provides the syntax to restrict/control visibility of
    your methods

SYNOPSIS
        use MooseX::Privacy;

        has config => (
            is     => 'rw',
            isa    => 'Some::Config',
            traits => [qw/Private/],
        );

        has username => (
            is     => 'rw',
            isa    => 'Str',
            traits => [qw/Protected/],
        );

        private_method foo => sub {
            return 23;
        };

        protected_method bar => sub {
            return 42;
        };

DESCRIPTION
    MooseX::Privacy brings the concept of private and protected methods to
    your class.

METHODS
  Private
    When you declare a method as private, this method can be called only
    within the class.

        package Foo;

        use Moose;
        use MooseX::Privacy;

        private_method foo => sub { return 23 };

        sub mul_by_foo { my $self = shift; $self->foo * $_[0] }

        1;

        my $foo = Foo->new;
        $foo->foo;           # die
        $foo->mul_by_foo;    # ok

  Protected
    When you declare a method as protected, this method can be called only
    within the class AND any of it's subclasses.

        package Foo;

        use Moose;
        use MooseX::Privacy;

        protected_method foo => sub { return 23 };

        package Bar;

        use Moose;
        extends Foo;

        sub bar { my $self = shift; $self->foo }

        1;

        my $foo = Foo->new;
        $foo->foo;    # die
        my $bar = Bar->new;
        $bar->bar;    # ok

  Attributes
   Private
    When the Private traits is applied to an attribute, this attribute can
    only be read or set within the class.

   Protected
    When the Protected traits is applied to an attribute, this attribute can
    only be read or set within the class AND any of his subclasses.

AUTHOR
    franck cuny <franck@lumberjaph.net>

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