swagger_model 0.1.0 → 0.2.0

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 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