File Coverage

blib/lib/Ark/Plugin/Authentication/Store/Model.pm
Criterion Covered Total %
statement 9 9 100.0
branch n/a
condition n/a
subroutine 3 3 100.0
pod n/a
total 12 12 100.0


line stmt bran cond sub pod time code
1             package Ark::Plugin::Authentication::Store::Model;
2 1     1   746 use strict;
  1         2  
  1         35  
3 1     1   6 use warnings;
  1         3  
  1         32  
4 1     1   7 use Ark::Plugin 'Auth';
  1         2  
  1         8  
5              
6             has store_model => (
7             is => 'rw',
8             isa => 'Str',
9             lazy => 1,
10             default => sub {
11             my $self = shift;
12             $self->class_config->{model}
13             or die q[Plugin::Authentication::Store::Model: required "model" config];
14             },
15             );
16              
17             around find_user => sub {
18             my $prev = shift->(@_);
19             return $prev if $prev;
20              
21             my ($self, $id, $info) = @_;
22              
23             my $model = $self->app->model( $self->store_model );
24             if (my $user = $model->find_user($id, $info)) {
25             $self->ensure_class_loaded('Ark::Plugin::Authentication::User');
26              
27             unless ($user->{hash} && $user->{obj_builder}) {
28             $user = {
29             hash => $user,
30             obj_builder => sub { $user },
31             };
32             }
33              
34             return Ark::Plugin::Authentication::User->new(
35             %$user,
36             store => 'Model',
37             );
38             }
39              
40             return;
41             };
42              
43             around from_session => sub {
44             my $prev = shift->(@_);
45             return $prev if $prev;
46              
47             my ($self, $user) = @_;
48              
49             return unless $user->{store} eq 'Model';
50              
51             my $model = $self->app->model( $self->store_model );
52              
53             if ($model->can('from_session')) {
54             $user = $model->from_session($user);
55             unless ($user->{hash} && $user->{obj_builder}) {
56             $user = {
57             hash => $user,
58             obj_builder => sub { $user },
59             };
60             }
61             }
62             else {
63             $user = { %$user };
64             $user->{obj_builder} = sub { $user->{hash} };
65             }
66              
67             $self->ensure_class_loaded('Ark::Plugin::Authentication::User');
68             return Ark::Plugin::Authentication::User->new(
69             %$user,
70             store => 'Model',
71             );
72             };
73              
74             1;