Implement moose-based widget plugin architecture.

agranig/1_0_subfix
Andreas Granig 13 years ago
parent ee4de08f89
commit 063aa3ab79

@ -27,13 +27,16 @@ Dashboard index
sub index :Path :Args(0) {
my ( $self, $c ) = @_;
my $widgets = NGCP::Panel::Widget->widgets($c, '*Overview.pm');
foreach(@{ $widgets }) {
$_->handle($c);
my $widget_templates = [];
my $finder = NGCP::Panel::Widget->new;
foreach($finder->list_plugins) {
my $widget = NGCP::Panel::Widget->new;
$widget->load_plugin($_);
$widget->handle($c);
push @{ $widget_templates }, $widget->template;
}
my @widget_templates = map { $_->template } @{ $widgets };
$c->stash(widgets => \@widget_templates);
$c->stash(widgets => $widget_templates);
$c->stash(template => 'dashboard.tt');
}

@ -1,30 +1,16 @@
package NGCP::Panel::Widget;
use Moose;
use File::Find::Rule;
with 'MooseX::Object::Pluggable';
sub widgets {
my ($self, $c, $filter) = @_;
my $path =
$c->config->{home} .
'/lib/' .
$self->meta->name =~ s/::/\//rg ;
my @widget_files = File::Find::Rule
->file()
->name($filter)
->relative()
->in($path);
my $widgets = [];
foreach(@widget_files) {
my $mpath = $path . '/' . $_;
my $mname = $self->meta->name . '::' . s/\.pm$//r;
require $mpath;
push @{ $widgets }, $mname->new;
}
return $widgets;
sub handle {
my ($self, $c) = @_;
return;
}
sub list_plugins {
my ($self) = @_;
return map { $_ = s/^.*:://r } $self->_plugin_locator->plugins;
}
no Moose;
__PACKAGE__->meta->make_immutable;

@ -1,20 +0,0 @@
package NGCP::Panel::Widget::BillingOverview;
use Moose;
extends 'NGCP::Panel::Widget';
has 'template' => (
is => 'ro',
default => sub { return 'widgets/billing_overview.tt'; }
);
sub handle {
my ($c) = @_;
return;
}
no Moose;
__PACKAGE__->meta->make_immutable;
1;
# vim: set tabstop=4 expandtab:

@ -1,19 +0,0 @@
package NGCP::Panel::Widget::PeeringOverview;
use Moose;
extends 'NGCP::Panel::Widget';
has 'template' => (
is => 'ro',
default => sub { return 'widgets/peering_overview.tt'; }
);
sub handle {
return;
}
no Moose;
__PACKAGE__->meta->make_immutable;
1;
# vim: set tabstop=4 expandtab:

@ -0,0 +1,18 @@
package NGCP::Panel::Widget::Plugin::BillingOverview;
use Moose::Role;
has 'template' => (
is => 'ro',
isa => 'Str',
default => 'widgets/billing_overview.tt'
);
around handle => sub {
my ($self, $c) = @_;
print "++++ BillingOverview::handle\n";
return;
};
1;
# vim: set tabstop=4 expandtab:

@ -0,0 +1,18 @@
package NGCP::Panel::Widget::Plugin::PeeringOverview;
use Moose::Role;
has 'template' => (
is => 'ro',
isa => 'Str',
default => 'widgets/peering_overview.tt'
);
around handle => sub {
my ($self, $c) = @_;
print "++++ PeeringOverview::handle\n";
return;
};
1;
# vim: set tabstop=4 expandtab:

@ -0,0 +1,18 @@
package NGCP::Panel::Widget::Plugin::ResellerOverview;
use Moose::Role;
has 'template' => (
is => 'ro',
isa => 'Str',
default => 'widgets/reseller_overview.tt'
);
around handle => sub {
my ($self, $c) = @_;
print "++++ ResellerOverview::handle\n";
return;
};
1;
# vim: set tabstop=4 expandtab:

@ -0,0 +1,18 @@
package NGCP::Panel::Widget::Plugin::SystemOverview;
use Moose::Role;
has 'template' => (
is => 'ro',
isa => 'Str',
default => 'widgets/system_overview.tt'
);
around handle => sub {
my ($self, $c) = @_;
print "++++ SystemOverview::handle\n";
return;
};
1;
# vim: set tabstop=4 expandtab:

@ -1,21 +0,0 @@
package NGCP::Panel::Widget::ResellerOverview;
use Moose;
extends 'NGCP::Panel::Widget';
has 'template' => (
is => 'ro',
default => sub { return 'widgets/reseller_overview.tt'; }
);
sub handle {
my ($c) = @_;
$c->stash->{resellers} = $c->model->{Provisioning}->resellers->find();
return;
}
no Moose;
__PACKAGE__->meta->make_immutable;
1;
# vim: set tabstop=4 expandtab:

@ -1,19 +0,0 @@
package NGCP::Panel::Widget::SystemOverview;
use Moose;
extends 'NGCP::Panel::Widget';
has 'template' => (
is => 'ro',
default => sub { return 'widgets/system_overview.tt'; }
);
sub handle {
return;
}
no Moose;
__PACKAGE__->meta->make_immutable;
1;
# vim: set tabstop=4 expandtab:

@ -3,7 +3,7 @@
<div class="plan-header">
<div class="plan-title">Resellers</div>
<div class="plan-price">
<span>[% resellers.size %]</span>
<span>4</span>
<span class="term">Resellers</span>
</div>
</div>

Loading…
Cancel
Save