summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2011-02-18 11:51:54 -0600
committerJesse Luehrs <doy@tozt.net>2011-02-18 11:52:22 -0600
commit3aee937a96e2ca2afc2c37fbf69274a08d5f8293 (patch)
tree7d96b7424a48912844f54a2d1cacbeb280be705d
parent115416dfdce1a737ad343610d7a116e3b5db0e64 (diff)
downloadnarwhal-3aee937a96e2ca2afc2c37fbf69274a08d5f8293.tar.gz
narwhal-3aee937a96e2ca2afc2c37fbf69274a08d5f8293.zip
get a model class going
-rw-r--r--lib/Narwhal.pm2
-rw-r--r--lib/Narwhal/Component/Model.pm50
-rw-r--r--lib/Narwhal/Component/Role/Wiki.pm9
-rw-r--r--lib/Narwhal/Component/Wiki.pm8
-rw-r--r--lib/Narwhal/Component/Wiki/Edit.pm25
5 files changed, 71 insertions, 23 deletions
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(