--- trunk/lib/Frey/ClassBrowser.pm 2008/11/18 16:54:10 418
+++ trunk/lib/Frey/ClassBrowser.pm 2008/11/19 15:28:23 455
@@ -3,17 +3,30 @@
extends 'Frey::ClassLoader';
with 'Frey::Web';
+with 'Frey::Session';
use Frey::Run;
+use Data::Dump qw/dump/;
-our $markup;
+has 'usage_on_top' => (
+ is => 'rw',
+ isa => 'Bool',
+ default => 1,
+ documentation => 'Show usage on top of list',
+);
-sub markup {
+sub as_markup {
my $self = shift;
- return $markup if $markup;
- my $html;
+ my $row;
+
+ my $usage = $self->session_dump( $self->usage );
+ #warn "# usage ",dump( $usage );
foreach my $class ( $self->classes ) {
- $html .= qq|
$class | |;
+ my $html
+ = qq| |
$class | |
+ ;
if ( $class->can('meta') ) {
if ( $class->meta->isa('Moose::Meta::Role') ) {
$html .= qq|role|;
@@ -24,21 +37,42 @@
my @run;
my @input;
push @run, qq|collection| if $class->can('collection_table');
- my $class_method = $self->class_methods( $class );
- foreach my $try ( Frey::Run->runnable ) {
- next unless $class->can($try);
- if ( $class_method->{ $try } ) {
- push @run, qq|$try|;
- } else {
- push @input, $try;
- }
- }
- $html .= qq| | | . join(' ', @run) . qq| | | .
- ( @input ? '← ' . join(' ', @input) : '' ) .
- qq| |
|;
+ my @class_methods = $self->class_methods( $class );
+
+ push @run, qq|$_|
+ foreach ( grep { m{^as_} } @class_methods );
+ push @input, $_
+ foreach ( grep { m{^(markup/as_data/as_sponge)$} } @class_methods );
+
+ $usage->{$class} ||= 0;
+ $html
+ .= qq||
+ . join(' ', @run)
+ . qq| | |
+ . ( @input ? '← ' . join(' ', @input) : '' )
+ . qq| | |
+ . ( $usage->{$class} || '' )
+ . qq| | |
+ ;
+ $row->{$class} = $html;
}
- $html = "" if $html;
- $markup = $html;
+
+ return
+ qq|| . join("\n",
+ map { $row->{$_} }
+ sort {
+ if ( $usage->{$a} || $usage->{$b} ) {
+ if ( $self->usage_on_top ) {
+ $usage->{$b} <=> $usage->{$a};
+ } else {
+ $usage->{$a} <=> $usage->{$b};
+ }
+ } else {
+ $a cmp $b;
+ }
+ }
+ keys %$row
+ ) . qq|
|;
}
1;