summaryrefslogtreecommitdiffstats
path: root/lib/Narwhal/Component/Model.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Narwhal/Component/Model.pm')
-rw-r--r--lib/Narwhal/Component/Model.pm50
1 files changed, 50 insertions, 0 deletions
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;