--- /dev/null
+package CatalystX::Dynamic::ControllerIntrospection;
+use Moose;
+use MooseX::Types::Moose qw/ArrayRef/;
+use namespace::autoclean;
+
+# SYNOPSIS: Provide catalyst controller introspection as a model.
+
+for my $name (qw/ classes roles /) {
+
+ has "limit_to_$name" => (
+ isa => ArrayRef, is => 'ro', default => sub { [] },
+ predicate => "_should_limit_to_$name",
+ );
+
+}
+
+sub list_controllers {
+ my ($self, $app) = @_;
+ my @controllers = grep { 1 } $app->controllers;
+}
+
+__PACKAGE__->meta->make_immutable;
+
--- /dev/null
+package DynamicAppDemo::Controller::Browser;
+use Moose;
+use namespace::autoclean;
+
+BEGIN { extends 'Catalyst::Controller'; }
+
+sub root : Chained('/root') PathPart('') CaptureArgs() {}
+
+sub list : Chained('root') PathPart('') Args(0) ActionClass('REST') {}
+
+sub list_GET {
+ my ($self, $c) = @_;
+ $c->stash->{rest} = $c->model('DynamicControllerIntrospection')->list_controllers;
+}
+
+__PACKAGE__->meta->make_immutable;
+