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   184 use parent 'Net::Gnats::Command';
  40         59  
  40         184  
3 40     40   2499 use strictures;
  40         60  
  40         178  
4             BEGIN {
5 40     40   3255 $Net::Gnats::Command::FIELDFLAGS::VERSION = '0.21';
6             }
7 40     40   294 use vars qw($VERSION);
  40         86  
  40         1660  
8              
9 40     40   341 use Net::Gnats::Constants qw(CODE_INFORMATION CODE_INVALID_FIELD_NAME);
  40         68  
  40         13337  
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 127 my ( $class, %options ) = @_;
68 41         143 my $self = bless \%options, $class;
69 41         208 $self->{requests_multi} = 0;
70 41 100       166 return $self if not defined $self->{fields};
71              
72 40 50       173 if (ref $self->{fields} eq 'ARRAY') {
73 40 100       72 $self->{requests_multi} = 1 if scalar @{ $self->{fields} } > 1;
  40         208  
74             }
75             else {
76 0         0 $self->{fields} = [ $self->{fields} ];
77             }
78 40         140 return $self;
79             }
80              
81             sub as_string {
82 81     81 1 144 my ($self) = @_;
83 81 100       410 return undef if not defined $self->{fields};
84 80 50       314 return undef if ref $self->{fields} ne 'ARRAY';
85 80 50       121 return undef if scalar @{ $self->{fields} } == 0;
  80         253  
86 80         206 return $c . ' ' . join ( ' ', @{$self->{fields}} );
  80         738  
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 7 my $self = shift;
93 3 100       55 return 0 if not defined $self->response;
94              
95 2 100 66     19 if ( $self->{requests_multi} == 0 and
96             $self->response->code == CODE_INFORMATION) {
97 1         8 return 1;
98             }
99 1 50       4 return 1 if $self->response->code == CODE_INFORMATION;
100 0           return 0;
101             }
102              
103             1;