yaml_extend 0.0.12 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 232d8e4032b96d3acbb88086dce380d23ebf2dca
4
- data.tar.gz: 7d5749a37cf8eec0f56f82a40ec44ee178c8906d
2
+ SHA256:
3
+ metadata.gz: 04f4c2478bcf2e8aba3680677eceab0842a7d9fc2e7365aa2f28d0d6dd63a117
4
+ data.tar.gz: 43e083063da5ef8ed5908e0f9468424b92ed3da4dd3c263a8771f264a4e5d81d
5
5
  SHA512:
6
- metadata.gz: b8078643bc9c5625f7e1c7666f69d14629eb6a11eaa7bac40f00df3ec878704a6ce019a648e01eb6ce1b39404285748739e2b7d234d54ce51421924872339300
7
- data.tar.gz: abbeaa2005e79a0d3487102c6f9a65914e593e1045fd4bc51c0ee0dfc4b6a81d6311e12e792271c7e94b768b3dd526f391e20b3e43cb4ae06e3016dcbe3eb8a1
6
+ metadata.gz: d34ec7a111411afa7422674d3de2a5b5703016ffae3e5ad20c98844dc1fcd9a80c18465e10cbb4421d2eae0a76f861cc21762ad063c556e22b048a096a8bb546
7
+ data.tar.gz: 2a5a773487b707570e3a615278594998003fbab324c86b486c3cef0f5bcd8748b62926271b121be8a3389ffdc1a4b830e5f5fbe53467de1d8f49b2f23668dfd0
data/.gitignore CHANGED
@@ -8,6 +8,7 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  /.vscode/
11
+ /.idea/
11
12
  *.gem
12
13
 
13
14
  # rspec failure tracking
data/README.md CHANGED
@@ -82,11 +82,37 @@ extends:
82
82
  ...
