File Coverage

blib/lib/Config/Merge.pm
Criterion Covered Total %
statement 288 294 97.9
branch 124 140 88.5
condition 49 71 69.0
subroutine 40 40 100.0
pod 11 11 100.0
total 512 556 92.0


line stmt bran cond sub pod time code
1             package Config::Merge;
2              
3 5     5   156183 use strict;
  5         16  
  5         249  
4 5     5   30 use warnings FATAL => 'all', NONFATAL => 'redefine';
  5         10  
  5         437  
5              
6 5     5   29 use File::Spec();
  5         13  
  5         122  
7 5     5   119 use File::Glob 'bsd_glob';
  5         10  
  5         743  
8              
9 5     5   6490 use Storable();
  5         22533  
  5         368  
10             use overload (
11             '&{}' => sub {
12 9     9   26 my $self = shift;
13 9     9   37 return sub { $self->C(@_) }
14 9         51 },
15 5         49 'fallback' => 1
16 5     5   12052 );
  5         6137  
17              
18 5     5   389 use vars qw($VERSION);
  5         11  
  5         12878  
19             $VERSION = '1.04';
20              
21             =head1 NAME
22              
23             Config::Merge - load a configuration directory tree containing
24             YAML, JSON, XML, Perl, INI or Config::General files
25              
26             =head1 SYNOPSIS
27              
28             OO style
29             -------------------------------------------------------
30             use Config::Merge();
31              
32             my $config = Config::Merge->new('/path/to/config');
33              
34             @hosts = $config->('db.hosts.session');
35             $hosts_ref = $config->('db.hosts.session');
36             @cloned_hosts = $config->clone('db.hosts.session');
37             -------------------------------------------------------
38              
39             OR
40              
41             Functional style
42             -------------------------------------------------------
43             # On startup
44             use Config::Merge('My::Config' => '/path/to/config');
45              
46              
47             # Then, in any module where you want to use the config
48             package My::Module;
49             use My::Config;
50              
51             @hosts = C('db.hosts.sesssion');
52             $hosts_ref = C('db.hosts.sesssion');
53             @cloned_hosts = My::Config::clone('db.hosts.session');
54             $config = My::Config::object;
55             -------------------------------------------------------
56              
57             ADVANCED USAGE
58              
59             OO style
60             -------------------------------------------------------
61             my $config = Config::Merge->new(
62             path => '/path/to/config',
63             skip => sub {} | regex | {} ,
64             is_local => sub {} | regex | {} ,
65             load_as => sub {} | regex ,
66             sort => sub {} ,
67             debug => 1 | 0
68             );
69             -------------------------------------------------------
70              
71             Functional style
72             -------------------------------------------------------
73             use Config::Merge(
74             'My::Config' => '/path/to/config',
75             {
76             skip => sub {} | regex | {} ,
77             is_local => sub {} | regex | {} ,
78             load_as => sub {} | regex ,
79             sort => sub {} ,
80             debug => 1 | 0
81             }
82             );
83              
84             # Also, you can subclass these:
85              
86             package My::Config;
87             sub skip {
88             ...
89             }
90              
91             -------------------------------------------------------
92              
93             =head1 DESCRIPTION
94              
95             Config::Merge is a configuration module which has six goals:
96              
97             =over
98              
99             =item * Flexible storage
100              
101             Store all configuration in your format(s) of choice (YAML, JSON, INI, XML, Perl,
102             Config::General / Apache-style config) broken down into individual files in
103             a configuration directory tree, for easy maintenance.
104             See L
105              
106             =item * Flexible access
107              
108             Provide a simple, easy to read, concise way of accessing the configuration
109             values (similar to L