File Coverage

blib/lib/Net/Lyskom/AuxItem.pm
Criterion Covered Total %
statement 55 122 45.0
branch 11 68 16.1
condition n/a
subroutine 11 20 55.0
pod 14 15 93.3
total 91 225 40.4


line stmt bran cond sub pod time code
1             package Net::Lyskom::AuxItem;
2 1     1   4 use base qw{Net::Lyskom::Object};
  1         2  
  1         81  
3              
4 1     1   4 use strict;
  1         1  
  1         24  
5 1     1   4 use warnings;
  1         1  
  1         19  
6 1     1   4 use Carp;
  1         8  
  1         49  
7 1     1   603 use Net::Lyskom::Util qw{:all};
  1         2  
  1         1633  
8              
9             =head1 NAME
10              
11             Net::Lyskom::AuxItem - Object representing a Protocol A AuxItem.
12              
13             =head1 SYNOPSIS
14              
15             $ai = Net::Lyskom::AuxItem->new(
16             tag => "content_type",
17             data => "text/html"
18             );
19              
20             =head1 DESCRIPTION
21              
22             A helper module for Net::Lyskom
23              
24             =head2 Methods
25              
26             =over
27              
28             =cut
29              
30             our %type = (
31             content_type => 1,
32             fast_reply => 2,
33             cross_reference => 3,
34             no_comments => 4,
35             personal_comment => 5,
36             request_confirmation => 6,
37             read_confirm => 7,
38             redirect => 8,
39             x_face => 9,
40             alternate_name => 10,
41             pgp_signature => 11,
42             pgp_public_key => 12,
43             e_mail_address => 13,
44             faq_text => 14,
45             creating_software => 15,
46             mx_author => 16,
47             mx_from => 17,
48             mx_reply_to => 18,
49             mx_to => 19,
50             mx_cc => 20,
51             mx_date => 21,
52             mx_message_id => 22,
53             mx_in_reply_to => 23,
54             mx_misc => 24,
55             mx_allow_filter => 25,
56             mx_reject_forward => 26,
57             notify_comments => 27,
58             faq_for_conf => 28,
59             recommended_conf => 29,
60             allowed_content_type => 30,
61             canonical_name => 31,
62             mx_list_name => 32,
63             send_comment_to => 33,
64             mx_mime_belongs_to => 10100,
65             mx_mime_part_in => 10101,
66             mx_mime_misc => 10102,
67             mx_envelope_sender => 10103,
68             mx_mime_file_name => 10104
69             );
70              
71             our %epyt = reverse %type;
72              
73             =item new(tag => content_type, [...])
74              
75             Create a new AuxItem object. All possible attributes can be set at
76             creation time, by use of fairly standard arguments. What the attributes
77             are and what they mean can be found in the Protocol A documentation. All
78             names are kept the same, except that hyphens have been changed to underscores.
79              
80             =cut
81              
82             sub new {
83 0     0 1 0 my $self = {};
84 0         0 my $class = shift;
85 0         0 my %a = @_;
86              
87 0 0       0 $class = ref($class) if ref($class);
88              
89 0         0 bless $self,$class;
90              
91 0         0 $self->tag($a{tag});
92              
93 0 0       0 if ($a{inherit_limit}) {
94 0         0 $self->inherit_limit($a{inherit_limit})
95             } else {
96 0         0 $self->inherit_limit(0)
97             }
98              
99 0 0       0 if ($a{deleted}) {
100 0         0 $self->deleted($a{deleted})
101             } else {
102 0         0 $self->deleted(0)
103             }
104              
105 0 0       0 if ($a{inherit}) {
106 0         0 $self->inherit($a{inherit})
107             } else {
108 0         0 $self->inherit(0)
109             }
110              
111 0 0       0 if ($a{secret}) {
112 0         0 $self->secret($a{secret})
113             } else {
114 0         0 $self->secret(0)
115             }
116              
117 0 0       0 if ($a{hide_creator}) {
118 0         0 $self->hide_creator($a{hide_creator})
119             } else {
120 0         0 $self->hide_creator(0)
121             }
122              
123 0 0       0 if ($a{dont_garb}) {
124 0         0 $self->dont_garb($a{dont_garb})
125             } else {
126 0         0 $self->dont_garb(0)
127             }
128              
129 0         0 $self->data($a{data});
130              
131 0 0       0 $self->{aux_no} = $a{aux_no} if $a{aux_no};
132 0 0       0 $self->{creator} = $a{creator} if $a{creator};
133 0 0       0 $self->{created_at} = $a{created_at} if $a{created_at};
134              
135 0         0 return $self;
136             }
137              
138             sub new_from_stream {
139 2     2 0 4 my $s = {};
140 2         3 my $class = shift;
141 2         3 my $arg = $_[0];
142              
143 2 50       6 $class = ref($class) if ref($class);
144 2         6 bless $s,$class;
145              
146 2         2 $s->{aux_no} = shift @{$arg};
  2         12  
147 2         3 $s->{tag} = shift @{$arg};
  2         6  
148 2         2 $s->{creator} = shift @{$arg};
  2         6  
149 2         9 $s->{created_at} = Net::Lyskom::Time->new_from_stream($arg);
150 2         3 my $flags = shift @{$arg};
  2         3  
151 2         2 $s->{inherit_limit} = shift @{$arg};
  2         6  
152 2         3 $s->{data} = shift @{$arg};
  2         3  
153              
154 2         16 my($deleted, $inherit, $secret, $hide_creator, $dont_garb)
155             = $flags =~ m/./g;
156 2         8 $s->dont_garb($dont_garb);
157 2         5 $s->hide_creator($hide_creator);
158 2         5 $s->secret($secret);
159 2         6 $s->inherit($inherit);
160 2         7 $s->deleted($deleted);
161              
162 2         11 return $s;
163             }
164              
165             =item data([$data])
166              
167             Get or set the data attribute of the AuxItem.
168              
169             =cut
170              
171             sub data {
172 0     0 1 0 my $self = shift;
173              
174 0 0       0 $self->{data} = $_[0] if defined $_[0];
175 0         0 return $self->{data};
176             }
177              
178             =item inherit_limit([$limit])
179              
180             Get or set the inherit_limit attribute of the AuxItem.
181              
182             =cut
183              
184             sub inherit_limit {
185 0     0 1 0 my $self = shift;
186              
187 0 0       0 $self->{inherit_limit} = $_[0] if defined $_[0];
188 0         0 return $self->{inherit_limit};
189             }
190              
191             =item tag([$tag])
192              
193             Get or set the tag attribute of the AuxItem. It is a fatal error to use
194             a tag type that is not defined in the protocol specification.
195              
196             =cut
197              
198             sub tag {
199 0     0 1 0 my $self = shift;
200              
201 0 0       0 return $self->{tag} unless defined $_[0];
202 0 0       0 croak "Unknown AuxItem tag: $_[0]" unless $type{$_[0]};
203 0         0 $self->{tag} = $type{$_[0]};
204 0         0 return $self->{tag};
205             }
206              
207             =item deleted([$boolean])
208              
209             Get or set the deleted flag of the AuxItem.
210              
211             =cut
212              
213             sub deleted {
214 2     2 1 4 my $self = shift;
215              
216 2 50       16 $self->{deleted} = ($_[0])?1:0 if defined $_[0];
    50          
217 2         5 return $self->{deleted}
218             }
219              
220             =item inherit([$boolean])
221              
222             Get or set the inherit flag of the AuxItem.
223              
224             =cut
225              
226             sub inherit {
227 2     2 1 2 my $self = shift;
228              
229 2 50       8 $self->{inherit} = ($_[0])?1:0 if defined $_[0];
    50          
230 2         3 return $self->{inherit}
231             }
232              
233             =item secret([$boolean])
234              
235             Get or set the secret flag of the AuxItem.
236              
237             =cut
238              
239             sub secret {
240 2     2 1 20 my $self = shift;
241              
242 2 50       11 $self->{secret} = ($_[0])?1:0 if defined $_[0];
    50          
243 2         11 return $self->{secret}
244             }
245              
246             =item hide_creator([$boolean])
247              
248             Get or set the hide_creator of the AuxItem.
249              
250             =cut
251              
252             sub hide_creator {
253 2     2 1 4 my $self = shift;
254              
255 2 50       11 $self->{hide_creator} = ($_[0])?1:0 if defined $_[0];
    50          
256 2         4 return $self->{hide_creator}
257             }
258              
259             =item dont_garb([$boolean])
260              
261             Get or set the dont_garb attribute of the AuxItem.
262              
263             =cut
264              
265             sub dont_garb {
266 2     2 1 3 my $self = shift;
267              
268 2 50       9 $self->{dont_garb} = ($_[0])?1:0 if defined $_[0];
    50          
269 2         4 return $self->{dont_garb}
270             }
271              
272             =item aux_no()
273              
274             Get the aux_no attribute of the AuxItem.
275              
276             =cut
277              
278             sub aux_no {
279 0     0 1   my $self = shift;
280              
281 0 0         warn "Attempt to set AuxItem aux_no after creation!" if $_[0];
282 0           return $self->{aux_no};
283             }
284              
285             =item creator()
286              
287             Get the creator attribute of the AuxItem.
288              
289             =cut
290              
291             sub creator {
292 0     0 1   my $self = shift;
293              
294 0 0         warn "Attempt to AuxItem set creator after creation!" if $_[0];
295 0           return $self->{creator};
296             }
297              
298             =item created_at()
299              
300             Get the created_at attribute of the AuxItem. Returns a
301             C object.
302              
303             =cut
304              
305             sub created_at {
306 0     0 1   my $self = shift;
307              
308 0 0         warn "Attempt to set AuxItem created_at after creation!" if $_[0];
309 0           return $self->{created_at}
310             }
311              
312             =item as_string()
313              
314             Return the object contents as a string.
315              
316             =cut
317              
318             sub as_string {
319 0     0 1   my $s = shift;
320 0           my $res = "AuxItem -> { ";
321              
322 0           foreach (keys %{$s}) {
  0            
323 0           $res .= sprintf "%s => ",$_;
324 0 0         if (ref $s->{$_}) {
325 0           $res .= $s->{$_}->as_string;
326 0           $res .= ", ";
327             } else {
328 0           $res .= sprintf "%s, ",$s->{$_};
329             }
330             }
331 0           $res .= " }";
332 0           return $res;
333             }
334              
335             =item to_server()
336              
337             Return a reference to a four-element array representing this AuxItem,
338             suitable for using as the third argument in a call to
339             Net::Lyskom->create_text()
340              
341             =cut
342              
343             sub to_server {
344 0     0 1   my $self = shift;
345 0           my @res;
346              
347 0           $res[0] = $self->tag;
348 0 0         $res[1] = sprintf("%s%s%s%s%s000",
    0          
    0          
    0          
    0          
349             $self->deleted?"1":"0",
350             $self->inherit?"1":"0",
351             $self->secret?"1":"0",
352             $self->hide_creator?"1":"0",
353             $self->dont_garb?"1":"0",
354             );
355 0           $res[2] = $self->inherit_limit;
356 0           $res[3] = holl($self->data);
357              
358 0           return @res;
359             }
360              
361             =back
362              
363             =cut
364              
365             return 1;
366              
367             =head1 AUTHOR
368              
369             Calle Dybedahl
370              
371             =cut
372