File Coverage

blib/lib/Mite/App.pm.mite.pm
Criterion Covered Total %
statement 105 140 75.0
branch 28 72 38.8
condition 7 36 19.4
subroutine 20 30 66.6
pod 0 7 0.0
total 160 285 56.1


line stmt bran cond sub pod time code
1             {
2              
3             use strict;
4 16     16   190 use warnings;
  16         90  
  16         661  
5 16     16   135 no warnings qw( once void );
  16         90  
  16         707  
6 16     16   143  
  16         92  
  16         3455  
7             our $USES_MITE = "Mite::Class";
8             our $MITE_SHIM = "Mite::Shim";
9             our $MITE_VERSION = "0.011000";
10              
11             # Mite keywords
12             BEGIN {
13             my ( $SHIM, $CALLER ) = ( "Mite::Shim", "Mite::App" );
14 16     16   145 (
15             *after, *around, *before, *extends, *field,
16             *has, *param, *signature_for, *with
17             )
18             = do {
19 16         97  
20             no warnings 'redefine';
21             (
22 16     16   144 sub { $SHIM->HANDLE_after( $CALLER, "class", @_ ) },
  16         85  
  16         3710  
23             sub { $SHIM->HANDLE_around( $CALLER, "class", @_ ) },
24 0     0   0 sub { $SHIM->HANDLE_before( $CALLER, "class", @_ ) },
25 0     0   0 sub { },
26 0     0   0 sub { $SHIM->HANDLE_has( $CALLER, field => @_ ) },
27       0     sub { $SHIM->HANDLE_has( $CALLER, has => @_ ) },
28 0     0   0 sub { $SHIM->HANDLE_has( $CALLER, param => @_ ) },
29 48     48   41481 sub { $SHIM->HANDLE_signature_for( $CALLER, "class", @_ ) },
30 0     0   0 sub { $SHIM->HANDLE_with( $CALLER, @_ ) },
31 0     0   0 );
32 0     0   0 }
33 16         3218  
34             # Mite imports
35             BEGIN {
36             require Scalar::Util;
37             *STRICT = \&Mite::Shim::STRICT;
38             *bare = \&Mite::Shim::bare;
39 16     16   181 *blessed = \&Scalar::Util::blessed;
40 16         112 *carp = \&Mite::Shim::carp;
41 16         81 *confess = \&Mite::Shim::confess;
42 16         83 *croak = \&Mite::Shim::croak;
43 16         104 *false = \&Mite::Shim::false;
44 16         72 *guard = \&Mite::Shim::guard;
45 16         112 *lazy = \&Mite::Shim::lazy;
46 16         69 *lock = \&Mite::Shim::lock;
47 16         102 *ro = \&Mite::Shim::ro;
48 16         96 *rw = \&Mite::Shim::rw;
49 16         85 *rwp = \&Mite::Shim::rwp;
50 16         55 *true = \&Mite::Shim::true;
51 16         77 *unlock = \&Mite::Shim::unlock;
52 16         81 }
53 16         85  
54 16         536 # Gather metadata for constructor and destructor
55             no strict 'refs';
56             my $class = shift;
57             $class = ref($class) || $class;
58             my $linear_isa = mro::get_linear_isa($class);
59 16     16   110 return {
  16         76  
  16         5763  
60 16     16   47 BUILD => [
61 16   33     155 map { ( *{$_}{CODE} ) ? ( *{$_}{CODE} ) : () }
62 16         323 map { "$_\::BUILD" } reverse @$linear_isa
63             ],
64             DEMOLISH => [
65 16 50       43 map { ( *{$_}{CODE} ) ? ( *{$_}{CODE} ) : () }
  16         165  
  16         138  
66 16         124 map { "$_\::DEMOLISH" } @$linear_isa
67             ],
68             HAS_BUILDARGS => $class->can('BUILDARGS'),
69 16 50       62 HAS_FOREIGNBUILDARGS => $class->can('FOREIGNBUILDARGS'),
  16         571  
  0         0  
70 16         104 };
  16         84  
71             }
72              
73             # Standard Moose/Moo-style constructor
74             my $class = ref( $_[0] ) ? ref(shift) : shift;
75             my $meta = ( $Mite::META{$class} ||= $class->__META__ );
76             my $self = bless {}, $class;
77             my $args =
78             $meta->{HAS_BUILDARGS}
79 16 50   16 0 113 ? $class->BUILDARGS(@_)
80 16   33     331 : { ( @_ == 1 ) ? %{ $_[0] } : @_ };
81 16         66 my $no_build = delete $args->{__no_BUILD__};
82              
83             # Attribute commands (type: HashRef[Object])
84             # has declaration, file lib/Mite/App.pm, line 22
85 16 50       132 do {
  0 50       0  
86 16         45 my $value =
87             exists( $args->{"commands"} ) ? $args->{"commands"} : {};
88             do {
89              
90 16         41 ( ref($value) eq 'HASH' ) and do {
91             my $ok = 1;
92 16 50       65 for my $i ( values %{$value} ) {
93 16 50       53 ( $ok = 0, last )
94             unless (
95             do {
96 16 50       134  
97 16         58 use Scalar::Util ();
98 16         38 Scalar::Util::blessed($i);
  16         63  
99             }
100             );
101 0 0       0 };
102             $ok;
103             }
104 16     16   170 or croak "Type check failed in constructor: %s should be %s",
  16         52  
  16         9020  
105 0         0 "commands", "HashRef[Object]";
106             $self->{"commands"} = $value;
107             };
108              
109 16         101 # Attribute kingpin (type: Object)
110             # has declaration, file lib/Mite/App.pm, line 28
111             if ( exists $args->{"kingpin"} ) {
112             blessed( $args->{"kingpin"} )
113             or croak "Type check failed in constructor: %s should be %s",
114 16         100 "kingpin", "Object";
115             $self->{"kingpin"} = $args->{"kingpin"};
116             }
117              
118             # Attribute project (type: Mite::Project)
119 16 50       80 # has declaration, file lib/Mite/App.pm, line 36
120 0 0       0 if ( exists $args->{"project"} ) {
121             blessed( $args->{"project"} )
122             && $args->{"project"}->isa("Mite::Project")
123 0         0 or croak "Type check failed in constructor: %s should be %s",
124             "project", "Mite::Project";
125             $self->{"project"} = $args->{"project"};
126             }
127              
128 16 50       58 # Call BUILD methods
129             $self->BUILDALL($args) if ( !$no_build and @{ $meta->{BUILD} || [] } );
130 0 0 0     0  
131             # Unrecognized parameters
132             my @unknown = grep not(/\A(?:commands|kingpin|project)\z/),
133 0         0 keys %{$args};
134             @unknown
135             and croak(
136             "Unexpected keys in constructor: " . join( q[, ], sort @unknown ) );
137 16 50 33     331  
  16 50       200  
138             return $self;
139             }
140              
141 16         288 # Used by constructor to call BUILD methods
  16         83  
142             my $class = ref( $_[0] );
143 16 50       78 my $meta = ( $Mite::META{$class} ||= $class->__META__ );
144             $_->(@_) for @{ $meta->{BUILD} || [] };
145             }
146 16         94  
147             # Destructor should call DEMOLISH methods
148             my $self = shift;
149             my $class = ref($self) || $self;
150             my $meta = ( $Mite::META{$class} ||= $class->__META__ );
151 16     16 0 69 my $in_global_destruction =
152 16   33     136 defined ${^GLOBAL_PHASE}
153 16 50       73 ? ${^GLOBAL_PHASE} eq 'DESTRUCT'
  16         218  
