ree_lib 1.0.7 → 1.0.8

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