File Coverage

blib/lib/WebService/FogBugz/Config.pm
Criterion Covered Total %
statement 43 43 100.0
branch 21 26 80.7
condition 13 21 61.9
subroutine 6 6 100.0
pod 2 2 100.0
total 85 98 86.7


line stmt bran cond sub pod time code
1             package WebService::FogBugz::Config;
2              
3 7     7   17021 use strict;
  7         9  
  7         250  
4 7     7   34 use warnings;
  7         10  
  7         387  
5              
6             our $VERSION = '0.1.1';
7              
8             #----------------------------------------------------------------------------
9             # Library Modules
10              
11 7     7   34 use base qw(Class::Accessor::Fast);
  7         17  
  7         3763  
12              
13 7     7   20178 use IO::File;
  7         44100  
  7         3179  
14              
15             #----------------------------------------------------------------------------
16             # Variables
17              
18             my %NAMES = (
19             'URL' => 'base_url',
20             'TOKEN' => 'token',
21             'EMAIL' => 'email',
22             'PASSWORD' => 'password'
23             );
24              
25             #----------------------------------------------------------------------------
26             # Accessors
27              
28             __PACKAGE__->mk_accessors($_) for qw(base_url token email password file);
29              
30             #----------------------------------------------------------------------------
31             # Public API
32              
33             sub new {
34 3     3 1 6307 my $class = shift;
35 3         12 my ($params) = {@_};
36 3         5 my $atts = {};
37              
38 3         8 my $self = bless $atts, $class;
39              
40 3         5 my $fbrc = $params->{config};
41 3   66     15 $fbrc ||= $ENV{FBRC};
42 3 100 66     57 $fbrc = '.fbrc' unless($fbrc && -f $fbrc);
43 3 100 66     38 $fbrc = "$ENV{HOME}/.fbrc" unless($fbrc && -f $fbrc);
44 3 100 66     34 $fbrc = '' unless($fbrc && -f $fbrc);
45              
46 3 100       9 $self->readConfig($fbrc) if($fbrc);
47              
48 3         29 my %config;
49 3         8 for my $key (qw(token email password base_url)) {
50 12   100     58 $config{$key} = $params->{$key} || $self->{$key};
51             }
52              
53 3 50       20 $self->base_url($config{base_url}) if($config{base_url});
54 3 100       24 $self->token( $config{token}) if($config{token});
55 3 100       16 $self->email( $config{email}) if($config{email});
56 3 100       19 $self->password($config{password}) if($config{password});
57 3 100       14 $self->file( $fbrc) if($fbrc);
58              
59 3         20 return $self;
60             }
61              
62             sub readConfig {
63 2     2 1 5 my ($self, $fbrc) = @_;
64 2 50 33     36 return unless(-f $fbrc && -r $fbrc);
65              
66 2         15 my $fh = IO::File->new($fbrc,'r');
67 2 50       203 return unless($fh);
68              
69 2         3 my $line;
70 2         23 while( defined($line = <$fh>) ) {
71 5         21 $line =~ s!\s+$!!;
72 5 50 33     29 next unless($line && $line !~ /^#/);
73 5         13 $line =~ s/^\s*//;
74 5 50       22 if($line =~ /^(URL|TOKEN|EMAIL|PASSWORD)\s*=\s*(.*)/) {
75 5         31 $self->{ $NAMES{$1} } = $2;
76             }
77             }
78              
79 2         18 $fh->close;
80             }
81              
82             1;
83              
84             __END__