X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=blobdiff_plain;f=lib%2FCatalyst%2FDispatcher.pm;h=9d2ae4ad977906bc48c39dfdf1484b2cd93e0925;hp=d54d2ea2e7abcca3c22b0c20a66375013bc56a87;hb=48d435ba6a0925260fd58c8c18ff425e99708eae;hpb=196932def5cc8ade4af7e52b40cc61bd460ee69d diff --git a/lib/Catalyst/Dispatcher.pm b/lib/Catalyst/Dispatcher.pm index d54d2ea..9d2ae4a 100644 --- a/lib/Catalyst/Dispatcher.pm +++ b/lib/Catalyst/Dispatcher.pm @@ -34,17 +34,14 @@ has _registered_dispatch_types => (is => 'rw', default => sub { {} }, required = has _method_action_class => (is => 'rw', default => 'Catalyst::Action'); has _action_hash => (is => 'rw', required => 1, lazy => 1, default => sub { {} }); has _container_hash => (is => 'rw', required => 1, lazy => 1, default => sub { {} }); -has preload_dispatch_types => (is => 'rw', required => 1, lazy => 1, default => sub { [@PRELOAD] }); -has postload_dispatch_types => (is => 'rw', required => 1, lazy => 1, default => sub { [@POSTLOAD] }); - -# Wrap accessors so you can assign a list and it will capture a list ref. -around qw/preload_dispatch_types postload_dispatch_types/ => sub { - my $orig = shift; - my $self = shift; - return $self->$orig([@_]) if (scalar @_ && ref $_[0] ne 'ARRAY'); - return $self->$orig(@_); -}; +my %dispatch_types = ( pre => \@PRELOAD, post => \@POSTLOAD ); +foreach my $type (keys %dispatch_types) { + has $type . "load_dispatch_types" => ( + is => 'rw', required => 1, lazy => 1, default => sub { $dispatch_types{$type} }, + traits => ['MooseX::Emulate::Class::Accessor::Fast::Meta::Role::Attribute'], # List assignment is CAF style + ); +} =head1 NAME @@ -618,9 +615,15 @@ sub setup_actions { sub _display_action_tables { my ($self, $c) = @_; - my $column_width = Catalyst::Utils::term_width() - 20 - 36 - 12; + my $avail_width = Catalyst::Utils::term_width() - 12; + my $col1_width = ($avail_width * .25) < 20 ? 20 : int($avail_width * .25); + my $col2_width = ($avail_width * .50) < 36 ? 36 : int($avail_width * .50); + my $col3_width = $avail_width - $col1_width - $col2_width; + $c->log->debug("col1: $col1_width"); + $c->log->debug("col2: $col2_width"); + $c->log->debug("col3: $col3_width"); my $privates = Text::SimpleTable->new( - [ 20, 'Private' ], [ 36, 'Class' ], [ $column_width, 'Method' ] + [ $col1_width, 'Private' ], [ $col2_width, 'Class' ], [ $col3_width, 'Method' ] ); my $has_private = 0; @@ -658,7 +661,7 @@ sub _load_dispatch_types { for my $type (@types) { # first param is undef because we cannot get the appclass my $class = Catalyst::Utils::resolve_namespace(undef, 'Catalyst::DispatchType', $type); - + eval { Class::MOP::load_class($class) }; Catalyst::Exception->throw( message => qq/Couldn't load "$class"/ ) if $@; @@ -697,10 +700,26 @@ use Moose; # Various plugins (e.g. Plugin::Server and Plugin::Authorization::ACL) # need the methods here which *should* be private.. -# However we can't really take them away until there is a sane API for -# building actions and configuring / introspecting the dispatcher. -# In 5.90, we should build that infrastructure, port the plugins which -# use it, and then take the crap below away. +# You should be able to use get_actions or get_containers appropriately +# instead of relying on these methods which expose implementation details +# of the dispatcher.. +# +# IRC backlog included below, please come ask if this doesn't work for you. +# +# <@t0m> 5.80, the state of. There are things in the dispatcher which have +# been deprecated, that we yell at anyone for using, which there isn't +# a good alternative for yet.. +# <@mst> er, get_actions/get_containers provides that doesn't it? +# <@mst> DispatchTypes are loaded on demand anyway +# <@t0m> I'm thinking of things like _tree which is aliased to 'tree' with +# warnings otherwise shit breaks.. We're issuing warnings about the +# correct set of things which you shouldn't be calling.. +# <@mst> right +# <@mst> basically, I don't see there's a need for a replacement for anything +# <@mst> it was never a good idea to call ->tree +# <@mst> nothingmuch was the only one who did AFAIK +# <@mst> and he admitted it was a hack ;) + # See also t/lib/TestApp/Plugin/AddDispatchTypes.pm # Alias _method_name to method_name, add a before modifier to warn..