83
83
  ```
84
84
 
85
+ #### Using custom extend key
86
+ ```
87
+ #custom1.yml
88
+ inherit_from:
89
+ - 'super_file.yml'
90
+ foo: 'bar'
91
+ ...
92
+ ```
93
+
94
+ ```
95
+ YAML.ext_load_file('custom1.yml','inherit_from')
96
+ ```
97
+ #### Using custom nested extend key
98
+ ```
99
+ #custom2.yml
100
+ options:
101
+ extend_file: 'super_file.yml'
102
+ database: false
103
+ foo: 'bar'
104
+ ...
105
+ ```
106
+
107
+ ```
108
+ YAML.ext_load_file('custom2.yml',['options','extend_file'])
109
+ ```
110
+
85
111
  ## Documentation
86
112
  YAML#ext_load_file(yaml_path, inheritance_key='extends', extend_existing_arrays=true, config = {})
87
113
 
88
114
  - *yaml_path* relative or absolute path to yaml file to inherit from
89
- - *inheritance_key* you can overwrite the default key, if you use it already as part of your configuration. The inheritance_key is NOT included in the final merged file. Default: 'extends'
115
+ - *inheritance_key* you can overwrite the default key, if you use the default 'extends' already as part of your configuration. The inheritance_key is NOT included, that means it will be deleted, in the final merged file. Default: 'extends'
90
116
  - *extend_existing_arrays* Extends existing arrays in yaml structure instead of replacing them. Default: true
91
117
  - *config* only intended to be used by the method itself due recursive algorithm
92
118
 
@@ -0,0 +1,2 @@
1
+ class InvalidKeyTypeError < StandardError
2
+ end
@@ -1,3 +1,3 @@
1
1
  module YamlExtend
2
- VERSION = '0.0.12'.freeze
2
+ VERSION = '0.1.0'.freeze
3
3
  end
data/lib/yaml_extend.rb CHANGED
@@ -1,8 +1,10 @@
1
- require "yaml_extend/version"
1
+ require 'yaml_extend/version'
2
2
 
3
3
  require 'yaml'
4
4
  require 'deep_merge/rails_compat'
5
5
 
6
+ require_relative 'custom_errors/invalid_key_type_error'
7
+
6
8
  #
7
9
  # Extending the YAML library to allow to inherit from another YAML file(s)
8
10
  #
@@ -13,7 +15,9 @@ module YAML
13
15
  # ability to inherit from other YAML file(s)
14
16
  #
15
17
  # @param yaml_path [String] the path to the yaml file to be loaded
16
- # @param inheritance_key [String] the key used in the yaml file to extend from another YAML file
18
+ # @param inheritance_key [String|Array]
19
+ # The key used in the yaml file to extend from another YAML file.
20
+ # Use an Array if you want to use a tree structure key like "options.extends" => ['options','extends']
17
21
  # @param extend_existing_arrays [Boolean] extend existing arrays instead of replacing them
18
22
  # @param config [Hash] a hash to be merged into the result, usually only recursivly called by the method itself
19
23
  #
@@ -23,8 +27,8 @@ module YAML
23
27
  total_config ||= {}
24
28
  yaml_path = YAML.make_absolute_path yaml_path
25
29
  super_config = YAML.load_file(File.open(yaml_path))
26
- super_inheritance_files = super_config[inheritance_key]
27
- super_config.delete inheritance_key # we don't merge the super inheritance keys into the base yaml
30
+ super_inheritance_files = yaml_value_by_key inheritance_key, super_config
31
+ delete_yaml_key inheritance_key, super_config # we don't merge the super inheritance keys into the base yaml
28
32
  merged_config = config.clone.deeper_merge(super_config, extend_existing_arrays: extend_existing_arrays)
29
33
  if super_inheritance_files && super_inheritance_files != ''
30
34
  super_inheritance_files = [super_inheritance_files] unless super_inheritance_files.is_a? Array # we support strings as well as arrays of type string to extend from
@@ -34,7 +38,7 @@ module YAML
34
38
  end
35
39
  total_config
36
40
  else
37
- merged_config.delete(inheritance_key)
41
+ delete_yaml_key inheritance_key, merged_config
38
42
  merged_config
39
43
  end
40
44
  end
@@ -62,4 +66,40 @@ module YAML
62
66
  path.start_with?('/') || # unix like
63
67
  (path.length >= 3 && path[1] == ':') # ms windows
64
68
  end
69
+
70
+ # Return the value of the corresponding key
71
+ # @param key [String|Array]
72
+ def self.yaml_value_by_key(key, config)
73
+ return config[key] if key.is_a? String
74
+ if valid_key_type? key
75
+ cfg_copy = config.clone
76
+ key.each do |key|
77
+ if cfg_copy.nil?
78
+ return
79
+ elsif valid_key_type? key
80
+ cfg_copy = cfg_copy[key]
81
+ end
82
+ end
83
+ cfg_copy
84
+ end
85
+ end
86
+
87
+ def self.valid_key_type?(key)
88
+ key.is_a?(Array) || key.is_a?(String) ||
89
+ raise(InvalidKeyTypeError,"Invalid key of type '#{key.class.name}'. Valid types are String and Array.")
90
+ end
91
+
92
+ def self.delete_yaml_key(key, config)
93
+ return config.delete(key) if key.is_a? String
94
+ cfg_ref = config
95
+ last_ref = nil
96
+ key.each do |key|
97
+ if valid_key_type?(key) && !cfg_ref[key].nil?
98
+ last_ref = cfg_ref
99
+ cfg_ref = cfg_ref[key] unless cfg_ref.nil?
100
+ end
101
+ end
102
+ last_ref.delete key.last unless last_ref.nil?
103
+ end
104
+
65
105
  end
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.0.12
4
+ version: 0.1.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: 2017-09-14 00:00:00.000000000 Z
11
+ date: 2018-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: deep_merge
@@ -83,6 +83,7 @@ files:
83
83
  - Rakefile
84
84
  - bin/console
85
85
  - bin/setup
86
+ - lib/custom_errors/invalid_key_type_error.rb
86
87
  - lib/yaml_extend.rb
87
88
  - lib/yaml_extend/version.rb
88
89
  - yaml_extend.gemspec
@@ -107,7 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
108
  version: '0'
108
109
  requirements: []
109
110
  rubyforge_project:
110
- rubygems_version: 2.5.2
111
+ rubygems_version: 2.7.3
111
112
  signing_key:
112
113
  specification_version: 4
113
114
  summary: Extends YAML to support file based inheritance