File Coverage

blib/lib/Sub/HandlesVia/HandlerLibrary/Scalar.pm
Criterion Covered Total %
statement 23 23 100.0
branch n/a
condition n/a
subroutine 11 11 100.0
pod 3 3 100.0
total 37 37 100.0


line stmt bran cond sub pod time code
1 3     3   582 use 5.008;
  3         12  
2 3     3   18 use strict;
  3         6  
  3         64  
3 3     3   16 use warnings;
  3         8  
  3         192  
4              
5              
6             our $AUTHORITY = 'cpan:TOBYINK';
7             our $VERSION = '0.045';
8              
9             use Sub::HandlesVia::HandlerLibrary;
10 3     3   798 our @ISA = 'Sub::HandlesVia::HandlerLibrary';
  3         10  
  3         148  
11              
12             use Sub::HandlesVia::Handler qw( handler );
13 3     3   21 our @METHODS = qw( scalar_reference make_getter make_setter );
  3         7  
  3         28  
14              
15             handler
16             name => 'Scalar:scalar_reference',
17             args => 0,
18             template => '$GET;\\($SLOT)',
19             documentation => "Returns a scalar reference to the attribute value's slot within its object.",
20             _examples => sub {
21             my ( $class, $attr, $method ) = @_;
22             return CORE::join "",
23 1     1   72 " my \$object = $class\->new( $attr => 10 );\n",
24 1         7 " my \$ref = \$object->$method;\n",
25             " \$\$ref++;\n",
26             " say \$object->$attr; ## ==> 11\n",
27             "\n";
28             },
29             allow_getter_shortcuts => 0,
30             }
31 3     3 1 35  
32             handler
33             name => 'Scalar:make_getter',
34             args => 0,
35             template => 'my $s = $SELF; sub { unshift @_, $s; $GET }',
36             documentation => "Returns a getter coderef.",
37             _examples => sub {
38             my ( $class, $attr, $method ) = @_;
39             return CORE::join "",
40             " my \$object = $class\->new( $attr => 10 );\n",
41 1     1   64 " my \$getter = \$object->$method;\n",
42 1         6 " \$object->_set_$attr( 11 );\n",
43             " say \$getter->(); ## ==> 11\n",
44             "\n";
45             },
46             allow_getter_shortcuts => 0,
47             }
48              
49 3     3 1 27 handler
50             name => 'Scalar:make_setter',
51             args => 0,
52             template => 'my $s = $SELF; sub { my $val = shift; unshift @_, $s; « $val » }',
53             documentation => "Returns a setter coderef.",
54             _examples => sub {
55             my ( $class, $attr, $method ) = @_;
56             return CORE::join "",
57             " my \$object = $class\->new( $attr => 10 );\n",
58             " my \$setter = \$object->$method;\n",
59 1     1   63 " \$setter->( 11 );\n",
60 1         6 " say \$object->$attr; ## ==> 11\n",
61             "\n";
62             },
63             allow_getter_shortcuts => 0,
64             }
65              
66             1;