Commit | Line | Data |
12594914 |
1 | # t0m++ |
2 | package My::Types; |
3 | use MooseX::Types -declare [qw/ ValidAppName ValidAppComponent /]; |
4 | |
5 | my $appname_re = qr/[\w:]+/; |
6 | my $regex = qr/$appname_re::(M|V|C|Model|View|Controller)::.*/; |
7 | |
8 | subtype ValidAppName, |
9 | as Str, |
10 | where { /^$appname_re$/ && ! /$regex/ }; |
11 | |
12 | subtype ValidAppComponent, |
13 | as Str, |
14 | where { /^$regex$/ }; |
15 | |
8dccaa92 |
16 | subtype AppEnv, |
17 | as Str, |
18 | where { /\w/ }; |
19 | |
12594914 |
20 | coerce ValidAppName, |
21 | from ValidAppComponent, |
22 | via { Catalyst::Utils::class2appclass($_); }; |
8dccaa92 |
23 | |
24 | coerce 'ValidAppEnv', |
25 | from Str, |
26 | via { Catalyst::Utils::class2env($_); }; |
27 | |
28 | coerce AppEnv, |
29 | from Str, |
30 | via { Catalyst::Utils::class2env($_) }; |
12594914 |
31 | |
32 | package main; |
33 | use Test::More 'no_plan'; |
34 | use Moose::Util::TypeContraints; |
8dccaa92 |
35 | use My::Types qw/ValidAppName ValidAppComponent AppEnv/; |
12594914 |
36 | |
37 | my $app_tc = find_type_constraint(ValidAppName); |
38 | ok $app_tc; |
39 | ok !$app_tc->check(''); |
40 | ok $app_tc->check('MyApp'); |
41 | |
42 | my $comp_tc = find_type_constraint(ValidAppComponent); |
43 | ok $comp_tc; |
44 | ok !$comp_tc->check(''); |
45 | ok !$comp_tc->check('MyApp'); |
46 | ok $comp_tc->check('MyApp::Model::Foo'); |
47 | |
8dccaa92 |
48 | my $env_tc = my $comp_tc = find_type_constraint(AppEnv); |
49 | ok $env_tc; |
50 | #ok !$env_tc->check(''); |
51 | #ok !$env_tc->check(' |
12594914 |
52 | is $app_tc->coerce('MyApp::Model::Foo'), 'MyApp'; |
53 | |
54 | done_testing; |
55 | |