import Config-Properties 0.57 from CPAN
git-cpan-module: Config-Properties
git-cpan-version: 0.57
git-cpan-authorid: SALVA
git-cpan-file: authors/id/S/SA/SALVA/Config-Properties-0.57.tar.gz
Salvador Fandino Garcia authored 19 years ago
Michael G. Schwern committed 14 years ago
0 | 0 | Revision history for Perl extension Config::Properties. |
1 | ||
2 | 0.57 May 07 2004 | |
3 | - retain properties read/construction order when saving | |
1 | 4 | |
2 | 5 | 0.56 Oct 20 2003 |
3 | 6 | - corrected \uXXXX unescaping (Guntis) |
7 | 7 | t/3_valid.t |
8 | 8 | t/4_invalid.t |
9 | 9 | t/5_save.t |
10 | t/6_sorted.t | |
10 | 11 | META.yml Module meta-data (added by MakeMaker) |
0 | 0 | # http://module-build.sourceforge.net/META-spec.html |
1 | 1 | #XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# |
2 | 2 | name: Config-Properties |
3 | version: 0.56 | |
3 | version: 0.57 | |
4 | 4 | version_from: Properties.pm |
5 | 5 | installdirs: site |
6 | 6 | requires: |
2 | 2 | use strict; |
3 | 3 | use warnings; |
4 | 4 | |
5 | our $VERSION = '0.56'; | |
5 | our $VERSION = '0.57'; | |
6 | 6 | |
7 | 7 | use IO::Handle; |
8 | 8 | use Carp; |
57 | 57 | and carp "creating new Config::Properties objects from prototypes is deprecated"; |
58 | 58 | |
59 | 59 | my $class = ref($proto) || $proto; |
60 | my $self = { 'PERL_MODE' => $perlMode ? 1 : 0, | |
61 | 'defaults' => $defaultProperties, | |
62 | 'format' => '%s=%s', | |
63 | 'properties' => {} }; | |
60 | my $self = { PERL_MODE => $perlMode ? 1 : 0, | |
61 | defaults => $defaultProperties, | |
62 | format => '%s=%s', | |
63 | properties => {}, | |
64 | sorter => 1, | |
65 | sorted_keys => {} }; | |
64 | 66 | bless $self, $class; |
65 | 67 | |
66 | 68 | return $self; |
84 | 86 | my ($self, $key, $recurse) = @_; |
85 | 87 | _t_key $key; |
86 | 88 | |
87 | delete $self->{properties}{$key} | |
88 | if exists $self->{properties}{$key}; | |
89 | if (exists $self->{properties}{$key}) { | |
90 | delete $self->{properties}{$key}; | |
91 | delete $self->{sorted_keys}{$key}; | |
92 | } | |
89 | 93 | |
90 | 94 | $self->{defaults}->deleteProperty($key, 1) |
91 | 95 | if ($recurse and $self->{defaults}); |
100 | 104 | defined(wantarray) and |
101 | 105 | carp "warning: setProperty doesn't return the old value anymore"; |
102 | 106 | |
107 | $self->{sorted_keys}{$key} ||= $self->{sorter}++; | |
103 | 108 | $self->{properties}{$key} = $value; |
104 | 109 | } |
105 | 110 | |
238 | 243 | |
239 | 244 | unescape $key; |
240 | 245 | unescape $value; |
246 | $self->{sorted_keys}{$key} = $self->{sorter}++; | |
241 | 247 | $self->{properties}{$key} = |
242 | 248 | $self->validate($key, $value); |
243 | 249 | |
286 | 292 | local($Text::Wrap::huge)='overflow'; |
287 | 293 | local($Text::Wrap::break)=qr/(?<!\\) (?! )/; |
288 | 294 | |
289 | foreach (sort keys %{$self->{properties}}) { | |
295 | my $sk=$self->{sorted_keys}; | |
296 | foreach (sort { $sk->{$a} <=> $sk->{$b} } keys %{$self->{properties}}) { | |
290 | 297 | my $key=$_; |
291 | 298 | my $value=$self->{properties}{$key}; |
292 | 299 | escape_key $key; |
0 | use Test::More tests => 1; | |
1 | ||
2 | use Config::Properties; | |
3 | use File::Temp qw(tempfile); | |
4 | ||
5 | my $cfg=Config::Properties->new(); | |
6 | $cfg->load(\*DATA); | |
7 | ||
8 | my ($fh, $fn)=tempfile() | |
9 | or die "unable to create temporal file to save properties"; | |
10 | ||
11 | $cfg->deleteProperty('dos'); | |
12 | $cfg->setProperty('cinco', '5'); | |
13 | $cfg->setProperty('tres', '6!'); | |
14 | ||
15 | $cfg->store($fh, "test header"); | |
16 | close $fh; | |
17 | open CFG, '<', $fn | |
18 | or die "unable to open tempory file $fn"; | |
19 | ||
20 | undef $/; | |
21 | $contents=<CFG>; | |
22 | ||
23 | # print STDERR "$fn\n$contents\n"; | |
24 | ||
25 | ok($contents=~/uno.*tres.*cuatro.*cinco/s, | |
26 | "order preserved") | |
27 | ||
28 | __DATA__ | |
29 | ||
30 | uno = 1u | |
31 | dos = 2u | |
32 | tres = 3u | |
33 | cuatro = 4u | |
34 |