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