ree_lib 1.0.7 → 1.0.8

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
  SHA256:
3
- metadata.gz: 956fffa1a41176330384decf8f4f3b45ce70801785ea5498a07e0cb0afdd6b0f
4
- data.tar.gz: 4745a3465a5ad18a6353ba21a8ef62b13991cd3cfc0fde7bf05ec41c7e561433
3
+ metadata.gz: 21753e8008242096b9b9f780b264e6826a963d0b3e18ae04a2996ed00426ef6d
4
+ data.tar.gz: 5fc2d171c79e6c657358fec5caf57f0fde2adb19a19e95361290725144c9f4b3
5
5
  SHA512:
6
- metadata.gz: afd9719357108c5bff745a3112c581f333de679e0ac9d41e02624d43f006584cdfec1080f40047be3fcfb816ea74275509ca2a841e718c06463e489d32e7a473
7
- data.tar.gz: 398d3fc0469aa20e71d37eaaf6422c76f8a0a86d155d548199bff1867a27612f0602ea7919715efd1aaf4f479417a2f03e2254d2e9ff4ba09b97fd2d1250632a
6
+ metadata.gz: d345bf12b261d42a34cb0fcfe17345f012218a2eb63bef1b4c132283f3b87fd9285775ab36b246330573f5247515c156e2f76c784f34d790f1cf3ea4ed327d14
7
+ data.tar.gz: cbe232fb49e266695f68db6c60fbcf7568ceeae79a15bae9c73c051bd97ab44a255f26edf942fae9fafac99bbe474af9d1dbd0a5075aa344a519e8238a92e2c3
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.7)
4
+ ree_lib (1.0.8)
5
5
  binding_of_caller (~> 1.0.0)
6
6
  i18n (~> 1.12.0)
7
7
  loofah (~> 2.18.0)
@@ -48,6 +48,10 @@
48
48
  "name": "get_caster_definition",
49
49
  "schema": "packages/ree_swagger/schemas/ree_swagger/functions/get_caster_definition.schema.json"
50
50
  },
