The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Types::Mojo - Types related to Mojo

VERSION

version 0.06

SYNOPSIS

    package MyClass;
    
    use Moo;
    use Types::Mojo qw(MojoFile MojoCollection);
    use Types::Standard qw(Int);
    
    has file => ( is => 'rw', isa => MojoFile, coerce => 1 );
    has coll => ( is => 'rw', isa => MojoCollection, coerce => 1 );
    has ints => ( is => 'rw', isa => MojoCollection[Int] );
    
    1;

In the script

    use MyClass;
    my $object = MyClass->new( file => __FILE__ ); # will be coerced into a Mojo::File object
    say $object->file->move_to( '/path/to/new/location' );

    my $object2 = MyClass->new( coll => [qw/a b/] );
    $object2->coll->each(sub {
        say $_;
    });

TYPES

MojoCollection[`a]

An object of Mojo::Collection. Can be parameterized with an other Type::Tiny type.

    has ints => ( is => 'rw', isa => MojoCollection[Int] );

will accept only a Mojo::Collection of integers.

MojoFile

An object of Mojo::File

MojoFileList

A MojoCollection of MojoFiles.

MojoURL[`a]

An object of Mojo::URL. Can be parameterized with a scheme.

    has http_url => ( is => 'rw', isa => MojoURL["https?"] ); # s? means plain or secure -> http or https
    has ftp_url  => ( is => 'rw', isa => MojoURL["ftp"] );

MojoUserAgent

An object of Mojo::UserAgent

COERCIONS

These coercions are defined.

To MojoCollection

  • Array reference to MojoCollection

    In a class

        package Test;
        
        use Moo;
        use Types::Mojo qw(MojoCollection);
        
        has 'collection' => ( is => 'ro', isa => MojoCollection, coerce => 1 );
        
        1;

    In the script

        use Test;
    
        use v5.22;
        use feature 'postderef';
    
        my $obj = Test->new(
            collection => [ 1, 2 ],
        );
        
        my $sqrs = $obj->collection->map( sub { $_ ** 2 } );
        say $_ for $sqrs->to_array->@*;

To MojoFile

  • String to MojoFile

    In a class

        package Test;
        
        use Moo;
        use Types::Mojo qw(MojoFile);
        
        has 'file' => ( is => 'ro', isa => MojoFile, coerce => 1 );
        
        1;

    In the script

        use Test;
    
        use v5.22;
    
        my $obj = Test->new(
            file => __FILE__,
        );
        
        say $obj->file->slurp;

To MojoFileList

  • MojoCollection of Strings

    In a class

        package Test;
        
        use Moo;
        use Types::Mojo qw(MojoFile);
        
        has 'files' => ( is => 'ro', isa => MojoFileList, coerce => 1 );
        
        1;

    In the script

        use Test;
    
        use v5.22;
    
        my $obj = Test->new(
            files => Mojo::Collection->(__FILE__),
        );
    
        for my $file ( @{ $obj->files->to_array } ) {
            say $file->basename;
        }
  • Array of Strings

    In a class

        package Test;
        
        use Moo;
        use Types::Mojo qw(MojoFile);
        
        has 'files' => ( is => 'ro', isa => MojoFileList, coerce => 1 );
        
        1;

    In the script

        use Test;
    
        use v5.22;
    
        my $obj = Test->new(
            files => [__FILE__],
        );
    
        for my $file ( @{ $obj->files->to_array } ) {
            say $file->basename;
        }
  • Array of MojoFile

    In a class

        package Test;
        
        use Moo;
        use Types::Mojo qw(MojoFileList);
        
        has 'files' => ( is => 'ro', isa => MojoFileList, coerce => 1 );
        
        1;

    In the script

        use Test;
    
        use v5.22;
    
        my $obj = Test->new(
            files => [Mojo::File->new(__FILE__)],
        );
    
        for my $file ( @{ $obj->files->to_array } ) {
            say $file->basename;
        }

To MojoURL

  • String to MojoURL

    In a class

        package Test;
        
        use Moo;
        use Types::Mojo qw(MojoFile);
        
        has 'file' => ( is => 'ro', isa => MojoURL, coerce => 1 );
        
        1;

    In the script

        use Test;
    
        use v5.22;
    
        my $obj = Test->new(
            url => 'http://perl-services.de',
        );
        
        say $obj->url->host;

AUTHOR

Renee Baecker <reneeb@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2019 by Renee Baecker.

This is free software, licensed under:

  The Artistic License 2.0 (GPL Compatible)