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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +116 -33
  3. data/VERSION +1 -1
  4. data/lib/cli/cli-customer.rb +41 -23
  5. data/lib/cli/cli-example.rb +1 -1
  6. data/lib/cli/cli-pet.rb +33 -30
  7. data/lib/cli/cli-text.rb +57 -17
  8. data/lib/cli/cli.rb +56 -10
  9. data/lib/sbuilder.rb +3 -1
  10. data/lib/sbuilder/constants.rb +5 -2
  11. data/lib/sbuilder/controller.rb +289 -59
  12. data/lib/sbuilder/default-sbuilder.yaml +25 -3
  13. data/lib/sbuilder/domain.rb +1 -1
  14. data/lib/sbuilder/domain_cardinality.rb +1 -1
  15. data/lib/sbuilder/domain_value.rb +1 -1
  16. data/lib/sbuilder/exception.rb +13 -7
  17. data/lib/sbuilder/extension_loader.rb +75 -18
  18. data/lib/sbuilder/facade/api_loader.rb +293 -0
  19. data/lib/sbuilder/factory.rb +66 -3
  20. data/lib/sbuilder/model.rb +59 -3
  21. data/lib/sbuilder/mustache/template.rb +13 -13
  22. data/lib/sbuilder/mustache/template_reader_context.rb +5 -3
  23. data/lib/sbuilder/param_set.rb +2 -1
  24. data/lib/sbuilder/param_set_db.rb +1 -1
  25. data/lib/sbuilder/param_set_def.rb +1 -1
  26. data/lib/sbuilder/param_set_if.rb +1 -1
  27. data/lib/sbuilder/param_set_loader_swagger.rb +122 -121
  28. data/lib/sbuilder/param_set_step.rb +1 -1
  29. data/lib/sbuilder/parameter.rb +1 -1
  30. data/lib/sbuilder/parameter_container.rb +1 -1
  31. data/lib/sbuilder/parameter_dom.rb +1 -1
  32. data/lib/sbuilder/parameter_ref.rb +2 -2
  33. data/lib/sbuilder/resolver_rule.rb +1 -1
  34. data/lib/sbuilder/resolver_rule_match.rb +1 -1
  35. data/lib/sbuilder/resolver_rule_ref.rb +1 -1
  36. data/lib/sbuilder/spec/README +5 -0
  37. data/lib/sbuilder/spec/api_loader_facade.rb +247 -0
  38. data/lib/utils/cache_lines.rb +21 -0
  39. data/lib/utils/netio.rb +5 -13
  40. data/mustache/cfg/macro_run.mustache +1 -0
  41. data/mustache/interface_processes.mustache +9 -2
  42. data/mustache/interface_stubs_dummy.mustache +7 -0
  43. data/mustache/interface_types.mustache +3 -3
  44. data/mustache/invariant_activate.mustache +16 -0
  45. data/mustache/setup/assumptions_activate.mustache +16 -0
  46. data/mustache/{domains_run.mustache → setup/domains_run.mustache} +2 -2
  47. data/mustache/setup/operator_run.mustache +2 -0
  48. data/mustache/setup/steps_run_bind_set.mustache +1 -1
  49. data/mustache/setup/steps_run_parameterBind.mustache +4 -2
  50. data/mustache/tla/macro_run.mustache +8 -0
  51. data/mustache/tla/operator_run.mustache +1 -0
  52. data/mustache/tla/plc_define_run.mustache +2 -4
  53. data/mustache/tla/plc_run_state.mustache +1 -1
  54. data/src-extend/extend/extend_invariant_cfg.mustache +1 -1
  55. data/src/pet/assumption_domains.tla +1 -1
  56. data/src/pet/correctness.cfg +4 -0
  57. data/tla-sbuilder.gemspec +3 -1
  58. metadata +14 -10
  59. data/lib/sbuilder/param_set_loader.rb +0 -77
  60. data/src-extend/extend_app/correctness.cfg +0 -9
@@ -41,14 +41,22 @@ module Sbuilder
41
41
  Sbuilder::Constants::PARAMETER_REF => Parameter_Ref,
42
42
  }
