tla-sbuilder 0.3.4 → 0.3.7

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.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +65 -70
  3. data/VERSION +1 -1
  4. data/lib/sbuilder/constants.rb +4 -4
  5. data/lib/sbuilder/controller.rb +232 -76
  6. data/lib/sbuilder/default-sbuilder.yaml +66 -22
  7. data/lib/sbuilder/facade/api_loader_facade.rb +47 -11
  8. data/lib/sbuilder/facade/facade_constants.rb +26 -0
  9. data/lib/sbuilder/facade/loader_plugin_root.rb +4 -1
  10. data/lib/sbuilder/facade/param_set_root.rb +38 -1
  11. data/lib/sbuilder/facade/snippet_loader_facade.rb +90 -8
  12. data/lib/sbuilder/factory.rb +9 -4
  13. data/lib/sbuilder/model.rb +25 -3
  14. data/lib/sbuilder/param_set.rb +8 -7
  15. data/mustache/cfg/const_def.mustache +2 -0
  16. data/mustache/{setup → config}/assumptions_activate.mustache +0 -0
  17. data/mustache/{setup → config}/domains_run.mustache +0 -0
  18. data/mustache/config/module_footer.mustache +1 -0
  19. data/mustache/config/module_header.mustache +10 -0
  20. data/mustache/{setup → config}/operator_run.mustache +0 -0
  21. data/mustache/{setup → config}/operator_tick.mustache +0 -0
  22. data/mustache/config/steps_run.mustache +43 -0
  23. data/mustache/{setup → config}/steps_run_bind_rule.mustache +5 -2
  24. data/mustache/{setup → config}/steps_run_bind_set.mustache +11 -5
  25. data/mustache/{setup → config}/steps_run_parameterBind.mustache +10 -4
  26. data/mustache/{setup → config}/steps_run_parameterExact.mustache +11 -3
  27. data/mustache/inherit/inherit_config.mustache +29 -0
  28. data/mustache/interface_processes.mustache +6 -2
  29. data/mustache/interfaces/interface_mapper.mustache +12 -0
  30. data/mustache/possibility/module_extends.mustache +1 -1
  31. data/mustache/possibility/operator_set_step_input.mustache +8 -0
  32. data/mustache/possibility/possibility_definition.mustache +4 -4
  33. data/mustache/possibility/possility_setup.mustache +4 -3
  34. data/mustache/setup/module_header.mustache +3 -1
  35. data/mustache/setup/operator_set_step_input.mustache +8 -0
  36. data/mustache/state_type_invariant-infrastructure-service.mustache +2 -2
  37. data/mustache/tla/const_def.mustache +1 -0
  38. data/mustache/tla/macro_run.mustache +10 -2
  39. data/mustache/tla/plc_run_state.mustache +2 -0
  40. data/src/pet/infrastructure_id_get.tla +6 -2
  41. data/src/pet/service_pet_post.tla +2 -2
  42. data/src/pet/service_tag_post.tla +1 -1
  43. data/tla-sbuilder.gemspec +1 -1
  44. metadata +21 -13
  45. data/mustache/setup/steps_run.mustache +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 13bb5aca53c85d8ae5b3943c8c37c23f745adc00
4
- data.tar.gz: 5f22e716073199acd62eef8f1477b2562727374c
3
+ metadata.gz: da5bfdebad06728053bd1d9be7b5fb8bc6bf4d5f
4
+ data.tar.gz: 1ac862f608a98cb6ae42e973ad9f9ca22e7c0cb2
5
5
  SHA512:
6
- metadata.gz: 2686dae3b6360eeafa1d6f71639515f718c0f45bd43067010ea740391ab3338e5086d51f24d7d4929c7ed8499b94d3f2967ecd69b855d24f90dc935e121d3fd3
7
- data.tar.gz: 9412ebeb149ca0357e0340cdadc00c7b1d55df6778764464a880274b13f1759f79c47a86c18b13162eab0a0fe4bf59ce6cd661ca63ba87048e742e1b11a5acd9
6
+ metadata.gz: f511f243f72f46b30cd191ad984ef858f6a62317c81fe98f05d8c97784481c707b72e1f1f06539b56e8a19784f5e75bc88641cdf63bfd44a052aba623c852011
7
+ data.tar.gz: c2844d67ae0c95aa6668abf2e52bd45f84a5edbad182faef7b5493461257d6c95fa944c80b8c53e77d5ab76174ba1023c09cde671ca59df6e407b973f9973f7c
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  <link href="../site.css" rel="stylesheet"></link>
2
2
  [Readme](README.md) [Releases](RELEASES.md)
3
3
 
4
- # Sbuilder - A Specification Builder for TLA+ Tools - $Release:0.3.4$
4
+ # Sbuilder - A Specification Builder for TLA+ Tools - $Release:0.3.7$
5
5
 
6
6
  A tool to generate runnable formal models in
7
7
  [TLA+ language](http://research.microsoft.com/en-us/um/people/lamport/tla/book.html)
@@ -64,21 +64,16 @@ model:
64
64
  * **operator**: TLA+ language constructs, which enable "to define all
65
65
  the data structures and operations that occur in the specification"
66
66
 
67
- * **transaction**: pseudo code implementation of common behavior in
68
- modifying system state
67
+ * **procedures**: implementation of target system application *services* as TLA
68
+ [PlusCal](http://research.microsoft.com/en-us/um/people/lamport/tla/pluscal.html)
69
+ procedures in TLA+ language
69
70
 
70
- * **service**: pseudo code implementation of target system
71
- *application services* using PlusCal procedures in TLA+ language
71
+ * **macros**: TLA PlusCal implementation of common behavior, for
72
+ example to modify system state
72
73
 
73
- * **infrastructure**: pseudo code implementation of target system
74
- *infrastructure services* using PlusCal procedures in TLA+ language
75
-
76
- * **interface**: implementation of *application interface* extension
77
- points using PlusCal macros in TLA+ language
78
-
79
- * **correctness**: operator definitions, and INVARIANT directives in
80
- TLA+ language specifying properties, which must be not violated in
81
- specification executions
74
+ * **invariant**: operator definitions, and INVARIANT directives
75
+ in TLA+ language specifying properties, which must be not
76
+ violated in specification executions
82
77
 
83
78
  * **possibility**: optional operator definitions to increase
84
79
  confidence in correctness invariants
@@ -103,7 +98,7 @@ blueprints* are html-pages including code snippets from Sbuilder *code
103
98
  repository*, or code generated based on *interface specifications*.
104
99
 
105
100
 
106
- ## Two Operating Modes
101
+ ## <a id="OPERATING-MODES">Two Operating Modes</a>
107
102
 
108
103
  Sbuilder supports two operating modes:
109
104
 
@@ -123,6 +118,8 @@ better understanding, 2) to get the design right, 3) and to write
123
118
  better code for the system being
124
119
  built. [more details](MODELING-PIPELINE.md)
125
120
 
