yaml_extend 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +57 -24
- data/Rakefile +4 -2
- data/lib/yaml_extend.rb +26 -1
- data/lib/yaml_extend/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e05fc2afe5d8f44419bf0c3d7a2fc801ab04e81864114b000080f6beea8337fd
|
4
|
+
data.tar.gz: 46ac756ebcb6b620930eeda313673c2a5990d6e78f8fe7bf4c609576664429a3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87f97749740b0954e62bf184418950f57d19612fdead49ae1cc7afb4ce6291f842bff5a887d3b4ba8fda1e2d512a61eb6a9eddf17737fe45136615138ddec27b
|
7
|
+
data.tar.gz: a922bc2aa0479db54e03bda900535bad1abfb23a03360f1024aa0caea3a7a0d478c6a6861a8c8af775f9e4df63dc8b88bac93f6e755cb8fd66fd90fe941e5c45
|
data/README.md
CHANGED
@@ -3,16 +3,6 @@
|
|
3
3
|
Extends YAML to support file based inheritance,
|
4
4
|
to e.g. to build a configuration hierachy.
|
5
5
|
|
6
|
-
It is possible to build inheritance trees like
|
7
|
-
```
|
8
|
-
default.yml english.yml default.yml german.yml de.yml
|
9
|
-
\ / \ / |
|
10
|
-
uk.yml de.yml at.yml
|
11
|
-
```
|
12
|
-
|
13
|
-
A file can inherit from as many as you want. Trees can be nested as deep as you want.
|
14
|
-
The child file overwrites same values if given in the parent file.
|
15
|
-
|
16
6
|
## Installation
|
17
7
|
|
18
8
|
Add this line to your application's Gemfile:
|
@@ -28,6 +18,24 @@ And then execute:
|
|
28
18
|
Or install it yourself as:
|
29
19
|
|
30
20
|
$ gem install yaml_extend
|
21
|
+
|
22
|
+
## Common information
|
23
|
+
|
24
|
+
It is possible to build inheritance trees like
|
25
|
+
```
|
26
|
+
default.yml english.yml default.yml german.yml de.yml
|
27
|
+
\ / \ / |
|
28
|
+
uk.yml de.yml at.yml
|
29
|
+
```
|
30
|
+
|
31
|
+
A file can inherit from as many as you want. Trees can be nested as deep as you want.
|
32
|
+
|
33
|
+
YAML files are deep merged, the latest specified child file overwrites the former ones.
|
34
|
+
Array values are merged as well by default. You can specifiy this with the 3rd Parameter.
|
35
|
+
|
36
|
+
The files to inherit from are specified by the key 'extends:' in the YAML file.
|
37
|
+
That key can be customized if you prefer another one.
|
38
|
+
See the examples below.
|
31
39
|
|
32
40
|
## Usage
|
33
41
|
yaml_extend adds the method YAML#ext_load_file to YAML.
|
@@ -36,7 +44,10 @@ This method works like the original YAML#load_file, by extending it with file in
|
|
36
44
|
|
37
45
|
### Examples
|
38
46
|
|
39
|
-
|
47
|
+
#### Basic Inheritance
|
48
|
+
Given the following both files are defined:
|
49
|
+
|
50
|
+
```yaml
|
40
51
|
# start.yml
|
41
52
|
extends: 'super.yml'
|
42
53
|
data:
|
@@ -46,7 +57,7 @@ data:
|
|
46
57
|
- 'Raspberrys'
|
47
58
|
```
|
48
59
|
|
49
|
-
```
|
60
|
+
```yaml
|
50
61
|
# super.yml
|
51
62
|
data:
|
52
63
|
name: 'Unknown'
|
@@ -55,14 +66,16 @@ data:
|
|
55
66
|
- 'Bananas'
|
56
67
|
- 'Apples'
|
57
68
|
```
|
58
|
-
#### Basic Inheritance
|
59
|
-
```
|
60
|
-
YAML.ext_load_file('start.yml')
|
61
|
-
```
|
62
69
|
|
63
|
-
|
70
|
+
When you then call #ext_load_file
|
64
71
|
|
72
|
+
```ruby
|
73
|
+
YAML.ext_load_file 'start.yml'
|
65
74
|
```
|
75
|
+
|
76
|
+
the returned YAML value results in
|
77
|
+
|
78
|
+
```yaml
|
66
79
|
data:
|
67
80
|
name: 'Mr. Superman'
|
68
81
|
age: 134
|
@@ -75,7 +88,10 @@ data:
|
|
75
88
|
|
76
89
|
#### Inherit from several files
|
77
90
|
|
78
|
-
|
91
|
+
If you want to inherit from several files, you can specify a list (Array) of files.
|
92
|
+
They are merged from top to bottom, so the latest file "wins" - that means it overwrites duplicate values if they exist with the values in the latest file where they occur.
|
93
|
+
|
94
|
+
```yaml
|
79
95
|
extends:
|
80
96
|
- 'super_file.yml'
|
81
97
|
- 'parent_file.yml'
|
@@ -83,19 +99,36 @@ extends:
|
|
83
99
|
```
|
84
100
|
|
85
101
|
#### Using custom extend key
|
86
|
-
|
102
|
+
|
103
|
+
If you don't want to use the default key 'extends:', you can specify your own custom key in two ways.
|
104
|
+
|
105
|
+
```yaml
|
87
106
|
#custom1.yml
|
88
107
|
inherit_from:
|
89
108
|
- 'super_file.yml'
|
90
109
|
foo: 'bar'
|
91
110
|
...
|
92
111
|
```
|
93
|
-
|
112
|
+
##### 1. Specify by parameter
|
113
|
+
You can specify the key by parameter, this is the way to go if you want to use the different key only once or you use the #ext_load_file method only once in your application.
|
114
|
+
```ruby
|
115
|
+
YAML.ext_load_file 'custom1.yml', 'inherit_from'
|
116
|
+
```
|
117
|
+
##### 2. Global configuration of the key
|
118
|
+
You can specify the key by configuration globally. So you only need to set the key once and not as parameter anymore
|
119
|
+
```ruby
|
120
|
+
YAML.ext_load_key = 'inherit_from'
|
121
|
+
YAML.ext_load_file 'custom1.yml'
|
122
|
+
YAML.ext_load_file 'custom2.yml'
|
94
123
|
```
|
95
|
-
|
124
|
+
##### Reset the global key
|
125
|
+
To reset the global inheritance key, you can either set it to nil or call the #reset_load_key method.
|
126
|
+
```ruby
|
127
|
+
YAML.reset_load_key # more readable
|
128
|
+
YAML.ext_load_key = nil # more explicit
|
96
129
|
```
|
97
130
|
#### Using custom nested extend key
|
98
|
-
```
|
131
|
+
```yaml
|
99
132
|
#custom2.yml
|
100
133
|
options:
|
101
134
|
extend_file: 'super_file.yml'
|
@@ -104,8 +137,8 @@ foo: 'bar'
|
|
104
137
|
...
|
105
138
|
```
|
106
139
|
|
107
|
-
```
|
108
|
-
YAML.ext_load_file
|
140
|
+
```ruby
|
141
|
+
YAML.ext_load_file 'custom2.yml', ['options','extend_file']
|
109
142
|
```
|
110
143
|
|
111
144
|
## Documentation
|
data/Rakefile
CHANGED
data/lib/yaml_extend.rb
CHANGED
@@ -10,6 +10,28 @@ require_relative 'custom_errors/invalid_key_type_error'
|
|
10
10
|
#
|
11
11
|
|
12
12
|
module YAML
|
13
|
+
# default path in the yaml file where the files to inherit from are defined
|
14
|
+
DEFAULT_INHERITANCE_KEY = 'extends'
|
15
|
+
@@ext_load_key = nil
|
16
|
+
#
|
17
|
+
# Set a custom inheritance key globally once.
|
18
|
+
# So you don't need to specify it on every call of ext_load_file()
|
19
|
+
#
|
20
|
+
# @param key [String|Array<String>|nil] the key in the yaml file, containing the file strings to extend from. Set nil or call #reset_load_key to reset the key.
|
21
|
+
def self.ext_load_key=(key)
|
22
|
+
if key.is_a?(String) || key.is_a?(Array) || key.nil?
|
23
|
+
@@ext_load_key = key
|
24
|
+
else
|
25
|
+
raise "Parameter 'key' must be of type String or Array<String> or nil"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# Reset the ext_load_key and use the default settings
|
31
|
+
#
|
32
|
+
def self.reset_load_key()
|
33
|
+
@@ext_load_key = nil
|
34
|
+
end
|
13
35
|
#
|
14
36
|
# Extended variant of the #load_file method by providing the
|
15
37
|
# ability to inherit from other YAML file(s)
|
@@ -21,7 +43,10 @@ module YAML
|
|
21
43
|
#
|
22
44
|
# @return [Hash] the resulting yaml config
|
23
45
|
#
|
24
|
-
def self.ext_load_file(yaml_path, inheritance_key=
|
46
|
+
def self.ext_load_file(yaml_path, inheritance_key=nil, extend_existing_arrays=true, config = {})
|
47
|
+
if inheritance_key.nil?
|
48
|
+
inheritance_key = @@ext_load_key || DEFAULT_INHERITANCE_KEY
|
49
|
+
end
|
25
50
|
total_config ||= {}
|
26
51
|
yaml_path = YAML.make_absolute_path yaml_path
|
27
52
|
super_config = YAML.load_file(File.open(yaml_path))
|
data/lib/yaml_extend/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaml_extend
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthäus Beyrle
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-03-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: deep_merge
|