File Coverage

blib/lib/Net/Gnats/Command/FIELDFLAGS.pm
Criterion Covered Total %
statement 33 35 94.2
branch 14 18 77.7
condition 2 3 66.6
subroutine 8 8 100.0
pod 2 3 66.6
total 59 67 88.0


line stmt bran cond sub pod time code
1             package Net::Gnats::Command::FIELDFLAGS;
2 40     40   200 use parent 'Net::Gnats::Command';
  40         73  
  40         252  
3 40     40   2206 use strictures;
  40         73  
  40         212  
4             BEGIN {
5 40     40   8814 $Net::Gnats::Command::FIELDFLAGS::VERSION = '0.22';
6             }
7 40     40   215 use vars qw($VERSION);
  40         64  
  40         1671  
8              
9 40     40   227 use Net::Gnats::Constants qw(CODE_INFORMATION CODE_INVALID_FIELD_NAME);
  40         77  
  40         14506  
10              
11             =head1 NAME
12              
13             Net::Gnats::Command::FIELDFLAGS
14              
15             =head1 DESCRIPTION
16              
17             Returns a set of flags describing the specified field(s).
18              
19             Like the FDSC and FTYP commands, multiple field names may be listed
20             with the command, and a response line will be returned for each one
21             in the order that the fields appear on the command line.
22              
23             The flags include:
24              
25             textsearch
26              
27             The field will be searched when a text field search is requested.
28              
29             allowAnyValue
30              
31             For fields that contain enumerated values, any legal value may be
32             used in the field, not just ones that appear in the enumerated list.
33              
34             requireChangeReason
35              
36             If the field is edited, a reason for the change must be supplied in
37             the new PR text describing the reason for the change. The reason
38             must be supplied as a multitext PR field in the new PR whose name is
39             field-Changed-Why (where field is the name of the field being
40             edited).
41              
42             readonly
43              
44             The field is read-only, and cannot be edited.
45              
46             =head1 PROTOCOL
47              
48             FIELDFLAGS [fields...]
49              
50             =head1 RESPONSES
51              
52             410 (CODE_INVALID_FIELD_NAME)
53              
54             meaning that the specified field is invalid or nonexistent, or
55              
56             350 (CODE_INFORMATION)
57              
58             which contains the set of flags for the field. The flags may be
59             blank, which indicate that no special flags have been set for this
60             field.
61              
62             =cut
63              
64             my $c = 'FIELDFLAGS';
65              
66             sub new {
67 41     41 1 136 my ( $class, %options ) = @_;
68 41         102 my $self = bless \%options, $class;
69 41         225 $self->{requests_multi} = 0;
70 41 100       178 return $self if not defined $self->{fields};
71              
72 40 50       170 if (ref $self->{fields} eq 'ARRAY') {
73 40 100       73 $self->{requests_multi} = 1 if scalar @{ $self->{fields} } > 1;
  40         185  
74             }
75             else {
76 0         0 $self->{fields} = [ $self->{fields} ];
77             }
78 40         142 return $self;
79             }
80              
81             sub as_string {
82 81     81 1 167 my ($self) = @_;
83 81 100       304 return undef if not defined $self->{fields};
84 80 50       301 return undef if ref $self->{fields} ne 'ARRAY';
85 80 50       128 return undef if scalar @{ $self->{fields} } == 0;
  80         325  
86 80         201 return $c . ' ' . join ( ' ', @{$self->{fields}} );
  80         566  
87             }
88              
89             # this command can take multiple fields, each getting their own response.
90             # so, we check that 'everything' is okay by looking at the parent response.
91             sub is_ok {
92 3     3 0 5 my $self = shift;
93 3 100       11 return 0 if not defined $self->response;
94              
95 2 100 66     13 if ( $self->{requests_multi} == 0 and
96             $self->response->code == CODE_INFORMATION) {
97 1         5 return 1;
98             }
99 1 50       5 return 1 if $self->response->code == CODE_INFORMATION;
100 0           return 0;
101             }
102              
103             1;