ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP/Config.pm
Revision: 1.4
Committed: Sun Aug 30 18:51:49 2009 UTC (14 years, 9 months ago) by root
Branch: MAIN
CVS Tags: rel-0_95
Changes since 1.3: +16 -3 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 =head1 NAME
2
3 AnyEvent::MP::Config - configuration handling
4
5 =head1 SYNOPSIS
6
7 # see the "aemp" command line utility
8
9 =head1 DESCRIPTION
10
11 Move along please, nothing to see here at the moment.
12
13 =cut
14
15 package AnyEvent::MP::Config;
16
17 use common::sense;
18
19 use Carp ();
20 use AnyEvent ();
21 use JSON::XS ();
22
23 our $CONFIG_FILE = $ENV{HOME} ? "$ENV{HOME}/.perl-anyevent-mp"
24 : "$ENV{APPDATA}/perl-anyevent-mp";
25
26 our %CFG;
27
28 sub load {
29 if (open my $fh, "<:raw", $CONFIG_FILE) {
30 return if eval {
31 local $/;
32 %CFG = %{ JSON::XS->new->utf8->relaxed->decode (scalar <$fh>) };
33 1
34 };
35 }
36
37 %CFG = (
38 version => 1,
39 dirty => 1,
40 );
41 }
42
43 sub save {
44 return unless delete $CFG{dirty};
45
46 open my $fh, ">:raw", "$CONFIG_FILE~new~"
47 or Carp::croak "$CONFIG_FILE~new~: $!";
48
49 syswrite $fh, JSON::XS->new->pretty->utf8->encode (\%CFG) . "\n"
50 or Carp::croak "$CONFIG_FILE~new~: $!";
51
52 close $fh
53 or Carp::croak "$CONFIG_FILE~new~: $!";
54
55 unlink "$CONFIG_FILE~";
56 link $CONFIG_FILE, "$CONFIG_FILE~";
57 rename "$CONFIG_FILE~new~", $CONFIG_FILE
58 or Carp::croak "$CONFIG_FILE: $!";
59 }
60
61 sub config {
62 \%CFG
63 }
64
65 sub _find_profile($) {
66 my ($name) = @_;
67
68 if (defined $name) {
69 my $profile = $CFG{profile}{$name};
70 return _find_profile ($profile->{parent}), %$profile;
71 } else {
72 return %CFG;
73 }
74 }
75
76 sub find_profile($;%) {
77 my ($name, %kv) = @_;
78
79 +{
80 %kv,
81 _find_profile $name,
82 }
83 }
84
85 load;
86 END { save }
87
88 =head1 SEE ALSO
89
90 L<AnyEvent::MP>.
91
92 =head1 AUTHOR
93
94 Marc Lehmann <schmorp@schmorp.de>
95 http://home.schmorp.de/
96
97 =cut
98
99 1
100