swagger_model 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 51972d3305b7ba48ff8ce0f8ecd1f4b7f8b5f5dc
4
- data.tar.gz: 77baeb25d4b56948b90a750aead95ca2328fda63
3
+ metadata.gz: 5db8605584c6f6c42787bf6629316212236ac785
4
+ data.tar.gz: b19bce8c3a190a2058f40723e0a228bf92ee7bad
5
5
  SHA512:
6
- metadata.gz: a963e2a9c5e4a1e074a7e16b203dde310cf4cb0cab7f5977daba55761fecb42bb140614a09fbeab9f0cb477cc482c6a7f6d65086ddeded653afa6d0126f8e844
7
- data.tar.gz: 0166626bdd4e20fbbbb6267d7d1e7553a845be043627f6978ac4a8ee0b79eaaee632fd247703d0e1ae18fab580dc0a5a15d7ff0d5f04410aec3214e75a531171
6
+ metadata.gz: cbbd902d7f22ed04c1aa5b6d42e7d5c8ac522994d6bc20e711202fbc9e4ac5e135a235dbea08350d6400b75d7bbb876a667711aa05180062c46dd6bbeca101a8
7
+ data.tar.gz: d8989fcf66046ec6f0d07bce910eb2a34eee6119702833f980ad89e37a4a55b57a362f2eb206e11ec950f2556ca71dfff7f526f1d2f5638eb980a14854888c72
data/Gemfile.lock CHANGED
@@ -1,17 +1,30 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- swagger_model (0.1.0)
4
+ swagger_model (0.2.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
+ activesupport (5.2.0)
10
+ concurrent-ruby (~> 1.0, >= 1.0.2)
11
+ i18n (>= 0.7, < 2)
12
+ minitest (~> 5.1)
13
+ tzinfo (~> 1.1)
14
+ concurrent-ruby (1.0.5)
15
+ i18n (1.0.1)
16
+ concurrent-ruby (~> 1.0)
17
+ minitest (5.11.3)
9
18
  rake (10.5.0)
19
+ thread_safe (0.3.6)
20
+ tzinfo (1.2.5)
21
+ thread_safe (~> 0.1)
10
22
 
11
23
  PLATFORMS
12
24
  ruby
13
25
 
14
26
  DEPENDENCIES
27
+ activesupport (~> 5.2.0)
15
28
  bundler (~> 1.16)
16
29
  rake (~> 10.0)
17
30
  swagger_model!
@@ -1,3 +1,3 @@
1
1
  module SwaggerModel
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/swagger_model.rb CHANGED
@@ -2,6 +2,8 @@ require "swagger_model/version"
2
2
  require 'json'
3
3
  require 'yaml'
4
4
  require 'date'
5
+ require 'active_support'
6
+ require 'active_support/core_ext'
5
7
 
6
8
  module SwaggerModel
7
9
  def self.date_time_valid?(str)
@@ -13,20 +15,63 @@ module SwaggerModel
13
15
  end
14
16
  end
15
17
 
16
- def self.get_property(value)
18
+ def self.get_property(key, value, model, root_key)
17
19
  type_class = value.class.to_s
18
20
  obj = {}
19
21
  case type_class
20
22
  when 'Hash'
21
- obj['type'] = 'object'
22
- object = parse_object value
23
- obj['properties'] = object['properties']
24
- if object['required'].size > 0
25
- obj['required'] = object['required']
23
+ if value.has_key?('id') && value.has_key?('type')
24
+ model_name = ActiveSupport::Inflector.classify(value['type'])
25
+ object = parse_object(value, model, model_name)
26
+ properties = object['properties']
27
+ newProperties = {}
28
+ newProperties['allOf'] = []
29
+ newProperties['allOf'][0] = {}
30
+ newProperties['allOf'][0]['$ref'] = '#/components/schemas/ModelBase'
31
+ newProperties['allOf'][1] = {}
32
+ newProperties['allOf'][1]['type'] = 'object'
33
+ if object['required'].size > 0
34
+ newProperties['allOf'][1]['required'] = object['required']
35
+ end
36
+ properties.delete('id')
37
+ properties.delete('type')
38
+ newProperties['allOf'][1]['properties'] = properties
39
+ model[model_name] = newProperties
40
+ obj['$ref'] = '#/components/schemas/' + model_name
41
+ elsif key == 'attributes'
42
+ object = parse_object(value, model, root_key)
43
+ properties = object['properties']
44
+ model_name = root_key + 'Attributes'
45
+ model[model_name] = {}
46
+ model[model_name]['type'] = 'object'
47
+ model[model_name]['properties'] = properties
48
+ if object['required'].size > 0
49
+ model[model_name]['required'] = object['required']
50
+ end
51
+ obj['$ref'] = '#/components/schemas/' + model_name
52
+ elsif key == 'relationships'
53
+ object = parse_object(value, model, root_key)
54
+ properties = object['properties']
55
+ model_name = root_key + 'Relationships'
56
+ model[model_name] = {}
57
+ model[model_name]['type'] = 'object'
58
+ model[model_name]['properties'] = properties
59
+ if object['required'].size > 0
60
+ model[model_name]['required'] = object['required']
61
+ end
62
+ obj['$ref'] = '#/components/schemas/' + model_name
63
+ else
64
+ object = parse_object(value, model, root_key)
65
+ properties = object['properties']
66
+ obj['type'] = 'object'
67
+ obj['properties'] = properties
68
+ if object['required'].size > 0
69
+ obj['required'] = object['required']
70
+ end
26
71
  end
27
72
  when 'Array'
28
73
  obj['type'] = 'array'
29
- obj['items'] = parse_array value
74
+ obj['items'] = parse_array(value, model, root_key)
30
75
  when 'String'
31
76
  obj['type'] = 'string'
32
77
  obj['example'] = value
@@ -50,21 +95,23 @@ module SwaggerModel
50
95
  obj
51
96
  end
52
97
 
53
- def self.parse_array items
98
+ def self.parse_array(items, model, root_key)
54
99
  m = {}
55
100
  value = items.first
56
- get_property(value)
101
+ get_property(nil, value, model, root_key)
57
102
  end
58
103
 
59
- def self.parse_object res
104
+ def self.parse_object(res, model, root_key)
60
105
  keys = res.keys
61
106
  m = {}
62
107
  required = []
63
108
  for key in keys do
64
109
  value = res[key]
65
- m[key] = get_property(value)
110
+ m[key] = get_property(key, value, model, root_key)
66
111
  if m[key]['type'] != ''
67
- required.push(key)
112
+ unless (keys.include?('id') && keys.include?('type')) && (key == 'id' || key == 'type')
113
+ required.push(key)
114
+ end
68
115
  end
69
116
  end
70
117
  obj = {}
@@ -82,8 +129,21 @@ module SwaggerModel
82
129
  model = {}
83
130
  model[model_name] = {}
84
131
  model[model_name]['type'] = "object"
85
- object = parse_object response
86
- model[model_name]['properties'] = object['properties']
132
+ object = parse_object(response, model, model_name)
133
+ properties = object['properties']
134
+ if properties.has_key?('links')
135
+ links = {}
136
+ links['$ref'] = '#/components/schemas/Links'
137
+ properties['links'] = links
138
+ end
139
+ if properties.has_key?('meta')
140
+ meta_name = model_name + 'Meta'
141
+ model[meta_name] = properties['meta']
142
+ meta = {}
143
+ meta['$ref'] = '#/components/schemas/' + meta_name
144
+ properties['meta'] = meta
145
+ end
146
+ model[model_name]['properties'] = properties
87
147
  if object['required'].size > 0
88
148
  model[model_name]['required'] = object['required']
89
149
  end
@@ -32,4 +32,5 @@ Gem::Specification.new do |spec|
32
32
 
33
33
  spec.add_development_dependency "bundler", "~> 1.16"
34
34
  spec.add_development_dependency "rake", "~> 10.0"
35
+ spec.add_development_dependency "activesupport", "~> 5.2.0"
35
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: swagger_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - marumemomo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-15 00:00:00.000000000 Z
11
+ date: 2018-05-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activesupport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 5.2.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 5.2.0
41
55
  description: swagger_model
42
56
  email:
43
57
  - marumemomo@gmail.com