GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  TYPE::TINY::MANUAL::USINGWITHMOUSE (3)

.ds Aq ’

NAME

Type::Tiny::Manual::UsingWithMouse - how to use Type::Tiny and Type::Library with Mouse

CONTENTS

SYNOPSIS



   {
      package Person;
     
      use Mouse;
      use Types::Standard qw( Str Int );
      use Type::Utils qw( declare as where inline_as coerce from );
     
      has name => (
         is      => "ro",
         isa     => Str,
      );
     
      my $PositiveInt = declare
         as        Int,
         where     {  $_ > 0  },
         inline_as { "$_ =~ /^[0-9]+\$/ and $_ > 0" };
     
      coerce $PositiveInt, from Int, q{ abs $_ };
     
      has age => (
         is      => "ro",
         isa     => $PositiveInt,
         coerce  => 1,
         writer  => "_set_age",
      );
     
      sub get_older {
         my $self = shift;
         my ($years) = @_;
         $PositiveInt->assert_valid($years);
         $self->_set_age($self->age + $years);
      }
   }



STATUS

Mouse support in Type::Tiny was somewhat of an afterthought. It should work, but is not anywhere near as well-tested as Moo or Moose support.

DESCRIPTION

Type::Tiny type constraints have an API almost identical to that of Mouse::Meta::TypeConstraint. As a result, you can use a Type::Tiny object pretty much anywhere you’d use a Mouse::Meta::TypeConstraint and you are unlikely to notice the difference. (And Mouse is unlikely to notice the difference too!)

    Per-Attribute Coercions

Type::Tiny offers convenience methods to alter the list of coercions associated with a type constraint. Let’s imagine we wish to allow our name attribute to be coerced from an arrayref of strings.



      has name => (
         is      => "ro",
         isa     => Str->plus_coercions(
            ArrayRef[Str], sub { join " ", @{$_} },
         ),
         coerce  => 1,
      );



This coercion will apply to the name attribute only; other attributes using the Str type constraint will be unaffected.

See the documentation for plus_coercions, minus_coercions and no_coercions in Type::Tiny.

    Optimization

Mouse’s built-in type constraints are implemented using XS and are stupidly fast. For many type constraints, if Type::Tiny notices Mouse is loaded early enough, Type::Tiny will borrow Mouse’s XS subs.

See also Type::Tiny::Manual::Optimization.

    Interactions with MouseX-Types

Type::Tiny and MouseX::Types type constraints should play nice. If, for example, ArrayRef is taken from Types::Standard (i.e. a Type::Tiny-based type library), and PositiveInt is taken from MouseX::Types::Common::Numeric, then the following should just work:



   isa => ArrayRef[ PositiveInt ]

   isa => PositiveInt | ArrayRef



SEE ALSO

For examples using Type::Tiny with Mouse see the SYNOPSIS sections of Type::Tiny and Type::Library, and the Mouse integration tests <https://github.com/tobyink/p5-type-tiny/tree/master/t/30-integration/Mouse>, and MouseX-Types integration tests <https://github.com/tobyink/p5-type-tiny/tree/master/t/30-integration/MouseX-Types> in the test suite.

AUTHOR

Toby Inkster <tobyink@cpan.org>.

COPYRIGHT AND LICENCE

This software is copyright (c) 2013-2014 by Toby Inkster.

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

DISCLAIMER OF WARRANTIES

THIS PACKAGE IS PROVIDED AS IS AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Search for    or go to Top of page |  Section 3 |  Main Index


perl v5.20.3 TYPE::TINY::MANUAL::USINGWITHMOUSE (3) 2014-10-25

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.