ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/MP/Config.pm
Revision: 1.2
Committed: Mon Aug 10 19:19:30 2009 UTC (14 years, 9 months ago) by root
Branch: MAIN
CVS Tags: rel-0_6
Changes since 1.1: +5 -1 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 node_config {
62 \%CFG
63 }
64
65 load;
66 END { save }
67
68 =head1 SEE ALSO
69
70 L<AnyEvent::MP>.
71
72 =head1 AUTHOR
73
74 Marc Lehmann <schmorp@schmorp.de>
75 http://home.schmorp.de/
76
77 =cut
78
79 1
80