VERSION

version 0.003

SYNOPSIS

    use Moose;
    use MooseX::Has::Options;

    has 'some_attribute' => (
        qw(:ro :required),
        isa => 'Str',
        ...
    );

    has 'another_attribute' => (
        qw(:ro :lazy_build),
        isa => 'Str',
        ...
    );

DESCRIPTION

This module provides a succinct syntax for declaring options for Moose attributes.

USAGE

Declaring options

\*(C`MooseX::Has::Params\*(C' works by checking the arguments to \*(C`has\*(C' for strings that look like options, i.e. alphanumeric strings preceded by a colon, and replaces them with a hash whose keys are the names of the options (sans the colon) and the values are 1's. Thus,

has 'some_attribute', ':required';

becomes:

has 'some_attribute', required => 1;

Options must come in the beginning of the argument list. MooseX::Has::Options will stop searching for options after the first alphanumeric string that does not start with a colon.

The default behaviour can be customised per attribute. For example, here is how \*(C`ro\*(C', \*(C`rw\*(C' and \*(C`bare\*(C' work:

has 'some_attribute', ':ro';

becomes:

has 'some_attribute', is => 'ro';

See below for details.

Handlers

\*(C`MooseX::Has::Options\*(C' allows you to expand specific 'shortcut' arguments to arbitrary values via the handler interface. A 'handler' is a module in the MooseX::Has::Options::Handler namespace that provides a \*(C`handler\*(C' function. The handler function should return a hash whose keys are shortcut names, and the values are hashrefs with the values that the respective shortcuts should be expanded to. In order to enable the shortcuts supplied by a given handler you need to add it in the import statement:

use MooseX::Has::Options qw(NativeTypes);

has 'some_attribute', qw(:ro :hash), default => sub {{ foo => bar }};

The following handlers ship with the default distribution:

  • MooseX::Has::Options::Handler::Accessors (included by default when you import this module)

  • MooseX::Has::Options::Handler::NativeTypes

  • MooseX::Has::Options::Handler::NoInit

IMPLEMENTATION DETAILS

\*(C`MooseX::Has::Options\*(C' hijacks the \*(C`has\*(C' function imported by Moose and replaces it with one that understands the options syntax described above. This is not an optimal solution, but the current implementation of \*(C`Moose::Meta::Attribute\*(C' prevents this functionality from being provided as a meta trait.

DEPRECATED BEHAVIOUR

Previous versions of \*(C`MooseX::Has::Params\*(C' allowed you to specify during import the name of the function too hook into, like so:

use HTML::FormHandler::Moose; use MooseX::Has::Options qw(has_field);

has_field 'name' => ( qw(:required), type => 'Text', );

This behaviour is deprecated as of version 0.003 as this syntax is now used for specifying handlers. If you need to hook into a different function see the implementation of \*(C`MooseX::Has::Options::import()\*(C' and \*(C`MooseX::Has::Options::import_into()\*(C'.

RELATED TO MooseX::Has::Options…

  • MooseX::Has::Sugar

AUTHOR

Peter Shangov <[email protected]>

COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Peter Shangov.

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