The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#
# This file is part of MooseX-AttributeShortcuts
#
# This software is Copyright (c) 2017, 2015, 2014, 2013, 2012, 2011 by Chris Weyl.
#
# This is free software, licensed under:
#
#   The GNU Lesser General Public License, Version 2.1, February 1999
#
package MooseX::AttributeShortcuts::Trait::Attribute::HasAnonBuilder;
our $AUTHORITY = 'cpan:RSRCHBOY';
$MooseX::AttributeShortcuts::Trait::Attribute::HasAnonBuilder::VERSION = '0.036';
# ABSTRACT: Attributes, etc, common to both the role-attribute and attribute traits

use Moose::Role;
use namespace::autoclean 0.24;

has anon_builder => (
    reader    => 'anon_builder',
    writer    => '_set_anon_builder',
    isa       => 'CodeRef',
    predicate => 'has_anon_builder',
    # init_arg  => '_anon_builder',
);

has anon_builder_installed => (
    traits  => ['Bool'],
    is      => 'ro',
    default => 0,
    handles => {
        _set_anon_builder_installed => 'set',
    },
);

# FIXME Something Odd keeps this from succeeding as we'd like.
#requires 'canonical_builder_prefix';

sub _mxas_builder_name {
    my ($class, $name) = @_;

    return $class->canonical_builder_prefix . $name;
}

# this is identical between role and class attributes

sub _builder_method_meta {
    my ($self, $thing) = @_;

    my $dc = { %{$self->definition_context} };

    $dc->{description}
        = 'builder ' . $thing->name . '::' . $self->builder
        . ' of attribute ' . $self->name
        ;

    return $self->builder_method_metaclass->wrap($self->anon_builder =>
        associated_attribute => $self,
        associated_metaclass => $thing,
        name                 => $self->builder,
        package_name         => $thing->name,
        definition_context   => $dc,
    );
}


!!42;

__END__

=pod

=encoding UTF-8

=for :stopwords Chris Weyl Alders David Etheridge Graham Karen Knop Olaf Steinbrunner

=head1 NAME

MooseX::AttributeShortcuts::Trait::Attribute::HasAnonBuilder - Attributes, etc, common to both the role-attribute and attribute traits

=head1 VERSION

This document describes version 0.036 of MooseX::AttributeShortcuts::Trait::Attribute::HasAnonBuilder - released October 31, 2017 as part of MooseX-AttributeShortcuts.

=head1 DESCRIPTION

This is a role containing the elements common to both the
L<role attribute trait|MooseX::AttributeShortcuts::Trait::Role::Attribute>
and L<attribute trait|MooseX::AttributeShortcuts::Trait::Attribute>
of L<MooseX::AttributeShortcuts>.

=head1 ATTRIBUTES

=head2 anon_builder

CodeRef, read-only.  Stores the code reference that will become the
attribute's builder.  This code reference will be installed in the role or
class as a method, as appropriate.

=head2 anon_builder_installed

Boolean, read-only.  If true, the code reference in L</anon_builder> has been
installed as a method.

=head1 METHODS

=head2 has_anon_builder

Predicate for L</anon_builder>.

=head1 SEE ALSO

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

=over 4

=item *

L<MooseX::AttributeShortcuts|MooseX::AttributeShortcuts>

=back

=head1 BUGS

Please report any bugs or feature requests on the bugtracker website
L<https://github.com/RsrchBoy/moosex-attributeshortcuts/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.

=head1 AUTHOR

Chris Weyl <cweyl@alumni.drew.edu>

=head1 COPYRIGHT AND LICENSE

This software is Copyright (c) 2017, 2015, 2014, 2013, 2012, 2011 by Chris Weyl.

This is free software, licensed under:

  The GNU Lesser General Public License, Version 2.1, February 1999

=cut