51
+ {
52
+ "name": "get_mime_type",
53
+ "schema": "packages/ree_swagger/schemas/ree_swagger/functions/get_mime_type.schema.json"
54
+ },
51
55
  {
52
56
  "name": "get_serializer_definition",
53
57
  "schema": "packages/ree_swagger/schemas/ree_swagger/functions/get_serializer_definition.schema.json"
@@ -3,9 +3,13 @@ class ReeSwagger::EndpointDto
3
3
  include Ree::LinkDSL
4
4
 
5
5
  link 'ree_swagger/dto/error_dto', -> { ErrorDto }
6
+ link 'ree_swagger/functions/get_mime_type', -> { MIME_TYPES }
7
+
6
8
 
7
9
  properties(
8
10
  method: Or[:get, :post, :put, :patch, :delete],
11
+ respond_to: Or[*MIME_TYPES.keys],
12
+ sections: Nilor[ArrayOf[String]],
9
13
  path: String,
10
14
  caster: Nilor[ReeMapper::Mapper],
11
15
  serializer: Nilor[ReeMapper::Mapper],
@@ -4,6 +4,7 @@ class ReeSwagger::BuildEndpointSchema
4
4
  include Ree::FnDSL
5
5
 
6
6
  fn :build_endpoint_schema do
7
+ link :get_mime_type
7
8
  link :build_parameters
8
9
  link :build_request_body_schema
9
10
  link :build_serializer_schema
@@ -31,6 +32,8 @@ class ReeSwagger::BuildEndpointSchema
31
32
  }
32
33
  .join('/')
33
34
 
35
+ mime_type = get_mime_type(endpoint.respond_to)
36
+
34
37
  missed_caster = path_params - endpoint.caster&.fields&.keys.to_a
35
38
 
36
39
  if missed_caster.any?
@@ -47,7 +50,7 @@ class ReeSwagger::BuildEndpointSchema
47
50
 
48
51
  request_body = request_body_schema && {
49
52
  content: {
50
- :'application/json' => {
53
+ :"#{mime_type}" => {
51
54
  schema: request_body_schema
52
55
  }
53
56
  }
@@ -65,7 +68,7 @@ class ReeSwagger::BuildEndpointSchema
65
68
 
66
69
  request_body_schema && {
67
70
  content: {
68
- :'application/json' => {
71
+ :"#{mime_type}" => {
69
72
  schema: request_body_schema
70
73
  }
71
74
  }
@@ -78,7 +81,7 @@ class ReeSwagger::BuildEndpointSchema
78
81
 
79
82
  if endpoint.serializer
80
83
  response_schema[:content] = {
81
- :'application/json' => {
84
+ :"#{mime_type}" => {
82
85
  schema: build_serializer_schema(endpoint.serializer)
83
86
  }
84
87
  }
@@ -105,6 +108,7 @@ class ReeSwagger::BuildEndpointSchema
105
108
 
106
109
  method_schema[:summary] = endpoint.summary if endpoint.summary
107
110
  method_schema[:description] = endpoint.description if endpoint.description
111
+ method_schema[:tags] = endpoint.sections if endpoint.sections
108
112
 
109
113
  method_schema[:parameters] = parameters if parameters
110
114
  method_schema[:requestBody] = request_body if request_body
@@ -16,11 +16,14 @@ class ReeSwagger::BuildRequestBodySchema
16
16
  return get_caster_definition(mapper.type, method(:call).to_proc)
17
17
  end
18
18
 
19
+ required_fields = []
20
+
19
21
  properties = mapper.fields.each_with_object({}) do |(_name, field), acc|
20
22
  next if path_params.include?(field.name)
21
23
 
22
24
  swagger_field = {}
23
25
 
26
+ required_fields << field.name.to_s if !field.optional
24
27
  field_mapper = field.type
25
28
  swagger_type = call(field_mapper)
26
29
  swagger_field.merge!(swagger_type) if swagger_type
@@ -37,7 +40,8 @@ class ReeSwagger::BuildRequestBodySchema
37
40
 
38
41
  {
39
42
  type: 'object',
40
- properties: properties
43
+ properties: properties,
44
+ required: required_fields
41
45
  }
42
46
  end
43
47
  end
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ReeSwagger::GetMimeType
4
+ include Ree::FnDSL
5
+
6
+ MIME_TYPES = {
7
+ :html => "text/html",
8
+ :text => "text/plain",
9
+ :js => "text/javascript",
10
+ :css => "text/css",
11
+ :ics => "text/calendar",
12
+ :csv => "text/csv",
13
+ :vcf => "text/vcard",
14
+ :vtt => "text/vtt",
15
+ :png => "image/png",
16
+ :jpeg => "image/jpeg",
17
+ :gif => "image/gif",
18
+ :bmp => "image/bmp",
19
+ :tiff => "image/tiff",
20
+ :svg => "image/svg+xml",
21
+ :mpeg => "video/mpeg",
22
+ :mp3 => "audio/mpeg",
23
+ :ogg => "audio/ogg",
24
+ :m4a => "audio/aac",
25
+ :webm => "video/webm",
26
+ :mp4 => "video/mp4",
27
+ :otf => "font/otf",
28
+ :ttf => "font/ttf",
29
+ :woff => "font/woff",
30
+ :woff2 => "font/woff2",
31
+ :xml => "application/xml",
32
+ :rss => "application/rss+xml",
33
+ :atom => "application/atom+xml",
34
+ :yaml => "application/x-yaml",
35
+ :multipart_form => "multipart/form-data",
36
+ :url_encoded_form => "application/x-www-form-urlencoded",
37
+ :json => "application/json",
38
+ :pdf => "application/pdf",
39
+ :zip => "application/zip",
40
+ :gzip => "application/gzip"
41
+ }.freeze
42
+
43
+ fn :get_mime_type
44
+
45
+ contract(Or[*MIME_TYPES.keys] => String)
46
+ def call(type)
47
+ MIME_TYPES.fetch(type)
48
+ end
49
+ end
@@ -44,6 +44,14 @@
44
44
  "as": "build_serializer_schema",
45
45
  "imports": [
46
46
 
47
+ ]
48
+ },
49
+ {
50
+ "target": "get_mime_type",
51
+ "package_name": "ree_swagger",
52
+ "as": "get_mime_type",
53
+ "imports": [
54
+
47
55
  ]
48
56
  }
49
57
  ]
@@ -0,0 +1,27 @@
1
+ {
2
+ "schema_type": "object",
3
+ "schema_version": "1.0",
4
+ "name": "get_mime_type",
5
+ "path": "packages/ree_swagger/package/ree_swagger/functions/get_mime_type.rb",
6
+ "mount_as": "fn",
7
+ "class": "ReeSwagger::GetMimeType",
8
+ "factory": null,
9
+ "methods": [
10
+ {
11
+ "doc": "",
12
+ "throws": [
13
+
14
+ ],
15
+ "return": "String",
16
+ "args": [
17
+ {
18
+ "arg": "type",
19
+ "type": "Or[html, text, js, css, ics, csv, vcf, vtt, png, jpeg, gif, bmp, tiff, svg, mpeg, mp3, ogg, m4a, webm, mp4, otf, ttf, woff, woff2, xml, rss, atom, yaml, multipart_f..., url_encoded..., json, pdf, zip, gzip]"
20
+ }
21
+ ]
22
+ }
23
+ ],
24
+ "links": [
25
+
26
+ ]
27
+ }
@@ -60,9 +60,19 @@ RSpec.describe :build_endpoint_schema do
60
60
  locales :locale
61
61
  end
62
62
 
63
+ file_caster = mapper_factory.call.use(:cast) do
64
+ integer :id
65
+ end
66
+
67
+ file_serializer = mapper_factory.call.use(:serialize) do
68
+ string :data
69
+ end
70
+
63
71
  schema = build_endpoint_schema(ReeSwagger::EndpointDto.new(
64
72
  method: :post,
73
+ respond_to: :json,
65
74
  path: '/versions/:id',
75
+ sections: ["versions"],
66
76
  caster: caster,
67
77
  serializer: serializer,
68
78
  response_status: 200,
@@ -84,6 +94,19 @@ RSpec.describe :build_endpoint_schema do
84
94
  ]
85
95
  ))
86
96
 
97
+ csv_schema = build_endpoint_schema(ReeSwagger::EndpointDto.new(
98
+ method: :get,
99
+ respond_to: :csv,
100
+ path: '/files/:id',
101
+ sections: ["files"],
102
+ caster: file_caster,
103
+ serializer: file_serializer,
104
+ response_status: 200,
105
+ description: "file",
106
+ summary: "file summary",
107
+ errors: []
108
+ ))
109
+
87
110
  expect(schema).to eq(ReeSwagger::PathDto.new(
88
111
  path: '/versions/{id}',
89
112
  schema: {
@@ -108,13 +131,15 @@ RSpec.describe :build_endpoint_schema do
108
131
  properties: {
109
132
  name: { type: 'string' },
110
133
  value: { type: 'string' }
111
- }
134
+ },
135
+ required: ['name', 'value']
112
136
  },
113
137
  locale: {
114
138
  type: 'string',
115
139
  enum: ['en', 'ru']
116
140
  }
117
- }
141
+ },
142
+ required: ['name', 'tag', 'locale']
118
143
  }
119
144
  }
