Aion-Enum
view release on metacpan or search on metacpan
```perl
package OrderEnum {
use Aion::Enum;
case 'first';
case second => 2;
case other => 3, {data => 123};
}
&OrderEnum::first->name # => first
&OrderEnum::first->value # -> undef
&OrderEnum::first->stash # -> undef
&OrderEnum::second->name # => second
&OrderEnum::second->value # -> 2
&OrderEnum::second->stash # -> undef
&OrderEnum::other->name # => other
&OrderEnum::other->value # -> 3
&OrderEnum::other->stash # --> {data => 123}
```
## issa ($nameisa, [$valueisa], [$stashisa], [$aliasisa])
УказÑÐ²Ð°ÐµÑ Ñип (isa) знаÑений и дополнений.
```perl
[ OrderEnum->names ] # --> [qw/first second other/]
```
## values ($cls)
ÐнаÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑиÑлений.
```perl
[ OrderEnum->values ] # --> [undef, 2, 3]
```
## stashes ($cls)
ÐÐ¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑиÑлений.
```perl
[ OrderEnum->stashes ] # --> [undef, undef, {data => 123}]
```
## aliases ($cls)
ÐÑÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼Ñ Ð¿ÐµÑеÑиÑлений.
Файл lib/AuthorEnum.pm:
```perl
package AuthorEnum;
# Yacheykin Uriy
case yacheykin =>;
case nouname =>;
1;
```
```perl
require AuthorEnum;
[ AuthorEnum->aliases ] # --> ['Pushkin Aleksandr Sergeevich', 'Yacheykin Uriy', undef]
```
## fromName ($cls, $name)
ÐолÑÑиÑÑ case по имени c иÑклÑÑением.
```perl
OrderEnum->fromName('first') # -> OrderEnum->first
eval { OrderEnum->fromName('not_exists') }; $@ # ~> Did not case with name `not_exists`!
```
## tryFromName ($cls, $name)
ÐолÑÑиÑÑ case по имени.
```perl
OrderEnum->tryFromName('first') # -> OrderEnum->first
OrderEnum->tryFromName('not_exists') # -> undef
```
## fromValue ($cls, $value)
ÐолÑÑиÑÑ case по знаÑÐµÐ½Ð¸Ñ c иÑклÑÑением.
```perl
OrderEnum->fromValue(undef) # -> OrderEnum->first
eval { OrderEnum->fromValue('not-exists') }; $@ # ~> Did not case with value `not-exists`!
```
## tryFromValue ($cls, $value)
ÐолÑÑиÑÑ case по знаÑениÑ.
```perl
OrderEnum->tryFromValue(undef) # -> OrderEnum->first
OrderEnum->tryFromValue('not-exists') # -> undef
```
## fromStash ($cls, $stash)
ÐолÑÑиÑÑ case по Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ c иÑклÑÑением.
```perl
OrderEnum->fromStash(undef) # -> OrderEnum->first
eval { OrderEnum->fromStash('not-exists') }; $@ # ~> Did not case with stash `not-exists`!
```
## tryFromStash ($cls, $value)
ÐолÑÑиÑÑ case по дополнениÑ.
```perl
OrderEnum->tryFromStash({data => 123}) # -> OrderEnum->other
OrderEnum->tryFromStash('not-exists') # -> undef
```
## fromAlias ($cls, $alias)
ÐолÑÑиÑÑ case по пÑÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼Ñ c иÑклÑÑением.
```perl
AuthorEnum->fromAlias('Yacheykin Uriy') # -> AuthorEnum->yacheykin
eval { AuthorEnum->fromAlias('not-exists') }; $@ # ~> Did not case with alias `not-exists`!
```
## tryFromAlias ($cls, $alias)
ÐолÑÑиÑÑ case по пÑевдонимÑ.
```perl
AuthorEnum->tryFromAlias('Yacheykin Uriy') # -> AuthorEnum->yacheykin
AuthorEnum->tryFromAlias('not-exists') # -> undef
```
# FEATURES
## name
СвойÑÑво ÑолÑко Ð´Ð»Ñ ÑÑениÑ.
```perl
package NameEnum {
lib/Aion/Enum.md view on Meta::CPAN
```perl
package OrderEnum {
use Aion::Enum;
case 'first';
case second => 2;
case other => 3, {data => 123};
}
&OrderEnum::first->name # => first
&OrderEnum::first->value # -> undef
&OrderEnum::first->stash # -> undef
&OrderEnum::second->name # => second
&OrderEnum::second->value # -> 2
&OrderEnum::second->stash # -> undef
&OrderEnum::other->name # => other
&OrderEnum::other->value # -> 3
&OrderEnum::other->stash # --> {data => 123}
```
## issa ($nameisa, [$valueisa], [$stashisa], [$aliasisa])
УказÑÐ²Ð°ÐµÑ Ñип (isa) знаÑений и дополнений.
lib/Aion/Enum.md view on Meta::CPAN
```perl
[ OrderEnum->names ] # --> [qw/first second other/]
```
## values ($cls)
ÐнаÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑиÑлений.
```perl
[ OrderEnum->values ] # --> [undef, 2, 3]
```
## stashes ($cls)
ÐÐ¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑиÑлений.
```perl
[ OrderEnum->stashes ] # --> [undef, undef, {data => 123}]
```
## aliases ($cls)
ÐÑÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼Ñ Ð¿ÐµÑеÑиÑлений.
Файл lib/AuthorEnum.pm:
```perl
package AuthorEnum;
lib/Aion/Enum.md view on Meta::CPAN
# Yacheykin Uriy
case yacheykin =>;
case nouname =>;
1;
```
```perl
require AuthorEnum;
[ AuthorEnum->aliases ] # --> ['Pushkin Aleksandr Sergeevich', 'Yacheykin Uriy', undef]
```
## fromName ($cls, $name)
ÐолÑÑиÑÑ case по имени c иÑклÑÑением.
```perl
OrderEnum->fromName('first') # -> OrderEnum->first
eval { OrderEnum->fromName('not_exists') }; $@ # ~> Did not case with name `not_exists`!
```
## tryFromName ($cls, $name)
ÐолÑÑиÑÑ case по имени.
```perl
OrderEnum->tryFromName('first') # -> OrderEnum->first
OrderEnum->tryFromName('not_exists') # -> undef
```
## fromValue ($cls, $value)
ÐолÑÑиÑÑ case по знаÑÐµÐ½Ð¸Ñ c иÑклÑÑением.
```perl
OrderEnum->fromValue(undef) # -> OrderEnum->first
eval { OrderEnum->fromValue('not-exists') }; $@ # ~> Did not case with value `not-exists`!
```
## tryFromValue ($cls, $value)
ÐолÑÑиÑÑ case по знаÑениÑ.
```perl
OrderEnum->tryFromValue(undef) # -> OrderEnum->first
OrderEnum->tryFromValue('not-exists') # -> undef
```
## fromStash ($cls, $stash)
ÐолÑÑиÑÑ case по Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ c иÑклÑÑением.
```perl
OrderEnum->fromStash(undef) # -> OrderEnum->first
eval { OrderEnum->fromStash('not-exists') }; $@ # ~> Did not case with stash `not-exists`!
```
## tryFromStash ($cls, $value)
ÐолÑÑиÑÑ case по дополнениÑ.
```perl
OrderEnum->tryFromStash({data => 123}) # -> OrderEnum->other
OrderEnum->tryFromStash('not-exists') # -> undef
```
## fromAlias ($cls, $alias)
ÐолÑÑиÑÑ case по пÑÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼Ñ c иÑклÑÑением.
```perl
AuthorEnum->fromAlias('Yacheykin Uriy') # -> AuthorEnum->yacheykin
eval { AuthorEnum->fromAlias('not-exists') }; $@ # ~> Did not case with alias `not-exists`!
```
## tryFromAlias ($cls, $alias)
ÐолÑÑиÑÑ case по пÑевдонимÑ.
```perl
AuthorEnum->tryFromAlias('Yacheykin Uriy') # -> AuthorEnum->yacheykin
AuthorEnum->tryFromAlias('not-exists') # -> undef
```
# FEATURES
## name
СвойÑÑво ÑолÑко Ð´Ð»Ñ ÑÑениÑ.
```perl
package NameEnum {
lib/Aion/Enum.pm view on Meta::CPAN
# ÐмпоÑÑ
sub import {
my $pkg = caller;
*{"${pkg}::issa"} = \&issa if $pkg->can('issa') != \&issa;
*{"${pkg}::case"} = \&case if $pkg->can('case') != \&case;
eval "package $pkg; use Aion -role; with 'Aion::Enum'; 1" or die
}
sub unimport {
my $pkg = caller;
undef &{"${pkg}::issa"};
undef &{"${pkg}::case"};
eval "package $pkg; no Aion; 1" or die
}
#@category СвойÑÑва
has name => (is => 'ro');
has value => (is => 'ro');
has stash => (is => 'ro');
has alias => (is => 'ro', default => sub {
my ($self) = @_;
$self->_alias->{$self->{name}};
lib/Aion/Enum.pm view on Meta::CPAN
my $path = $INC{($cls =~ s!::!/!gr) . ".pm"};
die "$cls not loaded!" unless $path;
open my $f, "<:utf8", $path or die "$path: $!";
my $alias;
my $id = '[a-zA-Z_]\w*';
while(<$f>) {
$alias = $1 if /^# (\S.*?)\s*$/;
do {
$alias_ref->{$+{id}} = $alias;
undef $alias;
} if /^case \s+ (
(?<id>$id)
| '(?<id>$id)'
| "(?<id>$id)"
| q[wq]? (?:
\{ (?<id>$id) \}
| \[ (?<id>$id) \]
| \( (?<id>$id) \)
| < (?<id>$id) >
| ([~!\@#$%^&*-+=\\\/|]) (?<id>$id) \2
lib/Aion/Enum.pm view on Meta::CPAN
package OrderEnum {
use Aion::Enum;
case 'first';
case second => 2;
case other => 3, {data => 123};
}
&OrderEnum::first->name # => first
&OrderEnum::first->value # -> undef
&OrderEnum::first->stash # -> undef
&OrderEnum::second->name # => second
&OrderEnum::second->value # -> 2
&OrderEnum::second->stash # -> undef
&OrderEnum::other->name # => other
&OrderEnum::other->value # -> 3
&OrderEnum::other->stash # --> {data => 123}
=head2 issa ($nameisa, [$valueisa], [$stashisa], [$aliasisa])
Indicates the type (ISA) of meanings and additions.
Its name is a reference to the goddess Isse from the story âUnder the Moles of Marsâ Burrose.
lib/Aion/Enum.pm view on Meta::CPAN
=head2 names ($cls)
Names of transfers.
[ OrderEnum->names ] # --> [qw/first second other/]
=head2 values ($cls)
The values of the transfers.
[ OrderEnum->values ] # --> [undef, 2, 3]
=head2 stashes ($cls)
Additions of transfers.
[ OrderEnum->stashes ] # --> [undef, undef, {data => 123}]
=head2 aliases ($cls)
Pseudonyms of transfers.
LIB/authorenum.pm file:
package AuthorEnum;
use Aion::Enum;
lib/Aion/Enum.pm view on Meta::CPAN
# Yacheykin Uriy
case yacheykin =>;
case nouname =>;
1;
require AuthorEnum;
[ AuthorEnum->aliases ] # --> ['Pushkin Aleksandr Sergeevich', 'Yacheykin Uriy', undef]
=head2 fromName ($cls, $name)
Get Case by name with exceptions.
OrderEnum->fromName('first') # -> OrderEnum->first
eval { OrderEnum->fromName('not_exists') }; $@ # ~> Did not case with name `not_exists`!
=head2 tryFromName ($cls, $name)
Get Case by name.
OrderEnum->tryFromName('first') # -> OrderEnum->first
OrderEnum->tryFromName('not_exists') # -> undef
=head2 fromValue ($cls, $value)
Get Case by value with exceptions.
OrderEnum->fromValue(undef) # -> OrderEnum->first
eval { OrderEnum->fromValue('not-exists') }; $@ # ~> Did not case with value `not-exists`!
=head2 tryFromValue ($cls, $value)
Get Case by value.
OrderEnum->tryFromValue(undef) # -> OrderEnum->first
OrderEnum->tryFromValue('not-exists') # -> undef
=head2 fromStash ($cls, $stash)
Get CASE on addition with exceptions.
OrderEnum->fromStash(undef) # -> OrderEnum->first
eval { OrderEnum->fromStash('not-exists') }; $@ # ~> Did not case with stash `not-exists`!
=head2 tryFromStash ($cls, $value)
Get Case for addition.
OrderEnum->tryFromStash({data => 123}) # -> OrderEnum->other
OrderEnum->tryFromStash('not-exists') # -> undef
=head2 fromAlias ($cls, $alias)
Get Case by pseudonym with exceptions.
AuthorEnum->fromAlias('Yacheykin Uriy') # -> AuthorEnum->yacheykin
eval { AuthorEnum->fromAlias('not-exists') }; $@ # ~> Did not case with alias `not-exists`!
=head2 tryFromAlias ($cls, $alias)
Get case by alias.
AuthorEnum->tryFromAlias('Yacheykin Uriy') # -> AuthorEnum->yacheykin
AuthorEnum->tryFromAlias('not-exists') # -> undef
=head1 FEATURES
=head2 name
Property only for reading.
package NameEnum {
use Aion::Enum;
t/aion/enum.t view on Meta::CPAN
use common::sense; use open qw/:std :utf8/; use Carp qw//; use Cwd qw//; use File::Basename qw//; use File::Find qw//; use File::Slurper qw//; use File::Spec qw//; use File::Path qw//; use Scalar::Util qw//; use Test::More 0.98; BEGIN { $SIG{__DI...
# # NAME
#
# Aion::Enum - пеÑеÑиÑÐ»ÐµÐ½Ð¸Ñ Ð² ÑÑиле ÐÐÐ, когда каждое пеÑеÑÑление ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом
#
# # VERSION
#
# 0.0.2
#
# # SYNOPSIS
#
t/aion/enum.t view on Meta::CPAN
::done_testing; }; subtest 'case ($name, [$value, [$stash]])' => sub {
package OrderEnum {
use Aion::Enum;
case 'first';
case second => 2;
case other => 3, {data => 123};
}
::is scalar do {&OrderEnum::first->name}, "first", '&OrderEnum::first->name # => first';
::is scalar do {&OrderEnum::first->value}, scalar do{undef}, '&OrderEnum::first->value # -> undef';
::is scalar do {&OrderEnum::first->stash}, scalar do{undef}, '&OrderEnum::first->stash # -> undef';
::is scalar do {&OrderEnum::second->name}, "second", '&OrderEnum::second->name # => second';
::is scalar do {&OrderEnum::second->value}, scalar do{2}, '&OrderEnum::second->value # -> 2';
::is scalar do {&OrderEnum::second->stash}, scalar do{undef}, '&OrderEnum::second->stash # -> undef';
::is scalar do {&OrderEnum::other->name}, "other", '&OrderEnum::other->name # => other';
::is scalar do {&OrderEnum::other->value}, scalar do{3}, '&OrderEnum::other->value # -> 3';
::is_deeply scalar do {&OrderEnum::other->stash}, scalar do {{data => 123}}, '&OrderEnum::other->stash # --> {data => 123}';
#
# ## issa ($nameisa, [$valueisa], [$stashisa], [$aliasisa])
#
# УказÑÐ²Ð°ÐµÑ Ñип (isa) знаÑений и дополнений.
#
t/aion/enum.t view on Meta::CPAN
#
::done_testing; }; subtest 'names ($cls)' => sub {
::is_deeply scalar do {[ OrderEnum->names ]}, scalar do {[qw/first second other/]}, '[ OrderEnum->names ] # --> [qw/first second other/]';
#
# ## values ($cls)
#
# ÐнаÑÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑиÑлений.
#
::done_testing; }; subtest 'values ($cls)' => sub {
::is_deeply scalar do {[ OrderEnum->values ]}, scalar do {[undef, 2, 3]}, '[ OrderEnum->values ] # --> [undef, 2, 3]';
#
# ## stashes ($cls)
#
# ÐÐ¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿ÐµÑеÑиÑлений.
#
::done_testing; }; subtest 'stashes ($cls)' => sub {
::is_deeply scalar do {[ OrderEnum->stashes ]}, scalar do {[undef, undef, {data => 123}]}, '[ OrderEnum->stashes ] # --> [undef, undef, {data => 123}]';
#
# ## aliases ($cls)
#
# ÐÑÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼Ñ Ð¿ÐµÑеÑиÑлений.
#
# Файл lib/AuthorEnum.pm:
#@> lib/AuthorEnum.pm
#>> package AuthorEnum;
#>>
t/aion/enum.t view on Meta::CPAN
#>> # Yacheykin Uriy
#>> case yacheykin =>;
#>>
#>> case nouname =>;
#>>
#>> 1;
#@< EOF
#
::done_testing; }; subtest 'aliases ($cls)' => sub {
require AuthorEnum;
::is_deeply scalar do {[ AuthorEnum->aliases ]}, scalar do {['Pushkin Aleksandr Sergeevich', 'Yacheykin Uriy', undef]}, '[ AuthorEnum->aliases ] # --> [\'Pushkin Aleksandr Sergeevich\', \'Yacheykin Uriy\', undef]';
#
# ## fromName ($cls, $name)
#
# ÐолÑÑиÑÑ case по имени c иÑклÑÑением.
#
::done_testing; }; subtest 'fromName ($cls, $name)' => sub {
::is scalar do {OrderEnum->fromName('first')}, scalar do{OrderEnum->first}, 'OrderEnum->fromName(\'first\') # -> OrderEnum->first';
::like scalar do {eval { OrderEnum->fromName('not_exists') }; $@}, qr{Did not case with name `not_exists`\!}, 'eval { OrderEnum->fromName(\'not_exists\') }; $@ # ~> Did not case with name `not_exists`!';
#
# ## tryFromName ($cls, $name)
#
# ÐолÑÑиÑÑ case по имени.
#
::done_testing; }; subtest 'tryFromName ($cls, $name)' => sub {
::is scalar do {OrderEnum->tryFromName('first')}, scalar do{OrderEnum->first}, 'OrderEnum->tryFromName(\'first\') # -> OrderEnum->first';
::is scalar do {OrderEnum->tryFromName('not_exists')}, scalar do{undef}, 'OrderEnum->tryFromName(\'not_exists\') # -> undef';
#
# ## fromValue ($cls, $value)
#
# ÐолÑÑиÑÑ case по знаÑÐµÐ½Ð¸Ñ c иÑклÑÑением.
#
::done_testing; }; subtest 'fromValue ($cls, $value)' => sub {
::is scalar do {OrderEnum->fromValue(undef)}, scalar do{OrderEnum->first}, 'OrderEnum->fromValue(undef) # -> OrderEnum->first';
::like scalar do {eval { OrderEnum->fromValue('not-exists') }; $@}, qr{Did not case with value `not-exists`\!}, 'eval { OrderEnum->fromValue(\'not-exists\') }; $@ # ~> Did not case with value `not-exists`!';
#
# ## tryFromValue ($cls, $value)
#
# ÐолÑÑиÑÑ case по знаÑениÑ.
#
::done_testing; }; subtest 'tryFromValue ($cls, $value)' => sub {
::is scalar do {OrderEnum->tryFromValue(undef)}, scalar do{OrderEnum->first}, 'OrderEnum->tryFromValue(undef) # -> OrderEnum->first';
::is scalar do {OrderEnum->tryFromValue('not-exists')}, scalar do{undef}, 'OrderEnum->tryFromValue(\'not-exists\') # -> undef';
#
# ## fromStash ($cls, $stash)
#
# ÐолÑÑиÑÑ case по Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ c иÑклÑÑением.
#
::done_testing; }; subtest 'fromStash ($cls, $stash)' => sub {
::is scalar do {OrderEnum->fromStash(undef)}, scalar do{OrderEnum->first}, 'OrderEnum->fromStash(undef) # -> OrderEnum->first';
::like scalar do {eval { OrderEnum->fromStash('not-exists') }; $@}, qr{Did not case with stash `not-exists`\!}, 'eval { OrderEnum->fromStash(\'not-exists\') }; $@ # ~> Did not case with stash `not-exists`!';
#
# ## tryFromStash ($cls, $value)
#
# ÐолÑÑиÑÑ case по дополнениÑ.
#
::done_testing; }; subtest 'tryFromStash ($cls, $value)' => sub {
::is scalar do {OrderEnum->tryFromStash({data => 123})}, scalar do{OrderEnum->other}, 'OrderEnum->tryFromStash({data => 123}) # -> OrderEnum->other';
::is scalar do {OrderEnum->tryFromStash('not-exists')}, scalar do{undef}, 'OrderEnum->tryFromStash(\'not-exists\') # -> undef';
#
# ## fromAlias ($cls, $alias)
#
# ÐолÑÑиÑÑ case по пÑÐµÐ²Ð´Ð¾Ð½Ð¸Ð¼Ñ c иÑклÑÑением.
#
::done_testing; }; subtest 'fromAlias ($cls, $alias)' => sub {
::is scalar do {AuthorEnum->fromAlias('Yacheykin Uriy')}, scalar do{AuthorEnum->yacheykin}, 'AuthorEnum->fromAlias(\'Yacheykin Uriy\') # -> AuthorEnum->yacheykin';
::like scalar do {eval { AuthorEnum->fromAlias('not-exists') }; $@}, qr{Did not case with alias `not-exists`\!}, 'eval { AuthorEnum->fromAlias(\'not-exists\') }; $@ # ~> Did not case with alias `not-exists`!';
#
# ## tryFromAlias ($cls, $alias)
#
# ÐолÑÑиÑÑ case по пÑевдонимÑ.
#
::done_testing; }; subtest 'tryFromAlias ($cls, $alias)' => sub {
::is scalar do {AuthorEnum->tryFromAlias('Yacheykin Uriy')}, scalar do{AuthorEnum->yacheykin}, 'AuthorEnum->tryFromAlias(\'Yacheykin Uriy\') # -> AuthorEnum->yacheykin';
::is scalar do {AuthorEnum->tryFromAlias('not-exists')}, scalar do{undef}, 'AuthorEnum->tryFromAlias(\'not-exists\') # -> undef';
#
# # FEATURES
#
# ## name
#
# СвойÑÑво ÑолÑко Ð´Ð»Ñ ÑÑениÑ.
#
::done_testing; }; subtest 'name' => sub {
package NameEnum {
( run in 1.668 second using v1.01-cache-2.11-cpan-d80b1682f3f )