dtk-dsl 1.0.0 → 1.0.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 +4 -4
- data/lib/dsl/aux.rb +31 -0
- data/lib/dsl/directory_parser.rb +3 -7
- data/lib/dsl/dsl_version.rb +1 -0
- data/lib/dsl/file_generator/content_input/mixin.rb +2 -5
- data/lib/dsl/file_generator/content_input/tag/assignment.rb +32 -0
- data/lib/dsl/file_generator/content_input/tag/simple.rb +26 -0
- data/lib/dsl/file_generator/content_input/{tags.rb → tag.rb} +61 -23
- data/lib/dsl/file_generator/content_input.rb +1 -1
- data/lib/dsl/file_generator.rb +7 -0
- data/lib/dsl/file_parser.rb +1 -0
- data/lib/dsl/file_type/match.rb +68 -0
- data/lib/dsl/file_type/matching_files.rb +57 -0
- data/lib/dsl/file_type/subclasses.rb +71 -0
- data/lib/dsl/file_type.rb +120 -51
- data/lib/dsl/input_output_common/canonical/hash.rb +7 -1
- data/lib/dsl/input_output_common/canonical/hash_key.rb +20 -1
- data/lib/dsl/qualified_key.rb +2 -0
- data/lib/dsl/template/constant_class_mixin.rb +8 -9
- data/lib/dsl/template/generation/class_mixin.rb +6 -2
- data/lib/dsl/template/generation/mixin.rb +35 -20
- data/lib/dsl/template/loader.rb +1 -1
- data/lib/dsl/template/nested_dsl_file/mixin.rb +77 -0
- data/lib/dsl/template/nested_dsl_file.rb +25 -0
- data/lib/dsl/template/parsing/class_mixin.rb +8 -9
- data/lib/dsl/template/parsing/mixin.rb +31 -8
- data/lib/dsl/template/v1/assembly.rb +13 -16
- data/lib/dsl/template/v1/common_module_summary.rb +1 -1
- data/lib/dsl/template/v1/component.rb +12 -8
- data/lib/dsl/template/v1/service_instance.rb +5 -3
- data/lib/dsl/template/v1/workflow.rb +108 -38
- data/lib/dsl/template/v1.rb +4 -0
- data/lib/dsl/template.rb +3 -0
- data/lib/dsl/version.rb +1 -1
- data/lib/dtk_dsl.rb +1 -0
- metadata +11 -4
- data/lib/dsl/directory_parser/path_info.rb +0 -62
@@ -49,7 +49,13 @@ module DTK::DSL
|
|
49
49
|
ret
|
50
50
|
end
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
|
+
def remove_all_except!(*output_keys)
|
54
|
+
matching_internal_indexes = output_keys.inject([]) { |a, k| a + possible_key_forms_from_output_key(k) }
|
55
|
+
keys.each { |internal_index| delete(internal_index) unless matching_internal_indexes.include?(internal_index) }
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
53
59
|
private
|
54
60
|
|
55
61
|
def canonical_key_form_from_output_key(output_key)
|
@@ -28,9 +28,22 @@ module DTK::DSL
|
|
28
28
|
Assembly = :asssembly
|
29
29
|
|
30
30
|
# Used in assembly
|
31
|
-
Components = :components
|
32
31
|
Workflows = :workflows
|
33
32
|
|
33
|
+
# Used in nested module
|
34
|
+
Module = :module
|
35
|
+
Version = :version
|
36
|
+
|
37
|
+
# Used in workflows
|
38
|
+
Subtasks = :subtasks
|
39
|
+
SubtaskOrder = :subtask_order
|
40
|
+
Node = :node
|
41
|
+
ExecutionBlocks = :exec_blocks
|
42
|
+
Flatten = :flatten
|
43
|
+
Action = :action
|
44
|
+
Actions = :actions
|
45
|
+
OrderedComponents = :ordered_components
|
46
|
+
|
34
47
|
# Used at multiple levels
|
35
48
|
Name = :name
|
36
49
|
Description = :description
|
@@ -40,6 +53,12 @@ module DTK::DSL
|
|
40
53
|
Attributes = :attributes
|
41
54
|
Value = :value
|
42
55
|
Nodes = :nodes
|
56
|
+
Target = :target
|
57
|
+
Components = :components
|
58
|
+
|
59
|
+
# meta info
|
60
|
+
Import = :import
|
61
|
+
HiddenImportStatement = :hidden_import_statement
|
43
62
|
|
44
63
|
def self.index(output_key)
|
45
64
|
begin
|
data/lib/dsl/qualified_key.rb
CHANGED
@@ -20,13 +20,18 @@ module DTK::DSL
|
|
20
20
|
# assumption is that where this included could have a Variations module
|
21
21
|
module ClassMixin
|
22
22
|
module Constant
|
23
|
-
|
23
|
+
# opts can have keys:
|
24
|
+
# :set_matching_key - if specified this wil be an empty array to add matching_key to
|
25
|
+
def matches?(object, constant, opts = {})
|
24
26
|
unless object.nil?
|
25
27
|
variations = variations(constant)
|
26
28
|
if object.is_a?(Hash)
|
27
|
-
|
29
|
+
if matching_key = hash_key_if_match?(object, variations)
|
30
|
+
opts[:set_matching_key] << matching_key if opts[:set_matching_key]
|
31
|
+
object[matching_key]
|
32
|
+
end
|
28
33
|
elsif object.is_a?(String) || object.is_a?(Symbol)
|
29
|
-
|
34
|
+
variations.include?(object.to_s)
|
30
35
|
else
|
31
36
|
fail Error.new("Unexpected object class (#{object.class})")
|
32
37
|
end
|
@@ -79,12 +84,6 @@ module DTK::DSL
|
|
79
84
|
variations.find { |key| hash.key?(key) }
|
80
85
|
end
|
81
86
|
|
82
|
-
def hash_value_of_matching_key?(hash, variations)
|
83
|
-
if matching_key = hash_key_if_match?(hash, variations)
|
84
|
-
hash[matching_key]
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
87
|
end
|
89
88
|
end
|
90
89
|
end
|
@@ -27,11 +27,15 @@ module DTK::DSL
|
|
27
27
|
private
|
28
28
|
|
29
29
|
def generate_element(content, parent)
|
30
|
-
create_for_generation(content,
|
30
|
+
create_for_generation(content, generation_opts(parent)).generate_yaml_object
|
31
31
|
end
|
32
32
|
|
33
33
|
def generate_element?(content, parent)
|
34
|
-
create_for_generation(content,
|
34
|
+
create_for_generation(content, generation_opts(parent)).generate_yaml_object?
|
35
|
+
end
|
36
|
+
|
37
|
+
def generation_opts(parent)
|
38
|
+
{ :filter => parent.filter, :top => parent.top }
|
35
39
|
end
|
36
40
|
|
37
41
|
end
|
@@ -29,18 +29,21 @@ module DTK::DSL
|
|
29
29
|
generate!
|
30
30
|
end
|
31
31
|
|
32
|
-
attr_reader :filter
|
32
|
+
attr_reader :filter, :top
|
33
33
|
|
34
34
|
# opts can have keys
|
35
35
|
# :content (required)
|
36
36
|
# :filter
|
37
|
+
# :top
|
37
38
|
def generation_initialize(opts = {})
|
38
39
|
unless content = opts[:content]
|
39
40
|
raise Error, "Unexpected that opts[:content] is nil"
|
40
41
|
end
|
41
42
|
@content = content
|
42
43
|
@filter = opts[:filter]
|
43
|
-
@yaml_object = empty_yaml_object(content)
|
44
|
+
@yaml_object = empty_yaml_object(content_input: content)
|
45
|
+
@top = opts[:top] || self
|
46
|
+
generation_initialize_nested_dsl_files
|
44
47
|
end
|
45
48
|
private :generation_initialize
|
46
49
|
|
@@ -60,6 +63,13 @@ module DTK::DSL
|
|
60
63
|
YamlHelper.generate(@yaml_object)
|
61
64
|
end
|
62
65
|
|
66
|
+
# Array where each element has keys :path and :content
|
67
|
+
def generate_yaml_file_path__content_array(top_file_path)
|
68
|
+
self.generate!
|
69
|
+
[{ :path => top_file_path, :content => YamlHelper.generate(@yaml_object) }] + generate_nested_dsl_file_path__content_array
|
70
|
+
end
|
71
|
+
|
72
|
+
|
63
73
|
# The methods yaml_object_type can be set on concrete class; it wil be set if input and output types are different
|
64
74
|
def yaml_object_type
|
65
75
|
nil
|
@@ -71,7 +81,7 @@ module DTK::DSL
|
|
71
81
|
if content.nil?
|
72
82
|
nil
|
73
83
|
else
|
74
|
-
template_class(parse_template_type).create_for_generation(content, :filter => @filter).generate_yaml_object
|
84
|
+
template_class(parse_template_type).create_for_generation(content, :filter => @filter, :top => @top).generate_yaml_object
|
75
85
|
end
|
76
86
|
end
|
77
87
|
|
@@ -81,11 +91,16 @@ module DTK::DSL
|
|
81
91
|
end
|
82
92
|
end
|
83
93
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
94
|
+
# opts can have keys
|
95
|
+
# :content_input
|
96
|
+
# :output_type
|
97
|
+
def empty_yaml_object(opts = {})
|
98
|
+
if output_type = opts[:output_type] || self.yaml_object_type
|
99
|
+
FileGenerator::YamlObject.create(:output_type => output_type)
|
100
|
+
elsif content_input = opts[:content_input]
|
88
101
|
FileGenerator::YamlObject.create(:input => content_input)
|
102
|
+
else
|
103
|
+
raise Error, "If opts[:content_input] is nil, self.yaml_object_type or opts[:output_type] must have a value"
|
89
104
|
end
|
90
105
|
end
|
91
106
|
|
@@ -99,32 +114,32 @@ module DTK::DSL
|
|
99
114
|
obj.respond_to?(:empty?) and obj.empty?
|
100
115
|
end
|
101
116
|
|
117
|
+
def generation_val(key)
|
118
|
+
@content.val(key)
|
119
|
+
end
|
120
|
+
|
121
|
+
def generation_req(key)
|
122
|
+
@content.req(key)
|
123
|
+
end
|
124
|
+
|
102
125
|
def skip_for_generation?
|
103
126
|
@content.skip_for_generation?
|
104
127
|
end
|
105
128
|
|
106
129
|
def generation_set(constant, val)
|
107
|
-
set_generation_hash(
|
108
|
-
end
|
109
|
-
|
110
|
-
def generation_set_scalar(scalar)
|
111
|
-
@yaml_object = scalar
|
130
|
+
set_generation_hash(select_yaml_object_or_nested_dsl_file, constant, val)
|
112
131
|
end
|
113
132
|
|
114
133
|
def generation_merge(hash)
|
115
|
-
|
134
|
+
select_yaml_object_or_nested_dsl_file.merge!(hash)
|
116
135
|
end
|
117
136
|
|
118
137
|
def generation_add(array_element)
|
119
|
-
|
138
|
+
select_yaml_object_or_nested_dsl_file << array_element
|
120
139
|
end
|
121
140
|
|
122
|
-
def
|
123
|
-
@
|
124
|
-
end
|
125
|
-
|
126
|
-
def generation_req(key)
|
127
|
-
@content.req(key)
|
141
|
+
def generation_set_scalar(scalar)
|
142
|
+
@yaml_object = scalar
|
128
143
|
end
|
129
144
|
|
130
145
|
end
|
data/lib/dsl/template/loader.rb
CHANGED
@@ -52,7 +52,7 @@ module DTK::DSL
|
|
52
52
|
def self.template_class_aux(template_type, template_version)
|
53
53
|
base_class = Template.const_get("V#{template_version}")
|
54
54
|
begin
|
55
|
-
base_class.const_get(
|
55
|
+
base_class.const_get(Aux.snake_to_camel_case(template_type.to_s))
|
56
56
|
rescue
|
57
57
|
raise Error, "Invalid template_type '#{template_type}'"
|
58
58
|
end
|
@@ -0,0 +1,77 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::DSL
|
19
|
+
class Template
|
20
|
+
module NestedDSLFile
|
21
|
+
module Mixin
|
22
|
+
attr_reader :nested_file_content
|
23
|
+
|
24
|
+
private
|
25
|
+
def generation_initialize_nested_dsl_files
|
26
|
+
# If there iis any nested dsl in conetnt being generated then tese wil go on @nested_file_content
|
27
|
+
# which has keys that are relative paths and values being
|
28
|
+
@nested_file_content = {}
|
29
|
+
end
|
30
|
+
|
31
|
+
def generate_nested_dsl_file_path__content_array
|
32
|
+
@nested_file_content.inject([]) do |a, (path, content)|
|
33
|
+
a + [{ :path => path, :content => YamlHelper.generate(content) }]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# returns the path of a file if @yaml_object should be written to a nested dsl file
|
38
|
+
def nested_dsl_file?
|
39
|
+
val(:Import)
|
40
|
+
end
|
41
|
+
|
42
|
+
def add_nested_dsl_file_import?(nested_dsl_file)
|
43
|
+
unless val(:HiddenImportStatement)
|
44
|
+
if @yaml_object.kind_of?(::Hash)
|
45
|
+
add_import_statement!(nested_dsl_file, @yaml_object)
|
46
|
+
elsif @yaml_object.kind_of?(::Array)
|
47
|
+
@yaml_object << add_import_statement!(nested_dsl_file)
|
48
|
+
else
|
49
|
+
raise Error, "Unexpected that @yaml_object is not a hash or array"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_import_statement!(nested_dsl_file, yaml_object = nil)
|
55
|
+
yaml_object ||= empty_yaml_object(:output_type => :hash)
|
56
|
+
set_generation_hash(yaml_object, :Import, nested_dsl_file)
|
57
|
+
yaml_object
|
58
|
+
end
|
59
|
+
|
60
|
+
def select_yaml_object_or_nested_dsl_file
|
61
|
+
if nested_dsl_file = nested_dsl_file?
|
62
|
+
add_nested_dsl_file_import?(nested_dsl_file)
|
63
|
+
empty_nested_dsl_file_hash(nested_dsl_file, InputOutputCommon.obj_type(@yaml_object))
|
64
|
+
else
|
65
|
+
@yaml_object
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def empty_nested_dsl_file_hash(nested_dsl_file, output_type)
|
70
|
+
@top.nested_file_content[nested_dsl_file] ||= empty_yaml_object(output_type: output_type)
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2010-2016 dtk contributors
|
3
|
+
#
|
4
|
+
# This file is part of the dtk project.
|
5
|
+
#
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
7
|
+
# you may not use this file except in compliance with the License.
|
8
|
+
# You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
15
|
+
# See the License for the specific language governing permissions and
|
16
|
+
# limitations under the License.
|
17
|
+
#
|
18
|
+
module DTK::DSL
|
19
|
+
class Template
|
20
|
+
module NestedDSLFile
|
21
|
+
require_relative('nested_dsl_file/mixin')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -29,9 +29,14 @@ module DTK::DSL
|
|
29
29
|
def elements_collection_type
|
30
30
|
nil
|
31
31
|
end
|
32
|
-
|
33
|
-
private
|
34
32
|
|
33
|
+
def file_parser_output_array
|
34
|
+
FileParser::Output.create(:output_type => :array)
|
35
|
+
end
|
36
|
+
|
37
|
+
def file_parser_output_hash
|
38
|
+
FileParser::Output.create(:output_type => :hash)
|
39
|
+
end
|
35
40
|
|
36
41
|
# opts can have keys
|
37
42
|
# :index
|
@@ -45,13 +50,7 @@ module DTK::DSL
|
|
45
50
|
end
|
46
51
|
end
|
47
52
|
|
48
|
-
|
49
|
-
FileParser::Output.create(:output_type => :array)
|
50
|
-
end
|
51
|
-
|
52
|
-
def file_parser_output_hash
|
53
|
-
FileParser::Output.create(:output_type => :hash)
|
54
|
-
end
|
53
|
+
private
|
55
54
|
|
56
55
|
def input_hash?(input)
|
57
56
|
input.kind_of?(FileParser::Input::Hash)
|
@@ -54,6 +54,13 @@ module DTK::DSL
|
|
54
54
|
nil
|
55
55
|
end
|
56
56
|
|
57
|
+
# args can have form
|
58
|
+
# (:ParsingErrorName,*parsing_error_params) or
|
59
|
+
# (*parsing_error_params)
|
60
|
+
def parsing_error(*args)
|
61
|
+
parsing_error_with_opts(args)
|
62
|
+
end
|
63
|
+
|
57
64
|
private
|
58
65
|
|
59
66
|
def empty_parser_output(input, parent_key)
|
@@ -67,6 +74,20 @@ module DTK::DSL
|
|
67
74
|
end
|
68
75
|
end
|
69
76
|
|
77
|
+
def remove_processed_keys_from_input_hash!(&body)
|
78
|
+
@found_keys = []
|
79
|
+
body.call
|
80
|
+
@found_keys.each { |key| input_hash.delete(key) }
|
81
|
+
end
|
82
|
+
|
83
|
+
def add_found_key?(key)
|
84
|
+
@found_keys << key if @found_keys
|
85
|
+
end
|
86
|
+
|
87
|
+
def file_parser_output_array
|
88
|
+
self.class.file_parser_output_array
|
89
|
+
end
|
90
|
+
|
70
91
|
# opts can have key
|
71
92
|
# :key_type
|
72
93
|
def parse_child_elements(parse_template_type, key_constant, opts = {})
|
@@ -105,7 +126,12 @@ module DTK::DSL
|
|
105
126
|
end
|
106
127
|
def input_key_value?(constant, opts = {})
|
107
128
|
input_hash = opts[:input_hash] || input_hash()
|
108
|
-
|
129
|
+
set_matching_key = []
|
130
|
+
ret = constant_class.matches?(input_hash, constant, :set_matching_key => set_matching_key)
|
131
|
+
if matching_key = set_matching_key.first
|
132
|
+
add_found_key?(matching_key)
|
133
|
+
end
|
134
|
+
ret
|
109
135
|
end
|
110
136
|
|
111
137
|
# returns nil or {key => value}
|
@@ -114,6 +140,10 @@ module DTK::DSL
|
|
114
140
|
def input_key_and_value?(constant, opts = {})
|
115
141
|
input_hash = opts[:input_hash] || input_hash()
|
116
142
|
constant_class.matching_key_and_value?(input_hash, constant)
|
143
|
+
if ret = constant_class.matching_key_and_value?(input_hash, constant)
|
144
|
+
add_found_key?(ret.keys.first)
|
145
|
+
end
|
146
|
+
ret
|
117
147
|
end
|
118
148
|
|
119
149
|
def parsing_set(constant, val)
|
@@ -179,13 +209,6 @@ module DTK::DSL
|
|
179
209
|
raise parsing_error(:MissingKeyValue, key)
|
180
210
|
end
|
181
211
|
|
182
|
-
# args can have form
|
183
|
-
# (:ParsingErrorName,*parsing_error_params) or
|
184
|
-
# (*parsing_error_params)
|
185
|
-
def parsing_error(*args)
|
186
|
-
parsing_error_with_opts(args)
|
187
|
-
end
|
188
|
-
|
189
212
|
# opts can have keys
|
190
213
|
# :key
|
191
214
|
def parsing_error_with_opts(args, opts = {})
|
@@ -28,6 +28,7 @@ class DTK::DSL::Template
|
|
28
28
|
Attributes = 'attributes'
|
29
29
|
Nodes = 'nodes'
|
30
30
|
Components = 'components'
|
31
|
+
Target = 'target'
|
31
32
|
|
32
33
|
Workflows = 'workflows'
|
33
34
|
Variations::Workflows = ['workflows', 'workflow']
|
@@ -49,28 +50,24 @@ class DTK::DSL::Template
|
|
49
50
|
end
|
50
51
|
|
51
52
|
def parse!
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
input_hash.delete('nodes')
|
64
|
-
input_hash.delete('components')
|
65
|
-
input_hash.delete('workflow')
|
66
|
-
input_hash.delete('workflows')
|
67
|
-
merge input_hash
|
53
|
+
remove_processed_keys_from_input_hash! do
|
54
|
+
set :Name, input_key_value(:Name)
|
55
|
+
set? :Description, input_key_value?(:Description)
|
56
|
+
set? :Target, input_key_value?(:Target)
|
57
|
+
set? :Attributes, parse_child_elements?(:attribute, :Attributes)
|
58
|
+
set? :Nodes, parse_child_elements?(:node, :Nodes)
|
59
|
+
set? :Components, parse_child_elements?(:component, :Components)
|
60
|
+
set? :Workflows, parse_child_elements?(:workflow, :Workflows)
|
61
|
+
end
|
62
|
+
# handle keys not processed
|
63
|
+
merge input_hash unless input_hash.empty?
|
68
64
|
end
|
69
65
|
|
70
66
|
### For generation
|
71
67
|
def generate!
|
72
68
|
# TODO: add attributes
|
73
69
|
set :Description, val(:Description)
|
70
|
+
set :Target, val(:Target)
|
74
71
|
set :Components, generate_child_elements(:component, val(:Components))
|
75
72
|
set :Nodes, generate_child_elements(:node, val(:Nodes))
|
76
73
|
set :Workflows, generate_child_elements(:workflow, val(:Workflows))
|
@@ -32,7 +32,7 @@ class DTK::DSL::Template
|
|
32
32
|
end
|
33
33
|
|
34
34
|
def parse!
|
35
|
-
set :DSLVersion, input_key_value(:DSLVersion)
|
35
|
+
set :DSLVersion, input_key_value?(:DSLVersion) || dsl_version
|
36
36
|
set :ModuleVersion, input_key_value(:ModuleVersion)
|
37
37
|
merge parse_child(:module_ref, input_key_value(:Module), :parent_key => Constant::Module)
|
38
38
|
set? :DependentModules, parse_child_elements?(:dependency, :DependentModules)
|
@@ -42,7 +42,7 @@ module DTK::DSL
|
|
42
42
|
|
43
43
|
def self.parse_elements(input_array, parent_info)
|
44
44
|
input_array.inject(file_parser_output_hash) do |h, component|
|
45
|
-
name = name(component)
|
45
|
+
name = name(component, :parent => parent_info.parent)
|
46
46
|
h.merge(name => parse_element(component, parent_info, :index => name))
|
47
47
|
end
|
48
48
|
end
|
@@ -85,18 +85,22 @@ module DTK::DSL
|
|
85
85
|
ret
|
86
86
|
end
|
87
87
|
|
88
|
-
|
88
|
+
# opts can have keys:
|
89
|
+
# :parent
|
90
|
+
# :this
|
91
|
+
# Will not have both keys
|
92
|
+
def self.name(input, opts = {})
|
89
93
|
if input.kind_of?(::String)
|
90
94
|
input
|
91
95
|
elsif input.kind_of?(::Hash) and input.size > 0
|
92
96
|
input.keys.first
|
93
97
|
else
|
94
|
-
raise parsing_error(:WrongObjectType, input, [::String, ::Hash])
|
98
|
+
raise (opts[:this] || opts[:parent]).parsing_error([:WrongObjectType, input, [::String, ::Hash]])
|
95
99
|
end
|
96
100
|
end
|
97
101
|
|
98
102
|
def name
|
99
|
-
self.class.name(@input)
|
103
|
+
self.class.name(@input, :this => self)
|
100
104
|
end
|
101
105
|
|
102
106
|
def parse_when_string!
|
@@ -104,14 +108,14 @@ module DTK::DSL
|
|
104
108
|
|
105
109
|
def parse_when_hash!
|
106
110
|
unless input_hash.size == 1 and input_hash.values.first.kind_of?(::Hash)
|
107
|
-
raise parsing_error("Component is ill-formed; it must be string or hash
|
111
|
+
raise parsing_error("Component is ill-formed; it must be string or hash")
|
108
112
|
end
|
109
113
|
properties = input_hash.values.first
|
110
114
|
set? :Attributes, parse_child_elements?(:attribute, :Attributes, :input_hash => properties)
|
111
115
|
|
112
|
-
#
|
113
|
-
properties.delete(
|
114
|
-
merge properties
|
116
|
+
# handle keys not processed
|
117
|
+
properties.delete(Constant::Attributes)
|
118
|
+
merge properties unless properties.empty?
|
115
119
|
end
|
116
120
|
|
117
121
|
end
|
@@ -31,9 +31,11 @@ class DTK::DSL::Template
|
|
31
31
|
|
32
32
|
### For parsing
|
33
33
|
def parse!
|
34
|
-
|
35
|
-
|
36
|
-
|
34
|
+
remove_processed_keys_from_input_hash! do
|
35
|
+
set :DSLVersion, input_key_value(:DSLVersion)
|
36
|
+
set :Name, input_key_value(:DSLVersion)
|
37
|
+
set? :DependentModules, input_key_value?(:DependentModules)
|
38
|
+
end
|
37
39
|
merge parse_child(:assembly, input_hash)
|
38
40
|
end
|
39
41
|
|