120
145
  }
@@ -143,6 +168,41 @@ RSpec.describe :build_endpoint_schema do
143
168
  },
144
169
  summary: "summary",
145
170
  description: "description",
171
+ tags: ["versions"]
172
+ }
173
+ }
174
+ ))
175
+
176
+ expect(csv_schema).to eq(ReeSwagger::PathDto.new(
177
+ path: '/files/{id}',
178
+ schema: {
179
+ get: {
180
+ parameters: [
181
+ {
182
+ name: 'id',
183
+ in: 'path',
184
+ required: true,
185
+ schema: { type: 'integer' }
186
+ }
187
+ ],
188
+ responses: {
189
+ 200 => {
190
+ description: '',
191
+ content: {
192
+ :'text/csv' => {
193
+ schema: {
194
+ type: 'object',
195
+ properties: {
196
+ data: { type: 'string' }
197
+ }
198
+ }
199
+ }
200
+ }
201
+ }
202
+ },
203
+ summary: "file summary",
204
+ description: "file",
205
+ tags: ["files"]
146
206
  }
147
207
  }
148
208
  ))
@@ -165,6 +225,7 @@ RSpec.describe :build_endpoint_schema do
165
225
  method: :get,
166
226
  path: '/versions/:id',
167
227
  caster: caster,
228
+ respond_to: :json,
168
229
  serializer: nil,
169
230
  response_status: 200,
170
231
  description: nil,
@@ -202,9 +263,11 @@ RSpec.describe :build_endpoint_schema do
202
263
  properties: {
203
264
  x: { type: 'integer' },
204
265
  y: { type: 'integer' }
205
- }
266
+ },
267
+ required: ['x', 'y']
206
268
  }
207
- }
269
+ },
270
+ required: ['text', 'point']
208
271
  },
