Articulate
view release on metacpan or search on metacpan
# Articulate, a Lightweight Perl CMS Framework
## Synopsis
Articulate provides a content management service for your web app. Lightweight means placing minimal demands on your app while maximising 'whipuptitude': it gives you a single interface in code to a framework that's totally modular underneath, and it...
You don't need to redesign your app around Articulate, it's a service that you call on when you need it, and all the 'moving parts' can be switched out if you want to do things your way.
It's written in Perl, the fast, reliable 'glue language' that's perfect for agile web development projects, and currently runs on the Dancer1 and Dancer2 web frameworks.
## Caveat
> Warning:
>
> This is work in progress! It's alpha-stage software and important things WILL change.
lib/Articulate.pm view on Meta::CPAN
# (in bin/app.pl)
use Dancer;
use Dancer::Plugin::Articulate;
articulate_app->enable;
dance;
B<Articulate> provides a content management service for your web app.
It's lightweight, i.e. it places minimal demands on your app while
maximising 'whipuptitude': it gives you a single interface in code to a
framework that's totally modular underneath, and it won't claim any URL
endpoints for itself.
You don't need to redesign your app around Articulate, it's a service
that you call on when you need it, and all the 'moving parts' can be
switched out if you want to do things your way.
It's written in Perl, the fast, reliable 'glue language' that's perfect
for agile web development projects, and currently runs on the L<Dancer>
and L<Dancer2> web frameworks.
=head1 GETTING STARTED
lib/Articulate.pm view on Meta::CPAN
need is in C<config.yml>, and you can replace components with ones
you've written if your app needs to do different things.
=head2 Request/Response lifecycle summary
In a B<route>, you parse user input and pick the parameters you want to
send to the B<service>. Have a look at
L<Articulate::Routes::Transparent> for some examples. The intention is
that routes are as 'thin' as possible: business logic should all be
done by some part of the service and not in the route handler. The
route handler maps endpoints (URLs) to service requests; structured
responses are passed back as return values and are picked up by the
B<serialiser>.
B<Routes> pass B<requests> to B<services>. A B<request> contains a
B<verb> (like C<create>) and B<data> (like the B<location> you want to
create it at and the B<content> you want to place there). See
L<Articulate::Request> for more details.
The B<service> is responsible for handling requests for managed
content. L<Articulate::Service> B<delegates> to a service B<provider>,
lib/Articulate/Construction/LocationBased.pm view on Meta::CPAN
=head1 NAME
Articulate::Construction::LocationBased - Create an item based on its
location
=head1 ATTRIBUTES
=head3 types
This should be a hashref mapping types to class names to be used in
constructors, where a type in this case is the penultimate endpoint of
locations with an even number of parts
So:
article: Articulate::Item::Article
...would result in C</article/foo> or C<zone/public/article/foo>
becoming C<Articulate::Item::Article>s but not C<article>,
C<zone/article>, or C<zone/public/article>.
( run in 0.316 second using v1.01-cache-2.11-cpan-cc502c75498 )