dsl_compose 2.15.4 → 2.15.5
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 +8 -0
- data/lib/dsl_compose/interpreter.rb +10 -3
- data/lib/dsl_compose/parser/for_children_of_parser/for_dsl_parser.rb +2 -2
- data/lib/dsl_compose/parser/for_children_of_parser.rb +14 -8
- data/lib/dsl_compose/reader.rb +3 -3
- data/lib/dsl_compose/version.rb +1 -1
- data/sig/dsl_compose/parser/for_children_of_parser/for_dsl_parser.rbs +1 -1
- data/sig/dsl_compose/parser/for_children_of_parser.rbs +5 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0750c158e424591df6b08e2ac3786b689116b5850152b6f6fe51fc39092895a
|
4
|
+
data.tar.gz: 7e818d88dd0dde898b80faa4eb24f18eaa6ca8bd64a4c83fc974621ccee71e3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a374a44e85a232cc6681c98034a1196cc7ccc077689a3f9bb75354aa54e0e02be8758a527de68944af95c81f04157b07df4bcaccab20877cfee48f2164eddad2
|
7
|
+
data.tar.gz: 73fd1c43e1677b42c2389a4919e0ced10feda5e35ca564d1d025376fbb357282f5d8bf7411980d3d9d744c46b6d50cbc2fa370314ad0c4de58093eec569fc53d
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [2.15.5](https://github.com/craigulliott/dsl_compose/compare/v2.15.4...v2.15.5) (2023-10-06)
|
4
|
+
|
5
|
+
|
6
|
+
### Bug Fixes
|
7
|
+
|
8
|
+
* added a first_use_only option to the parser so that only the most recent execution of a DSL will be used ([717293d](https://github.com/craigulliott/dsl_compose/commit/717293d906a183d8a13ffa1c4ae47e901de428a0))
|
9
|
+
* specs and fixes for `first_use_only` option on parser ([a7dc087](https://github.com/craigulliott/dsl_compose/commit/a7dc0878ffef9a104c25d4f43d5796f939cb7567))
|
10
|
+
|
3
11
|
## [2.15.4](https://github.com/craigulliott/dsl_compose/compare/v2.15.3...v2.15.4) (2023-10-04)
|
4
12
|
|
5
13
|
|
@@ -66,8 +66,15 @@ module DSLCompose
|
|
66
66
|
|
67
67
|
# Returns an array of all executions for a given name and class. This includes
|
68
68
|
# any ancestors of the provided class
|
69
|
-
def class_dsl_executions klass, dsl_name, on_current_class, on_ancestor_class
|
70
|
-
@executions.filter { |e| e.dsl.name == dsl_name && ((on_current_class && e.klass == klass) || (on_ancestor_class && klass < e.klass)) }
|
69
|
+
def class_dsl_executions klass, dsl_name, on_current_class, on_ancestor_class, first_use_only
|
70
|
+
filtered_executions = @executions.filter { |e| e.dsl.name == dsl_name && ((on_current_class && e.klass == klass) || (on_ancestor_class && klass < e.klass)) }
|
71
|
+
# Because the classes were evaluated in order, we can just return the
|
72
|
+
# last execution
|
73
|
+
if first_use_only && filtered_executions.length > 0
|
74
|
+
[filtered_executions.last]
|
75
|
+
else
|
76
|
+
filtered_executions
|
77
|
+
end
|
71
78
|
end
|
72
79
|
|
73
80
|
# returns the most recent, closest single execution of a dsl with the
|
@@ -83,7 +90,7 @@ module DSLCompose
|
|
83
90
|
# note that this method does not need to do any special sorting, the required
|
84
91
|
# order for getting the most recent execution is already guaranteed because
|
85
92
|
# parent classes in ruby always have to be evaluated before their descendants
|
86
|
-
class_dsl_executions(klass, dsl_name, true, true).last
|
93
|
+
class_dsl_executions(klass, dsl_name, true, true, false).last
|
87
94
|
end
|
88
95
|
|
89
96
|
# removes all executions from the interpreter, and any parser_usage_notes
|
@@ -20,7 +20,7 @@ module DSLCompose
|
|
20
20
|
# of the provided name is used by the child class.
|
21
21
|
#
|
22
22
|
# base_class and child_class are set from the ForChildrenOfParser
|
23
|
-
def initialize base_class, child_class, dsl_names, on_current_class, on_ancestor_class, &block
|
23
|
+
def initialize base_class, child_class, dsl_names, on_current_class, on_ancestor_class, first_use_only, &block
|
24
24
|
@base_class = base_class
|
25
25
|
@child_class = child_class
|
26
26
|
@dsl_names = dsl_names
|
@@ -62,7 +62,7 @@ module DSLCompose
|
|
62
62
|
dsl_names.each do |dsl_name|
|
63
63
|
# a dsl can be execued multiple times on a class, so we find all of the executions
|
64
64
|
# here and then yield the block once for each execution
|
65
|
-
base_class.dsls.class_dsl_executions(child_class, dsl_name, on_current_class, on_ancestor_class).each do |dsl_execution|
|
65
|
+
base_class.dsls.class_dsl_executions(child_class, dsl_name, on_current_class, on_ancestor_class, first_use_only).each do |dsl_execution|
|
66
66
|
# we only provide the requested arguments to the block, this allows
|
67
67
|
# us to use keyword arguments to force a naming convention on these arguments
|
68
68
|
# and to validate their use
|
@@ -90,36 +90,42 @@ module DSLCompose
|
|
90
90
|
# end
|
91
91
|
#
|
92
92
|
# If `on_current_class` is true, then the block will be yielded to for each DSL
|
93
|
-
# which was used directly on the current class. If `
|
94
|
-
# then the block will not be yielded to for any DSL which was used directly on.
|
93
|
+
# which was used directly on the current class. If `on_current_class` is false,
|
94
|
+
# then the block will not be yielded to for any DSL which was used directly on it.
|
95
95
|
# If `on_ancestor_class` is true, then the block will be yielded to for each DSL
|
96
96
|
# which was used on any class in the current classes ancestry. If `on_ancestor_class`
|
97
97
|
# is false, then the block will not be yielded to for any DSL which was used on
|
98
98
|
# any class in the current classes ancestry.
|
99
|
-
|
99
|
+
#
|
100
|
+
# If `first_use_only` is true, then this block will only yeild once for each subject class
|
101
|
+
# which directly uses or inherits use of the provided DSL. The DSL execution which occurs
|
102
|
+
# first in the class will be selected, and if the class does not use the DSL then each of
|
103
|
+
# the classes ancestors will be tested until an execution is found (only the current class
|
104
|
+
# will be tested if skip_inherited_dsls has been set to true).
|
105
|
+
def for_dsl dsl_names, on_current_class: true, on_ancestor_class: false, first_use_only: false, &block
|
100
106
|
child_class = @child_class
|
101
107
|
|
102
108
|
unless child_class
|
103
109
|
raise NoChildClassError, "No child_class was found, please call this method from within a `for_children_of` block"
|
104
110
|
end
|
105
111
|
|
106
|
-
ForDSLParser.new(@base_class, child_class, dsl_names, on_current_class, on_ancestor_class, &block)
|
112
|
+
ForDSLParser.new(@base_class, child_class, dsl_names, on_current_class, on_ancestor_class, first_use_only, &block)
|
107
113
|
end
|
108
114
|
|
109
115
|
# this is a wrapper for the `for_dsl` method, but it provides a value of true
|
110
116
|
# for the `on_ancestor_class` argument and a value of false for the `on_current_class`
|
111
117
|
# argument. This will cause the parser to only yeild for dsls which were used on
|
112
118
|
# a class which is in the current classes ancestry, but not on the current class
|
113
|
-
def for_inherited_dsl dsl_names, &block
|
114
|
-
for_dsl dsl_names, on_current_class: false, on_ancestor_class: true, &block
|
119
|
+
def for_inherited_dsl dsl_names, first_use_only: false, &block
|
120
|
+
for_dsl dsl_names, on_current_class: false, on_ancestor_class: true, first_use_only: first_use_only, &block
|
115
121
|
end
|
116
122
|
|
117
123
|
# this is a wrapper for the `for_dsl` method, but it provides a value of true
|
118
124
|
# for the `on_ancestor_class` argument and a value of true for the `on_current_class`
|
119
125
|
# argument. This will cause the parser to yeild for dsls which were used on either
|
120
126
|
# the current class or any class in its ancestry
|
121
|
-
def for_dsl_or_inherited_dsl dsl_names, &block
|
122
|
-
for_dsl dsl_names, on_current_class: true, on_ancestor_class: true, &block
|
127
|
+
def for_dsl_or_inherited_dsl dsl_names, first_use_only: false, &block
|
128
|
+
for_dsl dsl_names, on_current_class: true, on_ancestor_class: true, first_use_only: first_use_only, &block
|
123
129
|
end
|
124
130
|
|
125
131
|
# takes a description of what this parser does and stores it against the DSL definition
|
data/lib/dsl_compose/reader.rb
CHANGED
@@ -89,7 +89,7 @@ module DSLCompose
|
|
89
89
|
# Returns an array of ExecutionReaders to represent each time the DSL was used
|
90
90
|
# on the provided class.
|
91
91
|
def executions
|
92
|
-
@dsl_defining_class.dsls.class_dsl_executions(@klass, @dsl_name, true, false).map do |execution|
|
92
|
+
@dsl_defining_class.dsls.class_dsl_executions(@klass, @dsl_name, true, false, false).map do |execution|
|
93
93
|
ExecutionReader.new execution
|
94
94
|
end
|
95
95
|
end
|
@@ -100,7 +100,7 @@ module DSLCompose
|
|
100
100
|
# earliest ancestor first and if the DSL was used more than once on a class then
|
101
101
|
# the order they were used.
|
102
102
|
def ancestor_executions
|
103
|
-
@dsl_defining_class.dsls.class_dsl_executions(@klass, @dsl_name, false, true).map do |execution|
|
103
|
+
@dsl_defining_class.dsls.class_dsl_executions(@klass, @dsl_name, false, true, false).map do |execution|
|
104
104
|
ExecutionReader.new execution
|
105
105
|
end
|
106
106
|
end
|
@@ -110,7 +110,7 @@ module DSLCompose
|
|
110
110
|
# be returned in the order they were executed, which is the earliest ancestor first
|
111
111
|
# and if the DSL was used more than once on a class then the order they were used.
|
112
112
|
def all_executions
|
113
|
-
@dsl_defining_class.dsls.class_dsl_executions(@klass, @dsl_name, true, true).map do |execution|
|
113
|
+
@dsl_defining_class.dsls.class_dsl_executions(@klass, @dsl_name, true, true, false).map do |execution|
|
114
114
|
ExecutionReader.new execution
|
115
115
|
end
|
116
116
|
end
|
data/lib/dsl_compose/version.rb
CHANGED
@@ -8,7 +8,7 @@ module DSLCompose
|
|
8
8
|
@dsl_names: Array[Symbol]
|
9
9
|
@dsl_execution: Interpreter::Execution
|
10
10
|
|
11
|
-
def initialize: (singleton(Object) base_class, singleton(Object) child_class, Array[Symbol] dsl_names, bool on_current_class, bool on_ancestor_class) -> void
|
11
|
+
def initialize: (singleton(Object) base_class, singleton(Object) child_class, Array[Symbol] dsl_names, bool on_current_class, bool on_ancestor_class, bool first_use_only) -> void
|
12
12
|
|
13
13
|
# overriding this method because steep doesn't
|
14
14
|
# correctly infer that a block is being passed to this method
|
@@ -14,10 +14,12 @@ module DSLCompose
|
|
14
14
|
) -> void
|
15
15
|
|
16
16
|
private
|
17
|
-
def for_dsl: (Array[Symbol] dsl_names, ?on_current_class: bool, ?on_ancestor_class: bool) -> untyped
|
17
|
+
def for_dsl: (Array[Symbol] dsl_names, ?on_current_class: bool, ?on_ancestor_class: bool, ?first_use_only: bool) -> untyped
|
18
|
+
def for_inherited_dsl: (Array[Symbol] dsl_names, ?first_use_only: bool) -> untyped
|
19
|
+
def for_dsl_or_inherited_dsl: (Array[Symbol] dsl_names, ?first_use_only: bool) -> untyped
|
18
20
|
|
19
21
|
class AllBlockParametersMustBeKeywordParametersError < StandardError
|
20
|
-
|
22
|
+
end
|
21
23
|
|
22
24
|
class ClassDoesNotUseDSLComposeError < StandardError
|
23
25
|
end
|
@@ -26,7 +28,7 @@ module DSLCompose
|
|
26
28
|
end
|
27
29
|
|
28
30
|
class NoChildClassError < StandardError
|
29
|
-
|
31
|
+
end
|
30
32
|
end
|
31
33
|
end
|
32
34
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dsl_compose
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.15.
|
4
|
+
version: 2.15.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Craig Ulliott
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-10-
|
11
|
+
date: 2023-10-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: class_spec_helper
|