Skip to content

Commit e5ce42d

Browse files
committed
Added tests for relative variable names
Also added description and examples for relative variables names.
1 parent a37ed0e commit e5ce42d

File tree

7 files changed

+84
-35
lines changed

7 files changed

+84
-35
lines changed

examples/etc/db.json

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,33 @@
77
],
88

99
"stat_master": {
10-
"underlay": { "var": "myapp.db.connectors.default" },
10+
"underlay": { "var": ".default" },
11+
"dsn": "dbi:Pg:dbname=${.dbname};host=${.host};port=${.port}",
1112
"host": "stat-master.mydb.com",
1213
"username": "stat_writer",
1314
"password": "stat_writer_pass"
1415
},
1516

1617
"stat_slave": {
17-
"underlay": { "var": "myapp.db.connectors.default" },
18+
"underlay": { "var": ".default" },
19+
"dsn": "dbi:Pg:dbname=${.dbname};host=${.host};port=${.port}",
1820
"host": "stat-slave.mydb.com",
1921
"username": "stat_reader",
2022
"password": "stat_reader_pass"
2123
},
2224

2325
"test": {
24-
"underlay": { "var": "myapp.db.connectors.default_test" },
26+
"underlay": { "var": ".default_test" },
27+
"dsn": "dbi:Pg:dbname=${.dbname};host=${.host};port=${.port}",
2528
"username": "test",
2629
"password": "test_pass"
2730
}
31+
},
32+
33+
"default_options": {
34+
"PrintWarn": "0",
35+
"PrintError": "0",
36+
"RaiseError": "1"
2837
}
2938
}
3039
}
Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
default:
2-
port: "1234"
3-
dbname: 'stat'
4-
options:
5-
PrintWarn: 0
6-
PrintError: 0
7-
RaiseError: 1
2+
dsn: 'dbi:Pg:dbname=${.dbname};host=${.host};port=${.port}'
3+
host: 'localhost'
4+
port: '1234'
5+
dbname: 'stat'
6+
options: { var: ...default_options }
87

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
default_test:
2-
underlay: { var: myapp.db.connectors.default }
3-
host: 'stat-test.mydb.com'
2+
underlay: { var: .default }
3+
dsn: 'dbi:Pg:dbname=${.dbname};host=${.host};port=${.port}'
4+
host: 'stat-test.mydb.com'
45

examples/etc/dirs.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ myapp:
44
dirs:
55
root_dir: "/myapp"
66
home_dir: "${ENV.HOME}"
7-
templates_dir: "${myapp.dirs.root_dir}/templates"
8-
sessions_dir: "${myapp.dirs.root_dir}/sessions"
7+
templates_dir: "${.root_dir}/templates"
8+
sessions_dir: "${.root_dir}/sessions"
99
media_dirs:
10-
- "${myapp.dirs.root_dir}/medis/${myapp.media_formats.0}"
11-
- "${myapp.dirs.root_dir}/media/${myapp.media_formats.1}"
12-
- "${myapp.dirs.root_dir}/media/${myapp.media_formats.2}"
10+
- "${..root_dir}/media/${myapp.media_formats.0}"
11+
- "${..root_dir}/media/${myapp.media_formats.1}"
12+
- "${..root_dir}/media/${myapp.media_formats.2}"
1313

