dsl_compose 1.5.0 → 1.7.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/CHANGELOG.md +14 -0
- data/lib/dsl_compose/composer.rb +3 -12
- data/lib/dsl_compose/dsl/arguments/argument/equal_to_validation.rb +1 -4
- data/lib/dsl_compose/dsl/arguments/argument/format_validation.rb +1 -4
- data/lib/dsl_compose/dsl/arguments/argument/greater_than_or_equal_to_validation.rb +2 -8
- data/lib/dsl_compose/dsl/arguments/argument/greater_than_validation.rb +2 -8
- data/lib/dsl_compose/dsl/arguments/argument/in_validation.rb +2 -8
- data/lib/dsl_compose/dsl/arguments/argument/length_validation.rb +3 -6
- data/lib/dsl_compose/dsl/arguments/argument/less_than_or_equal_to_validation.rb +2 -8
- data/lib/dsl_compose/dsl/arguments/argument/less_than_validation.rb +2 -8
- data/lib/dsl_compose/dsl/arguments/argument/not_in_validation.rb +2 -8
- data/lib/dsl_compose/dsl/arguments/argument.rb +38 -50
- data/lib/dsl_compose/dsl/arguments.rb +5 -20
- data/lib/dsl_compose/dsl/dsl_method.rb +6 -46
- data/lib/dsl_compose/dsl.rb +8 -24
- data/lib/dsl_compose/dsls.rb +4 -13
- data/lib/dsl_compose/interpreter/execution/arguments.rb +24 -26
- data/lib/dsl_compose/interpreter/execution/method_calls/method_call.rb +0 -24
- data/lib/dsl_compose/interpreter/execution/method_calls.rb +6 -0
- data/lib/dsl_compose/interpreter/execution.rb +3 -8
- data/lib/dsl_compose/interpreter.rb +15 -0
- data/lib/dsl_compose/parser/for_children_of_parser/for_dsl_parser/for_method_parser.rb +4 -10
- data/lib/dsl_compose/parser/for_children_of_parser/for_dsl_parser.rb +4 -10
- data/lib/dsl_compose/parser/for_children_of_parser.rb +3 -9
- data/lib/dsl_compose/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 461fe3b90a0a36703aee0be51b3594472d2fc55ff1eab2b6b5bfabd851446d09
|
4
|
+
data.tar.gz: 65ba43be5dfcefbaf5588744b66fcd73a8266abbea65bcb59699132c43ed47a7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9d2b86c2398b49217ba29152f68f6666e0bcbe926d4adadaac29b4f4a3d8500b120192c469c4fa25f68b68c58e73782459356a7845bcabb0237076521e4e0f37
|
7
|
+
data.tar.gz: 4f58959006d911cb13d75ccddc1871416736236d0e278844f6beb1c22a546d2e8d3620230931a2108c8949ad346a65ce27f3ae437fd8d55e5563603ad8421d24
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [1.7.0](https://github.com/craigulliott/dsl_compose/compare/v1.6.0...v1.7.0) (2023-07-07)
|
4
|
+
|
5
|
+
|
6
|
+
### Features
|
7
|
+
|
8
|
+
* better error messages ([#19](https://github.com/craigulliott/dsl_compose/issues/19)) ([a9afa6c](https://github.com/craigulliott/dsl_compose/commit/a9afa6cb1b7482d0d7a646b6872ca5e969393eb7))
|
9
|
+
|
10
|
+
## [1.6.0](https://github.com/craigulliott/dsl_compose/compare/v1.5.0...v1.6.0) (2023-07-07)
|
11
|
+
|
12
|
+
|
13
|
+
### Features
|
14
|
+
|
15
|
+
* added an interpreter clear method to erase state between tests ([#17](https://github.com/craigulliott/dsl_compose/issues/17)) ([9d0a0c9](https://github.com/craigulliott/dsl_compose/commit/9d0a0c9c521bed61f08fecaa388d1410f513498b))
|
16
|
+
|
3
17
|
## [1.5.0](https://github.com/craigulliott/dsl_compose/compare/v1.4.0...v1.5.0) (2023-07-07)
|
4
18
|
|
5
19
|
|
data/lib/dsl_compose/composer.rb
CHANGED
@@ -3,26 +3,17 @@
|
|
3
3
|
module DSLCompose
|
4
4
|
module Composer
|
5
5
|
class ComposerAlreadyInstalledError < StandardError
|
6
|
-
def message
|
7
|
-
"This module has already been included or the define_dsl singleton method already exists for this class."
|
8
|
-
end
|
9
6
|
end
|
10
7
|
|
11
8
|
class MethodAlreadyExistsWithThisDSLNameError < StandardError
|
12
|
-
def message
|
13
|
-
"The `define_dsl` singleton method already exists for this class."
|
14
|
-
end
|
15
9
|
end
|
16
10
|
|
17
11
|
class GetDSLExecutionResultsMethodAlreadyExistsError < StandardError
|
18
|
-
def message
|
19
|
-
"The `dsls` singleton method already exists for this class."
|
20
|
-
end
|
21
12
|
end
|
22
13
|
|
23
14
|
def self.included klass
|
24
15
|
if (klass.private_methods + klass.methods).include? :define_dsl
|
25
|
-
raise ComposerAlreadyInstalledError
|
16
|
+
raise ComposerAlreadyInstalledError, "This module has already been included or the define_dsl singleton method already exists for this class."
|
26
17
|
end
|
27
18
|
|
28
19
|
# create an interpreter for this class which will be shared by all child classes and all
|
@@ -31,7 +22,7 @@ module DSLCompose
|
|
31
22
|
|
32
23
|
# return a specific DSL which is defined for this class
|
33
24
|
if klass.respond_to? :dsls
|
34
|
-
raise GetDSLExecutionResultsMethodAlreadyExistsError
|
25
|
+
raise GetDSLExecutionResultsMethodAlreadyExistsError, "The `dsls` singleton method already exists for this class."
|
35
26
|
end
|
36
27
|
|
37
28
|
klass.define_singleton_method :dsls do
|
@@ -52,7 +43,7 @@ module DSLCompose
|
|
52
43
|
|
53
44
|
# ensure that creating this DSL will not override any existing methods on this class
|
54
45
|
if respond_to? name
|
55
|
-
raise MethodAlreadyExistsWithThisDSLNameError
|
46
|
+
raise MethodAlreadyExistsWithThisDSLNameError, "The `define_dsl` singleton method `#{name}` already exists for this class."
|
56
47
|
end
|
57
48
|
|
58
49
|
# add a singleton method with the name of this new DSL onto our class, this is how our new DSL will be accessed
|
@@ -6,9 +6,6 @@ module DSLCompose
|
|
6
6
|
class Argument
|
7
7
|
class EqualToValidation
|
8
8
|
class ValidationFailedError < StandardError
|
9
|
-
def message
|
10
|
-
"The argument is invalid"
|
11
|
-
end
|
12
9
|
end
|
13
10
|
|
14
11
|
def initialize value
|
@@ -16,7 +13,7 @@ module DSLCompose
|
|
16
13
|
end
|
17
14
|
|
18
15
|
def validate! value
|
19
|
-
raise ValidationFailedError unless value == @value
|
16
|
+
raise ValidationFailedError, "The argument is invalid. Expected #{@value} but received #{value}" unless value == @value
|
20
17
|
end
|
21
18
|
end
|
22
19
|
end
|
@@ -6,9 +6,6 @@ module DSLCompose
|
|
6
6
|
class Argument
|
7
7
|
class FormatValidation
|
8
8
|
class ValidationFailedError < StandardError
|
9
|
-
def message
|
10
|
-
"The argument is invalid"
|
11
|
-
end
|
12
9
|
end
|
13
10
|
|
14
11
|
def initialize regex
|
@@ -16,7 +13,7 @@ module DSLCompose
|
|
16
13
|
end
|
17
14
|
|
18
15
|
def validate! value
|
19
|
-
raise ValidationFailedError if @regex.match(value).nil?
|
16
|
+
raise ValidationFailedError, "The argument is invalid. Expected format #{@regex} but received #{value}" if @regex.match(value).nil?
|
20
17
|
end
|
21
18
|
end
|
22
19
|
end
|
@@ -6,27 +6,21 @@ module DSLCompose
|
|
6
6
|
class Argument
|
7
7
|
class GreaterThanOrEqualToValidation
|
8
8
|
class InvalidValueError < StandardError
|
9
|
-
def message
|
10
|
-
"The value provided to validate_greater_than must be a number"
|
11
|
-
end
|
12
9
|
end
|
13
10
|
|
14
11
|
class ValidationFailedError < StandardError
|
15
|
-
def message
|
16
|
-
"The argument is invalid"
|
17
|
-
end
|
18
12
|
end
|
19
13
|
|
20
14
|
def initialize value
|
21
15
|
unless value.is_a?(Numeric)
|
22
|
-
raise InvalidValueError
|
16
|
+
raise InvalidValueError, "The value `#{value}` provided to this validator must be of type number"
|
23
17
|
end
|
24
18
|
|
25
19
|
@value = value
|
26
20
|
end
|
27
21
|
|
28
22
|
def validate! value
|
29
|
-
raise ValidationFailedError unless value >= @value
|
23
|
+
raise ValidationFailedError, "The argument is invalid. Expected greater than or equal to #{@value} but received #{value}" unless value >= @value
|
30
24
|
end
|
31
25
|
end
|
32
26
|
end
|
@@ -6,27 +6,21 @@ module DSLCompose
|
|
6
6
|
class Argument
|
7
7
|
class GreaterThanValidation
|
8
8
|
class InvalidValueError < StandardError
|
9
|
-
def message
|
10
|
-
"The value provided to validate_greater_than must be a number"
|
11
|
-
end
|
12
9
|
end
|
13
10
|
|
14
11
|
class ValidationFailedError < StandardError
|
15
|
-
def message
|
16
|
-
"The argument is invalid"
|
17
|
-
end
|
18
12
|
end
|
19
13
|
|
20
14
|
def initialize value
|
21
15
|
unless value.is_a?(Numeric)
|
22
|
-
raise InvalidValueError
|
16
|
+
raise InvalidValueError, "The value `#{value}` provided to this validator must be of type number"
|
23
17
|
end
|
24
18
|
|
25
19
|
@value = value
|
26
20
|
end
|
27
21
|
|
28
22
|
def validate! value
|
29
|
-
raise ValidationFailedError unless value > @value
|
23
|
+
raise ValidationFailedError, "The argument is invalid. Expected greater than #{@value} but received #{value}" unless value > @value
|
30
24
|
end
|
31
25
|
end
|
32
26
|
end
|
@@ -6,27 +6,21 @@ module DSLCompose
|
|
6
6
|
class Argument
|
7
7
|
class InValidation
|
8
8
|
class InvalidValueError < StandardError
|
9
|
-
def message
|
10
|
-
"The value provided to validate_greater_than must be a number"
|
11
|
-
end
|
12
9
|
end
|
13
10
|
|
14
11
|
class ValidationFailedError < StandardError
|
15
|
-
def message
|
16
|
-
"The argument is invalid"
|
17
|
-
end
|
18
12
|
end
|
19
13
|
|
20
14
|
def initialize values
|
21
15
|
unless values.is_a?(Array)
|
22
|
-
raise InvalidValueError
|
16
|
+
raise InvalidValueError, "The value `#{values}` provided to this validator must be of type Array"
|
23
17
|
end
|
24
18
|
|
25
19
|
@values = values
|
26
20
|
end
|
27
21
|
|
28
22
|
def validate! value
|
29
|
-
raise ValidationFailedError unless @values.include? value
|
23
|
+
raise ValidationFailedError, "The argument is invalid. Expected in #{@values} but received #{value}" unless @values.include? value
|
30
24
|
end
|
31
25
|
end
|
32
26
|
end
|
@@ -6,9 +6,6 @@ module DSLCompose
|
|
6
6
|
class Argument
|
7
7
|
class LengthValidation
|
8
8
|
class ValidationFailedError < StandardError
|
9
|
-
def message
|
10
|
-
"The argument is invalid"
|
11
|
-
end
|
12
9
|
end
|
13
10
|
|
14
11
|
def initialize maximum: nil, minimum: nil, is: nil
|
@@ -20,17 +17,17 @@ module DSLCompose
|
|
20
17
|
def validate! value
|
21
18
|
maximum = @maximum
|
22
19
|
unless maximum.nil?
|
23
|
-
raise ValidationFailedError if value.length > maximum
|
20
|
+
raise ValidationFailedError, "The argument is invalid. Expected #{value} to be less than or equal to #{maximum} characters" if value.length > maximum
|
24
21
|
end
|
25
22
|
|
26
23
|
minimum = @minimum
|
27
24
|
unless minimum.nil?
|
28
|
-
raise ValidationFailedError if value.length < minimum
|
25
|
+
raise ValidationFailedError, "The argument is invalid. Expected #{value} to be greater than or equal to #{minimum} characters" if value.length < minimum
|
29
26
|
end
|
30
27
|
|
31
28
|
is = @is
|
32
29
|
unless is.nil?
|
33
|
-
raise ValidationFailedError if value.length != is
|
30
|
+
raise ValidationFailedError, "The argument is invalid. Expected #{value} to be #{is} characters long" if value.length != is
|
34
31
|
end
|
35
32
|
|
36
33
|
true
|
@@ -6,27 +6,21 @@ module DSLCompose
|
|
6
6
|
class Argument
|
7
7
|
class LessThanOrEqualToValidation
|
8
8
|
class InvalidValueError < StandardError
|
9
|
-
def message
|
10
|
-
"The value provided to validate_greater_than must be a number"
|
11
|
-
end
|
12
9
|
end
|
13
10
|
|
14
11
|
class ValidationFailedError < StandardError
|
15
|
-
def message
|
16
|
-
"The argument is invalid"
|
17
|
-
end
|
18
12
|
end
|
19
13
|
|
20
14
|
def initialize value
|
21
15
|
unless value.is_a?(Numeric)
|
22
|
-
raise InvalidValueError
|
16
|
+
raise InvalidValueError, "The value `#{value}` provided to this validator must be of type number"
|
23
17
|
end
|
24
18
|
|
25
19
|
@value = value
|
26
20
|
end
|
27
21
|
|
28
22
|
def validate! value
|
29
|
-
raise ValidationFailedError unless value <= @value
|
23
|
+
raise ValidationFailedError, "The argument is invalid. Expected less than or equal to #{@value} but received #{value}" unless value <= @value
|
30
24
|
end
|
31
25
|
end
|
32
26
|
end
|
@@ -6,27 +6,21 @@ module DSLCompose
|
|
6
6
|
class Argument
|
7
7
|
class LessThanValidation
|
8
8
|
class InvalidValueError < StandardError
|
9
|
-
def message
|
10
|
-
"The value provided to validate_greater_than must be a number"
|
11
|
-
end
|
12
9
|
end
|
13
10
|
|
14
11
|
class ValidationFailedError < StandardError
|
15
|
-
def message
|
16
|
-
"The argument is invalid"
|
17
|
-
end
|
18
12
|
end
|
19
13
|
|
20
14
|
def initialize value
|
21
15
|
unless value.is_a?(Numeric)
|
22
|
-
raise InvalidValueError
|
16
|
+
raise InvalidValueError, "The value `#{value}` provided to this validator must be of type number"
|
23
17
|
end
|
24
18
|
|
25
19
|
@value = value
|
26
20
|
end
|
27
21
|
|
28
22
|
def validate! value
|
29
|
-
raise ValidationFailedError unless value < @value
|
23
|
+
raise ValidationFailedError, "The argument is invalid. Expected less than #{@value} but received #{value}" unless value < @value
|
30
24
|
end
|
31
25
|
end
|
32
26
|
end
|
@@ -6,27 +6,21 @@ module DSLCompose
|
|
6
6
|
class Argument
|
7
7
|
class NotInValidation
|
8
8
|
class InvalidValueError < StandardError
|
9
|
-
def message
|
10
|
-
"The value provided to validate_greater_than must be a number"
|
11
|
-
end
|
12
9
|
end
|
13
10
|
|
14
11
|
class ValidationFailedError < StandardError
|
15
|
-
def message
|
16
|
-
"The argument is invalid"
|
17
|
-
end
|
18
12
|
end
|
19
13
|
|
20
14
|
def initialize values
|
21
15
|
unless values.is_a?(Array)
|
22
|
-
raise InvalidValueError
|
16
|
+
raise InvalidValueError, "The value `#{values}` provided to this validator must be of type Array"
|
23
17
|
end
|
24
18
|
|
25
19
|
@values = values
|
26
20
|
end
|
27
21
|
|
28
22
|
def validate! value
|
29
|
-
raise ValidationFailedError if @values.include?(value)
|
23
|
+
raise ValidationFailedError, "The argument is invalid. Expected not in #{@values} but received #{value}" if @values.include?(value)
|
30
24
|
end
|
31
25
|
end
|
32
26
|
end
|
@@ -5,45 +5,27 @@ module DSLCompose
|
|
5
5
|
class Arguments
|
6
6
|
class Argument
|
7
7
|
class ValidationIncompatibleError < StandardError
|
8
|
-
def message
|
9
|
-
"The validation is not compatible with this argument type"
|
10
|
-
end
|
11
8
|
end
|
12
9
|
|
13
10
|
class ValidationAlreadyExistsError < StandardError
|
14
|
-
def message
|
15
|
-
"This validation has already been applied to this method option."
|
16
|
-
end
|
17
11
|
end
|
18
12
|
|
19
13
|
class InvalidTypeError < StandardError
|
20
|
-
def message
|
21
|
-
"Argument type must be one of :integer, :boolean, :float, :string or :symbol"
|
22
|
-
end
|
23
14
|
end
|
24
15
|
|
25
16
|
class InvalidNameError < StandardError
|
26
|
-
def message
|
27
|
-
"The option name is invalid, it must be of type symbol."
|
28
|
-
end
|
29
17
|
end
|
30
18
|
|
31
19
|
class InvalidDescriptionError < StandardError
|
32
|
-
def message
|
33
|
-
"The option description is invalid, it must be of type string and have length greater than 0."
|
34
|
-
end
|
35
20
|
end
|
36
21
|
|
37
22
|
class DescriptionAlreadyExistsError < StandardError
|
38
|
-
def message
|
39
|
-
"The description has already been set"
|
40
|
-
end
|
41
23
|
end
|
42
24
|
|
43
25
|
class ArgumentNameReservedError < StandardError
|
44
|
-
|
45
|
-
|
46
|
-
|
26
|
+
end
|
27
|
+
|
28
|
+
class ValidationInvalidArgumentError < StandardError
|
47
29
|
end
|
48
30
|
|
49
31
|
RESERVED_ARGUMENT_NAMES = [
|
@@ -87,18 +69,18 @@ module DSLCompose
|
|
87
69
|
if name.is_a? Symbol
|
88
70
|
|
89
71
|
if RESERVED_ARGUMENT_NAMES.include? name
|
90
|
-
raise ArgumentNameReservedError
|
72
|
+
raise ArgumentNameReservedError, "This argument name `#{name}` is a reserved word. The names #{RESERVED_ARGUMENT_NAMES.join ", "} can not be used here because the Parser uses them to express a structural part of the DSL"
|
91
73
|
end
|
92
74
|
|
93
75
|
@name = name
|
94
76
|
else
|
95
|
-
raise InvalidNameError
|
77
|
+
raise InvalidNameError, "The option name `#{name}` is invalid, it must be of type symbol."
|
96
78
|
end
|
97
79
|
|
98
80
|
if type == :integer || type == :boolean || type == :float || type == :string || type == :symbol
|
99
81
|
@type = type
|
100
82
|
else
|
101
|
-
raise InvalidTypeError
|
83
|
+
raise InvalidTypeError, "Argument type `#{type}` must be one of :integer, :boolean, :float, :string or :symbol"
|
102
84
|
end
|
103
85
|
|
104
86
|
@required = required ? true : false
|
@@ -111,6 +93,8 @@ module DSLCompose
|
|
111
93
|
if block
|
112
94
|
Interpreter.new(self).instance_eval(&block)
|
113
95
|
end
|
96
|
+
rescue => e
|
97
|
+
raise e, "Error defining argument #{name}: #{e.message}", e.backtrace
|
114
98
|
end
|
115
99
|
|
116
100
|
# Set the description for this Argument to the provided value.
|
@@ -119,11 +103,11 @@ module DSLCompose
|
|
119
103
|
# The `description` can only be set once per Argument
|
120
104
|
def set_description description
|
121
105
|
unless description.is_a?(String) && description.length > 0
|
122
|
-
raise InvalidDescriptionError
|
106
|
+
raise InvalidDescriptionError, "The option description `#{description}` is invalid, it must be of type string and have length greater than 0."
|
123
107
|
end
|
124
108
|
|
125
109
|
if has_description?
|
126
|
-
raise DescriptionAlreadyExistsError
|
110
|
+
raise DescriptionAlreadyExistsError, "The description has already been set"
|
127
111
|
end
|
128
112
|
|
129
113
|
@description = description
|
@@ -146,11 +130,15 @@ module DSLCompose
|
|
146
130
|
|
147
131
|
def validate_greater_than value
|
148
132
|
if @greater_than_validation
|
149
|
-
raise ValidationAlreadyExistsError
|
133
|
+
raise ValidationAlreadyExistsError, "The validation `greater_than` has already been applied to this method option."
|
134
|
+
end
|
135
|
+
|
136
|
+
unless value.is_a?(Numeric)
|
137
|
+
raise ValidationInvalidArgumentError, value
|
150
138
|
end
|
151
139
|
|
152
140
|
unless @type == :integer || @type == :float
|
153
|
-
raise ValidationIncompatibleError
|
141
|
+
raise ValidationIncompatibleError, "The validation type #{@type} is not compatible with this argument type"
|
154
142
|
end
|
155
143
|
|
156
144
|
@greater_than_validation = GreaterThanValidation.new value
|
@@ -158,15 +146,15 @@ module DSLCompose
|
|
158
146
|
|
159
147
|
def validate_greater_than_or_equal_to value
|
160
148
|
if @greater_than_or_equal_to_validation
|
161
|
-
raise ValidationAlreadyExistsError
|
149
|
+
raise ValidationAlreadyExistsError, "The validation `greater_than_or_equal_to` has already been applied to this method option."
|
162
150
|
end
|
163
151
|
|
164
152
|
unless value.is_a?(Numeric)
|
165
|
-
raise ValidationInvalidArgumentError
|
153
|
+
raise ValidationInvalidArgumentError, value
|
166
154
|
end
|
167
155
|
|
168
156
|
unless @type == :integer || @type == :float
|
169
|
-
raise ValidationIncompatibleError
|
157
|
+
raise ValidationIncompatibleError, "The validation type #{@type} is not compatible with this argument type"
|
170
158
|
end
|
171
159
|
|
172
160
|
@greater_than_or_equal_to_validation = GreaterThanOrEqualToValidation.new value
|
@@ -174,15 +162,15 @@ module DSLCompose
|
|
174
162
|
|
175
163
|
def validate_less_than value
|
176
164
|
if @less_than_validation
|
177
|
-
raise ValidationAlreadyExistsError
|
165
|
+
raise ValidationAlreadyExistsError, "The validation `less_than` has already been applied to this method option."
|
178
166
|
end
|
179
167
|
|
180
168
|
unless value.is_a?(Numeric)
|
181
|
-
raise ValidationInvalidArgumentError
|
169
|
+
raise ValidationInvalidArgumentError, value
|
182
170
|
end
|
183
171
|
|
184
172
|
unless @type == :integer || @type == :float
|
185
|
-
raise ValidationIncompatibleError
|
173
|
+
raise ValidationIncompatibleError, "The validation type #{@type} is not compatible with this argument type"
|
186
174
|
end
|
187
175
|
|
188
176
|
@less_than_validation = LessThanValidation.new value
|
@@ -190,15 +178,15 @@ module DSLCompose
|
|
190
178
|
|
191
179
|
def validate_less_than_or_equal_to value
|
192
180
|
if @less_than_or_equal_to_validation
|
193
|
-
raise ValidationAlreadyExistsError
|
181
|
+
raise ValidationAlreadyExistsError, "The validation `less_than_or_equal_to` has already been applied to this method option."
|
194
182
|
end
|
195
183
|
|
196
184
|
unless value.is_a?(Numeric)
|
197
|
-
raise ValidationInvalidArgumentError
|
185
|
+
raise ValidationInvalidArgumentError, value
|
198
186
|
end
|
199
187
|
|
200
188
|
unless @type == :integer || @type == :float
|
201
|
-
raise ValidationIncompatibleError
|
189
|
+
raise ValidationIncompatibleError, "The validation type #{@type} is not compatible with this argument type"
|
202
190
|
end
|
203
191
|
|
204
192
|
@less_than_or_equal_to_validation = LessThanOrEqualToValidation.new value
|
@@ -206,26 +194,26 @@ module DSLCompose
|
|
206
194
|
|
207
195
|
def validate_format regexp
|
208
196
|
if @format_validation
|
209
|
-
raise ValidationAlreadyExistsError
|
197
|
+
raise ValidationAlreadyExistsError, "The validation `format` has already been applied to this method option."
|
210
198
|
end
|
211
199
|
|
212
200
|
unless regexp.is_a? Regexp
|
213
|
-
raise ValidationInvalidArgumentError
|
201
|
+
raise ValidationInvalidArgumentError, regexp
|
214
202
|
end
|
215
203
|
|
216
204
|
unless @type == :string || @type == :symbol
|
217
|
-
raise ValidationIncompatibleError
|
205
|
+
raise ValidationIncompatibleError, "The validation type #{@type} is not compatible with this argument type"
|
218
206
|
end
|
219
207
|
@format_validation = FormatValidation.new regexp
|
220
208
|
end
|
221
209
|
|
222
210
|
def validate_equal_to value
|
223
211
|
if @equal_to_validation
|
224
|
-
raise ValidationAlreadyExistsError
|
212
|
+
raise ValidationAlreadyExistsError, "The validation `equal_to` has already been applied to this method option."
|
225
213
|
end
|
226
214
|
|
227
215
|
unless @type == :integer || @type == :float || @type == :string || @type == :symbol || @type == :boolean
|
228
|
-
raise ValidationIncompatibleError
|
216
|
+
raise ValidationIncompatibleError, "The validation type #{@type} is not compatible with this argument type"
|
229
217
|
end
|
230
218
|
|
231
219
|
@equal_to_validation = EqualToValidation.new value
|
@@ -233,15 +221,15 @@ module DSLCompose
|
|
233
221
|
|
234
222
|
def validate_in values
|
235
223
|
if @in_validation
|
236
|
-
raise ValidationAlreadyExistsError
|
224
|
+
raise ValidationAlreadyExistsError, "The validation `in` has already been applied to this method option."
|
237
225
|
end
|
238
226
|
|
239
227
|
unless values.is_a? Array
|
240
|
-
raise ValidationInvalidArgumentError
|
228
|
+
raise ValidationInvalidArgumentError, values
|
241
229
|
end
|
242
230
|
|
243
231
|
unless @type == :integer || @type == :float || @type == :string || @type == :symbol
|
244
|
-
raise ValidationIncompatibleError
|
232
|
+
raise ValidationIncompatibleError, "The validation type #{@type} is not compatible with this argument type"
|
245
233
|
end
|
246
234
|
|
247
235
|
@in_validation = InValidation.new values
|
@@ -249,15 +237,15 @@ module DSLCompose
|
|
249
237
|
|
250
238
|
def validate_not_in values
|
251
239
|
if @not_in_validation
|
252
|
-
raise ValidationAlreadyExistsError
|
240
|
+
raise ValidationAlreadyExistsError, "The validation `not_in` has already been applied to this method option."
|
253
241
|
end
|
254
242
|
|
255
243
|
unless values.is_a? Array
|
256
|
-
raise ValidationInvalidArgumentError
|
244
|
+
raise ValidationInvalidArgumentError, values
|
257
245
|
end
|
258
246
|
|
259
247
|
unless @type == :integer || @type == :float || @type == :string || @type == :symbol
|
260
|
-
raise ValidationIncompatibleError
|
248
|
+
raise ValidationIncompatibleError, "The validation type #{@type} is not compatible with this argument type"
|
261
249
|
end
|
262
250
|
|
263
251
|
@not_in_validation = NotInValidation.new values
|
@@ -265,11 +253,11 @@ module DSLCompose
|
|
265
253
|
|
266
254
|
def validate_length maximum: nil, minimum: nil, is: nil
|
267
255
|
if @length_validation
|
268
|
-
raise ValidationAlreadyExistsError
|
256
|
+
raise ValidationAlreadyExistsError, "The validation `length` has already been applied to this method option."
|
269
257
|
end
|
270
258
|
|
271
259
|
unless @type == :string || @type == :symbol
|
272
|
-
raise ValidationIncompatibleError
|
260
|
+
raise ValidationIncompatibleError, "The validation type #{@type} is not compatible with this argument type"
|
273
261
|
end
|
274
262
|
|
275
263
|
@length_validation = LengthValidation.new(maximum: maximum, minimum: minimum, is: is)
|
@@ -4,33 +4,18 @@ module DSLCompose
|
|
4
4
|
class DSL
|
5
5
|
class Arguments
|
6
6
|
class ArgumentDoesNotExistError < StandardError
|
7
|
-
def message
|
8
|
-
"This argument does not exist for this DSLMethod"
|
9
|
-
end
|
10
7
|
end
|
11
8
|
|
12
9
|
class ArgumentOrderingError < StandardError
|
13
|
-
def message
|
14
|
-
"Required arguments can not be added after optional ones"
|
15
|
-
end
|
16
10
|
end
|
17
11
|
|
18
12
|
class ArgumentAlreadyExistsError < StandardError
|
19
|
-
def message
|
20
|
-
"An argument with this name already exists for this DSL method"
|
21
|
-
end
|
22
13
|
end
|
23
14
|
|
24
15
|
class RequestedOptionalArgumentIsRequiredError < StandardError
|
25
|
-
def message
|
26
|
-
"A specific argument which was expected to be optional was requested, but the argument found was flagged as required"
|
27
|
-
end
|
28
16
|
end
|
29
17
|
|
30
18
|
class RequestedRequiredArgumentIsOptionalError < StandardError
|
31
|
-
def message
|
32
|
-
"A specific argument which was expected to be required was requested, but the argument found was flagged as optional"
|
33
|
-
end
|
34
19
|
end
|
35
20
|
|
36
21
|
def initialize
|
@@ -58,7 +43,7 @@ module DSLCompose
|
|
58
43
|
if has_argument? name
|
59
44
|
@arguments[name]
|
60
45
|
else
|
61
|
-
raise ArgumentDoesNotExistError
|
46
|
+
raise ArgumentDoesNotExistError, "The argument `#{name}` does not exist for this DSLMethod"
|
62
47
|
end
|
63
48
|
end
|
64
49
|
|
@@ -69,7 +54,7 @@ module DSLCompose
|
|
69
54
|
if arg.optional?
|
70
55
|
@arguments[name]
|
71
56
|
else
|
72
|
-
raise RequestedOptionalArgumentIsRequiredError
|
57
|
+
raise RequestedOptionalArgumentIsRequiredError, "A specific argument `#{name}` which was expected to be optional was requested, but the argument found was flagged as required"
|
73
58
|
end
|
74
59
|
end
|
75
60
|
|
@@ -80,7 +65,7 @@ module DSLCompose
|
|
80
65
|
if arg.required?
|
81
66
|
@arguments[name]
|
82
67
|
else
|
83
|
-
raise RequestedRequiredArgumentIsOptionalError
|
68
|
+
raise RequestedRequiredArgumentIsOptionalError, "A specific argument `#{name}` which was expected to be required was requested, but the argument found was flagged as optional"
|
84
69
|
end
|
85
70
|
end
|
86
71
|
|
@@ -98,12 +83,12 @@ module DSLCompose
|
|
98
83
|
# or optional on the method which is exposed in our DSL.
|
99
84
|
def add_argument name, required, type, &block
|
100
85
|
if @arguments.key? name
|
101
|
-
raise ArgumentAlreadyExistsError
|
86
|
+
raise ArgumentAlreadyExistsError, "An argument with the name `#{name}` already exists for this DSL method"
|
102
87
|
end
|
103
88
|
|
104
89
|
# required arguments may not come after optional ones
|
105
90
|
if required && optional_arguments.any?
|
106
|
-
raise ArgumentOrderingError
|
91
|
+
raise ArgumentOrderingError, "Required arguments can not be added after optional ones"
|
107
92
|
end
|
108
93
|
|
109
94
|
@arguments[name] = Argument.new(name, required, type, &block)
|