Aion
view release on metacpan or search on metacpan
# СигнаÑÑÑа меÑодов Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑовеÑÑÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð°ÑÑибÑÑа `:Isa(...)`.
#
# # SUBROUTINES IN CLASSES AND ROLES
#
# `use Aion` импоÑÑиÑÑÐµÑ ÑÐ¸Ð¿Ñ Ð¸Ð· модÑÐ»Ñ `Aion::Types` и ÑледÑÑÑие подпÑогÑаммÑ:
#
# ## has ($name, %aspects)
#
# СоздаÑÑ Ð¼ÐµÑод Ð´Ð»Ñ Ð¿Ð¾Ð»ÑÑениÑ/ÑÑÑановки ÑÑнкÑии (ÑвойÑÑва) клаÑÑа.
#
# Файл lib/Animal.pm:
#@> lib/Animal.pm
#>> package Animal;
#>> use Aion;
#>>
#>> has type => (is => 'ro+', isa => Str);
#>> has name => (is => 'rw-', isa => Str, default => 'murka');
#>>
#>> 1;
#@< EOF
#
::done_testing; }; subtest 'has ($name, %aspects)' => sub {
use lib "lib";
use Animal;
my $cat = Animal->new(type => 'cat');
local ($::_g0 = do {$cat->type}, $::_e0 = "cat"); ::ok $::_g0 eq $::_e0, '$cat->type # => cat' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {$cat->name}, $::_e0 = "murka"); ::ok $::_g0 eq $::_e0, '$cat->name # => murka' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
$cat->name("murzik");
local ($::_g0 = do {$cat->name}, $::_e0 = "murzik"); ::ok $::_g0 eq $::_e0, '$cat->name # => murzik' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
#
# ## with
#
# ÐобавлÑÐµÑ Ð² модÑÐ»Ñ Ñоли. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñоли вÑзÑваеÑÑÑ Ð¼ÐµÑод `import_with`.
#
# Файл lib/Role/Keys/Stringify.pm:
#@> lib/Role/Keys/Stringify.pm
#>> package Role::Keys::Stringify;
#>>
#>> use Aion -role;
#>>
#>> sub keysify {
#>> my ($self) = @_;
#>> join ", ", sort keys %$self;
#>> }
#>>
#>> 1;
#@< EOF
#
# Файл lib/Role/Values/Stringify.pm:
#@> lib/Role/Values/Stringify.pm
#>> package Role::Values::Stringify;
#>>
#>> use Aion -role;
#>>
#>> sub valsify {
#>> my ($self) = @_;
#>> join ", ", map $self->{$_}, sort keys %$self;
#>> }
#>>
#>> 1;
#@< EOF
#
# Файл lib/Class/All/Stringify.pm:
#@> lib/Class/All/Stringify.pm
#>> package Class::All::Stringify;
#>>
#>> use Aion;
#>>
#>> with q/Role::Keys::Stringify/;
#>> with q/Role::Values::Stringify/;
#>>
#>> has [qw/key1 key2/] => (is => 'rw', isa => Str);
#>>
#>> 1;
#@< EOF
#
::done_testing; }; subtest 'with' => sub {
use lib "lib";
use Class::All::Stringify;
my $s = Class::All::Stringify->new(key1=>"a", key2=>"b");
local ($::_g0 = do {$s->keysify}, $::_e0 = "key1, key2"); ::ok $::_g0 eq $::_e0, '$s->keysify # => key1, key2' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {$s->valsify}, $::_e0 = "a, b"); ::ok $::_g0 eq $::_e0, '$s->valsify # => a, b' or ::diag ::_string_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
#
# ## exactly ($package)
#
# ÐÑовеÑÑеÑ, ÑÑо `$package` â ÑÑо ÑÑпеÑклаÑÑ Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ или Ñам ÑÑÐ¾Ñ ÐºÐ»Ð°ÑÑ.
#
# РеализаÑÐ¸Ñ Ð¼ÐµÑода `isa` Aion не менÑÐµÑ Ð¸ она наÑ
Ð¾Ð´Ð¸Ñ ÐºÐ°Ðº ÑÑпеÑклаÑÑÑ, Ñак и Ñоли (Ñак как и Ñе и дÑÑгие добавлÑÑÑÑÑ Ð² `@ISA` пакеÑа).
#
::done_testing; }; subtest 'exactly ($package)' => sub {
package Ex::X { use Aion; }
package Ex::A { use Aion; extends q/Ex::X/; }
package Ex::B { use Aion; }
package Ex::C { use Aion; extends qw/Ex::A Ex::B/ }
local ($::_g0 = do {Ex::C->exactly("Ex::A")}, $::_e0 = do {1}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, 'Ex::C->exactly("Ex::A") # -> 1' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {Ex::C->exactly("Ex::B")}, $::_e0 = do {1}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, 'Ex::C->exactly("Ex::B") # -> 1' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {Ex::C->exactly("Ex::X")}, $::_e0 = do {1}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, 'Ex::C->exactly("Ex::X") # -> 1' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {Ex::C->exactly("Ex::X1")}, $::_e0 = do {""}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, 'Ex::C->exactly("Ex::X1") # -> ""' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {Ex::A->exactly("Ex::X")}, $::_e0 = do {1}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, 'Ex::A->exactly("Ex::X") # -> 1' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {Ex::A->exactly("Ex::A")}, $::_e0 = do {1}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, 'Ex::A->exactly("Ex::A") # -> 1' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
local ($::_g0 = do {Ex::X->exactly("Ex::X")}, $::_e0 = do {1}); ::ok defined($::_g0) == defined($::_e0) && $::_g0 eq $::_e0, 'Ex::X->exactly("Ex::X") # -> 1' or ::diag ::_struct_diff($::_g0, $::_e0); undef $::_g0; undef $::_e0;
#
# ## does ($package)
#
# ÐÑовеÑÑеÑ, ÑÑо `$package` â ÑÑо ÑолÑ, коÑоÑÐ°Ñ Ð¸ÑполÑзÑеÑÑÑ Ð² клаÑÑе или дÑÑгой Ñоли.
#
::done_testing; }; subtest 'does ($package)' => sub {
package Role::X { use Aion -role; }
package Role::A { use Aion -role; with qw/Role::X/; }
package Role::B { use Aion -role; }
package Ex::Z { use Aion; with qw/Role::A Role::B/; }
( run in 0.490 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )