tla-sbuilder 0.2.1 → 0.2.2
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/README.md +8 -17
- data/VERSION +1 -1
- data/lib/sbuilder.rb +3 -2
- data/lib/sbuilder/exception.rb +3 -0
- data/lib/sbuilder/facade/api_loader_plugin.rb +67 -0
- data/lib/sbuilder/param_set_loader_swagger.rb +16 -44
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a2598df840dc392c2decb758b1dbc7f057cd6e6a
|
4
|
+
data.tar.gz: c58a5b8370bb4571dd7d4b33f6f5acb9c8049115
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d64be8f51018a61900294b67cf884b19db0e752b98b935fde5c8c9565e9c93765afd1277896f57470153b587a44c0bb08fed3cbbf57e085dff7b68c78a58c114
|
7
|
+
data.tar.gz: 16637b1375dc71c8a281b04f42373c0e89d13805529baff758ed8e9bddf92163e697f6f2c1a3bd5824b300f3737b9843213f5f40da55122888c573ec4cb82ae0
|
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.2.
|
4
|
+
# Sbuilder - A Specification Builder for TLA+ Tools - $Release:0.2.2$
|
5
5
|
|
6
6
|
A tool to generate runnable specification models in
|
7
7
|
[TLA+ language](http://research.microsoft.com/en-us/um/people/lamport/tla/book.html)
|
@@ -12,23 +12,14 @@ and parts of it can be presented as
|
|
12
12
|
[implementation blueprints](#BLUEPRINT) to developers.
|
13
13
|
|
14
14
|
See
|
15
|
-
[live documentation](http://jarjuk.github.io/tla-sbuilder/0.1.1.pre/features.html)
|
16
|
-
for more details on configuring Sbuilder, and on features implemented
|
17
|
-
by Sbuilder
|
18
15
|
|
19
|
-
|
16
|
+
* [documentation](https://jarjuk.wordpress.com/sbuilder/) for
|
17
|
+
backgroun information, User's Guide and Developer's Guide
|
20
18
|
|
21
|
-
* [
|
22
|
-
|
23
|
-
|
24
|
-
model business IT
|
19
|
+
* [live documentation](http://jarjuk.github.io/tla-sbuilder/0.2.2/features.html)
|
20
|
+
(Cucumber tests) for more details on configuring Sbuilder, and on
|
21
|
+
features implemented by Sbuilder
|
25
22
|
|
26
|
-
* [Sbuilder introduction](https://jarjuk.wordpress.com/2016/03/03/sbuilder-2-intro/):
|
27
|
-
mostly the same information as in this README
|
28
|
-
|
29
|
-
* [Using Sbuilder to Model Business IT Systems](https://jarjuk.wordpress.com/2016/03/03/sbuilder-3-case/):
|
30
|
-
a very loooong post demonstrating, how business IT system modeling
|
31
|
-
can be done using Sbuilder
|
32
23
|
|
33
24
|
## <a id="TARGET-SYSTEM">Target Systems</a>
|
34
25
|
|
@@ -50,7 +41,7 @@ architecture identifies
|
|
50
41
|
## <a id="ELEMENTS-OF">Runnable Specification Code</a>
|
51
42
|
|
52
43
|
Sbuilder combines three main elements to create runnable TLA+
|
53
|
-
|
44
|
+
Specification Code:
|
54
45
|
|
55
46
|
1. **Interface specification**: Natively Sbuilder accepts
|
56
47
|
[RESTfull](https://en.wikipedia.org/wiki/Representational_state_transfer)
|
@@ -281,7 +272,7 @@ and observing **Error: Evaluating invariant** `possible_tag_with_invalid_address
|
|
281
272
|
|
282
273
|
### Create Own Model
|
283
274
|
|
284
|
-
See [
|
275
|
+
See [cucumber test](http://jarjuk.github.io/tla-sbuilder/0.2.2/features.html) for more details.
|
285
276
|
|
286
277
|
Create default directories used by `sbuilder` in current working directory
|
287
278
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
data/lib/sbuilder.rb
CHANGED
@@ -38,8 +38,6 @@ require_relative "sbuilder/resolver_loader.rb"
|
|
38
38
|
require_relative "sbuilder/resolver_loader_yaml.rb"
|
39
39
|
|
40
40
|
|
41
|
-
require_relative "sbuilder/param_set_loader_swagger.rb"
|
42
|
-
|
43
41
|
require_relative "sbuilder/model.rb"
|
44
42
|
|
45
43
|
require_relative "sbuilder/extension_loader.rb"
|
@@ -47,8 +45,11 @@ require_relative "sbuilder/extension_loader.rb"
|
|
47
45
|
require_relative "sbuilder/factory.rb"
|
48
46
|
require_relative "sbuilder/controller.rb"
|
49
47
|
|
48
|
+
require_relative "sbuilder/facade/api_loader_plugin.rb"
|
50
49
|
require_relative "sbuilder/facade/api_loader.rb"
|
51
50
|
|
51
|
+
require_relative "sbuilder/param_set_loader_swagger.rb"
|
52
|
+
|
52
53
|
require_relative "sbuilder/mustache/template_reader"
|
53
54
|
require_relative "sbuilder/mustache/template_reader_context"
|
54
55
|
require_relative "sbuilder/mustache/template"
|
data/lib/sbuilder/exception.rb
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
module Sbuilder
|
2
|
+
|
3
|
+
# Abstract Parent class for Sbuilder for API loaders.
|
4
|
+
#
|
5
|
+
# Class implements following service groups
|
6
|
+
#
|
7
|
+
# - Constructor and Object Initialize
|
8
|
+
# - Framework Services for API loader
|
9
|
+
# - configure plugin
|
10
|
+
#
|
11
|
+
|
12
|
+
class ApiLoaderPlugin
|
13
|
+
|
14
|
+
|
15
|
+
include Sbuilder::Utils::MyLogger # mix logger
|
16
|
+
|
17
|
+
# ------------------------------------------------------------------
|
18
|
+
# @!group Constructor and Object Initialize
|
19
|
+
|
20
|
+
def initialize( factory, options = {} )
|
21
|
+
end
|
22
|
+
|
23
|
+
# Sbuilder controller calls 'setFacade' when new API loader object
|
24
|
+
# is contstructed. Sets instance variable '@facade' and '@logger'.
|
25
|
+
#
|
26
|
+
# @param [Sbuilder::ApiLoader] facace to Sbuilder services
|
27
|
+
|
28
|
+
def setFacade( facade )
|
29
|
+
@facade = facade
|
30
|
+
@logger = facade.createLogger( self.class.name.split('::').last )
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
# @!endgroup
|
35
|
+
|
36
|
+
# ------------------------------------------------------------------
|
37
|
+
# @!group Framework Services
|
38
|
+
|
39
|
+
# @return [Sbuilder::ApiLoader] facade to access Sbuilder servivices ( set in 'setFacade')
|
40
|
+
def facade
|
41
|
+
@facade
|
42
|
+
end
|
43
|
+
|
44
|
+
# @return [Logger] logger logging to Sbuiler log
|
45
|
+
def logger
|
46
|
+
# return STDERR logger - if logger not yet ready
|
47
|
+
Logger.new( STDERR ) unless @logger
|
48
|
+
@logger
|
49
|
+
end
|
50
|
+
|
51
|
+
# ------------------------------------------------------------------
|
52
|
+
# @!group Configure services - MUST be implement by plugin class
|
53
|
+
|
54
|
+
# Configure API loader - MUST be implemented by plugin class
|
55
|
+
# @param configuration [Hash] properties to configure
|
56
|
+
|
57
|
+
def self.configure( configuration )
|
58
|
+
raise PluginException.new <<-EOS
|
59
|
+
Plugin classes should implement method #{__method__}.
|
60
|
+
EOS
|
61
|
+
end
|
62
|
+
|
63
|
+
# @!endgroup
|
64
|
+
|
65
|
+
end # class ApiLoaderPlugin
|
66
|
+
end
|
67
|
+
|
@@ -9,36 +9,14 @@ module Sbuilder
|
|
9
9
|
|
10
10
|
|
11
11
|
|
12
|
-
class ParamSetLoaderSwagger
|
12
|
+
class ParamSetLoaderSwagger < Sbuilder::ApiLoaderPlugin
|
13
13
|
|
14
|
-
attr_reader :facade # [Sbuilder::ParamSetLoader]
|
15
|
-
# facade to Sbuilder
|
16
|
-
|
17
|
-
# ------------------------------------------------------------------
|
18
|
-
# mixer
|
19
|
-
PROGNAME = "LoadSwagger" # progname for logger
|
20
|
-
include Sbuilder::Utils::MyLogger # mix logger
|
21
14
|
|
22
15
|
# ------------------------------------------------------------------
|
23
16
|
# constrcutore
|
24
17
|
def initialize( options = {} )
|
25
|
-
# @logger = getLogger( PROGNAME, options )
|
26
|
-
# @logger.info( "#{__method__} initialized" )
|
27
|
-
|
28
|
-
@facade = nil
|
29
|
-
|
30
18
|
end
|
31
19
|
|
32
|
-
# Facade gets injected, and used immediately to create logger
|
33
|
-
# object.
|
34
|
-
#
|
35
|
-
# @param [Sbuilder::ApiLoader] facace to Sbuilder services
|
36
|
-
#
|
37
|
-
def setFacade( facade )
|
38
|
-
@facade = facade
|
39
|
-
#
|
40
|
-
@logger = facade.createLogger( PROGNAME )
|
41
|
-
end
|
42
20
|
|
43
21
|
# ------------------------------------------------------------------
|
44
22
|
# class method configure
|
@@ -46,15 +24,9 @@ module Sbuilder
|
|
46
24
|
# @param configuration [Hash] properties to configure
|
47
25
|
def self.configure( configuration )
|
48
26
|
end
|
49
|
-
|
50
27
|
|
51
|
-
#
|
52
|
-
#
|
53
|
-
# # @param paramsetLoaderDef [Hash] configuration in 'sbuilder.yaml'
|
54
|
-
# #
|
55
|
-
# def doConfigure( paramsetLoaderDef )
|
56
|
-
# @infrastructureServices = true if paramsetLoaderDef['infrastructureServices']
|
57
|
-
# end
|
28
|
+
# ------------------------------------------------------------------
|
29
|
+
# Loader methods
|
58
30
|
|
59
31
|
# @param yamlFileUri [String] path or url to YAML file to process
|
60
32
|
def readLines( yamlFileUri )
|
@@ -68,7 +40,7 @@ module Sbuilder
|
|
68
40
|
# @param yamlFileUri [String] path or url to YAML file to process
|
69
41
|
|
70
42
|
def load( yamlFileUri )
|
71
|
-
|
43
|
+
logger.info( "#{__method__} yamlFileUri=#{yamlFileUri}" )
|
72
44
|
|
73
45
|
begin
|
74
46
|
|
@@ -117,7 +89,7 @@ module Sbuilder
|
|
117
89
|
def doLoadInterfaces( swagger_hash )
|
118
90
|
|
119
91
|
interface_paramsSets = parseInterfaces( swagger_hash )
|
120
|
-
|
92
|
+
logger.info( "#{__method__} loaded=#{interface_paramsSets.length} interface_paramsSets" )
|
121
93
|
|
122
94
|
interface_paramsSets.each do |interface|
|
123
95
|
facade.modelInterface( interface )
|
@@ -185,7 +157,7 @@ module Sbuilder
|
|
185
157
|
expandedDocs.each do |expandedDoc|
|
186
158
|
# puts "#----->{op}-expandedDoc->#{expandedDoc}"
|
187
159
|
expandedDoc.each do |parameterName,parameterProps|
|
188
|
-
|
160
|
+
logger.debug( "#{__method__} {op}-parameterName->#{parameterName}, parameterProps=>#{parameterProps}" )
|
189
161
|
if hasRef( parameterProps ) then
|
190
162
|
reference_parameter( paramSet, parameterName, getRefDocumentName( parameterProps ), parameterProps['type'] )
|
191
163
|
else
|
@@ -206,7 +178,7 @@ module Sbuilder
|
|
206
178
|
#
|
207
179
|
def parseInterfaces( swagger_hash )
|
208
180
|
|
209
|
-
|
181
|
+
logger.info( "#{__method__} starting" )
|
210
182
|
|
211
183
|
# collect all interface paramsets together
|
212
184
|
interfaces = []
|
@@ -220,8 +192,8 @@ module Sbuilder
|
|
220
192
|
interfaceParamSet = facade.newInterface( path, op )
|
221
193
|
paramSetResponse = interfaceParamSet.response
|
222
194
|
|
223
|
-
|
224
|
-
|
195
|
+
logger.info( "#{__method__} created interfaceParamSet=#{interfaceParamSet.getId}" )
|
196
|
+
logger.debug( "#{__method__} created interfaceParamSet.getId=#{interfaceParamSet.getId}, opdef=#{opdef}" )
|
225
197
|
|
226
198
|
# collect
|
227
199
|
interfaces << interfaceParamSet
|
@@ -230,7 +202,7 @@ module Sbuilder
|
|
230
202
|
# input paramters: 'paths'/<path>/<op>/'parameters'
|
231
203
|
|
232
204
|
opdef['parameters'] && opdef['parameters'].map do |parameter|
|
233
|
-
|
205
|
+
logger.debug( "#{__method__} path/op #{path}/#{op} - parameter #{parameter}" )
|
234
206
|
if parameter['schema'] then
|
235
207
|
# in='body' => schema defined
|
236
208
|
defintionReferenceName = getReferencedDefinitionName( parameter['schema'], swagger_hash )
|
@@ -239,7 +211,7 @@ module Sbuilder
|
|
239
211
|
simple_parameter( interfaceParamSet, parameter['name'], parameter['type'] ) if parameter['name']
|
240
212
|
else
|
241
213
|
msg = "Empty parameter definition on #{path}/#{op} "
|
242
|
-
|
214
|
+
logger.error( "#{__method__} #{msg}" )
|
243
215
|
warn msg
|
244
216
|
end
|
245
217
|
|
@@ -253,11 +225,11 @@ module Sbuilder
|
|
253
225
|
|
254
226
|
if response['schema'] then
|
255
227
|
defintionReferenceName = getReferencedDefinitionName( response['schema'], swagger_hash )
|
256
|
-
|
228
|
+
logger.debug( "#{__method__} defintionReferenceName=#{defintionReferenceName}, op=#{op}, status_code=#{status_code}, response=#{response}" )
|
257
229
|
reference_parameter( paramSetResponse, "status_#{status_code}", defintionReferenceName, response['schema']['type'] )
|
258
230
|
|
259
231
|
else
|
260
|
-
|
232
|
+
logger.debug( "#{path}-#{op}-#{status_code}: no response data for response #{response}" )
|
261
233
|
# response object
|
262
234
|
end
|
263
235
|
end # responses
|
@@ -284,7 +256,7 @@ module Sbuilder
|
|
284
256
|
|
285
257
|
swagger_parameter = facade.newParameterReference( name, defintionReferenceName, parameterType == 'array' )
|
286
258
|
|
287
|
-
|
259
|
+
logger.info( "#{__method__} param set =#{paramSet.getId}, parameter=#{swagger_parameter.getName}, parameter=#{swagger_parameter.reference}" )
|
288
260
|
|
289
261
|
# add to parameter set
|
290
262
|
paramSet.addParameter( swagger_parameter )
|
@@ -393,7 +365,7 @@ module Sbuilder
|
|
393
365
|
|
394
366
|
# get document pointed by 'ref' in 'swagger_hash'
|
395
367
|
def getDefinitionDoc( ref, swagger_hash )
|
396
|
-
|
368
|
+
logger.info( "#{__method__} ref=#{ref}" )
|
397
369
|
|
398
370
|
# currently supports only local references
|
399
371
|
raise "Not valid local ref #{ref} in #{schemaObject}" unless valid_local_ref( ref )
|
@@ -403,7 +375,7 @@ module Sbuilder
|
|
403
375
|
|
404
376
|
# puts "pathElements=#{pathElements} for ref=#{ref} in #{refs}"
|
405
377
|
defininedDoc = swagger_hash.traverse( *pathElements )
|
406
|
-
|
378
|
+
logger.debug( "#{__method__} ref=#{ref} --> defininedDoc=#{defininedDoc}" )
|
407
379
|
raise "Could not resolve definition reference '#{ref}'" if defininedDoc.nil?
|
408
380
|
defininedDoc
|
409
381
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tla-sbuilder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- jarjuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mustache
|
@@ -135,6 +135,7 @@ files:
|
|
135
135
|
- lib/sbuilder/exception.rb
|
136
136
|
- lib/sbuilder/extension_loader.rb
|
137
137
|
- lib/sbuilder/facade/api_loader.rb
|
138
|
+
- lib/sbuilder/facade/api_loader_plugin.rb
|
138
139
|
- lib/sbuilder/factory.rb
|
139
140
|
- lib/sbuilder/model.rb
|
140
141
|
- lib/sbuilder/mustache/template.rb
|