ree_lib 1.0.21 → 1.0.22

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: f6ae0f9daf43194e577174cd9d39c1516e301a5c53b05f0ab5a3467b0cb4b704
4
- data.tar.gz: e333d78c1cf0f28bee7797be4b2718898f094c431a5abec04256f93e9ff6e450
3
+ metadata.gz: 6a07548e9d6406a91f8b9ba8781ac7a42add43a8283225fec7147cebceaf3135
4
+ data.tar.gz: 277351000a4834065e02a5011966726d3121fac4451ec0dcfdb8d41a6ca2316c
5
5
  SHA512:
6
- metadata.gz: f7282239063aebfcf7c1c6552980ef933ac48efc47cc28afdf28b65ad82913af52c71f6b8b0f45f733967633033235e2e82856d95b91b9935ed98b13c4656199
7
- data.tar.gz: 4eae3f07e6a0808da7f32c791ff06ec9c414f7cb6c818ec845bd79b7825983e58a0baec5f63a403d7ae660ebbea07fdc9b1873d6ed34cdd0424bc212d6943fd9
6
+ metadata.gz: 0d241902046d98abbe9affdecac2ed8d4c8ab588b078413a611b32b6b3054ae400296a96605a54ed7354a33106a5651d02bae1d6e7ef464570bac7c6cd11b897
7
+ data.tar.gz: d8f809aec0100f1727c0d8e411a6a1f192c4120b7e60dcdb4c00fea1f1503137cb368a1064aa3e74e0d25d94354090b4f2200ec1e0337074493bf08bf837a57c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.21)
4
+ ree_lib (1.0.22)
5
5
  binding_of_caller (~> 1.0.0)
6
6
  i18n (~> 1.12.0)
7
7
  loofah (~> 2.18.0)
@@ -35,32 +35,34 @@ GEM
35
35
  loofah (2.18.0)
36
36
  crass (~> 1.0.2)
37
37
  nokogiri (>= 1.5.9)
38
- msgpack (1.5.4)
39
- nokogiri (1.13.8-x86_64-linux)
38
+ msgpack (1.6.0)
39
+ nokogiri (1.13.9-x86_64-darwin)
40
+ racc (~> 1.4)
41
+ nokogiri (1.13.9-x86_64-linux)
40
42
  racc (~> 1.4)
41
43
  oj (3.13.21)
42
- pg (1.4.3)
44
+ pg (1.4.4)
43
45
  public_suffix (5.0.0)
44
46
  racc (1.6.0)
45
47
  rainbow (3.1.1)
46
48
  rake (13.0.6)
47
- ree (1.0.5)
49
+ ree (1.0.6)
48
50
  commander (~> 4.6.0)
49
51
  rexml (3.2.5)
50
- rollbar (3.3.1)
52
+ rollbar (3.3.2)
51
53
  rspec (3.11.0)
52
54
  rspec-core (~> 3.11.0)
53
55
  rspec-expectations (~> 3.11.0)
54
56
  rspec-mocks (~> 3.11.0)
55
57
  rspec-core (3.11.0)
56
58
  rspec-support (~> 3.11.0)
57
- rspec-expectations (3.11.0)
59
+ rspec-expectations (3.11.1)
58
60
  diff-lcs (>= 1.2.0, < 2.0)
59
61
  rspec-support (~> 3.11.0)
60
- rspec-mocks (3.11.1)
62
+ rspec-mocks (3.11.2)
61
63
  diff-lcs (>= 1.2.0, < 2.0)
62
64
  rspec-support (~> 3.11.0)
63
- rspec-support (3.11.0)
65
+ rspec-support (3.11.1)
64
66
  sequel (5.58.0)
65
67
  sqlite3 (1.4.4)
66
68
  timecop (0.9.5)
@@ -36,7 +36,7 @@ class ReeSwagger::BuildParameters
36
36
  name: field.name_as_str,
37
37
  in: is_path_param ? 'path' : 'query',
38
38
  required: is_path_param || !field.optional,
39
- schema: build_request_body_schema(field.type) || {}
39
+ schema: build_request_body_schema(field.type, [], [field.fields_filter]) || {}
40
40
  }
41
41
 
42
42
  schema[:style] = 'deepObject' if field.type.type.nil?
@@ -9,9 +9,10 @@ class ReeSwagger::BuildRequestBodySchema
9
9
 
10
10
  contract(
11
11
  ReeMapper::Mapper,
12
- ArrayOf[Symbol] => Nilor[Hash]
12
+ ArrayOf[Symbol],
13
+ ArrayOf[ReeMapper::FieldsFilter] => Nilor[Hash]
13
14
  )
14
- def call(mapper, path_params = [])
15
+ def call(mapper, path_params = [], fields_filters = [])
15
16
  if mapper.type
16
17
  return get_caster_definition(mapper.type, method(:call).to_proc)
17
18
  end
@@ -19,13 +20,20 @@ class ReeSwagger::BuildRequestBodySchema
19
20
  required_fields = []
20
21
 
21
22
  properties = mapper.fields.each_with_object({}) do |(_name, field), acc|
23
+ next unless fields_filters.all? { _1.allow?(field.name) }
24
+
22
25
  next if path_params.include?(field.name)
23
26
 
24
27
  swagger_field = {}
25
28
 
26
29
  required_fields << field.name.to_s if !field.optional
27
30
  field_mapper = field.type
28
- swagger_type = call(field_mapper)
31
+
32
+ nested_fields_filters = fields_filters.map { _1.filter_for(field.name) }
33
+ nested_fields_filters += [field.fields_filter]
34
+
35
+ swagger_type = call(field_mapper, [], nested_fields_filters)
36
+
29
37
  swagger_field.merge!(swagger_type) if swagger_type
30
38
 
31
39
  description = field.doc
@@ -7,17 +7,24 @@ class ReeSwagger::BuildSerializerSchema
7
7
  link :get_serializer_definition
8
8
  end
9
9
 
10
- contract(ReeMapper::Mapper => Nilor[Hash])
11
- def call(mapper)
10
+ contract(ReeMapper::Mapper, ArrayOf[ReeMapper::FieldsFilter] => Nilor[Hash])
11
+ def call(mapper, fields_filters = [])
12
12
  if mapper.type
13
13
  return get_serializer_definition(mapper.type, method(:call).to_proc)
14
14
  end
15
15
 
16
16
  properties = mapper.fields.each_with_object({}) do |(_name, field), acc|
17
+ next unless fields_filters.all? { _1.allow?(field.name) }
18
+
17
19
  swagger_field = {}
18
20
 
19
21
  field_mapper = field.type
20
- swagger_type = call(field_mapper)
22
+
23
+ nested_fields_filters = fields_filters.map { _1.filter_for(field.name) }
24
+ nested_fields_filters += [field.fields_filter]
25
+
26
+ swagger_type = call(field_mapper, nested_fields_filters)
27
+
21
28
  swagger_field.merge!(swagger_type) if swagger_type
22
29
 
23
30
  description = field.doc
@@ -21,6 +21,10 @@
21
21
  {
22
22
  "arg": "path_params",
23
23
  "type": "ArrayOf[Symbol]"
24
+ },
25
+ {
26
+ "arg": "fields_filters",
27
+ "type": "ArrayOf[ReeMapper::FieldsFilter]"
24
28
  }
25
29
  ]
26
30
  }
@@ -17,6 +17,10 @@
17
17
  {
18
18
  "arg": "mapper",
19
19
  "type": "ReeMapper::Mapper"
20
+ },
21
+ {
22
+ "arg": "fields_filters",
23
+ "type": "ArrayOf[ReeMapper::FieldsFilter]"
20
24
  }
21
25
  ]
22
26
  }
@@ -51,23 +51,16 @@ RSpec.describe :build_endpoint_schema do
51
51
  _tag_caster = mapper_factory.call(register_as: :tag).use(:cast) do
52
52
  string :name
53
53
  string :value
54
+ string :excluded
54
55
  end
55
56
 
56
57
  caster = mapper_factory.call.use(:cast) do
57
58
  integer :id
58
59
  string :name
59
- tag :tag
60
+ tag :tag, except: [:excluded]
60
61
  locales :locale
61
62
  end
62
63
 
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
-
71
64
  schema = build_endpoint_schema(ReeSwagger::EndpointDto.new(
72
65
  method: :post,
73
66
  respond_to: :json,
@@ -95,20 +88,6 @@ RSpec.describe :build_endpoint_schema do
95
88
  ]
96
89
  ))
97
90
 
98
- csv_schema = build_endpoint_schema(ReeSwagger::EndpointDto.new(
99
- method: :get,
100
- respond_to: :csv,
101
- authenticate: false,
102
- path: '/files/:id',
103
- sections: ["files"],
104
- caster: file_caster,
105
- serializer: file_serializer,
106
- response_status: 200,
107
- description: "file",
108
- summary: "file summary",
109
- errors: []
110
- ))
111
-
112
91
  expect(schema).to eq(ReeSwagger::PathDto.new(
113
92
  path: '/versions/{id}',
114
93
  schema: {
@@ -174,6 +153,116 @@ RSpec.describe :build_endpoint_schema do
174
153
  }
175
154
  }
176
155
  ))