121
+ See [sbuilder-example](https://github.com/jarjuk/sbuilder-example) for
122
+ a toy example of using sbuilder in *Modeling Pipeline* mode.
126
123
 
127
124
 
128
125
  ### <a id="EMBEDDED-MODE">Embedded Mode</a>
@@ -135,11 +132,12 @@ complexities in creating a formal model, Sbuilder can be embedded into
135
132
  a framework, and to use implementation code in creating formal model
136
133
  of the application.
137
134
 
138
- An example of embedded sbuilder is
135
+ An example of embedded sbuilder is in
139
136
  [sbuilder-ethereum](https://github.com/jarjuk/sbuilder-ethereum).
140
137
 
141
138
 
142
139
 
140
+
143
141
  ## <a id="USAGE">Usage</a>
144
142
 
145
143
  ### Pre-requisites
@@ -151,6 +149,11 @@ have Java and
151
149
  [TLA+ Tools](http://research.microsoft.com/en-us/um/people/lamport/tla/tools.html)
152
150
  installed.
153
151
 
152
+ TLA+ Tools jar can be obtained from
153
+ [download page](https://tla.msr-inria.inria.fr/tlatoolbox/dist), see
154
+ [TLA+ Tools](http://research.microsoft.com/en-us/um/people/lamport/tla/tools.html)
155
+ for more instructions on installation.
156
+
154
157
 
155
158
  ### Installation
156
159
 
@@ -166,12 +169,7 @@ and run
166
169
 
167
170
  bundle install
168
171
 
169
- TLA+ Tools jar can be obtained from
170
- [download page](https://tla.msr-inria.inria.fr/tlatoolbox/dist), see
171
- [TLA+ Tools](http://research.microsoft.com/en-us/um/people/lamport/tla/tools.html)
172
- for more instructions on installation.
173
-
174
- ### To Use Pet Store Example Application
172
+ ### <a id="PET-STORE-EXAMPLE">To Use Pet Store Example Application</a>
175
173
 
176
174
  Create default directories used by `sbuilder` in current working directory
177
175
 
@@ -235,7 +233,7 @@ The **possibility** to reach this state can be demonstrated running
235
233
  and observing **Error: Evaluating invariant** `possible_tag_with_invalid_address` **failed.**
236
234
 
237
235
 
238
- ### Create Own Model
236
+ ### <a id="CREATE-OWN-MODEL">Create Own Model</a>
239
237
 
240
238
  See [on-line documentation](http://jarjuk.github.io/tla-sbuilder.html)
241
239
  for more details.
@@ -266,18 +264,39 @@ To run the model checking for setup `default` using TLA+tools jar in
266
264
 
267
265
 
268
266
  Create TLA snippets in directory `src`, and include template snippets
269
- to generated code using
270
- [mustache syntax](https://mustache.github.io/mustache.5.html).
271
-
272
- For example, put the following code to
267
+ into Sbuilder context using Snippet Loader plugin
268
+ `Sbuilder::SnippetLoaderSimple`.
273
269
 
274
- at_least_two_tags == Cardinality( v_tags ) > 1
275
270
 
276
- file `src/operator_at_least_two_tags.tla`, and include it to
277
- specification code by adding following line into `src/operator`
271
+ For example, put the following code into file `src/operator_at_least_two_tags.tla`
278
272
 
279
- {{>operator_at_least_two_tags.tla}}
273
+ at_least_two_tags == Cardinality( v_tags ) > 1
280
274
 
275
+ and add configuration in `snippets` section in `cnf/sbuilder.yaml`,
276
+ which gives the class name of the plugin to use
277
+ (`Sbuilder::SnippetLoaderSimple`), defines metatype (`framework-svc`),
278
+ application name (`at_least_two_tags`), and filename of the snippet in
279
+ default `src` -directory (`operator_at_least_two_tags.tla`). The use
280
+ of metatype allows single appName to mapped to several unique
281
+ specNames by adding a metatype specific prefix to the appName. In this
282
+ example, `framework-svc` metatype adds empty prefix to appName.
283
+
284
+ snippets:
285
+ - className: Sbuilder::SnippetLoaderSimple
286
+ snippets:
287
+
288
+ - metatype: framework-svc
289
+ appName: at_least_two_tags
290
+ file: operator_at_least_two_tags.tla
291
+
292
+
293
+ Run `bundle exec sbuilder.rb generate`, and observe that
294
+ `at_least_two_tags` operator, indeed, is included into generated
295
+ formal model e.g. in file `gen/customer1/tla/model.tla`:
296
+
297
+ (* SNIPPET: framework-svc/at_least_two_tags --> at_least_two_tags *)
298
+ at_least_two_tags == Cardinality( v_tags ) > 1
299
+ (* --END OF SNIPPET-- *)
281
300
 
282
301
  ## Manage State Space Explosion, and Allow Scaling
283
302
 
@@ -313,6 +332,16 @@ option `--filter-list` to continue after parser error, and to
313
332
  configure manually modules call flow analyzer would otherwise omit
314
333
  from the specification code.
315
334
 
335
+ ## <a id="CONFIGURATION">Configuration</a>
336
+
337
+ ### <a id="SBUILDER-YAML">Main configuration file sbuilder.yaml</a>
338
+
339
+ TBD
340
+
341
+ ### <a id="SETUP-CONF">Setups modeling environment</a>
342
+
343
+ TBD
344
+
316
345
  ## Extending Sbuilder
317
346
 
318
347
  ### <a id="API_LOADER">API Loader Extension Point</a>
@@ -390,46 +419,12 @@ For a plugin implementation, see an SnippetLoaderSimple example
390
419
 
391
420
  * [rpsec test](spec/sbuilder/snippet_loader_simple_spec.rb)
392
421
 
422
+ *Snippet loader plugins* are activated in the same way as *API loader
423
+ plugins* using a configuration in `extend.loaders` -section in
424
+ `cnf/sbuilder.yaml`
393
425
 
394
- For example, to activate `Sbuilder::Ethereum::Plugin` in
395
- [sbuilder-ethereum](https://github.com/jarjuk/sbuilder-ethereum) GEM,
396
- and to create a object instance with the name `solcLoader` use YAML
397
- configuration in `sbuilder.yaml` section `extend.loaders`:
398
-
399
- extend:
400
- loaders:
401
- - className: Sbuilder::Ethereum::Plugin
402
- gem: sbuilder-ethereum
403
- configuration:
404
- solc_command: "/home/jj/work/sbuilder-ethereum/bin/solc"
405
- objects:
406
- - objectName: solcLoader
407
- configuration:
408
- preferences:
409
- tla-trace: false
410
-
411
- In this example, class method `Sbuilder::Ethereum::Plugin.configure`
412
- accepts a setting `solc_command`, object method
413
- `Sbuilder::Ethereum::Plugin#configure` accepts `preferences` hash with
414
- a property `tla-trace`. See documentation for
415
- [sbuilder-ethereum](https://github.com/jarjuk/sbuilder-ethereum) GEM
416
- for more details on these settings.
417
-
418
- Plugin `Sbuilder::Ethereum::Plugin` hooks to *API Loader Extension
419
- Point* and to *Snippet Loader Extension Point*. Loading over these
420
- extensions points is activated using the following `sbuilder.yaml`
421
- configuration in `interfaces` and `snippets` -sections:
422
-
423
- interfaces:
424
- - objectName: solcLoader
425
- url:
426
- - solidity/demo1.sol
427
- snippets:
428
- - objectName: solcLoader
429
- snippets:
430
-
431
- Notice, how this YAML snippet uses object instance name `objectName:
432
- solcLoader` defined in `extend.loaders` -section above.
426
+ An example of using *Snippet Loader Plugin* was presented
427
+ [earlier](#CREATE-OWN-MODEL) in this [README](README.md).
433
428
 
434
429
  ## License
435
430
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.4
1
+ 0.3.7
@@ -166,8 +166,8 @@ module Sbuilder
166
166
 
167
167
  BASE_EXTENSIONS_DOMAIN = [
168
168
  {
169
- 'domain' => "BOOLEAN",
170
- 'type' => 'BOOLEAN',
169
+ 'domain' => Sbuilder::FacadeConstants::DOMAIN_BOOLEAN, # "BOOLEAN",
170
+ 'type' => Sbuilder::FacadeConstants::DOMAIN_BOOLEAN, # 'BOOLEAN',
171
171
  }
172
172
  ]
173
173
 
@@ -213,8 +213,8 @@ module Sbuilder
213
213
  :allowed => %w( implementation completion ),
214
214
  },
215
215
  :snippet_loader_instantiate => {
216
- :required => %w( snippets ),
217
- :allowed => %w( className objectName configuration ),
216
+ :required => %w( ),
217
+ :allowed => %w( className objectName configuration snippets ),
218
218
  :one_of => %w( className objectName ),
219
219
  },
220
220
  :api_loader_instantiate => {
@@ -357,7 +357,7 @@ module Sbuilder
357
357
  begin
358
358
  Utils::Validate.validateProperties( interfaceParamsetDef, Constants::VALIDATION[:api_loader_instantiate][:required], Constants::VALIDATION[:api_loader_instantiate][:allowed] )
359
359
  Utils::Validate.oneOf( interfaceParamsetDef, Constants::VALIDATION[:api_loader_instantiate][:one_of_class_or_object] )
360
- Utils::Validate.oneOf( interfaceParamsetDef, Constants::VALIDATION[:api_loader_instantiate][:one_of_file_or_url] )
360
+ # Utils::Validate.oneOf( interfaceParamsetDef, Constants::VALIDATION[:api_loader_instantiate][:one_of_file_or_url] )
361
361
 
362
362
  # validateProperties( interfaceParamsetDef, @@interfaceLoaderDef_required, @@interfaceLoaderDef_allowed )
363
363
  # validateOne( interfaceParamsetDef, @@interfaceLoaderDef_oneof )
@@ -448,7 +448,12 @@ module Sbuilder
448
448
  # @todo move implementation extension to model construct phase and
449
449
  # initalize symbol table herre
450
450
  def load
451
- @logger.info( "#{__method__} load started" )
451
+ @logger.info( "#{__method__} load started" )
452
+
453
+ # create sbuilder (e.g. domain BOOLEAN) + application model
454
+ # extension (literals identified in application)
455
+ baseExtensionDefine
456
+
452
457
  loadResolvers( getResolversConfig )
453
458
  loadInterfaces( getInterfaceConfig )
454
459
  loadInvariants( getInvariantConfig )
@@ -456,11 +461,6 @@ module Sbuilder
456
461
  # extract static partial calls in mustache templates into an array
457
462
  resolveExtensionPartials
458
463
 
459
- # create sbuilder (e.g. domain BOOLEAN) + application model
460
- # extension (literals identified in application)
461
-
462
- baseExtensionDefine
463
-
464
464
  # create domain model i.e. resolve domains
465
465
  resolve
466
466
 
@@ -470,11 +470,12 @@ module Sbuilder
470
470
  # init symbol table with names in sbuilder & interface model
471
471
  initializeSymbolTable
472
472
 
473
- # snippet load extension point
474
- loadSnippets( getSnippetConfig )
473
+ # moved to processSetup
474
+ # # snippet load extension point
475
+ # loadSnippets( getSnippetConfig )
475
476
 
476
- # topological sort
477
- sortPartials
477
+ # # topological sort
478
+ # sortPartials
478
479
 
479
480
  end
480
481
 
@@ -547,10 +548,15 @@ module Sbuilder
547
548
  end
548
549
  end
549
550
 
551
+ # @see {.baseMetatypes}
552
+ def baseMetatypes
553
+ self.class.baseMetatypes
554
+ end
555
+
550
556
  # @return [Hash:Array] baseMetatype definitions
551
557
  # @option baseMetatype [Symbol] :name
552
558
  # @option baseMetatype [Symbol] :desc
553
- def baseMetatypes
559
+ def self.baseMetatypes
554
560
  Sbuilder::Constants::META_MODEL
555
561
  end
556
562
 
@@ -955,6 +961,13 @@ module Sbuilder
955
961
  # extensions
956
962
  loadExtensions( setupName )
957
963
 
964
+ # snippet load extension point
965
+ loadSnippets( getSnippetConfig )
966
+
967
+ # topological sort
968
+ sortPartials
969
+
970
+
958
971
  # DEPREACTED # initializeSymbolTable called after extension load
959
972
  # (but before generation) because 'interface-extension' sets
960
973
  # META_MODEL_SERVICE_IMPLEMENTATION
@@ -1095,6 +1108,25 @@ module Sbuilder
1095
1108
  #
1096
1109
  def generateTemplate( setupName, outputPath, fileHandle, generateDef, mustache )
1097
1110
 
1111
+ str = generateTemplateString( setupName, outputPath, generateDef, mustache )
1112
+
1113
+ # output to file
1114
+ fileHandle.puts str
1115
+
1116
+ end
1117
+
1118
+ ##
1119
+ # Create string to output in {#generateTemplate}.
1120
+ #
1121
+ # @param outputPath [String] see {#generateTemplate}
1122
+ #
1123
+ #
1124
+ # @param mustache [Sbuilder::Template] see {#generateTemplate}
1125
+ #
1126
+ # @param generateDef [Hash] see {#generateTemplate}
1127
+ #
1128
+ def generateTemplateString( setupName, outputPath, generateDef, mustache )
1129
+
1098
1130
  # validate configuration
1099
1131
  validateProperties( generateDef, @@validGenerateDef_required, @@validGenerateDef_allowed )
1100
1132
 
@@ -1106,74 +1138,74 @@ module Sbuilder
1106
1138
  # # Iterate each 'template' in one 'generateDef' array (most often just one template)
1107
1139
  # templates = generateDef['template'].is_a?( Array ) ? generateDef['template'] : [ generateDef['template'] ]
1108
1140
  template = getGenerateTemplate( generateDef )
1109
- # @todo: remove array
1110
- templates = [template]
1111
1141
 
1112
1142
  # Support template paramaters
1113
1143
  templateParameters = generateDef['templateParameters'].nil? ? {} : generateDef['templateParameters']
1114
1144
 
1115
1145
  # optional parameters added in generate -section
1116
1146
  renderData['PARAMETERS'] = templateParameters
1147
+
1148
+ renderData['CONFIG'] = @opts
1117
1149
 
1118
- # META-data added to data to render
1119
- templates.each do |template|
1120
-
1121
- renderData['CONFIG'] = @opts
1122
-
1123
- renderData['META'] =
1124
- {
1125
- :desc => generateDef['desc'],
1126
- :modelData => generateDef['modelData'],
1127
- :template => template,
1128
- :version => Sbuilder::version,
1129
- :model_version => Sbuilder::model_version,
1130
- :timestamp => Time.new.strftime( "%Y-%m-%d %H:%M:%S" ),
1131
- :setup => setupName,
1132
- :outputDirectory => File.dirname( outputPath ),
1133
- :outputFile => File.basename( outputPath ),
1134
- :outputModule => File.basename( outputPath, ".*" ),
1135
- }
1136
-
1137
- renderData['ACTIONS'] = {
1138
- :cat => lambda do |path_template|
1139
- path = mustache.render_str( path_template, renderData )
1140
- File.readlines( path.strip ).join('')
1141
- end,
1142
- :dump_partials => lambda do |partial_type|
1143
- partialNames = partials[partial_type] || []
1144
- "#{partial_type} --> #{partialNames.join( ',' )}"
1145
- end,
1150
+ renderData['META'] =
1151
+ {
1152
+ :desc => generateDef['desc'],
1153
+ :modelData => generateDef['modelData'],
1154
+ :template => template,
1155
+ :version => Sbuilder::version,
1156
+ :model_version => Sbuilder::model_version,
1157
+ :timestamp => Time.new.strftime( "%Y-%m-%d %H:%M:%S" ),
1158
+ :setup => setupName,
1159
+ :outputDirectory => File.dirname( outputPath ),
1160
+ :outputFile => File.basename( outputPath ),
1161
+ :outputModule => File.basename( outputPath, ".*" ),
1146
1162
  }
1147
1163
 
1148
- # specName <- SPEC_NAME( metatype, appName )
1149
- renderData['SPEC_NAME'] = lambda do |type_appName|
1150
- key = mustache.render_str( type_appName, renderData )
1151
- keys = key.split( '.' )
1152
- begin
1153
- ret = getSymbolTable.lookupSymbol(keys[1], keys[0] )
1154
- rescue Exception => ee
1155
- msg =<<-EOS
1164
+ renderData['ACTIONS'] = {
1165
+ :cat => lambda do |path_template|
1166
+ path = mustache.render_str( path_template, renderData )
1167
+ File.readlines( path.strip ).join('')
1168
+ end,
1169
+ :dump_partials => lambda do |partial_type|
1170
+ partialNames = partials[partial_type] || []
1171
+ "#{partial_type} --> #{partialNames.join( ',' )}"
1172
+ end,
1173
+ }
1174
+
1175
+ # specName <- SPEC_NAME( metatype, appName )
1176
+ renderData['SPEC_NAME'] = lambda do |type_appName|
1177
+ key = mustache.render_str( type_appName, renderData )
1178
+ keys = key.split( '.' )
1179
+ begin
1180
+ return key if ( keys.length == 1 ) # just a name
1181
+ ret = getSymbolTable.lookupSymbol(keys[1], keys[0] )
1182
+ rescue Exception => ee
1183
+ msg =<<-EOS
1156
1184
  Error
1157
1185
 
1158
1186
  #{ee}
1159
1187
  when accessing symbol table using key #{type_appName}
1160
1188
 
1161
1189
  EOS
1162
- @logger.error( "#{__method__} #{msg}" )
1163
- raise ControllerException.new, msg, ee.backtrace
1164
- end
1165
- ret
1190
+ @logger.error( "#{__method__} #{msg}" )
1191
+ raise ControllerException.new, msg, ee.backtrace
1166
1192
  end
1167
-
1193
+ ret
1194
+ end
1168
1195
 
1169
- # support 'PREFERENCES'
1170
- renderData.merge!( getSetupPREFERENCES(setupName) )
1196
+ # snippetEntry['PARAM_SET_FIELD_DOMAIN_INIT'] = lambda do |accesKey|
1197
+ # raise "herer #{accessKey}"
1198
+ # end
1199
+
1171
1200
 
1172
- # finally render i.e. create string to output
1173
- begin
1174
- str = mustache.to_str( template, renderData )
1175
- rescue Exception => ee
1176
- msg =<<-EOS
1201
+ # support 'PREFERENCES'
1202
+ renderData.merge!( getSetupPREFERENCES(setupName) )
1203
+
1204
+ # finally render i.e. create string to output
1205
+ begin
1206
+ str = mustache.to_str( template, renderData )
1207
+ rescue Exception => ee
1208
+ msg =<<-EOS
1177
1209
  Error
1178
1210
 
1179
1211
  #{ee}
@@ -1183,19 +1215,126 @@ module Sbuilder
1183
1215
  #{renderData.to_yaml}
1184
1216
 
1185
1217
  EOS
1186
- @logger.error( "#{__method__} #{msg}" )
1187
- raise ControllerException.new, msg, ee.backtrace
1188
- end
1218
+ @logger.error( "#{__method__} #{msg}" )
1219
+ raise ControllerException.new, msg, ee.backtrace
1220
+ end
1221
+
1222
+ # Log (a little bit too early :(
1223
+ @logger.info( "#{__method__} templateName=#{template}" )
1224
+ output( 3, " ---> #{generateDef['desc']} (#{template})" )
1225
+
1226
+ # return rendersed string
1227
+ str
1228
+
1229
+ end
1230
+
1231
+
1232
+ # def generateTemplate( setupName, outputPath, fileHandle, generateDef, mustache )
1233
+
1234
+ # # validate configuration
1235
+ # validateProperties( generateDef, @@validGenerateDef_required, @@validGenerateDef_allowed )
1236
+
1237
+ # # access data to output - and filter it
1238
+ # renderData = templateData( generateDef['modelData'] )
1239
+ # # e.g. prune interfaces not used in setup
1240
+ # renderData = setupFilter( generateDef['modelData'], renderData )
1241
+
1242
+ # # # Iterate each 'template' in one 'generateDef' array (most often just one template)
1243
+ # # templates = generateDef['template'].is_a?( Array ) ? generateDef['template'] : [ generateDef['template'] ]
1244
+ # template = getGenerateTemplate( generateDef )
1245
+ # # @todo: remove array
1246
+ # templates = [template]
1247
+
1248
+ # # Support template paramaters
1249
+ # templateParameters = generateDef['templateParameters'].nil? ? {} : generateDef['templateParameters']
1250
+
1251
+ # # optional parameters added in generate -section
1252
+ # renderData['PARAMETERS'] = templateParameters
1253
+
1254
+ # # META-data added to data to render
1255
+ # templates.each do |template|
1256
+
1257
+ # renderData['CONFIG'] = @opts
1258
+
1259
+ # renderData['META'] =
1260
+ # {
1261
+ # :desc => generateDef['desc'],
1262
+ # :modelData => generateDef['modelData'],
1263
+ # :template => template,
1264
+ # :version => Sbuilder::version,
1265
+ # :model_version => Sbuilder::model_version,
1266
+ # :timestamp => Time.new.strftime( "%Y-%m-%d %H:%M:%S" ),
1267
+ # :setup => setupName,
1268
+ # :outputDirectory => File.dirname( outputPath ),
1269
+ # :outputFile => File.basename( outputPath ),
1270
+ # :outputModule => File.basename( outputPath, ".*" ),
1271
+ # }
1272
+
1273
+ # renderData['ACTIONS'] = {
1274
+ # :cat => lambda do |path_template|
1275
+ # path = mustache.render_str( path_template, renderData )
1276
+ # File.readlines( path.strip ).join('')
1277
+ # end,
1278
+ # :dump_partials => lambda do |partial_type|
1279
+ # partialNames = partials[partial_type] || []
1280
+ # "#{partial_type} --> #{partialNames.join( ',' )}"
1281
+ # end,
1282
+ # }
1283
+
1284
+ # # specName <- SPEC_NAME( metatype, appName )
1285
+ # renderData['SPEC_NAME'] = lambda do |type_appName|
1286
+ # key = mustache.render_str( type_appName, renderData )
1287
+ # keys = key.split( '.' )
1288
+ # begin
1289
+ # ret = getSymbolTable.lookupSymbol(keys[1], keys[0] )
1290
+ # rescue Exception => ee
1291
+ # msg =<<-EOS
1292
+ # Error
1293
+
1294
+ # #{ee}
1295
+ # when accessing symbol table using key #{type_appName}
1189
1296
 
1297
+ # EOS
1298
+ # @logger.error( "#{__method__} #{msg}" )
1299
+ # raise ControllerException.new, msg, ee.backtrace
1300
+ # end
1301
+ # ret
1302
+ # end
1190
1303
 
1191
- # output to file
1192
- @logger.info( "#{__method__} templateName=#{template}" )
1193
- output( 3, " ---> #{generateDef['desc']} (#{template})" )
1194
- fileHandle.puts str
1304
+
1305
+ # # support 'PREFERENCES'
1306
+ # renderData.merge!( getSetupPREFERENCES(setupName) )
1307
+
1308
+ # # finally render i.e. create string to output
1309
+ # begin
1310
+ # str = mustache.to_str( template, renderData )
1311
+ # rescue Exception => ee
1312
+ # msg =<<-EOS
1313
+ # Error
1314
+
1315
+ # #{ee}
1316
+
1317
+ # when rendering template '#{template} using data
1318
+
1319
+ # #{renderData.to_yaml}
1320
+
1321
+ # EOS
1322
+ # @logger.error( "#{__method__} #{msg}" )
1323
+ # raise ControllerException.new, msg, ee.backtrace
1324
+ # end
1325
+
1195
1326
 
1196
- end # templates.each
1327
+ # # output to file
1328
+ # @logger.info( "#{__method__} templateName=#{template}" )
1329
+ # output( 3, " ---> #{generateDef['desc']} (#{template})" )
1330
+ # fileHandle.puts str
1331
+
1332
+ # end # templates.each
1333
+
1334
+ # end
1335
+
1336
+
1197
1337
 
1198
- end
1199
1338
 
1200
1339
 
1201
1340
 
@@ -1374,16 +1513,26 @@ module Sbuilder
1374
1513
 
1375
1514
  return @controller_config if @controller_config
1376
1515
 
1377
- @logger.info( "#{__method__} loading config from #{getConfigFilePath}" )
1378
- yaml_lines = Sbuilder::Utils::NetIo.read_lines( getConfigFilePath )
1379
- @controller_config = YAML.load( yaml_lines )
1516
+ # @logger.info( "#{__method__} loading config from #{getConfigFilePath}" )
1517
+ # yaml_lines = Sbuilder::Utils::NetIo.read_lines( getConfigFilePath )
1518
+ # @controller_config = YAML.load( yaml_lines )
1519
+ @controller_config = getConfigSbuilder()
1380
1520
  # allow empty generate section
1381
1521
  @controller_config = {} if @controller_config.nil?
1382
1522
  @controller_config['generate'] = [] unless @controller_config['generate']
1383
1523
  @logger.debug( "#{__method__} config in #{getConfigFilePath} controller_config= #{@controller_config.to_yaml}" )
1384
1524
 
1385
1525
  yaml_lines = Sbuilder::Utils::NetIo.read_lines( getInternalConfigFilePath )
1386
- internal_config = YAML.load( yaml_lines )
1526
+ begin
1527
+ internal_config = YAML.load( yaml_lines )
1528
+ rescue Exception => e
1529
+ msg = <<-EOS
1530
+ #{e}
1531
+ Error encountred, when parsing yaml #{yaml_lines}
1532
+ EOS
1533
+ @logger.error( "#{__method__}: #{msg}" )
1534
+ raise ControllerException.new, msg, e.backtrace
1535
+ end
1387
1536
  internal_config['generate'] = [] unless internal_config['generate']
1388
1537
  @logger.debug( "#{__method__} internal_config= #{internal_config.to_yaml}" )
1389
1538
 
@@ -1394,6 +1543,13 @@ module Sbuilder
1394
1543
  @controller_config
1395
1544
  end
1396
1545
 
1546
+ # @return [Hash] configuration parsed getConfigFilePath
1547
+ def getConfigSbuilder
1548
+ @logger.info( "#{__method__} loading config from #{getConfigFilePath}" )
1549
+ yaml_lines = Sbuilder::Utils::NetIo.read_lines( getConfigFilePath )
1550
+ return YAML.load( yaml_lines )
1551
+ end
1552
+
1397
1553
  def getSetups
1398
1554
  getConfig()['setups']
1399
1555
  end
@@ -1716,7 +1872,7 @@ module Sbuilder
1716
1872
  elsif paramSetDef['url'] then
1717
1873
  return paramSetDef['url']
1718
1874
  else
1719
- raise "Param set definition #{paramSetDef} should defined 'file' or 'url'"
1875
+ warn "Param set definition #{paramSetDef} should define 'file' or 'url'"
1720
1876
  end
1721
1877
 
1722
1878
  end