File Coverage

blib/lib/PAGI/Context/SSE.pm
Criterion Covered Total %
statement 31 32 96.8
branch n/a
condition 2 3 66.6
subroutine 24 25 96.0
pod 22 23 95.6
total 79 83 95.1


line stmt bran cond sub pod time code
1             package PAGI::Context::SSE;
2             $PAGI::Context::SSE::VERSION = '0.002000';
3 27     27   156 use strict;
  27         40  
  27         904  
4 27     27   114 use warnings;
  27         33  
  27         15043  
5              
6             our @ISA = ('PAGI::Context');
7              
8             # ── Underlying PAGI::SSE accessor ────────────────────────────────────
9              
10             sub sse {
11 50     50 0 113 my ($self) = @_;
12 50   66     160 return $self->{_sse} //= do {
13 31         3797 require PAGI::SSE;
14 31         149 PAGI::SSE->new($self->{scope}, $self->{receive}, $self->{send});
15             };
16             }
17              
18             # ── Connection lifecycle ─────────────────────────────────────────────
19              
20 10     10 1 84 sub start { shift->sse->start(@_) }
21 2     2 1 120 sub close { shift->sse->close(@_) }
22              
23             # ── Send methods ─────────────────────────────────────────────────────
24              
25 1     1 1 12 sub send { shift->sse->send(@_) }
26 3     3 1 25 sub send_json { shift->sse->send_json(@_) }
27 1     1 1 14 sub send_event { shift->sse->send_event(@_) }
28 1     1 1 26 sub send_comment { shift->sse->send_comment(@_) }
29              
30 1     1 1 27 sub try_send { shift->sse->try_send(@_) }
31 1     1 1 28 sub try_send_json { shift->sse->try_send_json(@_) }
32 1     1 1 27 sub try_send_comment { shift->sse->try_send_comment(@_) }
33 1     1 1 27 sub try_send_event { shift->sse->try_send_event(@_) }
34              
35             # ── Iteration helpers ────────────────────────────────────────────────
36              
37 1     1 1 17 sub each { shift->sse->each(@_) }
38 0     0 1 0 sub every { shift->sse->every(@_) }
39              
40             # ── State inspection ─────────────────────────────────────────────────
41              
42 2     2 1 57 sub is_started { shift->sse->is_started }
43 3     3 1 15 sub is_closed { shift->sse->is_closed }
44              
45             # ── Protocol metadata ────────────────────────────────────────────────
46              
47 1     1 1 9 sub last_event_id { shift->sse->last_event_id }
48 1     1 1 8 sub http_version { shift->sse->http_version }
49 1     1 1 12 sub keepalive { shift->sse->keepalive(@_) }
50              
51             # ── Query parameter accessors ────────────────────────────────────────
52             # SSE uses query_param (singular) vs WebSocket's query (method name
53             # mirrors what PAGI::SSE exposes).
54              
55 3     3 1 607 sub query_param { shift->sse->query_param(@_) }
56 1     1 1 8 sub query_params { shift->sse->query_params(@_) }
57 1     1 1 8 sub raw_query_param { shift->sse->raw_query_param(@_) }
58 1     1 1 7 sub raw_query_params { shift->sse->raw_query_params(@_) }
59              
60             # ── Header extras ────────────────────────────────────────────────────
61              
62 1     1 1 8 sub header_all { shift->sse->header_all(@_) }
63              
64             1;
65              
66             __END__