156
+ }
157
+
158
+ it {
159
+ serializer = mapper_factory.call.use(:serialize) do
160
+ integer :id
161
+ end
162
+
163
+ _tag_caster = mapper_factory.call(register_as: :tag).use(:cast) do
164
+ string :name
165
+ string :value
166
+ string :excluded
167
+ end
168
+
169
+ caster = mapper_factory.call.use(:cast) do
170
+ integer :id
171
+ string :name
172
+ tag :tag, except: [:excluded]
173
+ end
174
+
175
+ schema = build_endpoint_schema(ReeSwagger::EndpointDto.new(
176
+ method: :get,
177
+ respond_to: :json,
178
+ authenticate: false,
179
+ path: '/versions/:id',
180
+ sections: ["versions"],
181
+ caster: caster,
182
+ serializer: serializer,
183
+ response_status: 200,
184
+ description: "description",
185
+ summary: "summary",
186
+ errors: []
187
+ ))
188
+
189
+ expect(schema).to eq(ReeSwagger::PathDto.new(
190
+ path: '/versions/{id}',
191
+ schema: {
192
+ get: {
193
+ parameters: [
194
+ {
195
+ name: 'id',
196
+ in: 'path',
197
+ required: true,
198
+ schema: { type: 'integer' }
199
+ },
200
+ {
201
+ name: 'name',
202
+ in: 'query',
203
+ required: true,
204
+ schema: { type: 'string' }
205
+ },
206
+ {
207
+ name: 'tag',
208
+ in: 'query',
209
+ required: true,
210
+ style: 'deepObject',
211
+ schema: {
212
+ type: 'object',
213
+ properties: {
214
+ name: { type: 'string' },
215
+ value: { type: 'string' }
216
+ },
217
+ required: ['name', 'value']
218
+ }
219
+ }
220
+ ],
221
+ responses: {
222
+ 200 => {
223
+ description: '',
224
+ content: {
225
+ :'application/json' => {
226
+ schema: {
227
+ type: 'object',
228
+ properties: {
229
+ id: { type: 'integer' }
230
+ }
231
+ }
232
+ }
233
+ }
234
+ }
235
+ },
236
+ summary: "summary",
237
+ description: "description",
238
+ tags: ["versions"]
239
+ }
240
+ }
241
+ ))
242
+ }
243
+
244
+ it {
245
+ file_caster = mapper_factory.call.use(:cast) do
246
+ integer :id
247
+ end
248
+
249
+ file_serializer = mapper_factory.call.use(:serialize) do
250
+ string :data
251
+ end
252
+
253
+ csv_schema = build_endpoint_schema(ReeSwagger::EndpointDto.new(
254
+ method: :get,
255
+ respond_to: :csv,
256
+ authenticate: false,
257
+ path: '/files/:id',
258
+ sections: ["files"],
259
+ caster: file_caster,
260
+ serializer: file_serializer,
261
+ response_status: 200,
262
+ description: "file",
263
+ summary: "file summary",
264
+ errors: []
265
+ ))
177
266
 
178
267
  expect(csv_schema).to eq(ReeSwagger::PathDto.new(
179
268
  path: '/files/{id}',
@@ -25,6 +25,17 @@ RSpec.describe :build_serializer_schema do
25
25
  }
26
26
 
27
27
  let(:mapper) {
28
+ nested_partial_mapper = mapper_factory.call(register_as: :nested_partial).use(:serialize) do
29
+ string :included
30
+ string :excepted
31
+ string :nested_excepted
32
+ end
33
+
34
+ partial_mapper = mapper_factory.call(register_as: :partial).use(:serialize) do
35
+ string :excepted
36
+ nested_partial :nested_partial_value, except: [:excepted]
37
+ end
38
+
28
39
  setting_mapper = mapper_factory.call(register_as: :setting).use(:serialize) do
29
40
  string :name
30
41
  string :value
@@ -55,6 +66,8 @@ RSpec.describe :build_serializer_schema do
55
66
  integer :test_null, null: true
56
67
 
57
68
  unregistered_type :test_unregistered_type
69
+
70
+ partial :partial_value, except: [:excepted, nested_partial_value: [:nested_excepted]]
58
71
  end
59
72
  }
60
73
 
@@ -102,7 +115,18 @@ RSpec.describe :build_serializer_schema do
102
115
  type: 'integer',
103
116
  nullable: true
104
117
  },
105
- test_unregistered_type: {}
118
+ test_unregistered_type: {},
119
+ partial_value: {
120
+ type: 'object',
121
+ properties: {
122
+ nested_partial_value: {
123
+ type: 'object',
124
+ properties: {
125
+ included: { type: 'string' }
126
+ }
127
+ }
128
+ }
129
+ },
106
130
  }
107
131
  }
108
132
  )
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.21"
4
+ VERSION = "1.0.22"
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.21
4
+ version: 1.0.22
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-10-07 00:00:00.000000000 Z
11
+ date: 2022-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ree