Aion

 view release on metacpan or  search on metacpan

lib/Aion/Types.md  view on Meta::CPAN

'+23456789'  ~~ Tel # -> 1
'+234567890' ~~ Tel # -> 1
'+23456789'  ~~ (Tel & Len[9]) # -> 1
'+234567890' ~~ (Tel & Len[9]) # -> ""

['+23456789',  '+23456789'] ~~ IntOrArrayRef[9, Tel] # -> 1
['+234567890', '+23456789'] ~~ IntOrArrayRef[9, Tel] # -> ""

"" ~~ IntOrArrayRef[8, Tel]  # -> ""


coerce IntOrArrayRef[35, Str], from Num, via { int($_ + .5) };

IntOrArrayRef([35, Str])->coerce(5.5) # => 6

5.5 >> IntOrArrayRef[35, Str] # => 6

(Tel & Len[9]) < (Tel & Len[10]) # => 1
```

# DESCRIPTION

Этот модуль экспортирует подпрограммы:

* `subtype`, `as`, `init_where`, `where`, `awhere`, `message` — для создания валидаторов.
* `SELF`, `ARGS`, `A`, `B`, `C`, `D`, `M`, `N` — для использования в валидаторах типа и его аргументов.
* `coerce`, `from`, `via` — для создания конвертора значений из одного класса в другой.

Иерархия валидаторов:

```text
Any
	Control
		Union[A, B...]
		Intersection[A, B...]
		Exclude[A...]
		Option[A]
		Wantarray[A, B]
	Item
		External[type]
		Bool
		BoolLike
		Enum[e...]
		Maybe[A]
		Undef
		Defined
			Value
				Version
				Str
					Uni
					Bin
					NonEmptyStr
					StartsWith[start]
					EndsWith[end]
					Email
					Tel
					Url
					Path
					Html
					StrDate
					StrDateTime
					StrMatch[regexp]
					PackageName
						ClassName
						RoleName
					Join[separator]
					Split[separator]
					StrRat
					Num
						PositiveNum
						Int
							PositiveInt
							Nat
			Ref
				Tied`[class]
				LValueRef
				FormatRef
				CodeRef
					NamedCode[subname]
					ProtoCode[prototype]
					ForwardRef
					ImplementRef
					Isa[A...]
				RegexpRef
				ValueRef`[A]
					ScalarRef`[A]
					RefRef`[A]
				GlobRef
					FileHandle
				ArrayRef`[A]
					Tuple[A...]
					CycleTuple[A...]
				HashRef`[A]
					Map[A => B]
					Dict[k => A, ...]
				Object`[class]
					Me
					Rat
				RegexpLike
				CodeLike
				ArrayLike`[A]
					Lim[from?, to]
				HashLike`[A]
					HasProp[p...]
					LimKeys[from?, to]
			Like
				HasMethods[m...]
				Overload`[m...]
				InstanceOf[class...]
				ConsumerOf[role...]
				StrLike
					Len[from?, to]
				NumLike
					Range[from, to]
						Float
						Double
						Bytes[n]
						PositiveBytes[n]
```

# SUBROUTINES

lib/Aion/Types.md  view on Meta::CPAN

## Email

Строки с `@`.

```perl
'@' ~~ Email     # -> 1
'a@a.a' ~~ Email # -> 1
'a.a' ~~ Email   # -> ""
```

## Tel

Формат телефонов — знак плюс и семь или больше цифр.

```perl
"+1234567" ~~ Tel  # -> 1
"+1234568" ~~ Tel  # -> 1
"+ 1234567" ~~ Tel # -> ""
"+1234567 " ~~ Tel # -> ""
```

## Url

URL-адреса веб-сайтов — это строка с префиксом http:// или https://.

```perl
"http://" ~~ Url # -> 1
"http:/" ~~ Url  # -> ""
```

## Path

Пути начинаются с косой черты.

```perl
"/" ~~ Path  # -> 1
"/a/b" ~~ Path  # -> 1
"a/b" ~~ Path   # -> ""
```

## Html

HTML начинается с `<!doctype html` или `<html`.

```perl
"<HTML" ~~ Html            # -> 1
" <html" ~~ Html           # -> 1
" <!doctype html>" ~~ Html # -> 1
" <html1>" ~~ Html         # -> ""
```

## StrDate

Дата в формате `yyyy-mm-dd`.

```perl
"2001-01-12" ~~ StrDate # -> 1
"01-01-01" ~~ StrDate   # -> ""
```

## StrDateTime

Дата и время в формате `yyyy-mm-dd HH:MM:SS`.

```perl
"2012-12-01 00:00:00" ~~ StrDateTime  # -> 1
"2012-12-01 00:00:00 " ~~ StrDateTime # -> ""
```

## StrMatch[regexp]

Сопоставляет строку с регулярным выражением.

```perl
' abc ' ~~ StrMatch[qr/abc/]  # -> 1
' abbc ' ~~ StrMatch[qr/abc/] # -> ""
```

## ClassName

Имя класса — это пакет с методом `new`.

```perl
'Aion::Type' ~~ ClassName  # -> 1
'Aion::Types' ~~ ClassName # -> ""
```

## RoleName

Имя роли — это пакет без метода `new`, с `@ISA` или с одним любым методом.

```perl
package ExRole1 {
	sub any_method {}
}

package ExRole2 {
	our @ISA = qw/ExRole1/;
}


'ExRole1' ~~ RoleName    # -> 1
'ExRole2' ~~ RoleName    # -> 1
'Aion::Type' ~~ RoleName # -> ""
'Nouname::Empty::Package' ~~ RoleName # -> ""
```

## StrRat

Строковое представление рациональных чисел.

Так как в perl рациональные числа поддерживаются с помощью прагмы `bigrat`, который все рациональные числа превращает в `Math::BigRat`, то используеÑ...

```perl
"6/7" ~~ StrRat  # -> 1
"-6/7" ~~ StrRat # -> 1
"+6/7" ~~ StrRat # -> 1
6 ~~ StrRat      # -> 1
"inf" ~~ StrRat  # -> 1
"+Inf" ~~ StrRat # -> 1
"NaN" ~~ StrRat  # -> 1
"-nan" ~~ StrRat # -> 1
6.5 ~~ StrRat    # -> 1
"6.5 " ~~ StrRat # -> ''
```

## Rat



( run in 1.211 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )