definition 0.6.1 → 0.7.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
2
  SHA256:
3
- metadata.gz: 4c7bb937fe678e70bbb9427ca24b8153471294150a657388b913aa095c0b5864
4
- data.tar.gz: 579e9943b959417867e641284c0b94cde45ceb56c9d3738a98a37b6f100cd854
3
+ metadata.gz: 9de3bc4f221f0a67beb7c82f3d7bacfa86ab332cfc3ab7efe3f35bd6efeeeaca
4
+ data.tar.gz: a11b488ecb7fc5e3b2956dbb14c533631936b78d613f6f4a68c58e584cc25faa
5
5
  SHA512:
6
- metadata.gz: 7319c413e131eeef99ac40eb4b57cead39f27d86912651049bbe3276a333fc8aedafa77f08e13ce4fca4e973baf02e48a6ab49b07cbafb561f04fd3cf3224055
7
- data.tar.gz: 34ffc1084ad2d22fb38248d9e88f9d4b13349c94e7376ec94eabd6765ff6986230612dc0f864f0b900fd56203cb8fb5f415889b47ab6427f0c85b1acf8ada029
6
+ metadata.gz: cc464d58c56ef306fdc83868be3f67a7151c64e17f9f28d652584c94f73d2ce083308c1fd1c152bc667d57989f0e7fcbaea0e4a89a9aa30e9fb6093bfab18787
7
+ data.tar.gz: cad0aa2a4165e5ea329751dc8ded8a61f943e110a30d930afbcfec3b2ba2ea7686dccbe41ef322906fb56c8ab23df65f83913d794933d29a3f7907ec0d3e23db
data/.circleci/config.yml CHANGED
@@ -5,26 +5,32 @@ version: 2.1
5
5
  # Orbs are reusable packages of CircleCI configuration that you may share across projects, enabling you to create encapsulated, parameterized commands, jobs, and executors that can be used across multiple projects.
6
6
  # See: https://circleci.com/docs/2.0/orb-intro/
7
7
  orbs:
8
- ruby: circleci/ruby@1.2.0
8
+ ruby: circleci/ruby@1.4.0
9
9
 
10
10
  # Define a job to be invoked later in a workflow.
11
11
  # See: https://circleci.com/docs/2.0/configuration-reference/#jobs
12
12
  jobs:
13
13
  test:
14
14
  parameters:
15
- image:
15
+ ruby_version:
16
16
  type: string
17
17
  docker:
18
- - image: << parameters.image>>
18
+ - image: cimg/base:stable
19
19
  steps:
20
+ - ruby/install:
21
+ version: << parameters.ruby_version >>
20
22
  - checkout
21
- - ruby/install-deps
23
+ - run: rm Gemfile.lock
24
+ - run: gem install bundler
25
+ - run: bundle install
22
26
  - ruby/rspec-test
23
- checking:
27
+ linting:
24
28
  docker:
25
- - image: 'cimg/ruby:2.7'
29
+ - image: 'cimg/base:stable'
26
30
  steps:
27
31
  - checkout
32
+ - ruby/install:
33
+ version: "3.0"
28
34
  - ruby/install-deps
29
35
  - ruby/rubocop-check:
30
36
  format: progress
@@ -39,5 +45,9 @@ workflows:
39
45
  - test:
40
46
  matrix:
41
47
  parameters:
42
- image: ["cimg/ruby:2.5", "cimg/ruby:2.6", "cimg/ruby:2.7", "circleci/jruby:9.3.1-jdk11", "circleci/jruby:9.2.20-jdk11"]
43
- - checking
48
+ ruby_version:
49
+ - "2.6"
50
+ - "2.7"
51
+ - "3.0"
52
+ - "jruby-9.3.3.0"
53
+ - linting
data/.rubocop.yml CHANGED
@@ -2,7 +2,7 @@ require:
2
2
  - rubocop-rspec
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 2.3
5
+ TargetRubyVersion: 2.6
6
6
 
7
7
  Metrics/LineLength:
8
8
  Max: 119
data/Changelog.md CHANGED
@@ -4,7 +4,19 @@ All notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
5
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
6
 
7
- ## [0.6.1] - 2020-03-21
7
+ ## Unreleased
8
+
9
+ ## [0.7.0] - 2022-02-25
10
+ ### Added
11
+ - Lambda definitions can now be failed with custom error messages
12
+ - Compatibility with Ruby 3.0
13
+ ### Fixed
14
+ - In some cases errors from nested `Keys` definitions inside `Or` definitions got lost when listing the validation errors via the `error_hash` method on the conform result object.
15
+ ### Changed
16
+ - When no sub-definition of an `Or` conforms, then only the errors of the last definition of the `Or` are collected. Previously the errors of all sub-definitions were collected.
17
+ - Translated error messages have been improved to be more suitable to be used as end user error messages
18
+
19
+ ## [0.6.1] - 2021-12-14
8
20
  ### Fixed
9
21
  - The `Keys` definition crashed with an error if the input was not a Hash
10
22
 
data/Gemfile.lock CHANGED
@@ -1,31 +1,29 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- definition (0.6.1)
4
+ definition (0.7.0)
5
5
  activesupport
6
6
  i18n
7
7
 
8
8
  GEM
9
9
  remote: https://rubygems.org/
10
10
  specs:
11
- activesupport (6.1.4.1)
11
+ activesupport (7.0.2.2)
12
12
  concurrent-ruby (~> 1.0, >= 1.0.2)
13
13
  i18n (>= 1.6, < 2)
14
14
  minitest (>= 5.1)
15
15
  tzinfo (~> 2.0)
16
- zeitwerk (~> 2.3)
17
16
  approvals (0.0.25)
18
17
  nokogiri (~> 1.8)
19
18
  thor (~> 1.0)
20
19
  ast (2.4.2)
21
20
  awesome_print (1.9.2)
22
- benchmark-ips (2.9.2)
21
+ benchmark-ips (2.10.0)
23
22
  coderay (1.1.3)
24
23
  concurrent-ruby (1.1.9)
25
- diff-lcs (1.4.4)
26
- ffi (1.15.4)
27
- ffi (1.15.4-java)
28
- formatador (0.3.0)
24
+ diff-lcs (1.5.0)
25
+ ffi (1.15.5)
26
+ formatador (1.1.0)
29
27
  fuubar (2.5.1)
30
28
  rspec-core (~> 3.0)
31
29
  ruby-progressbar (~> 1.4)
@@ -43,66 +41,52 @@ GEM
43
41
  guard (~> 2.1)
44
42
  guard-compat (~> 1.1)
45
43
  rspec (>= 2.99.0, < 4.0)
46
- i18n (1.8.11)
44
+ i18n (1.10.0)
47
45
  concurrent-ruby (~> 1.0)
48
- jar-dependencies (0.4.1)
49
46
  jaro_winkler (1.5.4)
50
- jaro_winkler (1.5.4-java)
51
- listen (3.7.0)
47
+ listen (3.7.1)
52
48
  rb-fsevent (~> 0.10, >= 0.10.3)
53
49
  rb-inotify (~> 0.9, >= 0.9.10)
54
50
  lumberjack (1.2.8)
55
51
  method_source (1.0.0)
56
- mini_portile2 (2.6.1)
57
- minitest (5.14.4)
52
+ minitest (5.15.0)
58
53
  nenv (0.3.0)
59
- nokogiri (1.12.5)
60
- mini_portile2 (~> 2.6.1)
61
- racc (~> 1.4)
62
- nokogiri (1.12.5-java)
63
- racc (~> 1.4)
64
- nokogiri (1.12.5-x86_64-linux)
54
+ nokogiri (1.13.1-x86_64-linux)
65
55
  racc (~> 1.4)
66
56
  notiffany (0.1.3)
67
57
  nenv (~> 0.1)
68
58
  shellany (~> 0.0)
69
59
  parallel (1.21.0)
70
- parser (3.0.3.2)
60
+ parser (3.1.0.0)
71
61
  ast (~> 2.4.1)
72
62
  pry (0.14.1)
73
63
  coderay (~> 1.1)
74
64
  method_source (~> 1.0)
75
- pry (0.14.1-java)
76
- coderay (~> 1.1)
77
- method_source (~> 1.0)
78
- spoon (~> 0.0)
79
- psych (4.0.2)
80
- psych (4.0.2-java)
81
- jar-dependencies (>= 0.1.7)
65
+ psych (4.0.3)
66
+ stringio
82
67
  racc (1.6.0)
83
- racc (1.6.0-java)
84
- rainbow (3.0.0)
68
+ rainbow (3.1.1)
85
69
  rake (13.0.6)
86
- rb-fsevent (0.11.0)
70
+ rb-fsevent (0.11.1)
87
71
  rb-inotify (0.10.1)
88
72
  ffi (~> 1.0)
89
- rspec (3.10.0)
90
- rspec-core (~> 3.10.0)
91
- rspec-expectations (~> 3.10.0)
92
- rspec-mocks (~> 3.10.0)
93
- rspec-core (3.10.1)
94
- rspec-support (~> 3.10.0)
95
- rspec-expectations (3.10.1)
73
+ rspec (3.11.0)
74
+ rspec-core (~> 3.11.0)
75
+ rspec-expectations (~> 3.11.0)
76
+ rspec-mocks (~> 3.11.0)
77
+ rspec-core (3.11.0)
78
+ rspec-support (~> 3.11.0)
79
+ rspec-expectations (3.11.0)
96
80
  diff-lcs (>= 1.2.0, < 2.0)
97
- rspec-support (~> 3.10.0)
81
+ rspec-support (~> 3.11.0)
98
82
  rspec-its (1.3.0)
99
83
  rspec-core (>= 3.0.0)
100
84
  rspec-expectations (>= 3.0.0)
101
- rspec-mocks (3.10.2)
85
+ rspec-mocks (3.11.0)
102
86
  diff-lcs (>= 1.2.0, < 2.0)
103
- rspec-support (~> 3.10.0)
104
- rspec-support (3.10.3)
105
- rspec_junit_formatter (0.4.1)
87
+ rspec-support (~> 3.11.0)
88
+ rspec-support (3.11.0)
89
+ rspec_junit_formatter (0.5.1)
106
90
  rspec-core (>= 2, < 4, != 2.12.0)
107
91
  rubocop (0.66.0)
108
92
  jaro_winkler (~> 1.5.1)
@@ -117,18 +101,15 @@ GEM
117
101
  rubocop_runner (2.2.0)
118
102
  ruby-progressbar (1.11.0)
119
103
  shellany (0.0.1)
120
- spoon (0.0.6)
121
- ffi
122
- thor (1.1.0)
104
+ stringio (3.0.1)
105
+ thor (1.2.1)
123
106
  timecop (0.9.4)
124
107
  tzinfo (2.0.4)
125
108
  concurrent-ruby (~> 1.0)
126
109
  unicode-display_width (1.5.0)
127
- zeitwerk (2.5.1)
128
110
 
129
111
  PLATFORMS
130
112
  ruby
131
- universal-java-11
132
113
  x86_64-linux
133
114
 
134
115
  DEPENDENCIES
@@ -150,4 +131,4 @@ DEPENDENCIES
150
131
  timecop
151
132
 
152
133
  BUNDLED WITH
153
- 2.2.33
134
+ 2.3.7
data/README.md CHANGED
@@ -255,6 +255,24 @@ either be the original value or any transformed version of it. By not calling
255
255
  The first argument of `Definition.Lambda` is a name you can give this definition.
256
256
  It will only be used in the error message to make it more readable.
257
257
 
258
+ If you want to provide detailed custom error messages you can use `fail_with`:
259
+
260
+ ```ruby
261
+ Definition.Lambda(:password) do |value|
262
+ if !value.match(/[a-z]+/)
263
+ fail_with("must contain at least one lower case letter")
264
+ elsif !value.match(/[A-Z]+/)
265
+ fail_with("must contain at least one upper case letter")
266
+ elsif !value.match(/\d+/)
267
+ fail_with("must contain at least one digit")
268
+ elsif value.size < 6 || value.size > 50
269
+ fail_with("must be between 6 and 50 characters long")
270
+ else
271
+ conform_with(value)
272
+ end
273
+ end
274
+ ```
275
+
258
276
  ### Composing Definitions
259
277
 
260
278
  Definitions are reusable and can be easily composed:
@@ -1,23 +1,22 @@
1
1
  en:
2
2
  definition:
3
- max_size: "Value is bigger then %{max_size}"
4
- min_size: "Value is smaller then %{min_size}"
5
- greater_then: "Value must be greater then %{min_value}"
6
- greater_then_equal: "Value must be greater or eqaul to %{min_value}"
7
- less_then: "Value must be less then %{max_value}"
8
- less_then_equal: "Value must be less or eqaul to %{max_value}"
3
+ max_size: "Value is bigger than %{max_size}"
4
+ min_size: "Value is smaller than %{min_size}"
5
+ greater_then: "Value must be greater than %{min_value}"
6
+ greater_then_equal: "Value must be greater or equal to %{min_value}"
7
+ less_then: "Value must be less than %{max_value}"
8
+ less_then_equal: "Value must be less or equal to %{max_value}"
9
9
  equal: "Value must be equal to '%{expected_value}'"
10
10
  empty: "Value must be empty"
11
11
  non_empty: "Value must not be empty"
12
12
  nil: "Value must be nil"
13
+ each: "Is not an Array"
14
+ include: "Does not include %{value}"
13
15
  type: "Value is of wrong type, needs to be a %{class}"
14
16
  enum: "Value is not one of: %{allowed_values}"
15
- each: "Not all values are valid"
16
- and: "Not all definitions conform"
17
- or: "None of the definitions conform"
18
17
  non_empty_string: "Value must be a non empty string"
19
- regex: "Value dos not match regex %{regex}"
18
+ regex: "Value does not match regex %{regex}"
20
19
  keys:
21
- has_extra_key: "Hash has unexpected key %{key}"
22
- has_missing_key: "Hash is missing key %{key}"
23
- not_a_hash: "Is not a Hash"
20
+ has_extra_key: "Is unexpected"
21
+ has_missing_key: "Is missing"
22
+ not_a_hash: "Is not a Hash"
@@ -4,16 +4,18 @@ require "i18n"
4
4
 
5
5
  module Definition
6
6
  class ConformError
7
- def initialize(definition, message, sub_errors: [], i18n_key: definition.name)
7
+ def initialize(definition, message, sub_errors: [], **options)
8
8
  self.definition = definition
9
9
  self.message = message
10
10
  self.sub_errors = sub_errors
11
- self.i18n_key = i18n_key
11
+ self.i18n_key = options.fetch(:i18n_key, definition.name)
12
+ self.i18n_context = options.fetch(:i18n_context, {})
13
+ self.translated_error = options.fetch(:translated_message, nil)
12
14
  assign_parents
13
15
  end
14
16
 
15
- attr_accessor :definition, :sub_errors, :parent, :i18n_key
16
- attr_writer :message
17
+ attr_accessor :definition, :sub_errors, :parent, :i18n_key, :i18n_context
18
+ attr_writer :message, :translated_error
17
19
 
18
20
  def message
19
21
  if sub_errors.empty?
@@ -50,10 +52,8 @@ module Definition
50
52
  sub_errors.map(&:leaf_errors).flatten
51
53
  end
52
54
 
53
- def translated_error(namespace = "definition", vars: {})
54
- namespace ||= "definition"
55
- vars[:key] = key if respond_to?(:key)
56
- ::I18n.t("#{namespace}.#{i18n_key}", definition.context.merge!(vars))
55
+ def translated_error(namespace = "definition")
56
+ @translated_error ||= definition.error_renderer.new(self, i18n_namespace: namespace).translated_error
57
57
  end
58
58
 
59
59
  private
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "active_support/core_ext/hash"
3
+ require "active_support"
4
4
 
5
5
  module Definition
6
6
  class ConformResult
@@ -41,11 +41,9 @@ module Definition
41
41
  "a primitive that has a coercion function defined")
42
42
  end
43
43
  Types::Type.new(:type, klass) do |value|
44
- begin
45
- method(klass.name).call(value)
46
- rescue ArgumentError
47
- value
48
- end
44
+ method(klass.name).call(value)
45
+ rescue ArgumentError
46
+ value
49
47
  end
50
48
  end
51
49
 
@@ -4,9 +4,9 @@ require "definition/conform_error"
4
4
 
5
5
  module Definition
6
6
  class KeyConformError < ConformError
7
- def initialize(definition, message, key:, sub_errors: [], i18n_key: definition.name)
7
+ def initialize(definition, message, key:, sub_errors: [], **options)
8
8
  self.key = key
9
- super(definition, message, sub_errors: sub_errors, i18n_key: i18n_key)
9
+ super(definition, message, sub_errors: sub_errors, **options)
10
10
  end
11
11
 
12
12
  attr_accessor :key
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "definition/types/base"
4
+ require "definition/types/error_renderers/leaf"
4
5
 
5
6
  module Definition
6
7
  module Types
@@ -23,6 +24,10 @@ module Definition
23
24
  Conformer.new(self).conform(value)
24
25
  end
25
26
 
27
+ def error_renderer
28
+ ErrorRenderers::Leaf
29
+ end
30
+
26
31
  class Conformer
27
32
  def initialize(definition)
28
33
  self.definition = definition
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "definition/conform_result"
4
4
  require "definition/conform_error"
5
+ require "definition/types/error_renderers/standard"
5
6
 
6
7
  module Definition
7
8
  module Types
@@ -23,6 +24,10 @@ module Definition
23
24
  def conform(_value)
24
25
  raise NotImplementedError
25
26
  end
27
+
28
+ def error_renderer
29
+ ErrorRenderers::Standard
30
+ end
26
31
  end
27
32
  end
28
33
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "definition/types/base"
4
+ require "definition/types/error_renderers/leaf"
4
5
 
5
6
  module Definition
6
7
  module Types
@@ -16,6 +17,10 @@ module Definition
16
17
  Conformer.new(self).conform(value)
17
18
  end
18
19
 
20
+ def error_renderer
21
+ ErrorRenderers::Leaf
22
+ end
23
+
19
24
  class Conformer
20
25
  def initialize(definition)
21
26
  self.definition = definition
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "definition/types/error_renderers/standard"
4
+
5
+ module Definition
6
+ module Types
7
+ module ErrorRenderers
8
+ class Lambda < Standard
9
+ def default
10
+ "Did not pass test for '#{conform_error.definition.name}'"
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "definition/types/error_renderers/standard"
4
+
5
+ module Definition
6
+ module Types
7
+ module ErrorRenderers
8
+ class Leaf < Standard
9
+ def translated_error(_namespace = "definition")
10
+ # When there are no sub errors, proceeding gets us into an infinite loop.
11
+ return i18n_error if conform_error.sub_errors.empty?
12
+
13
+ conform_error.leaf_errors.map(&:translated_error).join(", ")
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Definition
4
+ module Types
5
+ module ErrorRenderers
6
+ class Standard
7
+ def initialize(conform_error, i18n_namespace:)
8
+ self.conform_error = conform_error
9
+ self.i18n_namespace = i18n_namespace
10
+ end
11
+
12
+ def translated_error
13
+ i18n_error
14
+ end
15
+
16
+ private
17
+
18
+ def i18n_error
19
+ ::I18n.t("#{i18n_namespace}.#{conform_error.i18n_key}",
20
+ **i18n_vars)
21
+ end
22
+
23
+ def i18n_vars
24
+ conform_error.definition.context.merge(
25
+ conform_error.i18n_context
26
+ ).tap do |vars|
27
+ vars[:default] = default if default
28
+ end
29
+ end
30
+
31
+ def default
32
+ nil
33
+ end
34
+
35
+ attr_accessor :conform_error, :i18n_namespace
36
+ end
37
+ end
38
+ end
39
+ end
@@ -38,7 +38,8 @@ module Definition
38
38
  definition.required_items.map do |item|
39
39
  next if value.include?(item)
40
40
 
41
- KeyConformError.new(definition, "#{definition.name} does not include #{item.inspect}", key: item)
41
+ KeyConformError.new(definition, "#{definition.name} does not include #{item.inspect}",
42
+ key: item, i18n_context: { value: item.inspect })
42
43
  end.compact
43
44
  end
44
45
 
@@ -1,34 +1,65 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "definition/types/base"
4
+ require "definition/types/error_renderers/lambda"
4
5
 
