tla-sbuilder 0.2.2 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +150 -116
- data/VERSION +1 -1
- data/lib/cli/cli-customer.rb +23 -3
- data/lib/cli/cli-pet.rb +66 -12
- data/lib/cli/cli-text.rb +127 -8
- data/lib/cli/cli.rb +49 -6
- data/lib/sbuilder.rb +26 -3
- data/lib/sbuilder/constants.rb +165 -6
- data/lib/sbuilder/controller.rb +943 -169
- data/lib/sbuilder/controller_utils.rb +122 -0
- data/lib/sbuilder/default-sbuilder.yaml +38 -44
- data/lib/sbuilder/domain.rb +160 -36
- data/lib/sbuilder/domain_cardinality.rb +1 -1
- data/lib/sbuilder/domain_range.rb +102 -0
- data/lib/sbuilder/domain_type.rb +150 -0
- data/lib/sbuilder/domain_value.rb +21 -13
- data/lib/sbuilder/exception.rb +16 -0
- data/lib/sbuilder/extension_loader.rb +67 -686
- data/lib/sbuilder/extension_loader_deprecated_step_extensions.rb +711 -0
- data/lib/sbuilder/extension_loader_step_generator.rb +876 -0
- data/lib/sbuilder/facade/{api_loader.rb → api_loader_facade.rb} +176 -45
- data/lib/sbuilder/facade/api_loader_plugin.rb +6 -32
- data/lib/sbuilder/facade/api_loader_plugin_mixer.rb +35 -0
- data/lib/sbuilder/facade/facade_constants.rb +23 -0
- data/lib/sbuilder/facade/loader_plugin_root.rb +56 -0
- data/lib/sbuilder/facade/param_set_root.rb +55 -0
- data/lib/sbuilder/facade/snippet_loader_facade.rb +600 -0
- data/lib/sbuilder/facade/snippet_loader_plugin.rb +76 -0
- data/lib/sbuilder/facade/snippet_loader_plugin_mixer.rb +56 -0
- data/lib/sbuilder/factory.rb +224 -45
- data/lib/sbuilder/model.rb +125 -45
- data/lib/sbuilder/mustache/template.rb +107 -58
- data/lib/sbuilder/mustache/template_reader.rb +56 -46
- data/lib/sbuilder/mustache/template_reader_context.rb +64 -234
- data/lib/sbuilder/mustache/template_resolve.rb +103 -0
- data/lib/sbuilder/mustache/template_root.rb +71 -0
- data/lib/sbuilder/param_set.rb +30 -15
- data/lib/sbuilder/param_set_db.rb +1 -1
- data/lib/sbuilder/param_set_def.rb +6 -1
- data/lib/sbuilder/param_set_def_func.rb +39 -0
- data/lib/sbuilder/param_set_if.rb +45 -10
- data/lib/sbuilder/param_set_loader_swagger.rb +56 -26
- data/lib/sbuilder/param_set_step.rb +1 -1
- data/lib/sbuilder/param_sets.rb +2 -1
- data/lib/sbuilder/parameter.rb +9 -3
- data/lib/sbuilder/parameter_container.rb +1 -1
- data/lib/sbuilder/parameter_dom.rb +17 -5
- data/lib/sbuilder/parameter_ref.rb +39 -10
- data/lib/sbuilder/parser/parser_facade.rb +310 -0
- data/lib/sbuilder/resolver.rb +11 -6
- data/lib/sbuilder/resolver_loader.rb +1 -1
- data/lib/sbuilder/resolver_loader_yaml.rb +1 -1
- data/lib/sbuilder/resolver_rule.rb +1 -1
- data/lib/sbuilder/resolver_rule_match.rb +10 -4
- data/lib/sbuilder/resolver_rule_ref.rb +1 -1
- data/lib/sbuilder/setup_loader.rb +49 -0
- data/lib/sbuilder/setup_loader_env.rb +478 -0
- data/lib/sbuilder/setup_loader_pref.rb +56 -0
- data/lib/sbuilder/snippet_loader_simple.rb +125 -0
- data/lib/sbuilder/spec/api_loader.rb +34 -0
- data/lib/sbuilder/spec/api_loader_facade.rb +169 -32
- data/lib/sbuilder/spec/loader_plugin.rb +98 -0
- data/lib/sbuilder/spec/snippet_loader.rb +228 -0
- data/lib/sbuilder/symbol_table.rb +279 -0
- data/lib/utils/{cache_lines.rb → fileio.rb} +8 -1
- data/lib/utils/logger.rb +2 -1
- data/lib/utils/powerset.rb +13 -0
- data/lib/utils/validate.rb +38 -0
- data/mustache/cfg/const_def.mustache +2 -0
- data/mustache/cfg/macro_run.mustache +1 -4
- data/mustache/data-model-header.mustache +1 -0
- data/mustache/definition_types.mustache +34 -4
- data/mustache/domains.mustache +1 -1
- data/mustache/domains_assign.mustache +1 -1
- data/mustache/infrastructure-service-init.mustache +1 -1
- data/mustache/interface_processes.mustache +16 -10
- data/mustache/interface_types.mustache +37 -11
- data/mustache/operator-infrastructure-service.mustache +1 -1
- data/mustache/resources/schedule_operator_new_step.tla +8 -0
- data/mustache/resources/schedule_process_macro.tla +37 -0
- data/mustache/resources/schedule_process_procedure.tla +22 -0
- data/mustache/resources/schedule_throw.tla +16 -0
- data/mustache/setup/domains_run.mustache +8 -2
- data/mustache/setup/operator_run.mustache +0 -4
- data/mustache/setup/steps_run.mustache +4 -3
- data/mustache/setup/steps_run_parameterBind.mustache +14 -6
- data/mustache/setup/steps_run_parameterExact.mustache +7 -3
- data/mustache/state_type_invariant-infrastructure-service.mustache +9 -4
- data/mustache/tla/const_def.mustache +1 -1
- data/mustache/tla/macro_run.mustache +7 -1
- data/mustache/tla/module_header.mustache +1 -1
- data/mustache/tla/operator_run.mustache +8 -5
- data/mustache/tla/plc_define_run.mustache +45 -36
- data/mustache/tla/plc_run_state.mustache +12 -5
- data/src-extend/extend/extend_assumptions.mustache +3 -0
- data/src-extend/extend/extend_const.mustache +3 -0
- data/src-extend/extend/extend_implementation.mustache +3 -0
- data/src-extend/extend/extend_invariant.mustache +3 -0
- data/src-extend/extend/extend_macros.mustache +3 -0
- data/src-extend/extend/extend_operations.mustache +3 -0
- data/src-extend/extend/extend_state.mustache +3 -0
- data/src/pet/extend/extend_assumptions.mustache +4 -0
- data/src/pet/extend/extend_implementation.mustache +3 -0
- data/src/pet/extend/extend_invariant.mustache +3 -0
- data/src/pet/extend/extend_macros.mustache +3 -0
- data/src/pet/extend/extend_operations.mustache +4 -0
- data/src/pet/extend/extend_state.mustache +3 -0
- data/src/pet/interface +5 -5
- data/src/pet/interface_delete_pet.tla +1 -1
- data/src/pet/interface_get_pet.tla +1 -1
- data/src/pet/interface_post_pet.tla +4 -2
- data/src/pet/interface_post_tag.tla +1 -1
- data/src/pet/interface_put_tag.tla +1 -1
- data/tla-sbuilder.gemspec +3 -3
- metadata +44 -19
- data/mustache/name_definition_type.mustache +0 -5
- data/mustache/name_domain.mustache +0 -5
- data/mustache/name_domain_value.mustache +0 -5
- data/mustache/name_domain_value_prefix.mustache +0 -5
- data/mustache/name_interface_response_type.mustache +0 -6
- data/mustache/name_interface_type.mustache +0 -6
- data/mustache/name_parameter_type.mustache +0 -6
- data/mustache/name_process.mustache +0 -6
- data/mustache/state_type_invariant.mustache +0 -17
- data/mustache/state_variables.mustache +0 -20
- data/src-extend/extend/extend_invariant_cfg.mustache +0 -7
@@ -0,0 +1,122 @@
|
|
1
|
+
module Sbuilder
|
2
|
+
|
3
|
+
##
|
4
|
+
# collect method, which all
|
5
|
+
module ControllerUtils
|
6
|
+
|
7
|
+
|
8
|
+
def dispatchExtendDomain( domainDef )
|
9
|
+
Utils::Validate.validateProperties( domainDef, Constants::VALIDATION[:domain_extension][:required], Constants::VALIDATION[:domain_extension][:allowed] )
|
10
|
+
Utils::Validate.oneOf( domainDef, Constants::VALIDATION[:domain_extension][:one_of] )
|
11
|
+
|
12
|
+
if !domainDef['cardinality'].nil? then
|
13
|
+
extendDomainWithCardinality( domainDef )
|
14
|
+
elsif !domainDef['values'].nil?
|
15
|
+
extendDomainWithValues( domainDef )
|
16
|
+
elsif !domainDef['range'].nil?
|
17
|
+
extendDomainRange( domainDef )
|
18
|
+
elsif !domainDef['type'].nil?
|
19
|
+
extendDomainWithType( domainDef )
|
20
|
+
else
|
21
|
+
raise ExtensionException, "Invalid domain definition #{domainDef}"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
##
|
26
|
+
# Extend domain with (integer) range
|
27
|
+
#
|
28
|
+
# @param [Hash]
|
29
|
+
# @option domainDef [String] range array lenght 2 start-stop
|
30
|
+
#
|
31
|
+
def extendDomainRange( domainDef )
|
32
|
+
# must be array with length of two, with first element less or equal
|
33
|
+
raise ExtensionException, "Invalid domain range defintion" unless domainDef['range'] &&
|
34
|
+
domainDef['range'].is_a?( Array ) &&
|
35
|
+
domainDef['range'].length == 2 &&
|
36
|
+
domainDef['range'][0] <= domainDef['range'][1]
|
37
|
+
|
38
|
+
domain = factory.createDomain( Sbuilder::Constants::TYPE_RANGE_DOMAIN )
|
39
|
+
domain.setName( domainDef['domain'] )
|
40
|
+
domain.setRange( domainDef['range'][0], domainDef['range'][1] )
|
41
|
+
|
42
|
+
# pass to model via controller
|
43
|
+
extendDomain( domain )
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
def extendDomainWithType( domainDef )
|
50
|
+
# @logger.info( "#{__method__}: domainDef=#{domainDef}" )
|
51
|
+
Utils::Validate.validateProperties(
|
52
|
+
domainDef,
|
53
|
+
Constants::VALIDATION[:domain_extension][:type_required], Constants::VALIDATION[:domain_extension][:type_allowed]
|
54
|
+
)
|
55
|
+
|
56
|
+
# create & configure
|
57
|
+
domain = factory.createDomain( Sbuilder::Constants::TYPE_DOMAIN_TYPE )
|
58
|
+
domain.setName( domainDef['domain'] )
|
59
|
+
domain.setType( domainDef['type'] )
|
60
|
+
|
61
|
+
# pass to model via controller
|
62
|
+
extendDomain( domain )
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
def extendDomainWithCardinality( domainDef )
|
68
|
+
# @logger.info( "#{__method__} domainDef=#{domainDef}" )
|
69
|
+
# validateProperties( domainDef, @@extensionDoaminProperties )
|
70
|
+
Utils::Validate.validateProperties(
|
71
|
+
domainDef,
|
72
|
+
Constants::VALIDATION[:domain_extension][:cardinality_required], Constants::VALIDATION[:domain_extension][:cardinality_allowed]
|
73
|
+
)
|
74
|
+
|
75
|
+
# create & configure
|
76
|
+
domain = factory.createDomain( Sbuilder::Constants::TYPE_CARDINALITY_DOMAIN )
|
77
|
+
domain.setName( domainDef['domain'] )
|
78
|
+
domain.setCardinality( domainDef['cardinality'] )
|
79
|
+
|
80
|
+
# pass to model via controller
|
81
|
+
extendDomain( domain )
|
82
|
+
end
|
83
|
+
|
84
|
+
#
|
85
|
+
# @param [String] domainName
|
86
|
+
# @param [String:Array] arrOfDomainValues
|
87
|
+
#
|
88
|
+
# Creates 'domainDef' and delegates to 'extendDomainWithValues'
|
89
|
+
#
|
90
|
+
def setApplicationDomainValues( domainName, arrOfDomainValues )
|
91
|
+
domainDef = {
|
92
|
+
'domain' => domainName,
|
93
|
+
'values' => arrOfDomainValues
|
94
|
+
}
|
95
|
+
# add to model
|
96
|
+
addApplicationDomainValue( domainDef )
|
97
|
+
end
|
98
|
+
|
99
|
+
def extendDomainWithValues( domainDef )
|
100
|
+
# @logger.info( "#{__method__} domainDef=#{domainDef}" )
|
101
|
+
# validateProperties( domainDef, @@extensionValuesProperties )
|
102
|
+
Utils::Validate.validateProperties(
|
103
|
+
domainDef,
|
104
|
+
Constants::VALIDATION[:domain_extension][:value_required], Constants::VALIDATION[:domain_extension][:value_allowed]
|
105
|
+
)
|
106
|
+
|
107
|
+
# create & configure
|
108
|
+
domain = factory.createDomain( Sbuilder::Constants::TYPE_VALUE_DOMAIN )
|
109
|
+
domain.setName( domainDef['domain'] )
|
110
|
+
domainDef['values'].each { |value| domain.addValue( value ) }
|
111
|
+
|
112
|
+
# pass to model via controller
|
113
|
+
extendDomain( domain )
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
end
|
@@ -7,6 +7,15 @@ generate:
|
|
7
7
|
# ----------------------------------------
|
8
8
|
# Default model.tla.
|
9
9
|
#
|
10
|
+
# Define initial symbol table metatype entries & reserve
|
11
|
+
# following 'namaspace' prefixies:
|
12
|
+
#
|
13
|
+
# - domains --> d_
|
14
|
+
# - definitions -> t_ (types)
|
15
|
+
# - interface_types -> it_
|
16
|
+
# - processes -> p_
|
17
|
+
# - infra_services -> i_
|
18
|
+
#
|
10
19
|
# Override template extension points
|
11
20
|
# - extend_const.tla
|
12
21
|
# - extend_state.tla
|
@@ -33,7 +42,6 @@ generate:
|
|
33
42
|
template: tla/const_def.mustache
|
34
43
|
modelData: none
|
35
44
|
|
36
|
-
# --------------------
|
37
45
|
# extension point: extend_const.tla
|
38
46
|
- desc: Extension point for constants
|
39
47
|
template: extend/extend_const.mustache
|
@@ -42,6 +50,7 @@ generate:
|
|
42
50
|
- desc: Domain definitions
|
43
51
|
template: domains.mustache
|
44
52
|
modelData: domains
|
53
|
+
symbols: 'lambda{ |d| [ Sbuilder::Constants::META_MODEL_DOMAINS, d[:domain_name], "d_#{d[:domain_name]}" ] }'
|
45
54
|
|
46
55
|
- desc: Environment operators
|
47
56
|
template: tla/operator_run.mustache
|
@@ -54,10 +63,16 @@ generate:
|
|
54
63
|
- desc: Data type definitions
|
55
64
|
template: definition_types.mustache
|
56
65
|
modelData: definitions
|
66
|
+
symbols: 'lambda{ |d| [ Sbuilder::Constants::META_MODEL_DEFINITIONS, d[:definition_name], "t_#{d[:definition_name]}", ] }'
|
57
67
|
|
58
68
|
- desc: Interface types
|
59
69
|
template: interface_types.mustache
|
60
|
-
modelData:
|
70
|
+
modelData: interfaces # = all interfaces (not filtered)
|
71
|
+
# model data 'interfaces' is mapped to 'interface_types'
|
72
|
+
symbols:
|
73
|
+
- 'lambda{ |iface| [Constants::META_MODEL_INTERFACE_TYPES, iface[:interface_operation], "#{Constants::META_MODEL.select{ |e| e[:name] == Constants::META_MODEL_INTERFACE_TYPES}.first[:prefix]}#{iface[:interface_name]}", ] }'
|
74
|
+
- 'lambda{ |iface| [Constants::META_MODEL_INTERFACE_RESPONSE_TYPES,iface[:interface_operation], "#{Constants::META_MODEL.select{ |e| e[:name] == Constants::META_MODEL_INTERFACE_RESPONSE_TYPES}.first[:prefix]}#{iface[:interface_name]}", ] }'
|
75
|
+
|
61
76
|
|
62
77
|
- desc: Start of plc block
|
63
78
|
template: tla/plc_header.mustache
|
@@ -72,16 +87,15 @@ generate:
|
|
72
87
|
modelData: none
|
73
88
|
|
74
89
|
|
75
|
-
# --------------------
|
76
90
|
# extension point: extend_state.tla
|
77
91
|
|
78
92
|
- desc: Extension point for specification state
|
79
93
|
template: extend/extend_state.mustache
|
80
94
|
modelData: none
|
81
95
|
|
82
|
-
- desc: Specification state
|
83
|
-
|
84
|
-
|
96
|
+
# - desc: Specification state
|
97
|
+
# template: state_variables.mustache
|
98
|
+
# modelData: variables
|
85
99
|
|
86
100
|
- desc: Start of plc define block
|
87
101
|
template: tla/plc_define_header.mustache
|
@@ -100,10 +114,8 @@ generate:
|
|
100
114
|
template: tla/operators-infrastructure-service.mustache
|
101
115
|
modelData: none
|
102
116
|
|
103
|
-
# --------------------
|
104
117
|
# extension point: extend_operations.tla
|
105
|
-
|
106
|
-
- desc: Extension point for operations
|
118
|
+
- desc: Extension point for operations
|
107
119
|
template: extend/extend_operations.mustache
|
108
120
|
modelData: none
|
109
121
|
|
@@ -119,9 +131,7 @@ generate:
|
|
119
131
|
template: tla/macro-infrastructure-service.mustache
|
120
132
|
modelData: none
|
121
133
|
|
122
|
-
# --------------------
|
123
134
|
# extension point: extend_macros.tla
|
124
|
-
|
125
135
|
- desc: Extension poin to add macros
|
126
136
|
template: extend/extend_macros.mustache
|
127
137
|
modelData: none
|
@@ -130,16 +140,19 @@ generate:
|
|
130
140
|
template: interface_stubs_dummy.mustache
|
131
141
|
modelData: none
|
132
142
|
|
133
|
-
# --------------------
|
134
143
|
# extension point: extend_implementation.tla
|
135
|
-
|
136
144
|
- desc: Extension point for implementation
|
137
145
|
template: extend/extend_implementation.mustache
|
138
146
|
modelData: none
|
139
147
|
|
148
|
+
# create entries for two symbol table meta-types,
|
149
|
+
# META_MODEL_SERVICE_IMPLEMENTATION meta-types created only if it is defined
|
140
150
|
- desc: Process interfaces
|
141
151
|
template: interface_processes.mustache
|
142
152
|
modelData: interfaces
|
153
|
+
symbols:
|
154
|
+
- 'lambda{ |iface| [ Sbuilder::Constants::META_MODEL_PROCESSES, iface[:interface_operation], "p_#{iface[:interface_name]}", ] }'
|
155
|
+
- 'lambda{ |iface| [ Sbuilder::Constants::META_MODEL_SERVICE_IMPLEMENTATION, iface[:interface_operation], iface[:implementation], ] if iface[:implementation] }'
|
143
156
|
|
144
157
|
- desc: Environment model 'Tail' process
|
145
158
|
template: tla/plc_tail.mustache
|
@@ -153,30 +166,20 @@ generate:
|
|
153
166
|
template: tla/plc_translation.mustache
|
154
167
|
modelData: none
|
155
168
|
|
156
|
-
- desc: Type constraint in specification
|
157
|
-
|
158
|
-
|
169
|
+
# - desc: Type constraint in specification
|
170
|
+
# template: state_type_invariant.mustache
|
171
|
+
# modelData: variables
|
159
172
|
|
160
|
-
# --------------------
|
161
|
-
# extension point: extend_type_invariant.tla
|
162
|
-
|
163
|
-
# - desc: Extension point for type invariants
|
164
|
-
# template: extend/extend_type_invariant.tla
|
165
|
-
# modelData: none
|
166
|
-
|
167
173
|
- desc: Validate types for infrastructure service return values
|
168
174
|
template: state_type_invariant-infrastructure-service.mustache
|
169
175
|
modelData: infrastructureServices
|
170
|
-
|
176
|
+
symbols: 'lambda{ |iface| [ Sbuilder::Constants::META_MODEL_INFRA_SERVICES, iface[:interface_operation], "i_#{iface[:interface_name]}", ] }'
|
171
177
|
|
172
|
-
# --------------------
|
173
178
|
# extension point: extend_invariant.tla
|
174
|
-
|
175
179
|
- desc: Extension point for specification invariants
|
176
180
|
template: extend/extend_invariant.mustache
|
177
181
|
modelData: none
|
178
182
|
|
179
|
-
# --------------------
|
180
183
|
# extension point: extend_assumptions.tla
|
181
184
|
- desc: Extension point for assumptions
|
182
185
|
template: extend/extend_assumptions.mustache
|
@@ -231,19 +234,6 @@ generate:
|
|
231
234
|
modelData: none
|
232
235
|
|
233
236
|
|
234
|
-
# --------------------
|
235
|
-
# extension point: extend_type_invariant.cfg
|
236
|
-
# - desc: Extesion pointo to activate type constraints
|
237
|
-
# template: extend/extend_type_invariant.cfg
|
238
|
-
# modelData: none
|
239
|
-
|
240
|
-
# --------------------
|
241
|
-
# extension point: extend_invariant.cfg
|
242
|
-
|
243
|
-
- desc: Extension point to activate specification invariants - DEPRECATED
|
244
|
-
template: extend/extend_invariant_cfg.mustache
|
245
|
-
modelData: none
|
246
|
-
|
247
237
|
- desc: Activate invariants defined in sbuilder.yaml
|
248
238
|
template: invariant_activate.mustache
|
249
239
|
modelData: invariants
|
@@ -301,19 +291,23 @@ generate:
|
|
301
291
|
# Dump data-models for template generation
|
302
292
|
|
303
293
|
- output: doc/data-model.md
|
304
|
-
inputs:
|
294
|
+
inputs:
|
305
295
|
|
306
296
|
- desc: Model header
|
307
297
|
template: data-model-header.mustache
|
308
298
|
modelData: none
|
309
299
|
|
300
|
+
- desc: Metatypes
|
301
|
+
template: data-model-dump.mustache
|
302
|
+
modelData: metatypes
|
303
|
+
|
310
304
|
- desc: Model interfaces
|
311
305
|
template: data-model-dump.mustache
|
312
306
|
modelData: interfaces
|
313
307
|
|
314
|
-
- desc: Model interface_types (=request/reponse for all interfaces)
|
315
|
-
|
316
|
-
|
308
|
+
# - desc: Model interface_types (=request/reponse for all interfaces)
|
309
|
+
# template: data-model-dump.mustache
|
310
|
+
# modelData: interface_types
|
317
311
|
|
318
312
|
- desc: Model infrastructureServices
|
319
313
|
template: data-model-dump.mustache
|
data/lib/sbuilder/domain.rb
CHANGED
@@ -3,15 +3,24 @@ module Sbuilder
|
|
3
3
|
|
4
4
|
class Domain
|
5
5
|
|
6
|
+
# @attr [Strin] name
|
6
7
|
attr_reader :name
|
7
8
|
|
9
|
+
# alias for
|
10
|
+
alias domain_name :name
|
11
|
+
|
12
|
+
# @attr [Domain] extension defined in setup, overrinding defaults
|
8
13
|
attr_reader :extension
|
9
14
|
|
10
15
|
# ------------------------------------------------------------------
|
11
|
-
#
|
12
|
-
|
16
|
+
# logger
|
17
|
+
|
18
|
+
PROGNAME = nil # progname for logger default class name
|
13
19
|
include Sbuilder::Utils::MyLogger # mix logger
|
14
|
-
|
20
|
+
|
21
|
+
# ------------------------------------------------------------------
|
22
|
+
# @!group Constructor & configure
|
23
|
+
|
15
24
|
|
16
25
|
def initialize( options = {} )
|
17
26
|
@logger = getLogger( PROGNAME, options )
|
@@ -22,49 +31,95 @@ module Sbuilder
|
|
22
31
|
"#{self.class}: name=#{name}"
|
23
32
|
end
|
24
33
|
|
25
|
-
# ------------------------------------------------------------------
|
26
|
-
# config
|
27
34
|
|
28
35
|
def setName( name )
|
29
36
|
@name = name
|
30
37
|
self
|
31
38
|
end
|
32
39
|
|
33
|
-
# def setCardinality( cardinality )
|
34
|
-
# @cardinality = cardinality
|
35
|
-
# raise "deprecated #{__method__} in #{self.class}"
|
36
|
-
# self
|
37
|
-
# end
|
38
|
-
|
39
|
-
# ------------------------------------------------------------------
|
40
|
-
# extendDomain
|
41
|
-
|
42
40
|
def setExtension( extension )
|
43
41
|
@extension = extension
|
44
42
|
end
|
45
43
|
|
44
|
+
# @!endgroup
|
45
|
+
|
46
|
+
|
46
47
|
# ------------------------------------------------------------------
|
47
|
-
#
|
48
|
+
# @!group Behaviour
|
49
|
+
|
50
|
+
|
51
|
+
##
|
52
|
+
# Should we add Nil to domain set
|
53
|
+
#
|
54
|
+
# @return [Boolean] delegate to extenion, true default
|
55
|
+
def includeNil
|
56
|
+
return extension.includeNil if extension
|
57
|
+
true
|
58
|
+
end
|
48
59
|
|
60
|
+
##
|
61
|
+
# It is safe to call +cardinality+, +domain_values+,
|
62
|
+
# +numberOfElements+, +render_values+, ...
|
63
|
+
#
|
64
|
+
# @return true, extension may override
|
65
|
+
#
|
66
|
+
def tlaBaseType
|
67
|
+
return extension.tlaBaseType if extension
|
68
|
+
false
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
# Notice: number of elements include also nil element, which should
|
73
|
+
# be calculated, when calculating elements in domain.
|
74
|
+
#
|
75
|
+
#
|
49
76
|
# delegate to extension - return 1 if does not exist
|
50
77
|
def cardinality
|
51
78
|
return 1 unless extension
|
52
79
|
extension.cardinality
|
53
80
|
end
|
54
81
|
|
82
|
+
# @return [integer] number of elements including nil
|
83
|
+
def numberOfElements
|
84
|
+
cardinality + 1
|
85
|
+
end
|
86
|
+
|
87
|
+
##
|
88
|
+
# @return [Integer..Integer] range to access 'domain_entry' of
|
89
|
+
# (maybe extentended) domain
|
90
|
+
def domain_range
|
91
|
+
return extension.domain_range if extension
|
92
|
+
endIndx = includeNil ? cardinality : cardinality-1
|
93
|
+
0..endIndx
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
# @!endgroup
|
98
|
+
|
55
99
|
# ------------------------------------------------------------------
|
56
|
-
#
|
100
|
+
# @!group Implementation details
|
101
|
+
|
57
102
|
|
58
|
-
|
59
|
-
|
103
|
+
##
|
104
|
+
# @return [Boolean] false which is internal nil repreentation
|
105
|
+
def nilValue
|
106
|
+
false
|
107
|
+
end
|
108
|
+
|
109
|
+
##
|
110
|
+
# @return [Boolean] true if +includeNil+ && (Int(0) || Nil)
|
111
|
+
private def isNil( i )
|
112
|
+
includeNil && ( (i.is_a?(Integer) && i == 0) || (i.is_a?(String) && i == 'Nil' ))
|
113
|
+
end
|
114
|
+
|
115
|
+
# @!endgroup
|
116
|
+
|
117
|
+
|
118
|
+
# ------------------------------------------------------------------
|
119
|
+
# @!group Domain values
|
60
120
|
|
61
|
-
# # used to generate default values - in extension loaded
|
62
|
-
# def domain_prefix
|
63
|
-
# domain_name + "_"
|
64
|
-
# end
|
65
121
|
|
66
122
|
# Return domain value for for element 'i'. Possibly delegate to sub-class.
|
67
|
-
#
|
68
123
|
#
|
69
124
|
# @param i [Integer|String] element index (interger) or String value non integer
|
70
125
|
#
|
@@ -72,7 +127,8 @@ module Sbuilder
|
|
72
127
|
def domain_entry( i )
|
73
128
|
|
74
129
|
# interpret 0 as Nil
|
75
|
-
return false if i.is_a?(Integer) && i == 0
|
130
|
+
# return false if (i.is_a?(Integer) && i == 0) || (i.is_a?(String) && i == 'Nil' )
|
131
|
+
return nilValue if isNil( i )
|
76
132
|
|
77
133
|
# delegage - if possible
|
78
134
|
return extension.domain_entry( i ) if extension
|
@@ -87,34 +143,102 @@ module Sbuilder
|
|
87
143
|
Requested cardinality #{i} exceeds cardinality #{cardinality} of domain #{name}
|
88
144
|
EOS
|
89
145
|
|
90
|
-
|
146
|
+
# defaults strings
|
91
147
|
"d_#{domain_name}_#{i}"
|
92
148
|
end
|
93
|
-
|
94
149
|
|
95
|
-
|
96
|
-
|
97
|
-
|
150
|
+
##
|
151
|
+
# Default assumes that domain values are string elements, and they
|
152
|
+
# need to be wrapped with " -chars. Sub-classes may define
|
153
|
+
# integers, which should not be wrapped, and they override this
|
154
|
+
# method.
|
155
|
+
#
|
156
|
+
# @return [String] wrapped around "
|
157
|
+
def stringize( val )
|
158
|
+
return val if val.is_a?( FalseClass )
|
159
|
+
'"' + val + '"'
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
##
|
164
|
+
# Index from 1.. if domain (extension defines Nil), index from
|
165
|
+
# 0 if no need to reserve space for nil (e.g. domain_range).
|
166
|
+
#
|
167
|
+
# Known override in domain range, where using index range does
|
168
|
+
# not necassarily start with 0.
|
169
|
+
#
|
170
|
+
# @see #render_entry
|
171
|
+
#
|
172
|
+
# @return [Array] renderValues set of elements, which can be
|
173
|
+
# outputted to TLA code (i.e. they wrapped with "-char, if
|
174
|
+
# necassary). Does not include Nil.
|
175
|
+
#
|
176
|
+
|
177
|
+
def render_values
|
178
|
+
startIndx = includeNil ? 1 : 0
|
179
|
+
endIndx = includeNil ? cardinality : cardinality-1
|
180
|
+
arr = *(startIndx..endIndx).map { |i| render_entry( i ) }
|
98
181
|
return arr
|
99
182
|
end
|
100
183
|
|
184
|
+
# @!endgroup
|
185
|
+
|
186
|
+
|
187
|
+
# ------------------------------------------------------------------
|
188
|
+
# @!group Model data
|
101
189
|
|
102
|
-
|
190
|
+
##
|
191
|
+
# Return entry which can be rendered (string values wrapped with
|
192
|
+
# "-marks, integers plain, constans, e.g. Nil not wrappedd. If
|
193
|
+
# domain +includeNil+ values i==0 and i=='Nil' are wrapped to
|
194
|
+
# 'nilValue' (=false). Actual value from +domain_entry+
|
195
|
+
#
|
196
|
+
def render_entry( i )
|
197
|
+
return nilValue if isNil( i )
|
198
|
+
return extension.render_entry( i ) if extension
|
199
|
+
stringize( domain_entry( i ))
|
200
|
+
end
|
201
|
+
|
202
|
+
|
203
|
+
|
204
|
+
##
|
205
|
+
# Called from model#templateData, used in mustache templates to
|
206
|
+
# output elements in domain set. Nil NOT included in this set!
|
207
|
+
#
|
208
|
+
# Is not expected to be overridded by sub-classes.
|
209
|
+
#
|
210
|
+
# @see render_values returnin array of Hashes
|
211
|
+
#
|
212
|
+
# @see #includeNil whether Nil should be included
|
213
|
+
#
|
214
|
+
# @return [Hash:Array] array_of_hashes array of {:value,:_comma}
|
215
|
+
# @option array_of_hashes [:Symbol] :value
|
216
|
+
# @option array_of_hashes [:Symbol] :index
|
217
|
+
# @option array_of_hashes ['String'] _comma
|
218
|
+
|
103
219
|
def domain_values
|
104
|
-
|
105
|
-
|
106
|
-
|
220
|
+
vals = extension.nil? ? render_values : extension.render_values
|
221
|
+
|
222
|
+
# String is - name of a type, no need expand
|
223
|
+
return {
|
224
|
+
:value => vals,
|
225
|
+
'_comma' => '',
|
226
|
+
:index => 0,
|
227
|
+
} unless vals.is_a?( Array )
|
228
|
+
arra = vals.map.with_index do |domain_entry, i|
|
107
229
|
{
|
108
|
-
:namespace => Constants::TYPE_NAMESPACE_DOM,
|
109
230
|
:value => domain_entry,
|
110
|
-
|
231
|
+
'_comma' => ',',
|
111
232
|
:index => i+1,
|
112
233
|
}
|
113
234
|
end
|
114
|
-
|
235
|
+
arra.last['_comma'] = '' if arra && arra.any?
|
236
|
+
@logger.debug( "#{__method__} #{name}: arra #{arra.to_yaml}, includeNil=#{includeNil}" )
|
115
237
|
return arra
|
116
238
|
end
|
117
239
|
|
240
|
+
# @!endgroup
|
241
|
+
|
118
242
|
end
|
119
243
|
|
120
244
|
|