43
43
  @paramSets = {
44
- Sbuilder::Constants::SWAGGER => ParamSet_If,
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::SWAGGER => ParamSetLoaderSwagger
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( Factory.getFactory(options), options )
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
@@ -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 interfaceEncountered( paramSet )
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 definitionEncountered( paramSet )
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
- # 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
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
@@ -15,7 +15,7 @@ module Sbuilder
15
15
  # constrcutore
16
16
  def initialize( options = {} )
17
17
  @logger = getLogger( PROGNAME, options )
18
- @logger.info( "#{__method__} initialized" )
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
@@ -12,7 +12,7 @@ module Sbuilder
12
12
  # constrcutore
13
13
  def initialize( options = {} )
14
14
  @logger = getLogger( PROGNAME, options )
15
- @logger.info( "#{__method__} initialized" )
15
+ @logger.debug( "#{__method__} initialized" )
16
16
  end
17
17
 
18
18
  end
@@ -18,7 +18,7 @@ module Sbuilder
18
18
  def initialize( options = {} )
19
19
  super( options )
20
20
  @logger = getLogger( PROGNAME, options )
21
- @logger.info( "#{__method__} initialized" )
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.info( "#{__method__} initialized" )
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 < ParamSetLoader
12
+ class ParamSetLoaderSwagger
13
13
 
14
- attr_reader :infrastructureServices # default 'false'
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( factory, options = {} )
24
- super( factory, options )
25
- @logger = getLogger( PROGNAME, options )
26
- @logger.info( "#{__method__} initialized" )
24
+ def initialize( options = {} )
25
+ # @logger = getLogger( PROGNAME, options )
26
+ # @logger.info( "#{__method__} initialized" )
27
27
 
28
- # properties
29
- @infrastructureServices = false
28
+ @facade = nil
30
29
 
31
30
  end
32
31
 
33
- # extract 'intfractureServices' property from 'paramsetLoaderDef'
32
+ # Facade gets injected, and used immediately to create logger
33
+ # object.
34
34
  #
35
- # @param paramsetLoaderDef [Hash] configuration in 'sbuilder.yaml'
35
+ # @param [Sbuilder::ApiLoader] facace to Sbuilder services
36
36
  #
37
- def doConfigure( paramsetLoaderDef )
38
- @infrastructureServices = true if paramsetLoaderDef['infrastructureServices']
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 doLoad( yamlFileUri, cacheFile=nil )
70
+ def load( yamlFileUri )
48
71
  @logger.info( "#{__method__} yamlFileUri=#{yamlFileUri}" )
49
- # swagger_hash = YAML.load_file( yamlFileUri )
50
- yaml_lines = Sbuilder::Utils::NetIo.read_lines_cached( yamlFileUri, cacheFile )
51
- # puts yaml_lines
52
- # puts "yamlFileUri=#{yamlFileUri}"
53
- swagger_hash = YAML.load( yaml_lines )
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.definitionEncountered' for each parameter set
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 = swaggerDefinitionParamsets( swagger_hash )
105
+ paramsSets = parseDefinitions( swagger_hash )
70
106
  paramsSets.each do |paramSet|
71
- controller.definitionEncountered( paramSet )
107
+ facade.modelDefinition( paramSet )
72
108
  end
73
109
 
74
110
  end
75
111
 
76
- # calls '@controller.interfaceEncountered' for each parameter set
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 = swaggerPathInterfaces( swagger_hash )
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
- controller.interfaceEncountered( interface )
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
- # iterate defitions
124
- def swaggerDefinitionParamsets( swagger_hash )
125
- paramSets = []
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
- # puts "defineKey=#{defineKey} -> #{definedDoc}"
128
-
166
+
129
167
  # create set && configure param set for a defintion
130
- paramSet = createParamSet( Sbuilder::Constants::SWAGGER_DEFINITION )
131
- paramSet.setDefinition( defineKey )
132
- paramSet.setIsArray if definedDoc['type'] == 'array'
133
- paramSets << paramSet
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 paramSets
200
+ return definitions
160
201
  end
161
202
 
162
203
  # ------------------------------------------------------------------
163
- # iterate interface ['path'][<operation>]['paramters']
164
-
165
- def swaggerPathInterfaces( swagger_hash )
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
- paramSets = []
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
- # Create new paramSet, configugre its identity
177
- interfaceParamSet = createParamSet( Sbuilder::Constants::SWAGGER )
178
- interfaceParamSet.setIdentity( path, op )
179
- interfaceParamSet.setInfrastructureService( infrastructureServices )
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
- # add to array we are going to return
184
- paramSets << interfaceParamSet
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
- # # response object
261
+ # response object
234
262
  end
235
- end # opdef['responses'].each
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
- return paramSets
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
- # return the name of definition referenced in 'paramOrRespSchema'
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