Aion
view release on metacpan or search on metacpan
lib/Aion/Pleroma.md view on Meta::CPAN
!ru:en
# NAME
Aion::Pleroma - конÑÐµÐ¹Ð½ÐµÑ Ñонов
# SYNOPSIS
```perl
use Aion::Pleroma;
my $pleroma = Aion::Pleroma->new;
$pleroma->get('user') # -> undef
$pleroma->resolve('user') # @-> user is'nt eon!
```
# DESCRIPTION
РеализÑÐµÑ Ð¿Ð°ÑÑеÑн конÑейнеÑа завиÑимоÑÑей.
Ðон ÑоздаÑÑÑÑ Ð¿Ñи запÑоÑе из конÑейнеÑа ÑеÑез меÑод `get` или `resolve`, либо ÑеÑез аÑÐ¿ÐµÐºÑ `eon` как ленивÑй `default`. ÐенивоÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ оÑмениÑÑ ÑеÑез ...
ÐонÑÐµÐ¹Ð½ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ `Aion->pleroma`.
ÐонÑигÑÑаÑÐ¸Ñ Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñонов полÑÑÐ°ÐµÑ Ð¸Ð· конÑига `PLEROMA` и Ñайла анноÑаÑий (ÑоздаÑÑÑÑ Ð¿Ð°ÐºÐµÑом `Aion::Annotation`). Файл анноÑаÑий можно замениÑÑ...
# CONFIG
ÐаÑÑÑойки модÑлÑ, коÑоÑÑе можно ÑÑÑановиÑÑ Ð² `.env`:
* AION_PLEROMA_INI â Ñайл анноÑаÑий. Ðо ÑмолÑÐ°Ð½Ð¸Ñ `etc/annotation/eon.ann`.
* AION_PLEROMA_AUTOWARE â подгÑÑжаÑÑ Ð¼Ð¾Ð´Ñли авÑомаÑиÑеÑки, даже еÑли они не пÑопиÑÐ°Ð½Ñ Ð² конÑигÑÑаÑии. Ðо ÑмолÑÐ°Ð½Ð¸Ñ `1`.
# EONS FROM CONFIG
Ð `etc/*.yml` можно добавиÑÑ ÐºÐ»ÑÑ `aion.eon` Ñ Ð¾Ð¿Ð¸Ñанием дополниÑелÑнÑÑ
Ñонов. ÐÑо позволÑÐµÑ ÑобиÑаÑÑ ÑÐ¾Ð½Ñ Ð´ÐµÐºÐ»Ð°ÑаÑивно: задаваÑÑ Ð°ÑгÑменÑÑ ÐºÐ¾Ð½ÑÑ...
ÐпиÑем клаÑÑÑ Ñонов.
Файл lib/Ex/Eon/Astronomer.pm:
```perl
package Ex::Eon::Astronomer;
use strict; use warnings;
sub new { my ($class, $name, $telescope) = @_; bless { name => $name, telescope => $telescope, seen => [] }, $class }
sub name { $_[0]{name} }
sub telescope { $_[0]{telescope} }
sub seen { $_[0]{seen} }
sub observe { my ($self, $body) = @_; push @{ $self->{seen} }, $body; $body }
1;
```
Файл lib/Ex/Eon/Planet.pm:
```perl
package Ex::Eon::Planet;
use common::sense;
use Aion;
has name => (is => 'ro');
has moons => (is => 'ro', default => 0);
has discoverer => (is => 'ro');
1;
```
ТепеÑÑ ÐºÐ¾Ð½ÑигÑÑаÑÐ¸Ñ Ñонов. У Ñона-ÑÑÑного `Ex::Eon::Galileo` аÑгÑменÑÑ Ð·Ð°Ð´Ð°Ð½Ñ ÑпоÑÑдоÑенно (`arguments` â маÑÑив), поÑле ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð²ÑзÑваеÑÑÑ Ð¼ÐµÑод `obse...
Файл etc/aion/eon.yml:
```yaml
aion:
eon:
Ex::Eon::Galileo:
lib/Aion/Pleroma.md view on Meta::CPAN
```perl
Aion::Pleroma->new->ini # => etc/annotation/eon.ann
```
## pleroma
ÐонÑигÑÑаÑиÑ: клÑÑ => 'клаÑÑ#меÑод_клаÑÑа'.
Файл lib/Ex/Eon/AnimalEon.pm:
```perl
package Ex::Eon::AnimalEon;
#@eon
use common::sense;
use Aion;
has role => (is => 'ro');
#@eon ex.cat
sub cat { __PACKAGE__->new(role => 'cat') }
#@eon
sub dog { __PACKAGE__->new(role => 'dog') }
1;
```
Файл etc/annotation/eon.ann:
```
Ex::Eon::AnimalEon#,2=
Ex::Eon::AnimalEon#cat,10=ex.cat
Ex::Eon::AnimalEon#dog,13=Ex::Eon::AnimalEon#dog
```
```perl
Aion::Pleroma->new->pleroma # --> {"Ex::Eon::AnimalEon" => "Ex::Eon::AnimalEon#new", "Ex::Eon::AnimalEon#dog" => "Ex::Eon::AnimalEon#dog", "ex.cat" => "Ex::Eon::AnimalEon#cat", "Aion::Pleroma" => "Aion::Pleroma#new"}
```
## eon
СовокÑпноÑÑÑ Ð¿Ð¾ÑождÑннÑÑ
Ñонов.
```perl
my $pleroma = Aion::Pleroma->new;
$pleroma->eon # --> { "Aion::Pleroma" => $pleroma }
my $cat = $pleroma->resolve('ex.cat');
$pleroma->eon # --> { "ex.cat" => $cat, "Aion::Pleroma" => $pleroma }
```
# SUBROUTINES
## get ($key)
ÐолÑÑиÑÑ Ñон из конÑейнеÑа.
```perl
my $pleroma = Aion::Pleroma->new;
$pleroma->get('') # -> undef
$pleroma->get('Ex::Eon::AnimalEon#dog')->role # => dog
```
## resolve ($key)
ÐолÑÑиÑÑ Ñон из конÑейнеÑа или иÑклÑÑение, еÑли его Ñам неÑ.
```perl
my $pleroma = Aion::Pleroma->new;
$pleroma->resolve('e.ibex') # @=> e.ibex is'nt eon!
$pleroma->resolve('Ex::Eon::AnimalEon#dog')->role # => dog
```
## autoware ($action, [$key])
ÐобавиÑÑ ÐºÐ»ÑÑ Ð² плеÑомÑ.
Файл lib/Ex/Eon/AstroEon.pm:
```perl
package Ex::Eon::AstroEon;
use common::sense;
use Aion;
has role => (is => 'ro', default => 'upiter');
sub mars { __PACKAGE__->new(role => 'mars') }
sub venus { __PACKAGE__->new(role => 'venus') }
1;
```
```perl
my $pleroma = Aion::Pleroma->new;
$pleroma->autoware('Ex::Eon::AstroEon')->get('Ex::Eon::AstroEon')->role # => upiter
$pleroma->autoware('Ex::Eon::AstroEon#mars', 'ex.mars')->get('ex.mars')->role # => mars
$pleroma->autoware('Ex::Eon::AstroEon#venus')->get('Ex::Eon::AstroEon#venus')->role # => venus
$pleroma->autoware('Ex::Eon::AstroEon')->get('Ex::Eon::AstroEon')->role # => upiter
$pleroma->autoware('Ex::Eon::AstroEon#mars', 'Ex::Eon::AstroEon#venus') # @-> Added eon Ex::Eon::AstroEon#venus twice, with Ex::Eon::AstroEon#mars ne Ex::Eon::AstroEon#venus
```
# AUTHOR
Yaroslav O. Kosmina <dart@cpan.org>
# LICENSE
â **GPLv3**
# COPYRIGHT
The Aion::Pleroma module is copyright © 2025 Yaroslav O. Kosmina. Rusland. All rights reserved.
( run in 1.164 second using v1.01-cache-2.11-cpan-d80b1682f3f )