#!/usr/bin/pugs
=head1 NAME
k_manip - Kontent command-line page hierarchy manipulation tool
=head1 SYNOPSIS
./k_manip show /path/to[14]/page
./k_manip list /path/to/page
./k_manip revise /path/to/page rev:log='log message' rev:author=/users/someone class:attr=value
./k_manip create /path/to page rev:log='log message' rev:author=/users/someone class:attr=value
=head1 DESCRIPTION
k_manip is a command-line tool for manipulating Kontent sites. It can be used
to create and revise pages, dump their attributes, and list their children.
=head1 SEE ALSO
L<WWW::Kontent>
=cut
my($op, $path, @args)=*@ARGS;
use WWW::Kontent;
my $root = WWW::Kontent::get_root();
my $request = WWW::Kontent::Request.new(:root($root), :path($path), :parameters({}));
my $revision = $request.path.resolve($root);
my $page = $request.page;
given $op {
when 'show' {
say "Revision $revision.revno() of $path:";
say sprintf ' %-16s %s', "$_:", $revision.attributes(){$_}
for $revision.attributes.keys;
}
when 'list' {
say "Children of $path:";
say " $_" for $page.children();
}
when 'revise' | 'create' {
my $draft;
if $op eq 'create' {
my $name=shift @args;
$draft=$revision.create($name);
$draft=$draft.draft_revision;
}
else {
$draft=$revision.revise($revision.revno + 1);
}
for @args -> $arg {
$arg ~~ m/^(<[a..z0..9:]>+)=(.*)$/ or warn "No match on argument '$arg'" and next;
my($name, $value) = ~<< ($0, $1);
$draft.attributes{$name}=$value;
}
say "Draft revision $draft.revno() of $path:";
say sprintf ' %-16s %s', "$_:", $draft.attributes{$_}
for $draft.attributes.keys;
print "Would you like to commit this draft? [y/n] ";
if readline($*IN) ~~ m:i/y/ {
$draft.commit;
say "Draft committed.";
}
else {
say "Draft discarded.";
}
}
}