154             : Devel::GlobalDestruction::in_global_destruction();
155             for my $demolisher ( @{ $meta->{DEMOLISH} || [] } ) {
156             my $e = do {
157             local ( $?, $@ );
158 16     16   16572 eval { $demolisher->( $self, $in_global_destruction ) };
159 16   33     102 $@;
160 16   33     113 };
161 16 50       202 no warnings 'misc'; # avoid (in cleanup) warnings
162             die $e if $e; # rethrow
163             }
164             return;
165 16 50       49 }
  16         125  
166 0         0  
167 0         0 my $__XS = !$ENV{PERL_ONLY}
168 0         0 && eval { require Class::XSAccessor; Class::XSAccessor->VERSION("1.19") };
  0         0  
169 0         0  
170             # Accessors for commands
171 16     16   147 # has declaration, file lib/Mite/App.pm, line 22
  16         62  
  16         14879  
172 0 0       0 if ($__XS) {
173             Class::XSAccessor->import(
174 16         227 chained => 1,
175             "getters" => { "commands" => "commands" },
176             );
177             }
178             else {
179             *commands = sub {
180             @_ == 1 or croak('Reader "commands" usage: $self->commands()');
181             $_[0]{"commands"};
182             };
183             }
184              
185             # Accessors for kingpin
186             # has declaration, file lib/Mite/App.pm, line 28
187             my $object = do {
188             (
189             exists( $_[0]{"kingpin"} ) ? $_[0]{"kingpin"} : (
190             $_[0]{"kingpin"} = do {
191             my $default_value = $_[0]->_build_kingpin;
192             blessed($default_value)
193             or croak(
194             "Type check failed in default: %s should be %s",
195             "kingpin", "Object" );
196             $default_value;
197             }
198 16     16   36 )
199             )
200             };
201 16 50       85 blessed($object) or croak("kingpin is not a blessed object");
202 0         0 $object;
203 0 0       0 }
204              
205             @_ == 1 or croak('Reader "kingpin" usage: $self->kingpin()');
206             (
207 0         0 exists( $_[0]{"kingpin"} ) ? $_[0]{"kingpin"} : (
208             $_[0]{"kingpin"} = do {
209             my $default_value = $_[0]->_build_kingpin;
210             blessed($default_value)
211             or croak( "Type check failed in default: %s should be %s",
212 16 50       91 "kingpin", "Object" );
213 16         83 $default_value;
214             }
215             )
216             );
217 130 50   130 0 380 }
218              
219             # Delegated methods for kingpin
220 130 100       1760 # has declaration, file lib/Mite/App.pm, line 28
221 16         98  
222 16 50       133 # Accessors for project
223             # has declaration, file lib/Mite/App.pm, line 36
224             my $object = do {
225 16         148 (
226             exists( $_[0]{"project"} ) ? $_[0]{"project"} : (
227             $_[0]{"project"} = do {
228             my $default_value = $_[0]->_build_project;
229             blessed($default_value)
230             && $default_value->isa("Mite::Project")
231             or croak(
232             "Type check failed in default: %s should be %s",
233 16     16   85 "project", "Mite::Project" );
234             $default_value;
235             }
236             )
237             )
238 31     31   60 };
239             blessed($object) or croak("project is not a blessed object");
240             $object;
241 31 50       167 }
242 0         0  
243 0 0 0     0 @_ == 1 or croak('Reader "project" usage: $self->project()');
244             (
245             exists( $_[0]{"project"} ) ? $_[0]{"project"} : (
246             $_[0]{"project"} = do {
247             my $default_value = $_[0]->_build_project;
248 0         0 blessed($default_value)
249             && $default_value->isa("Mite::Project")
250             or croak( "Type check failed in default: %s should be %s",
251             "project", "Mite::Project" );
252             $default_value;
253 31 50       178 }
254 31         204 )
255             );
256             }
257              
258 26 50   26 0 127 # Delegated methods for project
259             # has declaration, file lib/Mite/App.pm, line 36
260              
261 26 100       278 # See UNIVERSAL
262 14         93 my ( $self, $role ) = @_;
263 14 50 33     242 our %DOES;
264             return $DOES{$role} if exists $DOES{$role};
265             return 1 if $role eq __PACKAGE__;
266             if ( $INC{'Moose/Util.pm'}
267 14         169 and my $meta = Moose::Util::find_meta( ref $self or $self ) )
268             {
269             $meta->can('does_role') and $meta->does_role($role) and return 1;
270             }
271             return $self->SUPER::DOES($role);
272             }
273              
274             # Alias for Moose/Moo-compatibility
275 31     31 0 143 shift->DOES(@_);
276             }
277              
278             1;