dsl_compose 1.5.0 → 1.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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)
|