From 3aee937a96e2ca2afc2c37fbf69274a08d5f8293 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 18 Feb 2011 11:51:54 -0600 Subject: get a model class going --- lib/Narwhal.pm | 2 +- lib/Narwhal/Component/Model.pm | 50 ++++++++++++++++++++++++++++++++++++++ lib/Narwhal/Component/Role/Wiki.pm | 9 ++++++- lib/Narwhal/Component/Wiki.pm | 8 +++--- lib/Narwhal/Component/Wiki/Edit.pm | 25 ++++++------------- 5 files changed, 71 insertions(+), 23 deletions(-) create mode 100644 lib/Narwhal/Component/Model.pm diff --git a/lib/Narwhal.pm b/lib/Narwhal.pm index 2b4cfa0..5f0eff3 100644 --- a/lib/Narwhal.pm +++ b/lib/Narwhal.pm @@ -27,7 +27,7 @@ component TT => 'OX::View::TT', ( template_root => depends_on('/Config/template_root'), ); -component Kioku => 'KiokuX::Model', ( +component Kioku => 'Narwhal::Component::Model', ( dsn => depends_on('/Config/kioku_dsn'), extra_args => depends_on('/Config/kioku_extra_args'), ); diff --git a/lib/Narwhal/Component/Model.pm b/lib/Narwhal/Component/Model.pm new file mode 100644 index 0000000..cb9a042 --- /dev/null +++ b/lib/Narwhal/Component/Model.pm @@ -0,0 +1,50 @@ +package Narwhal::Component::Model; +use Moose; + +extends 'KiokuX::Model'; + +sub get_user { + my $self = shift; + my ($user_id) = @_; + return $self->lookup("user:$user_id"); +} + +sub get_page { + my $self = shift; + my ($page_id) = @_; + return $self->lookup("page:$page_id"); +} + +sub get_page_rev { + my $self = shift; + my ($page_id, $page_rev) = @_; + my $rev = $self->lookup($page_rev); + return unless $rev; + return unless $rev->page_id eq $page_id; + return $rev; +} + +sub create_page_rev { + my $self = shift; + my %opts = @_; + + my $page_name = delete $opts{page_name}; + my $page = $self->get_page($page_name); + + if ($page) { + $page->new_revision(%opts); + } + else { + $page = Narwhal::Page->new_page( + id => $page_name, + %opts, + ); + } + + $self->store($page); +} + +__PACKAGE__->meta->make_immutable; +no Moose; + +1; diff --git a/lib/Narwhal/Component/Role/Wiki.pm b/lib/Narwhal/Component/Role/Wiki.pm index a48cf9b..e7d7c36 100644 --- a/lib/Narwhal/Component/Role/Wiki.pm +++ b/lib/Narwhal/Component/Role/Wiki.pm @@ -4,7 +4,14 @@ use Moose::Role; has kioku => ( isa => 'KiokuX::Model', required => 1, - handles => 'KiokuDB::Role::API', + handles => [ + 'get_user', + 'get_page', + 'get_page_rev', + 'create_page_rev', + 'new_scope', + 'txn_do', + ], ); has tt => ( diff --git a/lib/Narwhal/Component/Wiki.pm b/lib/Narwhal/Component/Wiki.pm index f923261..6f01bbd 100644 --- a/lib/Narwhal/Component/Wiki.pm +++ b/lib/Narwhal/Component/Wiki.pm @@ -7,7 +7,7 @@ sub view { my $self = shift; my ($req, $page_name) = @_; - my $page = $self->lookup("page:$page_name"); + my $page = $self->get_page($page_name); if (!$page) { my $res = $req->new_response(303); $res->location( @@ -35,9 +35,9 @@ sub view_old { my $self = shift; my ($req, $page_name, $rev) = @_; - my $page_rev = $self->lookup($rev); + my $page_rev = $self->get_page_rev($page_name, $rev); return $req->new_response(404) - unless $page_rev && $page_rev->page_id eq $page_name; + unless $page_rev; $self->render( $req, @@ -56,7 +56,7 @@ sub history { my $self = shift; my ($req, $page_name) = @_; - my $page = $self->lookup("page:$page_name"); + my $page = $self->get_page($page_name); $self->render( $req, diff --git a/lib/Narwhal/Component/Wiki/Edit.pm b/lib/Narwhal/Component/Wiki/Edit.pm index 101739e..adf9ea9 100644 --- a/lib/Narwhal/Component/Wiki/Edit.pm +++ b/lib/Narwhal/Component/Wiki/Edit.pm @@ -10,7 +10,7 @@ sub get { my $self = shift; my ($req, $page_name) = @_; - my $page = $self->lookup("page:$page_name"); + my $page = $self->get_page($page_name); my %template_env = ( page => $page_name, @@ -34,24 +34,15 @@ sub post { my ($req, $page_name) = @_; $self->txn_do(sub { - my $page = $self->lookup("page:$page_name"); + my $page = $self->get_page($page_name); my $user_id = 'foo'; # XXX - my $user = $self->lookup("user:$user_id") + my $user = $self->get_user($user_id) || Narwhal::User->new(id => $user_id); - if ($page) { - $page->new_revision( - text => $req->param('text'), - author => $user, - ); - } - else { - $page = Narwhal::Page->new_page( - id => $page_name, - text => $req->param('text'), - author => $user, - ); - } - $self->store($page); + $self->create_page_rev( + text => $req->param('text'), + author => $user, + page_name => $page_name, + ); }); my $res = $req->new_response(303); $res->location( -- cgit v1.2.3