5
6
  module Definition
6
7
  module Types
7
8
  class Lambda < Base
8
- module Dsl
9
- def conform_with(value)
10
- ConformResult.new(value)
11
- end
12
- end
13
- include Dsl
9
+ attr_accessor :conformity_test_lambda
14
10
 
15
- def initialize(name, context: {}, &test_lambda)
16
- self.test_lambda = test_lambda
11
+ def initialize(name, context: {}, &conformity_test_lambda)
12
+ self.conformity_test_lambda = conformity_test_lambda
17
13
  super(name, context: context)
18
14
  end
19
15
 
20
16
  def conform(value)
21
- lambda_result = instance_exec(value, &test_lambda)
22
- return lambda_result if lambda_result.is_a?(ConformResult)
17
+ Conformer.new(self).conform(value)
18
+ end
23
19
 
24
- ConformResult.new(value, errors: [
25
- ConformError.new(self, "Did not pass test for #{name}")
26
- ])
20
+ def error_renderer
21
+ ErrorRenderers::Lambda
27
22
  end
28
23
 
29
- private
24
+ class Conformer
25
+ module Dsl
26
+ def conform_with(value)
27
+ ConformResult.new(value)
28
+ end
29
+
30
+ def fail_with(error_message)
31
+ self.error_message = error_message
32
+ end
33
+ end
34
+ include Dsl
35
+
36
+ def initialize(definition)
37
+ self.definition = definition
38
+ end
39
+
40
+ def conform(value)
41
+ lambda_result = instance_exec(value, &definition.conformity_test_lambda)
42
+ return lambda_result if lambda_result.is_a?(ConformResult)
30
43
 
31
- attr_accessor :test, :test_lambda
44
+ failure_result_with(value, error_message)
45
+ end
46
+
47
+ private
48
+
49
+ attr_accessor :definition, :error_message
50
+
51
+ def standard_error_message
52
+ "Did not pass test for #{definition.name}"
53
+ end
54
+
55
+ def failure_result_with(value, error_message)
56
+ ConformResult.new(value, errors: [
57
+ ConformError.new(definition,
58
+ standard_error_message,
59
+ translated_message: error_message)
60
+ ])
61
+ end
62
+ end
32
63
  end
33
64
  end
34
65
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "definition/types/base"
4
+ require "definition/types/error_renderers/leaf"
4
5
 
5
6
  module Definition
6
7
  module Types
@@ -23,6 +24,10 @@ module Definition
23
24
  Conformer.new(self).conform(value)
24
25
  end
25
26
 
27
+ def error_renderer
28
+ ErrorRenderers::Leaf
29
+ end
30
+
26
31
  class Conformer
27
32
  def initialize(definition)
28
33
  self.definition = definition
@@ -34,7 +39,8 @@ module Definition
34
39
  result
35
40
  else
36
41
  error = ConformError.new(definition,
37
- "None of the definitions are valid for '#{definition.name}'",
42
+ "None of the definitions are valid for '#{definition.name}'."\
43
+ " Errors for last tested definition:",
38
44
  sub_errors: result)
39
45
  ConformResult.new(value, errors: [error])
40
46
  end
@@ -48,7 +54,7 @@ module Definition
48
54
  result = definition.conform(value)
49
55
  return result if result.passed?
50
56
 
51
- errors.push(result.error_tree)
57
+ errors = result.error_tree
52
58
  end
53
59
 
54
60
  errors.flatten
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Definition
4
- VERSION = "0.6.1"
4
+ VERSION = "0.7.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: definition
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dominik Goltermann
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-12-14 00:00:00.000000000 Z
11
+ date: 2022-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -286,6 +286,9 @@ files:
286
286
  - lib/definition/types/and.rb
287
287
  - lib/definition/types/base.rb
288
288
  - lib/definition/types/each.rb
289
+ - lib/definition/types/error_renderers/lambda.rb
290
+ - lib/definition/types/error_renderers/leaf.rb
291
+ - lib/definition/types/error_renderers/standard.rb
289
292
  - lib/definition/types/include.rb
290
293
  - lib/definition/types/keys.rb
291
294
  - lib/definition/types/lambda.rb