tla-sbuilder 0.1.0 → 0.2.1
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 +116 -33
- data/VERSION +1 -1
- data/lib/cli/cli-customer.rb +41 -23
- data/lib/cli/cli-example.rb +1 -1
- data/lib/cli/cli-pet.rb +33 -30
- data/lib/cli/cli-text.rb +57 -17
- data/lib/cli/cli.rb +56 -10
- data/lib/sbuilder.rb +3 -1
- data/lib/sbuilder/constants.rb +5 -2
- data/lib/sbuilder/controller.rb +289 -59
- data/lib/sbuilder/default-sbuilder.yaml +25 -3
- data/lib/sbuilder/domain.rb +1 -1
- data/lib/sbuilder/domain_cardinality.rb +1 -1
- data/lib/sbuilder/domain_value.rb +1 -1
- data/lib/sbuilder/exception.rb +13 -7
- data/lib/sbuilder/extension_loader.rb +75 -18
- data/lib/sbuilder/facade/api_loader.rb +293 -0
- data/lib/sbuilder/factory.rb +66 -3
- data/lib/sbuilder/model.rb +59 -3
- data/lib/sbuilder/mustache/template.rb +13 -13
- data/lib/sbuilder/mustache/template_reader_context.rb +5 -3
- data/lib/sbuilder/param_set.rb +2 -1
- data/lib/sbuilder/param_set_db.rb +1 -1
- data/lib/sbuilder/param_set_def.rb +1 -1
- data/lib/sbuilder/param_set_if.rb +1 -1
- data/lib/sbuilder/param_set_loader_swagger.rb +122 -121
- data/lib/sbuilder/param_set_step.rb +1 -1
- data/lib/sbuilder/parameter.rb +1 -1
- data/lib/sbuilder/parameter_container.rb +1 -1
- data/lib/sbuilder/parameter_dom.rb +1 -1
- data/lib/sbuilder/parameter_ref.rb +2 -2
- data/lib/sbuilder/resolver_rule.rb +1 -1
- data/lib/sbuilder/resolver_rule_match.rb +1 -1
- data/lib/sbuilder/resolver_rule_ref.rb +1 -1
- data/lib/sbuilder/spec/README +5 -0
- data/lib/sbuilder/spec/api_loader_facade.rb +247 -0
- data/lib/utils/cache_lines.rb +21 -0
- data/lib/utils/netio.rb +5 -13
- data/mustache/cfg/macro_run.mustache +1 -0
- data/mustache/interface_processes.mustache +9 -2
- data/mustache/interface_stubs_dummy.mustache +7 -0
- data/mustache/interface_types.mustache +3 -3
- data/mustache/invariant_activate.mustache +16 -0
- data/mustache/setup/assumptions_activate.mustache +16 -0
- data/mustache/{domains_run.mustache → setup/domains_run.mustache} +2 -2
- data/mustache/setup/operator_run.mustache +2 -0
- data/mustache/setup/steps_run_bind_set.mustache +1 -1
- data/mustache/setup/steps_run_parameterBind.mustache +4 -2
- data/mustache/tla/macro_run.mustache +8 -0
- data/mustache/tla/operator_run.mustache +1 -0
- data/mustache/tla/plc_define_run.mustache +2 -4
- data/mustache/tla/plc_run_state.mustache +1 -1
- data/src-extend/extend/extend_invariant_cfg.mustache +1 -1
- data/src/pet/assumption_domains.tla +1 -1
- data/src/pet/correctness.cfg +4 -0
- data/tla-sbuilder.gemspec +3 -1
- metadata +14 -10
- data/lib/sbuilder/param_set_loader.rb +0 -77
- data/src-extend/extend_app/correctness.cfg +0 -9
data/lib/sbuilder/factory.rb
CHANGED
@@ -41,14 +41,22 @@ module Sbuilder
|
|
41
41
|
Sbuilder::Constants::PARAMETER_REF => Parameter_Ref,
|
42
42
|
}
|
43
43
|
@paramSets = {
|
44
|
-
Sbuilder::Constants::
|
44
|
+
Sbuilder::Constants::INTERFACE_OPERATION => ParamSet_If,
|
45
45
|
Sbuilder::Constants::SWAGGER_DEFINITION => ParamSetDef,
|
46
46
|
Sbuilder::Constants::PARAM_SET_STEPS => ParamSetStep,
|
47
47
|
}
|
48
48
|
|
49
49
|
@paramSetLoaders = {
|
50
|
-
Sbuilder::Constants::
|
50
|
+
# Sbuilder::Constants::LOADER_SWAGGER => ParamSetLoaderSwagger
|
51
51
|
}
|
52
|
+
|
53
|
+
# swagger loader loaded as an extension
|
54
|
+
addLoaders( [
|
55
|
+
{ 'gem' => 'sbuilder/param_set_loader_swagger',
|
56
|
+
'className' => 'Sbuilder::ParamSetLoaderSwagger',
|
57
|
+
'configuration' => nil,
|
58
|
+
}
|
59
|
+
], [ Sbuilder::Constants::LOADER_SWAGGER] )
|
52
60
|
@mapperLoaders = {
|
53
61
|
Sbuilder::Constants::MAPPER_YAML => ResolverLoader_YAML
|
54
62
|
}
|
@@ -64,6 +72,40 @@ module Sbuilder
|
|
64
72
|
}
|
65
73
|
|
66
74
|
end
|
75
|
+
|
76
|
+
# Configure additional loaders
|
77
|
+
#
|
78
|
+
# @param arrOfLoaders [Hash:Array] with properties :name,:className
|
79
|
+
# @param name [String:Array] alias name to use (in addition to className)
|
80
|
+
def addLoaders( arrOfLoaders, names=nil )
|
81
|
+
arrOfLoaders.each_with_index do |loader,index|
|
82
|
+
|
83
|
+
validateProperties( loader, ['className', 'gem'], ['configuration'] )
|
84
|
+
|
85
|
+
# load class module to context - if className
|
86
|
+
require loader['gem'] unless Class.const_defined?( loader['className'] )
|
87
|
+
|
88
|
+
begin
|
89
|
+
@logger.info "#{__method__} loader['className']=#{loader['className']}"
|
90
|
+
klass = Object.const_get( loader['className'] )
|
91
|
+
rescue Exception => e
|
92
|
+
msg = <<-EOS
|
93
|
+
Unknown class: #{loader['className']}, #{e.message}
|
94
|
+
|
95
|
+
On loader extension #{loader}
|
96
|
+
EOS
|
97
|
+
@logger.error( "#{__method__} #{msg}" )
|
98
|
+
raise NameError, msg, e.backtrace
|
99
|
+
end
|
100
|
+
klass.configure( loader['configuration'] )
|
101
|
+
# using className
|
102
|
+
name = loader['className']
|
103
|
+
paramSetLoaders[name] = klass
|
104
|
+
# using optional name
|
105
|
+
paramSetLoaders[names[index]] = klass if names
|
106
|
+
|
107
|
+
end
|
108
|
+
end
|
67
109
|
|
68
110
|
# ------------------------------------------------------------------
|
69
111
|
# singleton
|
@@ -98,6 +140,13 @@ module Sbuilder
|
|
98
140
|
return mapperLoaders[type].new( Factory.getFactory(options), options )
|
99
141
|
end
|
100
142
|
|
143
|
+
# @return [Sbuilder::ApiLoader] facade to Sbuilder
|
144
|
+
def getFacade( controller )
|
145
|
+
facade = Sbuilder::ApiLoader.new( Factory.getFactory(options), options )
|
146
|
+
facade.setController( controller )
|
147
|
+
return facade
|
148
|
+
end
|
149
|
+
|
101
150
|
|
102
151
|
# return object to load parameter sets
|
103
152
|
def getParamSetLoader( type )
|
@@ -111,7 +160,7 @@ module Sbuilder
|
|
111
160
|
@logger.error( "#{__method__} #{msg}" )
|
112
161
|
raise NameError.new( msg )
|
113
162
|
end
|
114
|
-
return paramSetLoaders[type].new(
|
163
|
+
return paramSetLoaders[type].new( options )
|
115
164
|
end
|
116
165
|
|
117
166
|
# ------------------------------------------------------------------
|
@@ -227,6 +276,20 @@ module Sbuilder
|
|
227
276
|
end
|
228
277
|
parameters[type].new( options )
|
229
278
|
end
|
279
|
+
|
280
|
+
# ------------------------------------------------------------------
|
281
|
+
# validate 'defintionHash' all 'required'/only 'allowed' props set
|
282
|
+
private def validateProperties( defintionHash, required, allowed=[] )
|
283
|
+
|
284
|
+
allowed = allowed + required
|
285
|
+
|
286
|
+
missingProps = required - defintionHash.keys
|
287
|
+
raise FactoryException, "Missing properties #{missingProps} in #{defintionHash} - required #{required}" if missingProps.any?
|
288
|
+
|
289
|
+
invalidProps = defintionHash.keys - allowed
|
290
|
+
raise FactoryException, "Unknown properties #{invalidProps} in #{defintionHash} - allowed #{allowed}" if invalidProps.any?
|
291
|
+
|
292
|
+
end
|
230
293
|
|
231
294
|
|
232
295
|
end # class Factory
|
data/lib/sbuilder/model.rb
CHANGED
@@ -10,6 +10,9 @@ module Sbuilder
|
|
10
10
|
attr_reader :steps # array of paramSetSteps
|
11
11
|
attr_reader :possibility # [String] of setup possibility - may be nil
|
12
12
|
attr_reader :possibilities # [String:Array] possibilities in setup
|
13
|
+
attr_reader :invariants # [Hash:Array] properties 'name', 'desc'
|
14
|
+
attr_reader :setupDef # [Hash] properties 'setupDirectory', 'desc', 'extensions'
|
15
|
+
attr_reader :assumptions # [Hash:Array] properties 'name', 'desc'
|
13
16
|
|
14
17
|
# ------------------------------------------------------------------
|
15
18
|
# mixer
|
@@ -34,12 +37,25 @@ module Sbuilder
|
|
34
37
|
@interfaces = {}
|
35
38
|
@steps = []
|
36
39
|
@possibility = nil
|
40
|
+
@setupDef = nil
|
37
41
|
@possibilities = []
|
38
|
-
|
42
|
+
@invariants = []
|
43
|
+
@assumptions = []
|
39
44
|
@interfaceExtensions = {}
|
40
45
|
|
41
46
|
|
42
47
|
end
|
48
|
+
|
49
|
+
# ------------------------------------------------------------------
|
50
|
+
# invariants + assumptions
|
51
|
+
|
52
|
+
def addInvariant( invariant )
|
53
|
+
@invariants.push( invariant )
|
54
|
+
end
|
55
|
+
|
56
|
+
def addAssumption( assumption )
|
57
|
+
@assumptions.push( assumption )
|
58
|
+
end
|
43
59
|
|
44
60
|
# ------------------------------------------------------------------
|
45
61
|
# possibility stuff
|
@@ -53,6 +69,30 @@ module Sbuilder
|
|
53
69
|
@logger.info( "#{__method__} @possibilities=#{@possibilities}" )
|
54
70
|
end
|
55
71
|
|
72
|
+
# ------------------------------------------------------------------
|
73
|
+
# setup
|
74
|
+
|
75
|
+
# setter for setup configuration, called for each setup
|
76
|
+
def defineSetup( setupDef )
|
77
|
+
@logger.info "#{__method__} setupDef=#{setupDef}"
|
78
|
+
@setupDef = setupDef
|
79
|
+
end
|
80
|
+
|
81
|
+
# In order to prevent error 'Attempted to construct a set with too
|
82
|
+
# many elements' we allow setup to define cardinalities without
|
83
|
+
# nil. When default cardinality is one and this results to fixed
|
84
|
+
# domain ranges.
|
85
|
+
#
|
86
|
+
# @return [Boolean] true/false depeding whether setup should output nil_values
|
87
|
+
def setup_nil_values
|
88
|
+
ret = setupDef && setupDef.key?('configuration') && setupDef['configuration'].key?('allow_domain_nil_values') ?
|
89
|
+
setupDef['configuration']['allow_domain_nil_values'] :
|
90
|
+
true
|
91
|
+
|
92
|
+
return ret
|
93
|
+
end
|
94
|
+
|
95
|
+
|
56
96
|
# ------------------------------------------------------------------
|
57
97
|
# domain stuff
|
58
98
|
|
@@ -128,7 +168,7 @@ module Sbuilder
|
|
128
168
|
# interface stuff
|
129
169
|
|
130
170
|
# accept parameters set to model
|
131
|
-
def
|
171
|
+
def modelInterface( paramSet )
|
132
172
|
@interfaces[paramSet.getId] = paramSet
|
133
173
|
|
134
174
|
# # collect all paramsets
|
@@ -198,7 +238,7 @@ module Sbuilder
|
|
198
238
|
# ------------------------------------------------------------------
|
199
239
|
# definition stuff
|
200
240
|
|
201
|
-
def
|
241
|
+
def modelDefinition( paramSet )
|
202
242
|
@logger.info( "#{__method__} paramSet=#{paramSet}, paramSet.class=#{paramSet.class}" )
|
203
243
|
|
204
244
|
# collect definitions
|
@@ -238,7 +278,12 @@ module Sbuilder
|
|
238
278
|
|
239
279
|
case domainName
|
240
280
|
when 'interfaces'
|
281
|
+
# see domainName 'interfaces'
|
241
282
|
templateDataInterfaces( domainName, false )
|
283
|
+
when 'interface_types'
|
284
|
+
# see domainName 'interfaces', interface_types are not
|
285
|
+
# filtered i.e. generated model defines data types for all interfaces
|
286
|
+
templateDataInterfaces( 'interfaces', false )
|
242
287
|
when 'infrastructureServices'
|
243
288
|
templateDataInterfaces( domainName, true )
|
244
289
|
when 'possibility'
|
@@ -275,6 +320,16 @@ module Sbuilder
|
|
275
320
|
when 'none'
|
276
321
|
{
|
277
322
|
}
|
323
|
+
when 'invariants'
|
324
|
+
hash = {
|
325
|
+
"dump" => lambda { hash['invariants'].to_yaml },
|
326
|
+
"invariants" => invariants,
|
327
|
+
}
|
328
|
+
when 'assumptions'
|
329
|
+
hash = {
|
330
|
+
"dump" => lambda { hash['assumptions'].to_yaml },
|
331
|
+
"assumptions" => assumptions,
|
332
|
+
}
|
278
333
|
when 'definitions'
|
279
334
|
hash = {
|
280
335
|
"dump" => lambda { hash['definitions'].to_yaml },
|
@@ -294,6 +349,7 @@ module Sbuilder
|
|
294
349
|
"domains" => domains.values.map do |domain|
|
295
350
|
{
|
296
351
|
:domain_name => domain.domain_name,
|
352
|
+
:nil_value => setup_nil_values,
|
297
353
|
:domain_values => domain.domain_values,
|
298
354
|
}
|
299
355
|
end, # => TLA domain
|
@@ -65,22 +65,22 @@ module Sbuilder
|
|
65
65
|
def partial(name)
|
66
66
|
@logger.debug( "#{__method__} name=#{name}" )
|
67
67
|
|
68
|
-
return resolve_partial_direct(name[2..-1]) if name[0..1] == '!!'
|
68
|
+
# return resolve_partial_direct(name[2..-1]) if name[0..1] == '!!'
|
69
69
|
get_partial( resolve_partial_name(name) )
|
70
70
|
end
|
71
71
|
|
72
|
-
#
|
73
|
-
# @param path_template [String] mustache template string to intepret for path
|
74
|
-
#
|
75
|
-
# @return [String] content of file pointed by rendering 'path_template'
|
76
|
-
def resolve_partial_direct( path_template )
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
end
|
72
|
+
# #
|
73
|
+
# # @param path_template [String] mustache template string to intepret for path
|
74
|
+
# #
|
75
|
+
# # @return [String] content of file pointed by rendering 'path_template'
|
76
|
+
# def resolve_partial_direct( path_template )
|
77
|
+
# # change mustache delimerters to allow rendering
|
78
|
+
# # templ = "{{=%% %%=}}#{path_template}<%={{ }}=%>"
|
79
|
+
# puts path_template
|
80
|
+
# templ = path_template
|
81
|
+
# path = render( templ, @data )
|
82
|
+
# template_read( path )
|
83
|
+
# end
|
84
84
|
|
85
85
|
# lookup
|
86
86
|
def resolve_partial_name( name )
|
@@ -34,7 +34,9 @@ module Sbuilder
|
|
34
34
|
# [String:Array] names of
|
35
35
|
# possiblity operators defined
|
36
36
|
# for current setup
|
37
|
-
|
37
|
+
|
38
|
+
:getModelInvariants, # [String:Array] of invariant names for the model
|
39
|
+
:getSetupAssumes, # [String:Array] of assume names for the setup
|
38
40
|
:isOptFilterSrc, # [Boolean] true when
|
39
41
|
# filtering
|
40
42
|
:output, # (level,msg) to output
|
@@ -53,7 +55,7 @@ module Sbuilder
|
|
53
55
|
|
54
56
|
# Sbuilder constant symbols
|
55
57
|
SBUILDER = %w( Nil InfrastructureServiceReturn InfrastructureServiceGetStatus
|
56
|
-
InfrastructureServiceGetResponse)
|
58
|
+
InfrastructureServiceGetResponse InTransaction)
|
57
59
|
|
58
60
|
# these directories not unmustached
|
59
61
|
DOC_DIRS= [ "docs", "doc" ]
|
@@ -334,7 +336,7 @@ module Sbuilder
|
|
334
336
|
def whitelist_resolved
|
335
337
|
rslv = resolver
|
336
338
|
output( 1, "Resolving symbols - start" )
|
337
|
-
entrypoints = getEntryPoints + getSetupPossibilities
|
339
|
+
entrypoints = getEntryPoints + getSetupPossibilities + getModelInvariants + getSetupAssumes
|
338
340
|
@logger.debug("#{__method__}: entrypoints=#{entrypoints}")
|
339
341
|
ret = rslv.resolveModules( entrypoints ) do |type,arr|
|
340
342
|
case type
|
data/lib/sbuilder/param_set.rb
CHANGED
@@ -15,7 +15,7 @@ module Sbuilder
|
|
15
15
|
# constrcutore
|
16
16
|
def initialize( options = {} )
|
17
17
|
@logger = getLogger( PROGNAME, options )
|
18
|
-
@logger.
|
18
|
+
@logger.debug( "#{__method__} initialized" )
|
19
19
|
@parameters = []
|
20
20
|
end
|
21
21
|
|
@@ -93,6 +93,7 @@ module Sbuilder
|
|
93
93
|
gsub( /\(/, "_" ). # ( --> _
|
94
94
|
gsub( /\{/, "_" ). # { --> _
|
95
95
|
gsub( /\}/, "_" ). # } --> _
|
96
|
+
gsub( /\./, "_" ). # . --> _
|
96
97
|
gsub( /\)/, "_" ) # ) --> _
|
97
98
|
|
98
99
|
end
|
@@ -18,7 +18,7 @@ module Sbuilder
|
|
18
18
|
def initialize( options = {} )
|
19
19
|
super( options )
|
20
20
|
@logger = getLogger( PROGNAME, options )
|
21
|
-
@logger.
|
21
|
+
@logger.debug( "#{__method__} initialized" )
|
22
22
|
|
23
23
|
# default is not an arrays
|
24
24
|
@isArray = false
|
@@ -19,7 +19,7 @@ module Sbuilder
|
|
19
19
|
def initialize( options = {} )
|
20
20
|
super( options )
|
21
21
|
@logger = getLogger( PROGNAME, options )
|
22
|
-
@logger.
|
22
|
+
@logger.debug( "#{__method__} initialized" )
|
23
23
|
@response = nil
|
24
24
|
@infrastructureService = false
|
25
25
|
end
|
@@ -9,9 +9,10 @@ module Sbuilder
|
|
9
9
|
|
10
10
|
|
11
11
|
|
12
|
-
class ParamSetLoaderSwagger
|
12
|
+
class ParamSetLoaderSwagger
|
13
13
|
|
14
|
-
attr_reader :
|
14
|
+
attr_reader :facade # [Sbuilder::ParamSetLoader]
|
15
|
+
# facade to Sbuilder
|
15
16
|
|
16
17
|
# ------------------------------------------------------------------
|
17
18
|
# mixer
|
@@ -20,39 +21,74 @@ module Sbuilder
|
|
20
21
|
|
21
22
|
# ------------------------------------------------------------------
|
22
23
|
# constrcutore
|
23
|
-
def initialize(
|
24
|
-
|
25
|
-
@logger
|
26
|
-
@logger.info( "#{__method__} initialized" )
|
24
|
+
def initialize( options = {} )
|
25
|
+
# @logger = getLogger( PROGNAME, options )
|
26
|
+
# @logger.info( "#{__method__} initialized" )
|
27
27
|
|
28
|
-
|
29
|
-
@infrastructureServices = false
|
28
|
+
@facade = nil
|
30
29
|
|
31
30
|
end
|
32
31
|
|
33
|
-
#
|
32
|
+
# Facade gets injected, and used immediately to create logger
|
33
|
+
# object.
|
34
34
|
#
|
35
|
-
# @param
|
35
|
+
# @param [Sbuilder::ApiLoader] facace to Sbuilder services
|
36
36
|
#
|
37
|
-
def
|
38
|
-
@
|
37
|
+
def setFacade( facade )
|
38
|
+
@facade = facade
|
39
|
+
#
|
40
|
+
@logger = facade.createLogger( PROGNAME )
|
41
|
+
end
|
42
|
+
|
43
|
+
# ------------------------------------------------------------------
|
44
|
+
# class method configure
|
45
|
+
|
46
|
+
# @param configuration [Hash] properties to configure
|
47
|
+
def self.configure( configuration )
|
39
48
|
end
|
40
49
|
|
41
50
|
|
51
|
+
# # extract 'intfractureServices' property from 'paramsetLoaderDef'
|
52
|
+
# #
|
53
|
+
# # @param paramsetLoaderDef [Hash] configuration in 'sbuilder.yaml'
|
54
|
+
# #
|
55
|
+
# def doConfigure( paramsetLoaderDef )
|
56
|
+
# @infrastructureServices = true if paramsetLoaderDef['infrastructureServices']
|
57
|
+
# end
|
58
|
+
|
59
|
+
# @param yamlFileUri [String] path or url to YAML file to process
|
60
|
+
def readLines( yamlFileUri )
|
61
|
+
yaml_lines = facade.read_cached( yamlFileUri )
|
62
|
+
return yaml_lines
|
63
|
+
end
|
64
|
+
|
42
65
|
# implements abstract super class method validates, loads
|
43
66
|
# interfaces and definitions in YAML parsed from 'yamlFileUri'
|
44
67
|
|
45
68
|
# @param yamlFileUri [String] path or url to YAML file to process
|
46
69
|
|
47
|
-
def
|
70
|
+
def load( yamlFileUri )
|
48
71
|
@logger.info( "#{__method__} yamlFileUri=#{yamlFileUri}" )
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
72
|
+
|
73
|
+
begin
|
74
|
+
|
75
|
+
# use facade services to read lines in
|
76
|
+
yaml_lines = readLines( yamlFileUri )
|
77
|
+
|
78
|
+
# YAML parse & schema validation
|
79
|
+
|
80
|
+
swagger_hash = YAML.load( yaml_lines )
|
81
|
+
rescue Exception => e
|
82
|
+
msg = <<-EOS.gsub( /^\s*/, '' )
|
83
|
+
Error #{e.message} when loading '#{yamlFileUri}'
|
84
|
+
EOS
|
85
|
+
raise Sbuilder::LoaderException.new, msg, e.backtrace
|
86
|
+
|
87
|
+
end
|
54
88
|
|
55
89
|
validate( swagger_hash )
|
90
|
+
|
91
|
+
# and extract interfaces && definitions
|
56
92
|
doLoadInterfaces( swagger_hash )
|
57
93
|
doLoadDefinitions( swagger_hash )
|
58
94
|
|
@@ -61,35 +97,33 @@ module Sbuilder
|
|
61
97
|
# ==================================================================
|
62
98
|
# entry points
|
63
99
|
|
64
|
-
# calls '@controller.
|
100
|
+
# calls '@controller.modelDefinition' for each parameter set
|
65
101
|
# found in swagger configuration
|
66
102
|
# @param swagger_hash [swagger 2.0]
|
67
103
|
|
68
104
|
def doLoadDefinitions( swagger_hash )
|
69
|
-
paramsSets =
|
105
|
+
paramsSets = parseDefinitions( swagger_hash )
|
70
106
|
paramsSets.each do |paramSet|
|
71
|
-
|
107
|
+
facade.modelDefinition( paramSet )
|
72
108
|
end
|
73
109
|
|
74
110
|
end
|
75
111
|
|
76
|
-
# calls '@
|
112
|
+
# calls '@facade.modelInterface' for each parameter set
|
77
113
|
# found in swagger configuration
|
78
114
|
#
|
79
115
|
# @param swagger_hash [swagger 2.0]
|
80
116
|
|
81
117
|
def doLoadInterfaces( swagger_hash )
|
82
118
|
|
83
|
-
interface_paramsSets =
|
119
|
+
interface_paramsSets = parseInterfaces( swagger_hash )
|
84
120
|
@logger.info( "#{__method__} loaded=#{interface_paramsSets.length} interface_paramsSets" )
|
85
|
-
|
121
|
+
|
86
122
|
interface_paramsSets.each do |interface|
|
87
|
-
|
123
|
+
facade.modelInterface( interface )
|
88
124
|
end
|
89
|
-
|
90
125
|
end
|
91
126
|
|
92
|
-
# entry poinsts
|
93
127
|
# ==================================================================
|
94
128
|
|
95
129
|
# Validates this object against the Swagger specification and
|
@@ -120,23 +154,30 @@ module Sbuilder
|
|
120
154
|
private
|
121
155
|
|
122
156
|
# ------------------------------------------------------------------
|
123
|
-
#
|
124
|
-
|
125
|
-
|
157
|
+
# parse defitions from swagger_hash['definitions']
|
158
|
+
#
|
159
|
+
# @param swagger_hash [Hash] definitions in property 'definitions'
|
160
|
+
#
|
161
|
+
# @return [Sbuilder::ParamSetDef:Array] of parsed definitions
|
162
|
+
|
163
|
+
def parseDefinitions( swagger_hash )
|
164
|
+
definitions = []
|
126
165
|
swagger_hash['definitions'] && swagger_hash['definitions'].each do |defineKey,definedDoc|
|
127
|
-
|
128
|
-
|
166
|
+
|
129
167
|
# create set && configure param set for a defintion
|
130
|
-
paramSet =
|
131
|
-
|
132
|
-
|
133
|
-
|
168
|
+
paramSet = facade.newDefinition( defineKey, definedDoc['type'] == 'array' )
|
169
|
+
|
170
|
+
# collect
|
171
|
+
definitions << paramSet
|
134
172
|
|
173
|
+
# defines reference
|
135
174
|
if hasRef( definedDoc ) then
|
136
175
|
# case paramter set is a wrapper - most likely an array
|
137
176
|
reference_parameter( paramSet, defineKey, getRefDocumentName( definedDoc ), definedDoc['type'] )
|
177
|
+
|
138
178
|
else
|
139
179
|
|
180
|
+
# defines onw attributes
|
140
181
|
expandedDocs = expand_definedDocs( definedDoc, swagger_hash )
|
141
182
|
# puts " defineKey=#{defineKey} --> expandedDocs=#{expandedDocs}"
|
142
183
|
|
@@ -156,52 +197,46 @@ module Sbuilder
|
|
156
197
|
|
157
198
|
end # each definitions
|
158
199
|
|
159
|
-
return
|
200
|
+
return definitions
|
160
201
|
end
|
161
202
|
|
162
203
|
# ------------------------------------------------------------------
|
163
|
-
#
|
164
|
-
|
165
|
-
|
204
|
+
# parse interface from ['path'][<operation>]['paramters']
|
205
|
+
# @return [Sbuilder::ParamSet_If:Array] of parsed interfaces
|
206
|
+
#
|
207
|
+
def parseInterfaces( swagger_hash )
|
166
208
|
|
167
209
|
@logger.info( "#{__method__} starting" )
|
168
210
|
|
169
211
|
# collect all interface paramsets together
|
170
|
-
|
212
|
+
interfaces = []
|
171
213
|
|
172
214
|
# interfaces are hashes under 'paths'/<path>/<op>
|
173
215
|
swagger_hash['paths'].each do |path,ops|
|
216
|
+
|
174
217
|
ops.each do |op,opdef|
|
175
218
|
|
176
|
-
#
|
177
|
-
interfaceParamSet =
|
178
|
-
interfaceParamSet.
|
179
|
-
|
219
|
+
# New interface operation '/path(op) & access response operation
|
220
|
+
interfaceParamSet = facade.newInterface( path, op )
|
221
|
+
paramSetResponse = interfaceParamSet.response
|
222
|
+
|
180
223
|
@logger.info( "#{__method__} created interfaceParamSet=#{interfaceParamSet.getId}" )
|
181
224
|
@logger.debug( "#{__method__} created interfaceParamSet.getId=#{interfaceParamSet.getId}, opdef=#{opdef}" )
|
182
225
|
|
183
|
-
#
|
184
|
-
|
226
|
+
# collect
|
227
|
+
interfaces << interfaceParamSet
|
185
228
|
|
186
229
|
# ---------------------------------
|
187
230
|
# input paramters: 'paths'/<path>/<op>/'parameters'
|
188
231
|
|
189
|
-
# collect paramters to an array
|
190
|
-
# parameters = []
|
191
232
|
opdef['parameters'] && opdef['parameters'].map do |parameter|
|
192
233
|
@logger.debug( "#{__method__} path/op #{path}/#{op} - parameter #{parameter}" )
|
193
234
|
if parameter['schema'] then
|
194
235
|
# in='body' => schema defined
|
195
236
|
defintionReferenceName = getReferencedDefinitionName( parameter['schema'], swagger_hash )
|
196
237
|
reference_parameter( interfaceParamSet, parameter['name'], defintionReferenceName )
|
197
|
-
# parameters = parameters +
|
198
|
-
# # expand_reference_object( parameter['schema'], swagger_hash ).map do |schema|
|
199
|
-
# [ parameter['name'], schema ]
|
200
|
-
#end
|
201
238
|
elsif parameter['name']
|
202
239
|
simple_parameter( interfaceParamSet, parameter['name'], parameter['type'] ) if parameter['name']
|
203
|
-
# parameter object normal i.e. not in='body' object
|
204
|
-
# parameters << parameter2ParamObject( parameter )
|
205
240
|
else
|
206
241
|
msg = "Empty parameter definition on #{path}/#{op} "
|
207
242
|
@logger.error( "#{__method__} #{msg}" )
|
@@ -212,13 +247,6 @@ module Sbuilder
|
|
212
247
|
|
213
248
|
# ------------------------------
|
214
249
|
# responses: 'paths'/<path>/<op>/'responses'
|
215
|
-
|
216
|
-
paramSetResponse = createParamSet( Sbuilder::Constants::SWAGGER )
|
217
|
-
paramSetResponse.setIdentity( path, 'response' )
|
218
|
-
|
219
|
-
# response response to an interface
|
220
|
-
interfaceParamSet.setResponse( paramSetResponse )
|
221
|
-
|
222
250
|
|
223
251
|
opdef['responses'] && opdef['responses'].each_pair do |status_code,response|
|
224
252
|
# puts "op=#{op}, status_code=#{status_code}, response=#{response}"
|
@@ -230,20 +258,45 @@ module Sbuilder
|
|
230
258
|
|
231
259
|
else
|
232
260
|
@logger.debug( "#{path}-#{op}-#{status_code}: no response data for response #{response}" )
|
233
|
-
|
261
|
+
# response object
|
234
262
|
end
|
235
|
-
end #
|
236
|
-
|
263
|
+
end # responses
|
237
264
|
|
238
265
|
end # each 'paths'
|
266
|
+
|
239
267
|
end
|
268
|
+
return interfaces
|
269
|
+
end
|
270
|
+
|
271
|
+
# ------------------------------------------------------------------
|
272
|
+
# Create parameters && add to param set
|
273
|
+
|
274
|
+
# process simple (i.e. non body ) parameter
|
275
|
+
def simple_parameter( paramSet, name, parameterType )
|
240
276
|
|
241
|
-
|
277
|
+
swagger_parameter = facade.newParameter( name, parameterType == 'array' )
|
278
|
+
# add to parameter set
|
279
|
+
paramSet.addParameter( swagger_parameter )
|
280
|
+
end
|
281
|
+
|
282
|
+
# process simple (i.e. non body ) parameter
|
283
|
+
def reference_parameter( paramSet, name, defintionReferenceName, parameterType="string" )
|
284
|
+
|
285
|
+
swagger_parameter = facade.newParameterReference( name, defintionReferenceName, parameterType == 'array' )
|
286
|
+
|
287
|
+
@logger.info( "#{__method__} param set =#{paramSet.getId}, parameter=#{swagger_parameter.getName}, parameter=#{swagger_parameter.reference}" )
|
288
|
+
|
289
|
+
# add to parameter set
|
290
|
+
paramSet.addParameter( swagger_parameter )
|
291
|
+
|
242
292
|
end
|
243
|
-
|
244
293
|
|
294
|
+
|
295
|
+
# ------------------------------------------------------------------
|
296
|
+
# Extract data from swagger properties
|
245
297
|
|
246
|
-
|
298
|
+
|
299
|
+
# @return [String] name of definition referenced in 'paramOrRespSchema'
|
247
300
|
def getReferencedDefinitionName( paramOrRespSchema, swagger_hash )
|
248
301
|
|
249
302
|
# e.g. '#/definitions/doc
|
@@ -319,7 +372,6 @@ module Sbuilder
|
|
319
372
|
|
320
373
|
def getRefDocumentName( paramOrRespSchema )
|
321
374
|
|
322
|
-
|
323
375
|
# --> /definitions/doc
|
324
376
|
ref = getRef( paramOrRespSchema )
|
325
377
|
|
@@ -343,7 +395,6 @@ module Sbuilder
|
|
343
395
|
def getDefinitionDoc( ref, swagger_hash )
|
344
396
|
@logger.info( "#{__method__} ref=#{ref}" )
|
345
397
|
|
346
|
-
|
347
398
|
# currently supports only local references
|
348
399
|
raise "Not valid local ref #{ref} in #{schemaObject}" unless valid_local_ref( ref )
|
349
400
|
|
@@ -363,62 +414,12 @@ module Sbuilder
|
|
363
414
|
end
|
364
415
|
|
365
416
|
|
366
|
-
|
367
|
-
# # process one pameter in swagger inferface
|
368
|
-
# def set_paramter_swagger( swagger_hash, paramSet, paramDef )
|
369
|
-
# @logger.debug( "#{__method__} paramSet=#{paramSet}, paramDef=#{paramDef}" )
|
370
|
-
|
371
|
-
# name = getProp( 'name', paramDef )
|
372
|
-
# inType = getProp( 'in', paramDef )
|
373
|
-
|
374
|
-
# if inType == 'body' then
|
375
|
-
# schema_parameter( paramSet, paramDef, swagger_hash )
|
376
|
-
# else
|
377
|
-
# simple_parameter( paramSet, name )
|
378
|
-
# end
|
379
|
-
|
380
|
-
# end
|
381
|
-
|
382
|
-
# process simple (i.e. non body ) parameter
|
383
|
-
def simple_parameter( paramSet, name, parameterType )
|
384
|
-
|
385
|
-
# create parameter object && configure it
|
386
|
-
swagger_parameter = createParameter( Sbuilder::Constants::PARAMETER )
|
387
|
-
swagger_parameter.setName( name )
|
388
|
-
|
389
|
-
# default for parameter 'not array' - set exlicitely array
|
390
|
-
swagger_parameter.setIsArray if parameterType == 'array'
|
391
|
-
|
392
|
-
@logger.info( "#{__method__} param set =#{paramSet.getId}, parameter name=#{swagger_parameter.getName}" )
|
393
|
-
|
394
|
-
# add to parameter set
|
395
|
-
paramSet.addParameter( swagger_parameter )
|
396
|
-
|
397
|
-
end
|
398
|
-
|
399
|
-
# process simple (i.e. non body ) parameter
|
400
|
-
def reference_parameter( paramSet, name, defintionReferenceName, parameterType="string" )
|
401
|
-
|
402
|
-
# create parameter object && configure it
|
403
|
-
swagger_parameter = createParameter( Sbuilder::Constants::PARAMETER_REF )
|
404
|
-
swagger_parameter.setName( name )
|
405
|
-
swagger_parameter.setReference( defintionReferenceName )
|
406
|
-
swagger_parameter.setIsArray if parameterType == 'array'
|
407
|
-
|
408
|
-
@logger.info( "#{__method__} param set =#{paramSet.getId}, parameter=#{swagger_parameter.getName}, parameter=#{swagger_parameter.reference}" )
|
409
|
-
|
410
|
-
# add to parameter set
|
411
|
-
paramSet.addParameter( swagger_parameter )
|
412
|
-
|
413
|
-
end
|
414
|
-
|
415
|
-
|
417
|
+
# @return [Boolean] true if starts with hash '#' -character
|
416
418
|
def valid_local_ref(ref)
|
417
419
|
ref.match(%r{\A#\/})
|
418
420
|
end
|
419
421
|
|
420
422
|
|
421
|
-
|
422
423
|
end # class ResolverLoaderSwagger << ResolverLoader
|
423
424
|
|
424
425
|
end # module Sbuilder
|