Web-ComposableRequest

 view release on metacpan or  search on metacpan

lib/Web/ComposableRequest/Role/Cookie.pm  view on Meta::CPAN

package Web::ComposableRequest::Role::Cookie;

use namespace::autoclean;

use CGI::Simple::Cookie;
use Unexpected::Types            qw( HashRef );
use Web::ComposableRequest::Util qw( add_config_role );
use Moo::Role;

requires qw( _config _env );

add_config_role __PACKAGE__.'::Config';

my $_decode = sub {
   my ($cookies, $prefix, $name) = @_; my $cname = "${prefix}_${name}";

   my $attr = {}; ($name and exists $cookies->{ $cname }) or return $attr;

   for (split m{ \+ }mx, $cookies->{ $cname }->value) {
      my ($k, $v) = split m{ ~ }mx, $_; $k and $attr->{ $k } = $v;
   }

   return $attr;
};

has 'cookies' => is => 'lazy', isa => HashRef, builder => sub {
   my %v = CGI::Simple::Cookie->parse( $_[ 0 ]->_env->{ 'HTTP_COOKIE' } ); \%v;
};

sub get_cookie_hash {
   return $_decode->( $_[ 0 ]->cookies, $_[ 0 ]->_config->prefix, $_[ 1 ] );
};

package Web::ComposableRequest::Role::Cookie::Config;

use namespace::autoclean;

use Unexpected::Types                 qw( NonEmptySimpleStr );
use Web::ComposableRequest::Constants qw( TRUE );
use Moo::Role;

has 'prefix' => is => 'ro', isa => NonEmptySimpleStr, required => TRUE;

1;

__END__

=pod

=encoding utf-8

=head1 Name

Web::ComposableRequest::Role::Cookie - Adds cookies to the request class

=head1 Synopsis

   package Your::Request::Class;

   use Moo;

   extends 'Web::ComposableRequest::Base';
   with    'Web::ComposableRequest::Role::Cookie';

=head1 Description

Adds cookies to the request class

=head1 Configuration and Environment

Defines the following attributes;

=over 3

=item C<cookies>

A hash reference of cookies supplied with the request

=back



( run in 0.672 second using v1.01-cache-2.11-cpan-71847e10f99 )