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   191 use parent 'Net::Gnats::Command';
  40         54  
  40         177  
3 40     40   2037 use strictures;
  40         57  
  40         157  
4             BEGIN {
5 40     40   2782 $Net::Gnats::Command::FIELDFLAGS::VERSION = '0.20';
6             }
7 40     40   165 use vars qw($VERSION);
  40         48  
  40         1466  
8              
9 40     40   199 use Net::Gnats::Constants qw(CODE_INFORMATION CODE_INVALID_FIELD_NAME);
  40         71  
  40         11917  
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 103 my ( $class, %options ) = @_;
68 41         116 my $self = bless \%options, $class;
69 41         176 $self->{requests_multi} = 0;
70 41 100       136 return $self if not defined $self->{fields};
71              
72 40 50       129 if (ref $self->{fields} eq 'ARRAY') {
73 40 100       84 $self->{requests_multi} = 1 if scalar @{ $self->{fields} } > 1;
  40         172  
74             }
75             else {
76 0         0 $self->{fields} = [ $self->{fields} ];
77             }
78 40         107 return $self;
79             }
80              
81             sub as_string {
82 81     81 1 116 my ($self) = @_;
83 81 100       244 return undef if not defined $self->{fields};
84 80 50       276 return undef if ref $self->{fields} ne 'ARRAY';
85 80 50       101 return undef if scalar @{ $self->{fields} } == 0;
  80         221  
86 80         168 return $c . ' ' . join ( ' ', @{$self->{fields}} );
  80         512  
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 4 my $self = shift;
93 3 100       6 return 0 if not defined $self->response;
94              
95 2 100 66     9 if ( $self->{requests_multi} == 0 and
96             $self->response->code == CODE_INFORMATION) {
97 1         4 return 1;
98             }
99 1 50       3 return 1 if $self->response->code == CODE_INFORMATION;
100 0           return 0;
101             }
102              
103             1;