The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Evo::Base

VERSION

version 0.0161

SYNOPSIS

  package Cat;
  use Evo::Base -base;

  has name => 'Nyan';
  has [qw(birds mice)] => 2;

  package Tiger;
  use Evo::Base 'Cat';

  has friend  => sub { Cat->new };
  has stripes => 42;

  package main;
  use Evo::Base -strict;

  my $mew = Cat->new(name => 'Longcat');
  say $mew->mice;
  say $mew->mice(3)->birds(4)->mice;

  my $rawr = Tiger->new(stripes => 23, mice => 0);
  say $rawr->tap(sub { $_->friend->name('Tacgnol') })->mice;

DESCRIPTION

Evo::Base is a simple base class for Evo projects.

  # Automatically enables "strict", "warnings", "utf8" and Perl 5.10 features
  use Evo::Base -strict;
  use Evo::Base -base;
  use Evo::Base 'SomeBaseClass';

All three forms save a lot of typing.

  # use Evo::Base -strict;
  use strict;
  use warnings;
  use utf8;
  use feature (':5.20');
  use experimental qw(signatures postderef);

  use IO::Handle ();

  # use Evo::Base -base;
  use strict;
  use warnings;
  use utf8;
  use feature (':5.20');
  use experimental qw(signatures postderef);
  use IO::Handle ();
  use Evo::Base;
  push @ISA, 'Evo::Base';
  sub has { Evo::Base::attr(__PACKAGE__, @_) }

  # use Evo::Base 'SomeBaseClass';
  use strict;
  use warnings;
  use utf8;
  use feature (':5.20');
  use experimental qw(signatures postderef);
  use IO::Handle ();
  require SomeBaseClass;
  push @ISA, 'SomeBaseClass';
  use Evo::Base;
  sub has { Evo::Base::attr(__PACKAGE__, @_) }

NAME

Evo::Base - Minimal base class. Almost copypast from Mojo::Base Will be changed to Moo in the future

FUNCTIONS

Evo::Base implements the following functions, which can be imported with the -base flag or by setting a base class.

has

  has 'name';
  has [qw(name1 name2 name3)];
  has name => 'foo';
  has name => sub {...};
  has [qw(name1 name2 name3)] => 'foo';
  has [qw(name1 name2 name3)] => sub {...};

Create attributes for hash-based objects, just like the "attr" method.

METHODS

Evo::Base implements the following methods.

attr

  $object->attr('name');
  SubClass->attr('name');
  SubClass->attr([qw(name1 name2 name3)]);
  SubClass->attr(name => 'foo');
  SubClass->attr(name => sub {...});
  SubClass->attr([qw(name1 name2 name3)] => 'foo');
  SubClass->attr([qw(name1 name2 name3)] => sub {...});

Create attribute accessor for hash-based objects, an array reference can be used to create more than one at a time. Pass an optional second argument to set a default value, it should be a constant or a callback. The callback will be executed at accessor read time if there's no set value. Accessors can be chained, that means they return their invocant when they are called with an argument.

new

  my $object = SubClass->new;
  my $object = SubClass->new(name => 'value');
  my $object = SubClass->new({name => 'value'});

This base class provides a basic constructor for hash-based objects. You can pass it either a hash or a hash reference with attribute values.

tap

  $object = $object->tap(sub {...});
  $object = $object->tap($method);
  $object = $object->tap($method, @args);

K combinator, tap into a method chain to perform operations on an object within the chain. The object will be the first argument passed to the callback and is also available as $_.

  # Longer version
  $object = $object->tap(sub { $_->$method(@args) });

  # Inject side effects into a method chain
  $object->foo('A')->tap(sub { say $_->foo })->foo('B');

DEBUGGING

You can set the MOJO_BASE_DEBUG environment variable to get some advanced diagnostics information printed to STDERR.

  MOJO_BASE_DEBUG=1

SEE ALSO

Mojolicious

AUTHOR

alexbyk.com

COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by alexbyk.

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