Succinct options for moose
version 0.003
use Moose; use MooseX::Has::Options; has 'some_attribute' => ( qw(:ro :required), isa => 'Str', ... ); has 'another_attribute' => ( qw(:ro :lazy_build), isa => 'Str', ... );
This module provides a succinct syntax for declaring options for Moose attributes.
\*(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.
\*(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
\*(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.
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'.
MooseX::Has::Sugar
Peter Shangov <[email protected]>
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.