frise 0.3.0 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5923c848338d6a2f7dfc35211200ab51a789ad9e9967742e4eb57430346785e9
4
- data.tar.gz: e08f1fdf3a14fe288ad67a0baa6a9e557294de9ac5ea814426e9b92792b1be95
3
+ metadata.gz: 68f89536d127f91e812a1c23258ad32ca3d4331970c9af0632cb3f95fce06e52
4
+ data.tar.gz: 129230d3c50d29a25f4e060bfdf4e839d19aa579607c6bead51acf6237ac9c20
5
5
  SHA512:
6
- metadata.gz: a578f2042b86832986bed1cecbe435330e509e2f6f166ff7302c3eeca37e445bc7acbbcbd4fe16d3cf9c23be68603cd9d4e13f17c508edaeff5e96169b41eaa9
7
- data.tar.gz: 1c4378dcec5e8738f25248d6a45fcc96b4392f7144995e08d57407abd3bf1ad5bfe506fe6e1117aa4caef7900dcedfba9dc8b4267b1c4cd6d273c5395313cd2f
6
+ metadata.gz: 61f5a83ff2ba3e17ae022dbac6639fa3a316c4739685ed3cec8634a9a12789dd280c4373763bdebea85d82821b02856327df0df6fbb423d55affb8010252ec64
7
+ data.tar.gz: bc65274a574e25cdbe6142bd7bc2dbe7d6d9275143c211987845dc916156ebe2f0d3ff5739490ea177b67157545b6c5c4aef0a96bbe6dfbaa6f9061c35fcfd73
@@ -0,0 +1,40 @@
1
+ name: CI
2
+
3
+ on: [ push, pull_request ]
4
+
5
+ jobs:
6
+ test:
7
+
8
+ runs-on: ubuntu-latest
9
+ strategy:
10
+ fail-fast: false
11
+ matrix:
12
+ ruby: [ 2.6, 2.7, 3 ]
13
+
14
+ steps:
15
+ - uses: actions/checkout@v2
16
+ - name: Set up Ruby
17
+ uses: ruby/setup-ruby@v1
18
+ with:
19
+ ruby-version: ${{ matrix.ruby }}
20
+ bundler-cache: true
21
+ - name: Install dependencies
22
+ run: bundle install
23
+ - name: Run tests
24
+ run: bundle exec rake
25
+ - name: Coveralls Parallel
26
+ uses: coverallsapp/github-action@master
27
+ with:
28
+ github-token: ${{ secrets.github_token }}
29
+ flag-name: ${{ matrix.ruby }}
30
+ parallel: true
31
+
32
+ finish:
33
+ needs: test
34
+ runs-on: ubuntu-latest
35
+ steps:
36
+ - name: Coveralls Finished
37
+ uses: coverallsapp/github-action@master
38
+ with:
39
+ github-token: ${{ secrets.github_token }}
40
+ parallel-finished: true
data/.rubocop.yml CHANGED
@@ -1,8 +1,10 @@
1
1
  AllCops:
2
- TargetRubyVersion: '2.3'
2
+ NewCops: enable
3
+ Layout/EmptyLineAfterGuardClause:
4
+ Enabled: false
3
5
  Metrics:
4
6
  Enabled: false
5
- Naming/UncommunicativeBlockParamName:
7
+ Naming/BlockParameterName:
6
8
  Enabled: false
7
- Naming/UncommunicativeMethodParamName:
9
+ Naming/MethodParameterName:
8
10
  Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ ### 0.5.1 (March 28, 2022)
2
+
3
+ - Breaking changes
4
+ - Increase minimum required ruby version to 2.6.0 ([#22](https://github.com/velocidi/frise/pull/22)).
5
+ - Bug fixes
6
+ - Fix YAML.safe_load call arguments error in ruby 3.1 ([#26](https://github.com/velocidi/frise/pull/26)).
7
+
8
+ ### 0.4.1 (July 7, 2020)
9
+
10
+ - New features
11
+ - `$delete` directive is now available in config files, allowing users to delete parts of the
12
+ config sub-tree ([#20](https://github.com/velocidi/frise/pull/20)).
13
+
14
+ ### 0.4.0 (November 29, 2019)
15
+
16
+ - Breaking changes
17
+ - Recursive inclusions now respect the hierarchy of configuration files, avoiding inclusions lower
18
+ in the hiearchy to be resolved before ones higher in the hierarchy
19
+ ([#14](https://github.com/velocidi/frise/pull/14)).
20
+ - Bug fixes
21
+ - Fix error messages from validations happening deeper in the config hierarchy, that were wrongly
22
+ missing the first character in their path ([#16](https://github.com/velocidi/frise/pull/16)).
23
+
1
24
  ### 0.3.0 (April 16, 2018)
2
25
 
3
26
  - Breaking changes
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright 2017 ShiftForward, S.A. [http://www.shiftforward.eu]
1
+ Copyright 2017-2019 Velocidi [http://www.velocidi.com/]
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License"); you may not
4
4
  use this file except in compliance with the License. You may obtain a copy of
data/frise.gemspec CHANGED
@@ -7,25 +7,26 @@ require 'frise/version'
7
7
  Gem::Specification.new do |spec|
8
8
  spec.name = 'frise'
9
9
  spec.version = Frise::VERSION
10
- spec.authors = ['ShiftForward']
11
- spec.email = ['info@shiftforward.eu']
10
+ spec.authors = ['Velocidi']
11
+ spec.email = ['hello@velocidi.com']
12
12
 
13
13
  spec.summary = 'Ruby config library with schema validation, default values and templating'
14
- spec.homepage = 'https://github.com/ShiftForward/frise'
14
+ spec.homepage = 'https://github.com/velocidi/frise'
15
15
  spec.license = 'Apache-2.0'
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
18
  f.match(%r{^(test|spec|features|example)/})
19
19
  end
20
20
  spec.require_paths = ['lib']
21
- spec.required_ruby_version = '>= 2.3.0'
21
+ spec.required_ruby_version = '>= 2.6.0'
22
22
 
23
23
  spec.add_dependency 'liquid', '~> 4.0'
24
24
 
25
- spec.add_development_dependency 'bundler', '~> 1.14'
26
- spec.add_development_dependency 'coveralls', '~> 0.8.21'
27
- spec.add_development_dependency 'rake', '~> 12.3'
28
- spec.add_development_dependency 'rspec', '~> 3.4'
29
- spec.add_development_dependency 'rubocop', '0.55.0'
30
- spec.add_development_dependency 'simplecov', '~> 0.14.1'
25
+ spec.add_development_dependency 'bundler', '~> 2.0'
26
+ spec.add_development_dependency 'rake', '~> 13.0'
27
+ spec.add_development_dependency 'rspec', '~> 3.9'
28
+ spec.add_development_dependency 'rubocop', '~> 1.10'
29
+ spec.add_development_dependency 'simplecov', '~> 0.18'
30
+ spec.add_development_dependency 'simplecov-lcov', '0.8.0'
31
+ spec.metadata['rubygems_mfa_required'] = 'true'
31
32
  end
@@ -10,20 +10,20 @@ 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(
14
+ include_sym: '$include',
15
+ content_include_sym: '$content_include',
16
+ schema_sym: '$schema',
17
+ delete_sym: '$delete'
18
+ )
19
+
14
20
  @include_sym = include_sym
15
21
  @content_include_sym = content_include_sym
16
22
  @schema_sym = schema_sym
23
+ @delete_sym = delete_sym
17
24
  end
18
25
 
19
- def widened_class(obj)
20
- class_name = obj.class.to_s
21
- return 'String' if class_name == 'Hash' && !obj[@content_include_sym].nil?
22
- return 'Boolean' if %w[TrueClass FalseClass].include? class_name
23
- return 'Integer' if %w[Fixnum Bignum].include? class_name
24
- class_name
25
- end
26
-
26
+ # rubocop:disable Lint/DuplicateBranch
27
27
  def merge_defaults_obj(config, defaults)
28
28
  config_class = widened_class(config)
29
29
  defaults_class = widened_class(defaults)
@@ -34,9 +34,13 @@ module Frise
34
34
  elsif config.nil?
35
35
  if defaults_class != 'Hash' then defaults
36
36
  elsif defaults['$optional'] then nil
37
- else merge_defaults_obj({}, defaults)
37
+ else
38
+ 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
 
@@ -56,12 +60,13 @@ module Frise
56
60
 
57
61
  elsif defaults_class != config_class
58
62
  raise "Cannot merge config #{config.inspect} (#{widened_class(config)}) " \
59
- "with default #{defaults.inspect} (#{widened_class(defaults)})"
63
+ "with default #{defaults.inspect} (#{widened_class(defaults)})"
60
64
 
61
65
  else
62
66
  config
63
67
  end
64
68
  end
69
+ # rubocop:enable Lint/DuplicateBranch
65
70
 
66
71
  def merge_defaults_obj_at(config, at_path, defaults)
67
72
  at_path.reverse.each { |key| defaults = { key => defaults } }
@@ -77,5 +82,15 @@ module Frise
77
82
  defaults = Parser.parse(defaults_file, symbol_table) || {}
78
83
  merge_defaults_obj_at(config, at_path, defaults)
79
84
  end
85
+
86
+ private
87
+
88
+ def widened_class(obj)
89
+ class_name = obj.class.to_s
90
+ return 'String' if class_name == 'Hash' && !obj[@content_include_sym].nil?
91
+ return 'Boolean' if %w[TrueClass FalseClass].include? class_name
92
+ return 'Integer' if %w[Fixnum Bignum].include? class_name
93
+ class_name
94
+ end
80
95
  end
81
96
  end
@@ -12,11 +12,13 @@ module Frise
12
12
  @__target_object__ ||= @callable.call
13
13
  end
14
14
 
15
- # rubocop:disable Style/MethodMissing
16
15
  def method_missing(method_name, *args, &block)
17
16
  __target_object__.send(method_name, *args, &block)
18
17
  end
19
- # rubocop:enable Style/MethodMissing
18
+
19
+ def respond_to_missing?(method_name, include_private = false)
20
+ __target_object__.respond_to?(method_name, include_private)
21
+ end
20
22
  end
21
23
  end
22
24
  end
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,15 +42,15 @@ module Frise
39
42
  config = pre_loader.call(config)
40
43
  end
41
44
 
42
- config = process_includes(config, [], config, global_vars) if @include_sym
43
- config = process_schemas(config, [], global_vars) if @schema_sym
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
 
47
50
  private
48
51
 
49
- def process_includes(config, at_path, root_config, global_vars)
50
- return config unless config.class == Hash
52
+ def process_includes(config, at_path, root_config, global_vars, include_confs_stack = [])
53
+ return config unless config.instance_of?(Hash)
51
54
 
52
55
  # process $content_include directives
53
56
  config, content_include_confs = extract_content_include(config, at_path)
@@ -63,30 +66,30 @@ module Frise
63
66
  end
64
67
 
65
68
  # process $include directives
66
- config, include_confs = extract_include(config, at_path)
67
- if include_confs.empty?
68
- config.map { |k, v| [k, process_includes(v, at_path + [k], root_config, global_vars)] }.to_h
69
- else
70
- Lazy.new do
71
- include_confs.each do |include_conf|
72
- symbol_table = build_symbol_table(root_config, at_path, config, global_vars, include_conf)
73
- included_config = Parser.parse(include_conf['file'], symbol_table)
74
-
75
- config = @defaults_loader.merge_defaults_obj(config, included_config)
76
- config = process_includes(config, at_path, merge_at(root_config, at_path, config), global_vars)
77
- end
78
- updated_root_config = merge_at(root_config, at_path, config)
79
- config.map { |k, v| [k, process_includes(v, at_path + [k], updated_root_config, global_vars)] }.to_h
80
- end
81
- end
69
+ config, next_include_confs = extract_include(config, at_path)
70
+ include_confs = next_include_confs + include_confs_stack
71
+ res = if include_confs.empty?
72
+ config.to_h { |k, v| [k, process_includes(v, at_path + [k], root_config, global_vars)] }
73
+ else
74
+ Lazy.new do
75
+ include_conf = include_confs.first
76
+ rest_include_confs = include_confs[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,
81
+ rest_include_confs)
82
+ end
83
+ end
84
+ @delete_sym.nil? ? res : omit_deleted(res)
82
85
  end
83
86
 
84
87
  def process_schema_includes(schema, at_path, global_vars)
85
- return schema unless schema.class == Hash
88
+ return schema unless schema.instance_of?(Hash)
86
89
 
87
90
  schema, included_schemas = extract_include(schema, at_path)
88
91
  if included_schemas.empty?
89
- schema.map { |k, v| [k, process_schema_includes(v, at_path + [k], global_vars)] }.to_h
92
+ schema.to_h { |k, v| [k, process_schema_includes(v, at_path + [k], global_vars)] }
90
93
  else
91
94
  included_schemas.each do |defaults_conf|
92
95
  schema = Parser.parse(defaults_conf['file'], global_vars).merge(schema)
@@ -96,13 +99,13 @@ module Frise
96
99
  end
97
100
 
98
101
  def process_schemas(config, at_path, global_vars)
99
- return config unless config.class == Hash
102
+ return config unless config.instance_of?(Hash)
100
103
 
101
- config = config.map do |k, v|
104
+ config = config.to_h do |k, v|
102
105
  new_v = process_schemas(v, at_path + [k], global_vars)
103
106
  return nil if !v.nil? && new_v.nil?
104
107
  [k, new_v]
105
- end.to_h
108
+ end
106
109
 
107
110
  config, schema_files = extract_schema(config, at_path)
108
111
  schema_files.each do |schema_file|
@@ -147,10 +150,10 @@ module Frise
147
150
  end
148
151
  end
149
152
 
150
- def extract_special(config, key, at_path)
153
+ def extract_special(config, key, at_path, &block)
151
154
  case config[key]
152
155
  when nil then [config, []]
153
- when Array then [config.reject { |k| k == key }, config[key].map { |e| yield e }]
156
+ when Array then [config.reject { |k| k == key }, config[key].map(&block)]
154
157
  else raise "At #{build_path(at_path)}: illegal value for #{key}: #{config[key].inspect}"
155
158
  end
156
159
  end
@@ -162,6 +165,18 @@ module Frise
162
165
  config.merge(head => merge_at(config[head], tail, to_merge))
163
166
  end
164
167
 
168
+ # returns the config without the keys whose values are @delete_sym
169
+ # @delete_sym given as array elements are not handled.
170
+ def omit_deleted(config)
171
+ config.each_with_object({}) do |(k, v), new_hash|
172
+ if v.is_a?(Hash)
173
+ new_hash[k] = omit_deleted(v)
174
+ else
175
+ new_hash[k] = v unless v == @delete_sym
176
+ end
177
+ end
178
+ end
179
+
165
180
  # builds the symbol table for the Liquid renderization of a file, based on:
166
181
  # - `root_config`: the root of the whole config
167
182
  # - `at_path`: the current path
@@ -169,10 +184,10 @@ module Frise
169
184
  # - `global_vars`: the global variables
170
185
  # - `include_conf`: the $include or $content_include configuration
171
186
  def build_symbol_table(root_config, at_path, config, global_vars, include_conf)
172
- extra_vars = (include_conf['vars'] || {}).map { |k, v| [k, root_config.dig(*v.split('.'))] }.to_h
187
+ extra_vars = (include_conf['vars'] || {}).transform_values { |v| root_config.dig(*v.split('.')) }
173
188
  extra_consts = include_conf['constants'] || {}
174
189
 
175
- (config ? merge_at(root_config, at_path, config) : root_config)
190
+ omit_deleted(config ? merge_at(root_config, at_path, config) : root_config)
176
191
  .merge(global_vars)
177
192
  .merge(extra_vars)
178
193
  .merge(extra_consts)
data/lib/frise/parser.rb CHANGED
@@ -10,7 +10,7 @@ module Frise
10
10
  class << self
11
11
  def parse(file, symbol_table = nil)
12
12
  return nil unless File.file? file
13
- YAML.safe_load(parse_as_text(file, symbol_table), [], [], true) || {}
13
+ YAML.safe_load(parse_as_text(file, symbol_table), aliases: true) || {}
14
14
  end
15
15
 
16
16
  def parse_as_text(file, symbol_table = nil)
@@ -14,6 +14,8 @@ module Frise
14
14
  attr_reader :errors
15
15
 
16
16
  def initialize(root, validators = nil)
17
+ super()
18
+
17
19
  @root = root
18
20
  @validators = validators
19
21
  @errors = []
@@ -27,23 +29,23 @@ module Frise
27
29
  end
28
30
 
29
31
  def add_validation_error(path, msg)
30
- logged_path = path.empty? ? '<root>' : path[1..-1]
32
+ logged_path = path.empty? ? '<root>' : path
31
33
  @errors << "At #{logged_path}: #{msg}"
32
34
  end
33
35
 
34
36
  def get_full_schema(schema)
35
37
  case schema
36
- when Hash then
38
+ when Hash
37
39
  default_type = schema[:enum] || schema[:one_of] ? 'Object' : 'Hash'
38
40
  { type: default_type }.merge(schema)
39
41
  when Symbol then { type: 'Object', validate: schema }
40
- when Array then
42
+ when Array
41
43
  if schema.size == 1
42
44
  { type: 'Array', all: schema[0] }
43
45
  else
44
46
  (raise "Invalid schema: #{schema.inspect}")
45
47
  end
46
- when String then
48
+ when String
47
49
  if schema.end_with?('?')
48
50
  { type: schema[0..-2], optional: true }
49
51
  else
@@ -83,8 +85,8 @@ module Frise
83
85
  if full_schema[:validate]
84
86
  begin
85
87
  @validators.method(full_schema[:validate]).call(@root, obj)
86
- rescue StandardError => ex
87
- add_validation_error(path, ex.message)
88
+ rescue StandardError => e
89
+ add_validation_error(path, e.message)
88
90
  end
89
91
  end
90
92
  true
@@ -93,7 +95,7 @@ module Frise
93
95
  def validate_enum(full_schema, obj, path)
94
96
  if full_schema[:enum] && !full_schema[:enum].include?(obj)
95
97
  add_validation_error(path, "invalid value #{obj.inspect}. " \
96
- "Accepted values are #{full_schema[:enum].map(&:inspect).join(', ')}")
98
+ "Accepted values are #{full_schema[:enum].map(&:inspect).join(', ')}")
97
99
  return false
98
100
  end
99
101
  true
@@ -115,7 +117,7 @@ module Frise
115
117
  def validate_spec_keys(full_schema, obj, path, processed_keys)
116
118
  full_schema.each do |spec_key, spec_value|
117
119
  next if spec_key.is_a?(Symbol)
118
- validate_object("#{path}.#{spec_key}", obj[spec_key], spec_value)
120
+ validate_object(path.empty? ? spec_key : "#{path}.#{spec_key}", obj[spec_key], spec_value)
119
121
  processed_keys << spec_key
120
122
  end
121
123
  true
@@ -124,15 +126,13 @@ module Frise
124
126
  def validate_remaining_keys(full_schema, obj, path, processed_keys)
125
127
  expected_types = get_expected_types(full_schema)
126
128
  if expected_types.size == 1 && expected_types[0].ancestors.member?(Enumerable)
127
- hash = obj.is_a?(Hash) ? obj : Hash[obj.map.with_index { |x, i| [i, x] }]
129
+ hash = obj.is_a?(Hash) ? obj : obj.map.with_index { |x, i| [i, x] }.to_h
128
130
  hash.each do |key, value|
129
- if full_schema[:all_keys] && !key.is_a?(Symbol)
130
- validate_object(path, key, full_schema[:all_keys])
131
- end
131
+ validate_object(path, key, full_schema[:all_keys]) if full_schema[:all_keys] && !key.is_a?(Symbol)
132
132
 
133
133
  next if processed_keys.member? key
134
134
  if full_schema[:all]
135
- validate_object("#{path}.#{key}", value, full_schema[:all])
135
+ validate_object(path.empty? ? key : "#{path}.#{key}", value, full_schema[:all])
136
136
  elsif !full_schema[:allow_unknown_keys]
137
137
  add_validation_error(path, "unknown key: #{key}")
138
138
  end
@@ -158,17 +158,27 @@ module Frise
158
158
  def self.parse_symbols(obj)
159
159
  case obj
160
160
  when Array then obj.map { |e| parse_symbols(e) }
161
- when Hash then Hash[obj.map { |k, v| [parse_symbols(k), parse_symbols(v)] }]
162
- when String then obj.start_with?('$') ? obj[1..-1].to_sym : obj
161
+ when Hash then obj.to_h { |k, v| [parse_symbols(k), parse_symbols(v)] }
162
+ when String then obj.start_with?('$') ? obj[1..].to_sym : obj
163
163
  else obj
164
164
  end
165
165
  end
166
166
 
167
167
  def self.validate_obj(config, schema, options = {})
168
- validate_obj_at(config, [], schema, options)
168
+ validate_obj_at(config, [], schema, **options)
169
169
  end
170
170
 
171
- def self.validate_obj_at(config, at_path, schema, path_prefix: nil, validators: nil, print: nil, fatal: nil, raise_error: nil)
171
+ def self.validate_obj_at(
172
+ config,
173
+ at_path,
174
+ schema,
175
+ path_prefix: nil,
176
+ validators: nil,
177
+ print: nil,
178
+ fatal: nil,
179
+ raise_error: nil
180
+ )
181
+
172
182
  schema = parse_symbols(schema)
173
183
  at_path.reverse.each { |key| schema = { key => schema, :allow_unknown_keys => true } }
174
184
 
@@ -190,11 +200,11 @@ module Frise
190
200
  end
191
201
 
192
202
  def self.validate(config, schema_file, options = {})
193
- validate_obj_at(config, [], Parser.parse(schema_file) || { allow_unknown_keys: true }, options)
203
+ validate_obj_at(config, [], Parser.parse(schema_file) || { allow_unknown_keys: true }, **options)
194
204
  end
195
205
 
196
206
  def self.validate_at(config, at_path, schema_file, options = {})
197
- validate_obj_at(config, at_path, Parser.parse(schema_file) || { allow_unknown_keys: true }, options)
207
+ validate_obj_at(config, at_path, Parser.parse(schema_file) || { allow_unknown_keys: true }, **options)
198
208
  end
199
209
  end
200
210
 
@@ -204,6 +214,8 @@ module Frise
204
214
  attr_reader :errors
205
215
 
206
216
  def initialize(errors)
217
+ super()
218
+
207
219
  @errors = errors
208
220
  end
209
221
  end
data/lib/frise/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Frise
4
- VERSION = '0.3.0'
4
+ VERSION = '0.5.1'
5
5
  end
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.3.0
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
- - ShiftForward
8
- autorequire:
7
+ - Velocidi
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-16 00:00:00.000000000 Z
11
+ date: 2022-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: liquid
@@ -30,95 +30,95 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.14'
33
+ version: '2.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.14'
40
+ version: '2.0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: coveralls
42
+ name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.8.21
47
+ version: '13.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.8.21
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rake
56
+ name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '12.3'
61
+ version: '3.9'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '12.3'
68
+ version: '3.9'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rspec
70
+ name: rubocop
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.4'
75
+ version: '1.10'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '3.4'
82
+ version: '1.10'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rubocop
84
+ name: simplecov
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '='
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 0.55.0
89
+ version: '0.18'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '='
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: 0.55.0
96
+ version: '0.18'
97
97
  - !ruby/object:Gem::Dependency
98
- name: simplecov
98
+ name: simplecov-lcov
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - "~>"
101
+ - - '='
102
102
  - !ruby/object:Gem::Version
103
- version: 0.14.1
103
+ version: 0.8.0
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - "~>"
108
+ - - '='
109
109
  - !ruby/object:Gem::Version
110
- version: 0.14.1
111
- description:
110
+ version: 0.8.0
111
+ description:
112
112
  email:
113
- - info@shiftforward.eu
113
+ - hello@velocidi.com
114
114
  executables: []
115
115
  extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
+ - ".github/workflows/CI.yml"
118
119
  - ".gitignore"
119
120
  - ".rspec"
120
121
  - ".rubocop.yml"
121
- - ".travis.yml"
122
122
  - CHANGELOG.md
123
123
  - Gemfile
124
124
  - LICENSE.txt
@@ -132,11 +132,12 @@ files:
132
132
  - lib/frise/parser.rb
133
133
  - lib/frise/validator.rb
134
134
  - lib/frise/version.rb
135
- homepage: https://github.com/ShiftForward/frise
135
+ homepage: https://github.com/velocidi/frise
136
136
  licenses:
137
137
  - Apache-2.0
138
- metadata: {}
139
- post_install_message:
138
+ metadata:
139
+ rubygems_mfa_required: 'true'
140
+ post_install_message:
140
141
  rdoc_options: []
141
142
  require_paths:
142
143
  - lib
@@ -144,16 +145,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
144
145
  requirements:
145
146
  - - ">="
146
147
  - !ruby/object:Gem::Version
147
- version: 2.3.0
148
+ version: 2.6.0
148
149
  required_rubygems_version: !ruby/object:Gem::Requirement
149
150
  requirements:
150
151
  - - ">="
151
152
  - !ruby/object:Gem::Version
152
153
  version: '0'
153
154
  requirements: []
154
- rubyforge_project:
155
- rubygems_version: 2.7.6
156
- signing_key:
155
+ rubygems_version: 3.3.7
156
+ signing_key:
157
157
  specification_version: 4
158
158
  summary: Ruby config library with schema validation, default values and templating
159
159
  test_files: []
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3
4
- - 2.4
5
- - 2.5