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' )
116 && !-f file( $home, 'Build.PL' ) )
124 =item prefix($class, $name);
126 Returns a prefixed action.
128 MyApp::C::Foo::Bar, yada becomes /foo/bar/yada
133 my ( $class, $name ) = @_;
134 my $prefix = &class2prefix($class);
135 $name = "$prefix/$name" if $prefix;
139 =item reflect_actions($class);
141 Returns an arrayref containing all actions of a component class.
145 sub reflect_actions {
148 eval '$actions = $class->_action_cache';
149 die qq/Couldn't reflect actions of component "$class", "$@"/ if $@;
157 Sebastian Riedel, C<sri@cpan.org>
161 This program is free software, you can redistribute it and/or modify it under
162 the same terms as Perl itself.