frise 0.4.0 → 0.4.1
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/.travis.yml +1 -0
- data/CHANGELOG.md +6 -0
- data/lib/frise/defaults_loader.rb +5 -1
- data/lib/frise/loader.rb +31 -16
- data/lib/frise/validator.rb +3 -3
- data/lib/frise/version.rb +1 -1
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86558df34daa0ba92e7e7a1863ceb5124ea52c39dc82a85924c4db1bd89cf127
|
4
|
+
data.tar.gz: fd286367be54e292a6df52daa6f5255810d6e3980bce538d0c2391d5fdab9ca9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c48f86d8190c30bf650055dfa7749ecdf9d2545f4a6c34593c29e402c0da06dd5420eb8244c3f112f8501564a5bf26798acae2fbeb006c10bb1c4eb5dc4e7c1a
|
7
|
+
data.tar.gz: 679a4edb6364662160f4e1d6872c8949e3fd6338433da50de5a109addec0a31dec69b3013ca4038fbb40283383b15f160ecf4723c546dea53ab6a8d75db6f77c
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
### 0.4.1 (July 7, 2020)
|
2
|
+
|
3
|
+
- New features
|
4
|
+
- `$delete` directive is now available in config files, allowing users to delete parts of the
|
5
|
+
config sub-tree ([#20](https://github.com/velocidi/frise/pull/20)).
|
6
|
+
|
1
7
|
### 0.4.0 (November 29, 2019)
|
2
8
|
|
3
9
|
- Breaking changes
|
@@ -10,10 +10,11 @@ module Frise
|
|
10
10
|
class DefaultsLoader
|
11
11
|
SYMBOLS = %w[$all $optional].freeze
|
12
12
|
|
13
|
-
def initialize(include_sym: '$include', content_include_sym: '$content_include', schema_sym: '$schema')
|
13
|
+
def initialize(include_sym: '$include', content_include_sym: '$content_include', schema_sym: '$schema', delete_sym: '$delete')
|
14
14
|
@include_sym = include_sym
|
15
15
|
@content_include_sym = content_include_sym
|
16
16
|
@schema_sym = schema_sym
|
17
|
+
@delete_sym = delete_sym
|
17
18
|
end
|
18
19
|
|
19
20
|
def widened_class(obj)
|
@@ -37,6 +38,9 @@ module Frise
|
|
37
38
|
else merge_defaults_obj({}, defaults)
|
38
39
|
end
|
39
40
|
|
41
|
+
elsif config == @delete_sym
|
42
|
+
config
|
43
|
+
|
40
44
|
elsif defaults_class == 'Array' && config_class == 'Array'
|
41
45
|
defaults + config
|
42
46
|
|
data/lib/frise/loader.rb
CHANGED
@@ -13,6 +13,7 @@ module Frise
|
|
13
13
|
def initialize(include_sym: '$include',
|
14
14
|
content_include_sym: '$content_include',
|
15
15
|
schema_sym: '$schema',
|
16
|
+
delete_sym: '$delete',
|
16
17
|
pre_loaders: [],
|
17
18
|
validators: nil,
|
18
19
|
exit_on_fail: true)
|
@@ -20,6 +21,7 @@ module Frise
|
|
20
21
|
@include_sym = include_sym
|
21
22
|
@content_include_sym = content_include_sym
|
22
23
|
@schema_sym = schema_sym
|
24
|
+
@delete_sym = delete_sym
|
23
25
|
@pre_loaders = pre_loaders
|
24
26
|
@validators = validators
|
25
27
|
@exit_on_fail = exit_on_fail
|
@@ -27,7 +29,8 @@ module Frise
|
|
27
29
|
@defaults_loader = DefaultsLoader.new(
|
28
30
|
include_sym: include_sym,
|
29
31
|
content_include_sym: content_include_sym,
|
30
|
-
schema_sym: schema_sym
|
32
|
+
schema_sym: schema_sym,
|
33
|
+
delete_sym: delete_sym
|
31
34
|
)
|
32
35
|
end
|
33
36
|
|
@@ -39,8 +42,8 @@ module Frise
|
|
39
42
|
config = pre_loader.call(config)
|
40
43
|
end
|
41
44
|
|
42
|
-
config = process_includes(config, [], config, global_vars)
|
43
|
-
config = process_schemas(config, [], global_vars)
|
45
|
+
config = process_includes(config, [], config, global_vars) unless @include_sym.nil?
|
46
|
+
config = process_schemas(config, [], global_vars) unless @schema_sym.nil?
|
44
47
|
config
|
45
48
|
end
|
46
49
|
|
@@ -65,18 +68,19 @@ module Frise
|
|
65
68
|
# process $include directives
|
66
69
|
config, next_include_confs = extract_include(config, at_path)
|
67
70
|
include_confs = next_include_confs + include_confs_stack
|
68
|
-
if include_confs.empty?
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
71
|
+
res = if include_confs.empty?
|
72
|
+
config.map { |k, v| [k, process_includes(v, at_path + [k], root_config, global_vars)] }.to_h
|
73
|
+
else
|
74
|
+
Lazy.new do
|
75
|
+
include_conf = include_confs.first
|
76
|
+
rest_include_confs = include_confs[1..-1]
|
77
|
+
symbol_table = build_symbol_table(root_config, at_path, config, global_vars, include_conf)
|
78
|
+
included_config = Parser.parse(include_conf['file'], symbol_table)
|
79
|
+
config = @defaults_loader.merge_defaults_obj(config, included_config)
|
80
|
+
process_includes(config, at_path, merge_at(root_config, at_path, config), global_vars, rest_include_confs)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
@delete_sym.nil? ? res : omit_deleted(res)
|
80
84
|
end
|
81
85
|
|
82
86
|
def process_schema_includes(schema, at_path, global_vars)
|
@@ -160,6 +164,17 @@ module Frise
|
|
160
164
|
config.merge(head => merge_at(config[head], tail, to_merge))
|
161
165
|
end
|
162
166
|
|
167
|
+
# returns the config without the keys whose values are @delete_sym
|
168
|
+
def omit_deleted(config)
|
169
|
+
config.each_with_object({}) do |(k, v), new_hash|
|
170
|
+
if v.is_a?(Hash)
|
171
|
+
new_hash[k] = omit_deleted(v)
|
172
|
+
else
|
173
|
+
new_hash[k] = v unless v == @delete_sym
|
174
|
+
end
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
163
178
|
# builds the symbol table for the Liquid renderization of a file, based on:
|
164
179
|
# - `root_config`: the root of the whole config
|
165
180
|
# - `at_path`: the current path
|
@@ -170,7 +185,7 @@ module Frise
|
|
170
185
|
extra_vars = (include_conf['vars'] || {}).map { |k, v| [k, root_config.dig(*v.split('.'))] }.to_h
|
171
186
|
extra_consts = include_conf['constants'] || {}
|
172
187
|
|
173
|
-
(config ? merge_at(root_config, at_path, config) : root_config)
|
188
|
+
omit_deleted(config ? merge_at(root_config, at_path, config) : root_config)
|
174
189
|
.merge(global_vars)
|
175
190
|
.merge(extra_vars)
|
176
191
|
.merge(extra_consts)
|
data/lib/frise/validator.rb
CHANGED
@@ -163,7 +163,7 @@ module Frise
|
|
163
163
|
end
|
164
164
|
|
165
165
|
def self.validate_obj(config, schema, options = {})
|
166
|
-
validate_obj_at(config, [], schema, options)
|
166
|
+
validate_obj_at(config, [], schema, **options)
|
167
167
|
end
|
168
168
|
|
169
169
|
def self.validate_obj_at(config, at_path, schema, path_prefix: nil, validators: nil, print: nil, fatal: nil, raise_error: nil)
|
@@ -188,11 +188,11 @@ module Frise
|
|
188
188
|
end
|
189
189
|
|
190
190
|
def self.validate(config, schema_file, options = {})
|
191
|
-
validate_obj_at(config, [], Parser.parse(schema_file) || { allow_unknown_keys: true }, options)
|
191
|
+
validate_obj_at(config, [], Parser.parse(schema_file) || { allow_unknown_keys: true }, **options)
|
192
192
|
end
|
193
193
|
|
194
194
|
def self.validate_at(config, at_path, schema_file, options = {})
|
195
|
-
validate_obj_at(config, at_path, Parser.parse(schema_file) || { allow_unknown_keys: true }, options)
|
195
|
+
validate_obj_at(config, at_path, Parser.parse(schema_file) || { allow_unknown_keys: true }, **options)
|
196
196
|
end
|
197
197
|
end
|
198
198
|
|
data/lib/frise/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: frise
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Velocidi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: liquid
|
@@ -151,8 +151,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
requirements: []
|
154
|
-
|
155
|
-
rubygems_version: 2.7.3
|
154
|
+
rubygems_version: 3.0.6
|
156
155
|
signing_key:
|
157
156
|
specification_version: 4
|
158
157
|
summary: Ruby config library with schema validation, default values and templating
|