Catalyst-Model-MultiAdaptor

 view release on metacpan or  search on metacpan

inc/Catalyst.pm  view on Meta::CPAN

sub prepare_uploads {
    my $c = shift;

    $c->engine->prepare_uploads( $c, @_ );

    if ( $c->debug && keys %{ $c->request->uploads } ) {
        my $t = Text::SimpleTable->new(
            [ 12, 'Parameter' ],
            [ 26, 'Filename' ],
            [ 18, 'Type' ],
            [ 9,  'Size' ]
        );
        for my $key ( sort keys %{ $c->request->uploads } ) {
            my $upload = $c->request->uploads->{$key};
            for my $u ( ref $upload eq 'ARRAY' ? @{$upload} : ($upload) ) {
                $t->row( $key, $u->filename, $u->type, $u->size );
            }
        }
        $c->log->debug( "File Uploads are:\n" . $t->draw );
    }
}

#line 2146

sub prepare_write { my $c = shift; $c->engine->prepare_write( $c, @_ ) }

#line 2171

sub read { my $c = shift; return $c->engine->read( $c, @_ ) }

#line 2179

sub run { my $c = shift; return $c->engine->run( $c, @_ ) }

#line 2187

sub set_action { my $c = shift; $c->dispatcher->set_action( $c, @_ ) }

#line 2195

sub setup_actions { my $c = shift; $c->dispatcher->setup_actions( $c, @_ ) }

#line 2212

sub setup_components {
    my $class = shift;

    my $config  = $class->config->{ setup_components };

    my @comps = sort { length $a <=> length $b }
                $class->locate_components($config);
    my %comps = map { $_ => 1 } @comps;

    my $deprecatedcatalyst_component_names = grep { /::[CMV]::/ } @comps;
    $class->log->warn(qq{Your application is using the deprecated ::[MVC]:: type naming scheme.\n}.
        qq{Please switch your class names to ::Model::, ::View:: and ::Controller: as appropriate.\n}
    ) if $deprecatedcatalyst_component_names;

    for my $component ( @comps ) {

        # We pass ignore_loaded here so that overlay files for (e.g.)
        # Model::DBI::Schema sub-classes are loaded - if it's in @comps
        # we know M::P::O found a file on disk so this is safe

        Catalyst::Utils::ensure_class_loaded( $component, { ignore_loaded => 1 } );

        # Needs to be done as soon as the component is loaded, as loading a sub-component
        # (next time round the loop) can cause us to get the wrong metaclass..
        $class->_controller_init_base_classes($component);
    }

    for my $component (@comps) {
        $class->components->{ $component } = $class->setup_component($component);
        for my $component ($class->expand_component_module( $component, $config )) {
            next if $comps{$component};
            $class->_controller_init_base_classes($component); # Also cover inner packages
            $class->components->{ $component } = $class->setup_component($component);
        }
    }
}

#line 2261

sub locate_components {
    my $class  = shift;
    my $config = shift;

    my @paths   = qw( ::Controller ::C ::Model ::M ::View ::V );
    my $extra   = delete $config->{ search_extra } || [];

    push @paths, @$extra;

    my $locator = Module::Pluggable::Object->new(
        search_path => [ map { s/^(?=::)/$class/; $_; } @paths ],
        %$config
    );

    my @comps = $locator->plugins;

    return @comps;
}

#line 2287

sub expand_component_module {
    my ($class, $module) = @_;
    return Devel::InnerPackage::list_packages( $module );
}

#line 2296

# FIXME - Ugly, ugly hack to ensure the we force initialize non-moose base classes
#         nearest to Catalyst::Controller first, no matter what order stuff happens
#         to be loaded. There are TODO tests in Moose for this, see
#         f2391d17574eff81d911b97be15ea51080500003
sub _controller_init_base_classes {
    my ($app_class, $component) = @_;
    return unless $component->isa('Catalyst::Controller');
    foreach my $class ( reverse @{ mro::get_linear_isa($component) } ) {
        Moose::Meta::Class->initialize( $class )
            unless find_meta($class);



( run in 0.429 second using v1.01-cache-2.11-cpan-df04353d9ac )