lib/Config/Processor.pm

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -554,20 +554,22 @@ After merging of two files we will get:
554554
=head1 INTERPOLATION
555555
556556
Config::Processor can interpolate variables in string values (if you need alias
557-
for complex structures see C<var> directive). For example, we have
558-
F<myapp.yml> file:
557+
for complex structures see C<var> directive). Variable names can be absolute or
558+
relative. Relative variable names begins with dot "." The number of dots
559+
depends on the nesting level of the current configuration parameter relative to
560+
referenced configuration parameter.
559561
560562
myapp:
561563
media_formats: [ "images", "audio", "video" ]
562564
563565
dirs:
564566
root_dir: "/myapp"
565-
templates_dir: "${myapp.dirs.root_dir}/templates"
566-
sessions_dir: "${myapp.dirs.root_dir}/sessions"
567+
templates_dir: "${.root_dir}/templates"
568+
sessions_dir: "${.root_dir}/sessions"
567569
media_dirs:
568-
- "${myapp.dirs.root_dir}/media/${myapp.media_formats.0}"
569-
- "${myapp.dirs.root_dir}/media/${myapp.media_formats.1}"
570-
- "${myapp.dirs.root_dir}/media/${myapp.media_formats.2}"
570+
- "${..root_dir}/media/${myapp.media_formats.0}"
571+
- "${..root_dir}/media/${myapp.media_formats.1}"
572+
- "${..root_dir}/media/${myapp.media_formats.2}"
571573
572574
After processing of the file we will get:
573575
@@ -601,10 +603,14 @@ After processing we will get:
601603
=item var: varname
602604
603605
Assigns configuration parameter value to another configuration parameter.
606+
Variable names in the directive can be absolute or relative. Relative variable
607+
names begins with dot ".". The number of dots depends on the nesting level of
608+
the current configuration parameter relative to referenced configuration
609+
parameter.
604610
605611
myapp:
606612
db:
607-
generic_options:
613+
default_options:
608614
PrintWarn: 0
609615
PrintError: 0
610616
RaiseError: 1
@@ -616,15 +622,15 @@ Assigns configuration parameter value to another configuration parameter.
616622
dbname: "stat"
617623
username: "stat_writer"
618624
password: "stat_writer_pass"
619-
options: { var: myapp.db.generic_options }
625+
options: { var: myapp.db.default_options }
620626
621627
stat_slave:
622628
host: "stat-slave.mydb.com"
623629
port: "1234"
624630
dbname: "stat"
625631
username: "stat_reader"
626632
password: "stat_reader_pass"
627-
options: { var: myapp.db.generic_options }
633+
options: { var: ...default_options }
628634
629635
=item include: filename
630636
@@ -665,13 +671,13 @@ For example, you can use this directive to set default values of parameters.
665671
RaiseError: 1
666672
667673
stat_master:
668-
underlay: { var: myapp.db.connectors.default }
674+
underlay: { var: .default }
669675
host: "stat-master.mydb.com"
670676
username: "stat_writer"
671677
password: "stat_writer_pass"
672678
673679
stat_slave:
674-
underlay: { var: myapp.db.connectors.default }
680+
underlay: { var: .default }
675681
host: "stat-slave.mydb.com"
676682
username: "stat_reader"
677683
password: "stat_reader_pass"
@@ -686,19 +692,19 @@ You can move default parameters in separate files.
686692
- { include: db_connectors/default_test.yml }
687693
688694
stat_master:
689-
underlay: { var: myapp.db.connectors.default }
695+
underlay: { var: .default }
690696
host: "stat-master.mydb.com"
691697
username: "stat_writer"
692698
password: "stat_writer_pass"
693699
694700
stat_slave:
695-
underlay: { var: myapp.db.connectors.default }
701+
underlay: { var: .default }
696702
host: "stat-slave.mydb.com"
697703
username: "stat_reader"
698704
password: "stat_reader_pass"
699705
700706
test:
701-
underlay: { var: myapp.db.connectors.default_test }
707+
underlay: { var: .default_test }
702708
username: "test"
703709
password: "test_pass"
704710
@@ -728,18 +734,18 @@ configuration parameters.
728734
port: "4321"
729735
730736
stat_master:
731-
underlay: { var: myapp.db.connectors.default }
737+
underlay: { var: .default }
732738
host: "stat-master.mydb.com"
733739
username: "stat_writer"
734740
password: "stat_writer_pass"
735-
overlay: { var: myapp.db.connectors.test }
741+
overlay: { var: .test }
736742
737743
stat_slave:
738-
underlay: { var: myapp.db.connectors.default }
744+
underlay: { var: .default }
739745
host: "stat-slave.mydb.com"
740746
username: "stat_reader"
741747
password: "stat_reader_pass"
742-
overlay: { var: myapp.db.connectors.test }
748+
overlay: { var: .test }
743749
744750
To disable overriding just assign to C<test> connector empty hash.
745751

t/02-processing.t

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,15 @@ sub t_variable_interpolation_on {
348348
param6_7 => 'jar:',
349349
param6_8 => 'jar:',
350350
},
351+
352+
param7 => {
353+
param7_1 => 'jar:val7_1',
354+
param7_2 => 'jar:val7_2',
355+
param7_3 => 'jar:jar:val7_1; jar:jar:val7_2',
356+
param7_4 => 'jar:jar:jar:val7_1; jar:jar:val7_2',
357+
param7_5 => 'jar:jar:zoo:val3_1; jar:bar_B:val3_3'
358+
. ' jar:jar:bar_B:val4_2; jar:foo_B:val4_1',
359+
},
351360
},
352361
};
353362

@@ -484,6 +493,14 @@ sub t_variable_interpolation_off {
484493
param6_6 => 'jar:${foo.param3X.param3_1}',
485494
param6_7 => 'jar:${foo.param3.param3X}',
486495
param6_8 => 'jar:${jar.param5.3}',
496+
},
497+
498+
param7 => {
499+
param7_1 => 'jar:val7_1',
500+
param7_2 => 'jar:val7_2',
501+
param7_3 => 'jar:${.param7_1}; jar:${.param7_2}',
502+
param7_4 => 'jar:${.param7_3}',
503+
param7_5 => 'jar:${..param3.param3_1} jar:${..param4.1}',
487504
}
488505
}
489506
};
@@ -1120,6 +1137,15 @@ sub t_complete_processing {
11201137
param6_7 => 'jar:',
11211138
param6_8 => 'jar:',
11221139
},
1140+
1141+
param7 => {
1142+
param7_1 => 'jar:val7_1',
1143+
param7_2 => 'jar:val7_2',
1144+
param7_3 => 'jar:jar:val7_1; jar:jar:val7_2',
1145+
param7_4 => 'jar:jar:jar:val7_1; jar:jar:val7_2',
1146+
param7_5 => 'jar:jar:zoo:val3_1; jar:bar_B:val3_3'
1147+
. ' jar:jar:bar_B:val4_2; jar:foo_B:val4_1',
1148+
},
11231149
},
11241150

11251151
moo => {

t/etc/jar.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,14 @@
3737
"param6_6": "jar:${foo.param3X.param3_1}",
3838
"param6_7": "jar:${foo.param3.param3X}",
3939
"param6_8": "jar:${jar.param5.3}"
40+
},
41+
42+
"param7": {
43+
"param7_1": "jar:val7_1",
44+
"param7_2": "jar:val7_2",
45+
"param7_3": "jar:${.param7_1}; jar:${.param7_2}",
46+
"param7_4": "jar:${.param7_3}",
47+
"param7_5": "jar:${..param3.param3_1} jar:${..param4.1}"
4048
}
4149
}
4250
}

0 commit comments

Comments
 (0)