dtk-dsl 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.byebug_history +70 -0
- data/.gitignore +2 -0
- data/Gemfile +2 -0
- data/README.md +2 -0
- data/dtk-dsl.gemspec +16 -0
- data/lib/dsl/directory_generator.rb +27 -0
- data/lib/dsl/directory_parser/path_info.rb +62 -0
- data/lib/dsl/directory_parser.rb +33 -0
- data/lib/dsl/dsl_version.rb +36 -0
- data/lib/dsl/error/subclasses.rb +38 -0
- data/lib/dsl/error.rb +24 -0
- data/lib/dsl/file_generator/content_input/array.rb +31 -0
- data/lib/dsl/file_generator/content_input/hash.rb +53 -0
- data/lib/dsl/file_generator/content_input/mixin.rb +68 -0
- data/lib/dsl/file_generator/content_input/string.rb +31 -0
- data/lib/dsl/file_generator/content_input/tags.rb +87 -0
- data/lib/dsl/file_generator/content_input.rb +29 -0
- data/lib/dsl/file_generator/yaml_object.rb +24 -0
- data/lib/dsl/file_generator.rb +39 -0
- data/lib/dsl/file_obj.rb +119 -0
- data/lib/dsl/file_parser/input/array.rb +27 -0
- data/lib/dsl/file_parser/input/hash.rb +40 -0
- data/lib/dsl/file_parser/input.rb +29 -0
- data/lib/dsl/file_parser/output.rb +24 -0
- data/lib/dsl/file_parser.rb +71 -0
- data/lib/dsl/file_type.rb +79 -0
- data/lib/dsl/input_output_common/array.rb +43 -0
- data/lib/dsl/input_output_common/canonical/array.rb +27 -0
- data/lib/dsl/input_output_common/canonical/hash.rb +69 -0
- data/lib/dsl/input_output_common/canonical/hash_key.rb +54 -0
- data/lib/dsl/input_output_common/canonical.rb +28 -0
- data/lib/dsl/input_output_common/hash.rb +44 -0
- data/lib/dsl/input_output_common/output_class_mixin.rb +34 -0
- data/lib/dsl/input_output_common/semantic_parse/hash.rb +33 -0
- data/lib/dsl/input_output_common/semantic_parse/mixin.rb +44 -0
- data/lib/dsl/input_output_common/semantic_parse.rb +26 -0
- data/lib/dsl/input_output_common.rb +60 -0
- data/lib/dsl/qualified_key.rb +55 -0
- data/lib/dsl/template/constant_class_mixin.rb +91 -0
- data/lib/dsl/template/generation/class_mixin.rb +40 -0
- data/lib/dsl/template/generation/mixin.rb +134 -0
- data/lib/dsl/template/generation.rb +26 -0
- data/lib/dsl/template/loader.rb +66 -0
- data/lib/dsl/template/parsing/class_mixin.rb +67 -0
- data/lib/dsl/template/parsing/mixin.rb +214 -0
- data/lib/dsl/template/parsing/parent_key.rb +82 -0
- data/lib/dsl/template/parsing/parsing_error/subclasses.rb +62 -0
- data/lib/dsl/template/parsing/parsing_error.rb +52 -0
- data/lib/dsl/template/parsing.rb +29 -0
- data/lib/dsl/template/v1/assembly.rb +82 -0
- data/lib/dsl/template/v1/attribute/semantic_parse.rb +26 -0
- data/lib/dsl/template/v1/attribute.rb +75 -0
- data/lib/dsl/template/v1/common_module.rb +38 -0
- data/lib/dsl/template/v1/common_module_summary.rb +42 -0
- data/lib/dsl/template/v1/component/semantic_parse.rb +26 -0
- data/lib/dsl/template/v1/component.rb +121 -0
- data/lib/dsl/template/v1/dependency.rb +63 -0
- data/lib/dsl/template/v1/module_ref.rb +62 -0
- data/lib/dsl/template/v1/node/semantic_parse.rb +62 -0
- data/lib/dsl/template/v1/node.rb +72 -0
- data/lib/dsl/template/v1/node_attribute/semantic_parse.rb +26 -0
- data/lib/dsl/template/v1/node_attribute.rb +25 -0
- data/lib/dsl/template/v1/service_instance.rb +50 -0
- data/lib/dsl/template/v1/service_module_summary.rb +37 -0
- data/lib/dsl/template/v1/workflow/semantic_parse.rb +26 -0
- data/lib/dsl/template/v1/workflow.rb +65 -0
- data/lib/dsl/template/v1.rb +43 -0
- data/lib/dsl/template.rb +110 -0
- data/lib/dsl/version.rb +6 -0
- data/lib/dsl/yaml_helper.rb +56 -0
- data/lib/dtk_dsl.rb +36 -0
- metadata +114 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e6850c2038d1af4481513a9d06fdf9391d589241
|
4
|
+
data.tar.gz: 8ff25444f0f40e76ebcdab8672ead6a2d71e06b8
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: aa6414e6bc8f983c86f4416ce750c4d2754311e48bd6beabe22eab121e013a8326b1d487237f4c1baed66f46a00487a2c2a20aed3b7ad9e982a8336628c15b77
|
7
|
+
data.tar.gz: c843fe596c4c9d9ecd5f53d06eb5c612c374b736d1af3ddf2d76094a83c3821dcb68e439580ef22d8cfd8a34ab38d7db465e81f3b21a6d9e7c678d1fa804af5a
|
data/.byebug_history
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
c
|
2
|
+
s
|
3
|
+
@valid_tags
|
4
|
+
s
|
5
|
+
c
|
6
|
+
b 70
|
7
|
+
c
|
8
|
+
quit
|
9
|
+
tag_split.size
|
10
|
+
tag_split.split.size
|
11
|
+
tag_split.split >= tag_type_split.size
|
12
|
+
n
|
13
|
+
split(tag)
|
14
|
+
split(tag_type)
|
15
|
+
pp [tag_type, tag]
|
16
|
+
s
|
17
|
+
n
|
18
|
+
b 43
|
19
|
+
compute_valid_tags
|
20
|
+
s
|
21
|
+
c
|
22
|
+
b /tmp/t.rb:17
|
23
|
+
c
|
24
|
+
quit
|
25
|
+
tag_split
|
26
|
+
n
|
27
|
+
split(tag)
|
28
|
+
c
|
29
|
+
b 49
|
30
|
+
c
|
31
|
+
quit
|
32
|
+
exit
|
33
|
+
t.to_s.split(DELIMITER).map(&:to_sym)
|
34
|
+
t.to_s.split(DELIMITER).map(to_sym)
|
35
|
+
t.to_s.split(DELIMITER).map(&to_sym)
|
36
|
+
t.to_s.split(DELIMITER).map { |x| x.to_sym}
|
37
|
+
t.to_s.split(DELIMITER).map(&to_sym)
|
38
|
+
t.to_s.split(DELIMITER)
|
39
|
+
t
|
40
|
+
s
|
41
|
+
pp tag
|
42
|
+
c
|
43
|
+
b 49
|
44
|
+
c
|
45
|
+
s
|
46
|
+
base_dsl_file_obj.file_type
|
47
|
+
base_dsl_file_obj.path?
|
48
|
+
n
|
49
|
+
base_dsl_file_obj.path?
|
50
|
+
s
|
51
|
+
c
|
52
|
+
b /home/cli/dtk-cli/lib/cli/context.rb:40
|
53
|
+
c
|
54
|
+
pp base_dsl_file_obj
|
55
|
+
base_dsl_file_obj
|
56
|
+
base_dsl_file_obj.path?
|
57
|
+
s
|
58
|
+
n
|
59
|
+
s
|
60
|
+
c
|
61
|
+
b /home/cli/dtk-cli/lib/cli/directory_parser/file_system.rb:38
|
62
|
+
c
|
63
|
+
quit
|
64
|
+
s
|
65
|
+
c
|
66
|
+
b /home/cli/.gem/ruby/2.0/gems/dtk-dsl-0.0.1/lib/dtk_dsl.rb:20
|
67
|
+
n
|
68
|
+
s
|
69
|
+
n
|
70
|
+
s
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
data/dtk-dsl.gemspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require File.expand_path('../lib/dsl/version', __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = 'dtk-dsl'
|
5
|
+
spec.version = DTK::DSL::VERSION
|
6
|
+
spec.author = 'Reactor8'
|
7
|
+
spec.email = 'support@reactor8.com'
|
8
|
+
spec.description = %q{Library for parsing DT DSL files.}
|
9
|
+
spec.summary = %q{Library for parsing DT DSL files.}
|
10
|
+
spec.license = 'Apache 2.0'
|
11
|
+
spec.platform = Gem::Platform::RUBY
|
12
|
+
spec.required_ruby_version = Gem::Requirement.new('>= 1.9.3')
|
13
|
+
|
14
|
+
spec.require_paths = ['lib']
|
15
|
+
spec.files = `git ls-files`.split("\n")
|
16
|
+
end
|
@@ -0,0 +1,27 @@
|
|
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
|
+
|
19
|
+
module DTK::DSL
|
20
|
+
# Abstract class; application that uses this library must provide a concrete class that inherits from this
|
21
|
+
class DirectoryGenerator
|
22
|
+
# Adds or modifies file; returns true if new file or any change
|
23
|
+
def self.add_file?(file_type, file_content, opts = {})
|
24
|
+
raise Error::NoMethodForConcreteClass.new(self.class)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,62 @@
|
|
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
|
+
|
19
|
+
module DTK::DSL
|
20
|
+
class DirectoryParser
|
21
|
+
class PathInfo
|
22
|
+
attr_reader :regexp, :depth, :base_dir
|
23
|
+
# opts can have keys
|
24
|
+
# :depth - used for pruning when a git directory
|
25
|
+
def initialize(regexp_or_string, opts = {})
|
26
|
+
@regexp = ret_regexp(regexp_or_string)
|
27
|
+
@depth = opts[:depth]
|
28
|
+
@base_dir = opts[:base_dir]
|
29
|
+
end
|
30
|
+
|
31
|
+
# opts can have keys:
|
32
|
+
# :exact - Booelan (default: false) - meaning regexp completely matches file_path
|
33
|
+
def matches?(file_path, opts = {})
|
34
|
+
self.class.matches?(file_path, @regexp, opts)
|
35
|
+
end
|
36
|
+
def self.matches?(file_path, regexp, opts = {})
|
37
|
+
if opts[:exact]
|
38
|
+
file_path =~ Regexp.new("^#{regexp.source}$")
|
39
|
+
else
|
40
|
+
# extra check to see if regexp is just for file part or has '/' seperators
|
41
|
+
if '/' =~ regexp
|
42
|
+
file_path.split('/').last =~ Regexp.new("^#{regexp.source}$")
|
43
|
+
else
|
44
|
+
file_path =~ Regexp.new("#{regexp.source}$")
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def ret_regexp(regexp_or_string)
|
52
|
+
if regexp_or_string.kind_of?(String)
|
53
|
+
Regexp.new(regexp_or_string)
|
54
|
+
elsif regexp_or_string.kind_of?(Regexp)
|
55
|
+
regexp_or_string
|
56
|
+
else
|
57
|
+
raise Error, "Unexpected class '#{regexp_or_string.class}'"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,33 @@
|
|
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
|
+
|
19
|
+
module DTK::DSL
|
20
|
+
# Abstract class; application that uses this library must provide a concrete class that inherits from this
|
21
|
+
class DirectoryParser
|
22
|
+
require_relative('directory_parser/path_info')
|
23
|
+
# file_types - a single or array of FileObj objects
|
24
|
+
# opts can have keys
|
25
|
+
# :file_path - string
|
26
|
+
# :dir_path - string
|
27
|
+
# Returns FileObj that matches a file_typeo bject that matches a file_type in file_types
|
28
|
+
# or returns nil if no match found
|
29
|
+
def self.matching_file_obj?(file_types, opts = {})
|
30
|
+
raise Error::NoMethodForConcreteClass.new(self.class)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,36 @@
|
|
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
|
+
|
19
|
+
module DTK::DSL
|
20
|
+
# This refers to semnatic dsl version
|
21
|
+
class DSLVersion < ::String
|
22
|
+
DSL_VERSIONS = ['1.0.0']
|
23
|
+
|
24
|
+
def self.legal?(str)
|
25
|
+
DSL_VERSIONS.include?(str)
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.lataset
|
29
|
+
DSL_VERSIONS.last
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.default
|
33
|
+
lataset
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,38 @@
|
|
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
|
19
|
+
module DSL
|
20
|
+
class Error
|
21
|
+
class Usage < GlobalForDSL::ErrorUsage
|
22
|
+
end
|
23
|
+
|
24
|
+
class NoMethodForConcreteClass < self
|
25
|
+
def initialize(klass)
|
26
|
+
method_string = caller[1]
|
27
|
+
method_ref =
|
28
|
+
if method_string =~ /`(.+)'$/
|
29
|
+
method = $1
|
30
|
+
" '#{method}'"
|
31
|
+
end
|
32
|
+
super("No method#{method_ref} for concrete class #{klass}")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
data/lib/dsl/error.rb
ADDED
@@ -0,0 +1,24 @@
|
|
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
|
19
|
+
module DSL
|
20
|
+
class Error < GlobalForDSL::Error
|
21
|
+
require_relative('error/subclasses')
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
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 FileGenerator
|
20
|
+
class ContentInput
|
21
|
+
class Array < InputOutputCommon::Canonical::Array
|
22
|
+
include Mixin
|
23
|
+
|
24
|
+
def initialize(*args)
|
25
|
+
super
|
26
|
+
initialize_tags_and_id_handle!
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,53 @@
|
|
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 FileGenerator
|
20
|
+
class ContentInput
|
21
|
+
class Hash < InputOutputCommon::Canonical::Hash
|
22
|
+
include Mixin
|
23
|
+
|
24
|
+
def initialize(*args)
|
25
|
+
super
|
26
|
+
initialize_tags_and_id_handle!
|
27
|
+
end
|
28
|
+
|
29
|
+
# opts can have keys
|
30
|
+
# :tags
|
31
|
+
# :tag
|
32
|
+
def set(output_key, val, opts = {})
|
33
|
+
ret = super(output_key, val)
|
34
|
+
tags = opts[:tag] || opts[:tags]
|
35
|
+
add_tags_to_obj?(ret, tags) unless tags.nil?
|
36
|
+
ret
|
37
|
+
end
|
38
|
+
|
39
|
+
# opts can have keys
|
40
|
+
# :tag - tag to filter on
|
41
|
+
def val(output_key, opts = {})
|
42
|
+
ret = super(output_key)
|
43
|
+
if tag = opts[:tag]
|
44
|
+
ret = nil unless obj_has_tag?(ret, tag)
|
45
|
+
end
|
46
|
+
ret
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
@@ -0,0 +1,68 @@
|
|
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 FileGenerator::ContentInput
|
20
|
+
# Mixin for tags and id_handle object attributes
|
21
|
+
module Mixin
|
22
|
+
attr_reader :tags
|
23
|
+
def initialize_tags_and_id_handle!
|
24
|
+
@tags = []
|
25
|
+
@id_handle = nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def set_id_handle(model_object)
|
29
|
+
@id_handle = model_object.id_handle
|
30
|
+
end
|
31
|
+
|
32
|
+
def id_handle
|
33
|
+
@id_handle || raise(Error,"@id_handle is not set")
|
34
|
+
end
|
35
|
+
|
36
|
+
def add_tags!(new_tags)
|
37
|
+
Tags.raise_error_if_invalid(new_tags)
|
38
|
+
new_tags = [new_tags] unless new_tags.kind_of?(::Array)
|
39
|
+
@tags += new_tags
|
40
|
+
@tags.uniq!
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
def add_tags?(new_tags)
|
45
|
+
add_tags!(new_tags) unless new_tags.nil? or new_tags.empty?
|
46
|
+
end
|
47
|
+
|
48
|
+
def matches_tag_type?(tag_type)
|
49
|
+
!! @tags.find { |tag| Tags.matches_tag_type?(tag_type, tag) }
|
50
|
+
end
|
51
|
+
|
52
|
+
def add_tags_to_obj?(obj, new_tags)
|
53
|
+
obj.add_tags!(new_tags) if obj.respond_to?(:add_tags!)
|
54
|
+
obj
|
55
|
+
end
|
56
|
+
|
57
|
+
def obj_has_tag_type?(obj, tag_type)
|
58
|
+
if obj.respond_to?(:matches_tag_type?)
|
59
|
+
obj.matches_tag_type?(tag_type)
|
60
|
+
else
|
61
|
+
# vacuously succeeds
|
62
|
+
true
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
@@ -0,0 +1,31 @@
|
|
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 FileGenerator
|
20
|
+
class ContentInput
|
21
|
+
class String < ::String
|
22
|
+
include Mixin
|
23
|
+
|
24
|
+
def initialize(*args)
|
25
|
+
super
|
26
|
+
initialize_tags_and_id_handle!
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,87 @@
|
|
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 FileGenerator::ContentInput
|
20
|
+
module Tags
|
21
|
+
#####
|
22
|
+
# In this module a 'tag_type' subsumes a tag and consitutes an element in BASE_LEVEL_TAGS or one its prefixes
|
23
|
+
#
|
24
|
+
DELIMITER = '__'
|
25
|
+
BASE_LEVEL_TAGS =
|
26
|
+
[:desired__asserted,
|
27
|
+
:desired__derived__default,
|
28
|
+
:desired__derived__propagated,
|
29
|
+
:actual,
|
30
|
+
:hidden
|
31
|
+
]
|
32
|
+
|
33
|
+
def self.matches_tag_type?(tag_type, tag)
|
34
|
+
tag_type_split = split(tag_type)
|
35
|
+
tag_split = split(tag)
|
36
|
+
if tag_split.size >= tag_type_split.size
|
37
|
+
tag_type_split.each_with_index do |tag_type_part, i|
|
38
|
+
return nil unless tag_type_part == tag_split[i]
|
39
|
+
end
|
40
|
+
true
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.valid?(tag_type)
|
45
|
+
valid_tag_types.include?(tag_type)
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.raise_error_if_invalid(tag_types)
|
49
|
+
tag_types = [tag_types] unless tag_types.kind_of?(::Array)
|
50
|
+
bad_tag_types = tag_types.select { |tag| !valid?(tag)}
|
51
|
+
unless bad_tag_types.empty?
|
52
|
+
err_msg = bad_tag_types.size == 1 ? "Invalid tag '#{bad_tag_types.first}'" : "Invalid tag_types: #{bad_tag_types.join(', ')}"
|
53
|
+
raise Error, err_msg
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def self.valid_tag_types
|
60
|
+
@valid_tag_tag_types ||= compute_valid_tag_types
|
61
|
+
end
|
62
|
+
|
63
|
+
# Iterates over BASE_LEVEL_TAGS and puts in prefixes
|
64
|
+
def self.compute_valid_tag_types
|
65
|
+
ret = []
|
66
|
+
BASE_LEVEL_TAGS.each do |tag|
|
67
|
+
tag_split = split(tag)
|
68
|
+
until tag_split.empty?
|
69
|
+
ret << join(tag_split)
|
70
|
+
tag_split.pop
|
71
|
+
end
|
72
|
+
end
|
73
|
+
ret.uniq
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.split(t)
|
77
|
+
t.to_s.split(DELIMITER).map(&:to_sym)
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.join(t_split)
|
81
|
+
t_split.map(&:to_s).join(DELIMITER).to_sym
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
@@ -0,0 +1,29 @@
|
|
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 FileGenerator
|
20
|
+
class ContentInput < InputOutputCommon::Canonical
|
21
|
+
require_relative('content_input/tags')
|
22
|
+
require_relative('content_input/mixin')
|
23
|
+
# mixin must go before the files below
|
24
|
+
require_relative('content_input/hash')
|
25
|
+
require_relative('content_input/array')
|
26
|
+
require_relative('content_input/string')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,24 @@
|
|
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 FileGenerator
|
20
|
+
class YamlObject < InputOutputCommon
|
21
|
+
extend InputOutputCommon::OutputClassMixin
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|