209
272
  style: 'deepObject'
210
273
  }
@@ -224,6 +287,7 @@ RSpec.describe :build_endpoint_schema do
224
287
  build_endpoint_schema(ReeSwagger::EndpointDto.new(
225
288
  method: :get,
226
289
  path: '/versions/:id',
290
+ respond_to: :json,
227
291
  caster: nil,
228
292
  serializer: nil,
229
293
  response_status: 200,
@@ -246,6 +310,7 @@ RSpec.describe :build_endpoint_schema do
246
310
  build_endpoint_schema(ReeSwagger::EndpointDto.new(
247
311
  method: :get,
248
312
  path: '/versions/:id',
313
+ respond_to: :json,
249
314
  caster: caster,
250
315
  serializer: nil,
251
316
  response_status: 200,
@@ -0,0 +1,35 @@
1
+ RSpec.describe :build_request_body_schema_spec do
2
+ link :build_request_body_schema, from: :ree_swagger
3
+ link :build_mapper_factory, from: :ree_mapper
4
+ link :build_mapper_strategy, from: :ree_mapper
5
+
6
+ let(:mapper_factory) {
7
+ strategies = [
8
+ build_mapper_strategy(method: :cast, output: :symbol_key_hash),
9
+ ]
10
+
11
+ build_mapper_factory(
12
+ strategies: strategies
13
+ )
14
+ }
15
+
16
+ it {
17
+ caster = mapper_factory.call.use(:cast) do
18
+ string :name
19
+ string :email
20
+ string? :last_name
21
+ end
22
+
23
+ schema = {
24
+ type: "object",
25
+ properties: {
26
+ name: { type: "string" },
27
+ email: { type: "string" },
28
+ last_name: { type: "string" }
29
+ },
30
+ required: ["name", "email"]
31
+ }
32
+
33
+ expect(build_request_body_schema(caster)).to eq(schema)
34
+ }
35
+ end
@@ -9,6 +9,7 @@ RSpec.describe :build_schema do
9
9
  endpoints: [ReeSwagger::EndpointDto.new(
10
10
  method: :get,
11
11
  path: '/version',
12
+ respond_to: :json,
12
13
  caster: nil,
13
14
  serializer: nil,
14
15
  response_status: 200,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.7"
4
+ VERSION = "1.0.8"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
4
+ version: 1.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-07 00:00:00.000000000 Z
11
+ date: 2022-08-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ree
@@ -1122,6 +1122,7 @@ files:
1122
1122
  - lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_schema.rb
1123
1123
  - lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_serializer_schema.rb
1124
1124
  - lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/get_caster_definition.rb
1125
+ - lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/get_mime_type.rb
1125
1126
  - lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/get_serializer_definition.rb
1126
1127
  - lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/register_type.rb
1127
1128
  - lib/ree_lib/packages/ree_swagger/schemas/ree_swagger/beans/type_definitions_repo.schema.json
@@ -1131,10 +1132,12 @@ files:
1131
1132
  - lib/ree_lib/packages/ree_swagger/schemas/ree_swagger/functions/build_schema.schema.json
1132
1133
  - lib/ree_lib/packages/ree_swagger/schemas/ree_swagger/functions/build_serializer_schema.schema.json
1133
1134
  - lib/ree_lib/packages/ree_swagger/schemas/ree_swagger/functions/get_caster_definition.schema.json
1135
+ - lib/ree_lib/packages/ree_swagger/schemas/ree_swagger/functions/get_mime_type.schema.json
1134
1136
  - lib/ree_lib/packages/ree_swagger/schemas/ree_swagger/functions/get_serializer_definition.schema.json
1135
1137
  - lib/ree_lib/packages/ree_swagger/schemas/ree_swagger/functions/register_type.schema.json
1136
1138
  - lib/ree_lib/packages/ree_swagger/spec/functions/build_endpoint_schema_spec.rb
1137
1139
  - lib/ree_lib/packages/ree_swagger/spec/functions/build_parameters_spec.rb
1140
+ - lib/ree_lib/packages/ree_swagger/spec/functions/build_request_body_spec.rb
1138
1141
  - lib/ree_lib/packages/ree_swagger/spec/functions/build_schema_spec.rb
1139
1142
  - lib/ree_lib/packages/ree_swagger/spec/functions/build_serializer_schema_spec.rb
1140
1143
  - lib/ree_lib/packages/ree_swagger/spec/functions/register_type_spec.rb