1 package Catalyst::Utils;
9 Catalyst::Utils - The Catalyst Utils
23 Returns attributes for coderef in a arrayref
27 sub attrs { attributes::get( $_[0] ) || [] }
29 =item class2appclass($class);
31 Returns the appclass for class.
33 MyApp::C::Foo::Bar becomes MyApp
34 My::App::C::Foo::Bar becomes My::App
39 my $class = shift || '';
41 if ( $class =~ /^(.*)::([MVC]|Model|View|Controller)?::.*$/ ) {
47 =item class2classprefix($class);
49 Returns the classprefix for class.
51 MyApp::C::Foo::Bar becomes MyApp::C
52 My::App::C::Foo::Bar becomes My::App::C
56 sub class2classprefix {
57 my $class = shift || '';
59 if ( $class =~ /^(.*::[MVC]|Model|View|Controller)?::.*$/ ) {
65 =item class2classsuffix($class);
67 Returns the classsuffix for class.
69 MyApp::C::Foo::Bar becomes C::Foo::Bar
73 sub class2classsuffix {
74 my $class = shift || '';
75 my $prefix = class2appclass($class) || '';
76 $class =~ s/$prefix\:\://;
80 =item class2prefix($class);
82 Returns the prefix for class.
84 My::App::C::Foo::Bar becomes /foo/bar
89 my $class = shift || '';
91 if ( $class =~ /^.*::([MVC]|Model|View|Controller)?::(.*)$/ ) {
93 $prefix =~ s/\:\:/\//g;
100 Returns home directory for given class.
106 $name =~ s/\:\:/\//g;
108 if ( my $path = $INC{"$name.pm"} ) {
109 $home = file($path)->absolute->dir;
112 my $subdir = dir($home)->subdir($append);
113 for ( split '/', $name ) { $home = dir($home)->parent }
114 if ( $home =~ /blib$/ ) { $home = dir($home)->parent }
115 elsif ( !-f file( $home, 'Makefile.PL' ) ) { $home = $subdir }
120 =item prefix($class, $name);
122 Returns a prefixed action.
124 MyApp::C::Foo::Bar, yada becomes /foo/bar/yada
129 my ( $class, $name ) = @_;
130 my $prefix = &class2prefix($class);
131 $name = "$prefix/$name" if $prefix;
135 =item reflect_actions($class);
137 Returns an arrayref containing all actions of a component class.
141 sub reflect_actions {
144 eval '$actions = $class->_action_cache';
145 die qq/Couldn't reflect actions of component "$class", "$@"/ if $@;
153 Sebastian Riedel, C<sri@cpan.org>
157 This program is free software, you can redistribute it and/or modify it under
158 the same terms as Perl itself.