tla-sbuilder 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|