squatting
squatting copied to clipboard
A Camping-inspired Web Microframework for Perl
-+m
.%- ..
[ Squatting ] . m*#-+ A Camping-inspired Web Microframework for Perl m+##+m. ...- m##%-.. --.. +mm###-+-. ..- m..#####m++ .--+.-m#m+.%+-m###+ .-m..###+...% m#m-##% . +%+.. -++.+ m--#-+ .. --..%-%- --+#.m - - -.--+# .. +#m+ ..#-+%. +.#.. . . . .%#-... .-+.- . -.+m+-. .. .-.++#.-... . . ..- .+. ..+..+---+%---.--.--#m#+.. + .-. m .. -.m++m####%###-##%.++%++ m . . +. m-- ###+###..-m+m.++.#-####-%-m. .. -m#--%###-m+- --+%m..--. - .-%####% ..-. -. -...-##%m+.+-+.++-m#+-. .. . +.+%%-#m..m#%m+..-. -..#m.-.+..-.m+-##+.- +m-+%- %-- %##- ...++++.. . . +m##*-. -.%m+ + -.-++%+- . ++###.%.-- . . m+##%%. .-%-#- . ...#... ..%+m . + m+####%.. .-+%#+- .-#-- -.#mm.. --.- +%#-m#%% ...%+##%+ .+..- .+mm%+ .. ..m-m.+%%+m+.. --.##%m--. + #-. .--%%. . m .#++ %-- +mm-. ...m##m-.+ -+-- +-#+- . .##+.. +..m .m-#%#%-- -.##-. .%.+. ...m#%..- .. ...# m . +-%#.%+ . %#%..+ -+##%.+.. #-. -. .m+..m -#%mm .--++ .-%.m+-...mm+ . .+ +- -m-+. ..#.. . .-+m#%m*++-+ .. -##.%%.- - ..##+-. - +-%##%+mm--+ . .#m-m- - -+.m.##-+. .. m*###%-m+- - . . .m.+.m .. m%+.-% - ...+##m%####m-+m- -. .. ..- ++.. . +.. +%-###m-%. ..%#-%#++%####.+.m-+. . +m#+#+%.. . -####m.-- . %-mm ++-mm+##%mm. - .+mm#+.+--.#/##-+-+m . ..+.# - +-. m%m#m#+.-..+#####%m#%#% .--- - . . .-m#m. . . ..m+...#%m--+-#+######.%+.. .+ ..m-#%. . ..- .+-- - .---.--+--... .+.#m#m- .. . . - -..- ..* . +-##-+. . -- . .. .+##m%+ .%.--- .. . ...
http://en.wikipedia.org/wiki/Squatting https://github.com/beppu/squatting
The API (should fit comfortably in your head with plenty of room to spare).
[0] BEGINNING AN APP
package App; use Squatting; # <-- This use statement is where the magic happens. # # %App::CONFIG # &App::D # &App::Controllers::R # @App::Controllers::C # %App::Controllers::C # &App::Controllers::C # &App::Views::R # @App::Views::V # %App::Views::V # # @App::ISA = qw(Squatting); # # ...and Squatting->isa('Class::C3::Componentised')
[1] CUSTOMIZING AN APP
our %CONFIG = ( # App configuration goes in a hash. );
Code that needs to run when the app starts goes in init().
sub init { my ($class) = @_; $class->next::method(); }
Code that needs to run on every request goes in service().
sub service { my ($class, $controller, @args) = @_;
# before controller
my $content = $class->next::method($controller, @args);
# after controller
return $content;
}
1;
[2] DEFINE CONTROLLERS
package App::Controllers; our @C = (
C(
'Home' => [ '/' ],
get => sub {
}
),
C(
'Post' => [ '/(\d+)/(\d+)/(\w+)' ],
get => sub {
my ($self, $year, $month, $slug) = @_;
},
post => sub {
my ($self, $year, $month, $slug) = @_;
}
)
C(
'Comment' => [ '/comment' ],
post => sub {
}
)
);
1;
[3] DEFINE VIEWS
package App::Views; our @V = ( V( 'Default',
layout => sub {
my ($self, $v, $content) = @_;
# This optional method allows you to wrap the content
# that your template methods return.
return "HEADER $content FOOTER";
},
_partial => sub {
my ($self, $v) = @_;
# If you want a view to not be wrapped by the layout,
# its name should begin with "_".
return "exactly what you want";
},
wrapped => sub {
my ($self, $v) = @_;
# This template's name does not begin with "_" so it
# WILL be wrapped by the layout.
return "wrapped content";
}
_ => sub {
my ($self, $v) = @_;
# If a named template method is not found, this method
# will be run. Think of it as AUTOLOAD for views.
return "something";
},
),
);
1;
SUMMARY OF THE SQUATTING API
%App::CONFIG Where your app configuration is expected to be
&App::init Code that runs on applicationn initialization
&App::service Code that runs on every HTTP request
App::Controllers Package where controllers are expected to be
@App::Controllers::C Array where controllers are expected to be
&App::Controllers::C Helper function for creating Squatting::Controller objects
&App::Controllers::R Helper function for generating URL paths; Think "R" for "route".
App::Views Package where views are expected to be
@App::Views::V Array where views are expected to be
&App::Views::V Helper function for creating Squatting::View objects
&App::Views::R Helper function for generating URL paths; It's the exact same function as &App::Controllers::R. &App::Controllers::R == &App::Views::R
You should be able to memorize this quite easily, and I hope you never have to use a search engine to figure out how any of this works. The entire API should fit comfortably inside your mind with plenty of room to spare.
For more information:
perldoc Squatting
perldoc Squatting::Controller
perldoc Squatting::View
For practical examples, see: Rhetoric (a simple blogging system) Pod::Server (a POD browser) Stardust (a COMET server)