ree_lib 1.0.2 → 1.0.3

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: d39c69499684b2f63a3dfc5636265aceab2d0935cd4f6dfed10195cff8131989
4
- data.tar.gz: 464e780303d9b8f1d1f8b786e507c87e708d5ba242520390fbf4f2643061d73d
3
+ metadata.gz: ff525a1db86ff974abe2f0095d70921fa49e324b808723042b1671140b372809
4
+ data.tar.gz: 899723f369a42828b8dc094cdcaf96c10d78704e23f95b9500ed76d453858f3b
5
5
  SHA512:
6
- metadata.gz: ac7641c5e60d758ac4aa3e4fe6237c7758e5c6a53dd096acbf3bd5ca266aa48a5fffe0b0e5e50b0b2ad54493482365fdf3a6de2bf6b938abff626b7864b5016b
7
- data.tar.gz: 329fb7390b7183e14ee2d1b52a2d236e3afdf45d7a65ad3fa31ec871c01c0637716b72479f9de6e90e5d1a1b5eb5b1fae5630747509875387f17274689bdf3fd
6
+ metadata.gz: 8a8630ad6fbb14f70ffef61be34708befd543be814a29fb81afda8a9020b8b46222e4aca37662e8504dbab8d43d408e9850168acc50595962245c93a4b377155
7
+ data.tar.gz: 1eb4b5d094c9b5aabf5882f5c055594348ea7a818920a1e55e87f48765e66dd0e2718a6643d7d4ba65f70ded911dd2a5575ad401497a5c69765f0700f34804cc
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.2)
4
+ ree_lib (1.0.3)
5
5
  binding_of_caller (~> 1.0.0)
6
6
  i18n (~> 1.12.0)
7
7
  loofah (~> 2.18.0)
@@ -10,6 +10,9 @@
10
10
  {
11
11
  "name": "ree_mapper"
12
12
  },
13
+ {
14
+ "name": "ree_swagger"
15
+ },
13
16
  {
14
17
  "name": "ree_validator"
15
18
  }
@@ -1,3 +1,5 @@
1
+ package_require 'ree_swagger/functions/register_type'
2
+
1
3
  module ReeEnum
2
4
  module DSL
3
5
  def self.included(base)
@@ -92,7 +94,26 @@ module ReeEnum
92
94
  end
93
95
  end
94
96
 
97
+ def register_as_swagger_type
98
+ swagger_type_registrator = ReeSwagger::RegisterType.new
99
+
100
+ [:casters, :serializers].each do |kind|
101
+ swagger_type_registrator.call(
102
+ kind,
103
+ type_for_mapper.class,
104
+ ->(*) {
105
+ {
106
+ type: 'string',
107
+ enum: values.all.map(&:to_s)
108
+ }
109
+ }
110
+ )
111
+ end
112
+ end
113
+
95
114
  def register_as_mapper_type
115
+ register_as_swagger_type
116
+
96
117
  mapper_factory = ReeMapper.get_mapper_factory(
97
118
  Object.const_get(self.name.split('::').first)
98
119
  )
@@ -5,6 +5,7 @@ module ReeEnum
5
5
 
6
6
  package do
7
7
  depends_on :ree_mapper
8
+ depends_on :ree_swagger
8
9
  depends_on :ree_validator
9
10
  end
10
11
  end
@@ -10,6 +10,9 @@
10
10
  {
11
11
  "name": "ree_dto"
12
12
  },
13
+ {
14
+ "name": "ree_enum"
15
+ },
13
16
  {
14
17
  "name": "ree_hash"
15
18
  },
@@ -9,40 +9,40 @@ class ReeSwagger::TypeDefinitionsRepo
9
9
  def build
10
10
  {
11
11
  serializers: {
12
- 'ReeMapper::Integer' => ->(*) {
12
+ ReeMapper::Integer => ->(*) {
13
13
  { type: 'integer' }
14
14
  },
15
- 'ReeMapper::String' => ->(*) {
15
+ ReeMapper::String => ->(*) {
16
16
  { type: 'string' }
17
17
  },
18
- 'ReeMapper::Bool' => ->(*) {
18
+ ReeMapper::Bool => ->(*) {
19
19
  { type: 'boolean' }
20
20
  },
21
- 'ReeMapper::Float' => ->(*) {
21
+ ReeMapper::Float => ->(*) {
22
22
  {
23
23
  type: 'number',
24
24
  format: 'float'
25
25
  }
26
26
  },
27
- 'ReeMapper::Array' => ->(type, build_serializer_schema) {
27
+ ReeMapper::Array => ->(type, build_serializer_schema) {
28
28
  {
29
29
  type: 'array',
30
30
  items: build_serializer_schema.(type.of.type)
31
31
  }
32
32
  },
33
- 'ReeMapper::DateTime' => ->(*) {
33
+ ReeMapper::DateTime => ->(*) {
34
34
  {
35
35
  type: 'string',
36
36
  format: 'date-time'
37
37
  }
38
38
  },
39
- 'ReeMapper::Date' => ->(*) {
39
+ ReeMapper::Date => ->(*) {
40
40
  {
41
41
  type: 'string',
42
42
  format: 'date'
43
43
  }
44
44
  },
45
- 'ReeMapper::Time' => ->(*) {
45
+ ReeMapper::Time => ->(*) {
46
46
  {
47
47
  type: 'string',
48
48
  format: 'date-time'
@@ -50,40 +50,40 @@ class ReeSwagger::TypeDefinitionsRepo
50
50
  }
51
51
  },
52
52
  casters: {
53
- 'ReeMapper::Integer' => ->(*) {
53
+ ReeMapper::Integer => ->(*) {
54
54
  { type: 'integer' }
55
55
  },
56
- 'ReeMapper::String' => ->(*) {
56
+ ReeMapper::String => ->(*) {
57
57
  { type: 'string' }
58
58
  },
59
- 'ReeMapper::Bool' => ->(*) {
59
+ ReeMapper::Bool => ->(*) {
60
60
  { type: 'boolean' }
61
61
  },
62
- 'ReeMapper::Float' => ->(*) {
62
+ ReeMapper::Float => ->(*) {
63
63
  {
64
64
  type: 'number',
65
65
  format: 'float'
66
66
  }
67
67
  },
68
- 'ReeMapper::Array' => ->(type, build_caster_schema) {
68
+ ReeMapper::Array => ->(type, build_caster_schema) {
69
69
  {
70
70
  type: 'array',
71
71
  items: build_caster_schema.(type.of.type)
72
72
  }
73
73
  },
74
- 'ReeMapper::DateTime' => ->(*) {
74
+ ReeMapper::DateTime => ->(*) {
75
75
  {
76
76
  type: 'string',
77
77
  format: 'date-time'
78
78
  }
79
79
  },
80
- 'ReeMapper::Date' => ->(*) {
80
+ ReeMapper::Date => ->(*) {
81
81
  {
82
82
  type: 'string',
83
83
  format: 'date'
84
84
  }
85
85
  },
86
- 'ReeMapper::Time' => ->(*) {
86
+ ReeMapper::Time => ->(*) {
87
87
  {
88
88
  type: 'string',
89
89
  format: 'date-time'
@@ -90,30 +90,12 @@ class ReeSwagger::BuildEndpointSchema
90
90
 
91
91
  endpoint.errors.each do |error|
92
92
  if responses.key?(error.status)
93
- responses[error.status][:description] += "\n\n#{error.description}"
93
+ responses[error.status][:description] += "\n- #{error.description}"
94
94
  next
95
95
  end
96
96
 
97
97
  responses[error.status] = {
98
- description: error.description,
99
- content: {
100
- :'application/json' => {
101
- schema: {
102
- type: 'object',
103
- properties: {
104
- code: {
105
- type: "string"
106
- },
107
- message: {
108
- type: "string"
109
- },
110
- type: {
111
- type: "string"
112
- }
113
- }
114
- }
115
- }
116
- }
98
+ description: "- #{error.description}",
117
99
  }
118
100
  end
119
101
 
@@ -10,7 +10,7 @@ class ReeSwagger::GetCasterDefinition
10
10
  contract(Any, Proc => Nilor[Hash])
11
11
  def call(type, schema_builder)
12
12
  type_definitions_repo
13
- .dig(:casters, type.class.name)
13
+ .dig(:casters, type.class)
14
14
  &.(type, schema_builder)
15
15
  end
16
16
  end
@@ -10,7 +10,7 @@ class ReeSwagger::GetSerializerDefinition
10
10
  contract(Any, Proc => Nilor[Hash])
11
11
  def call(type, build_serializer_schema)
12
12
  type_definitions_repo
13
- .dig(:serializers, type.class.name)
13
+ .dig(:serializers, type.class)
14
14
  &.(type, build_serializer_schema)
15
15
  end
16
16
  end
@@ -12,7 +12,7 @@ class ReeSwagger::RegisterType
12
12
  contract(Or[:casters, :serializers], Any, Proc => nil)
13
13
  def call(kind, type, definition)
14
14
  SEMAPHORE.synchronize do
15
- type_definitions_repo[kind][type.name] = definition
15
+ type_definitions_repo[kind][type] = definition
16
16
  end
17
17
 
18
18
  nil
@@ -5,5 +5,6 @@ module ReeSwagger
5
5
  depends_on :ree_mapper
6
6
  depends_on :ree_dto
7
7
  depends_on :ree_hash
8
+ depends_on :ree_enum
8
9
  end
9
10
  end
@@ -3,6 +3,14 @@ RSpec.describe :build_endpoint_schema do
3
3
  link :build_mapper_factory, from: :ree_mapper
4
4
  link :build_mapper_strategy, from: :ree_mapper
5
5
 
6
+ before :all do
7
+ Ree.enable_irb_mode
8
+ end
9
+
10
+ after :all do
11
+ Ree.disable_irb_mode
12
+ end
13
+
6
14
  let(:mapper_factory) {
7
15
  strategies = [
8
16
  build_mapper_strategy(method: :serialize, output: :symbol_key_hash),
@@ -15,6 +23,27 @@ RSpec.describe :build_endpoint_schema do
15
23
  }
16
24
 
17
25
  it {
26
+ module ReeSwaggerTest
27
+ include Ree::PackageDSL
28
+
29
+ package
30
+
31
+ class Locales
32
+ include ReeEnum::DSL
33
+
34
+ enum :locales
35
+
36
+ val :en, 0
37
+ val :ru, 1
38
+ end
39
+ end
40
+
41
+ mapper_factory.register_type(
42
+ :locales, ReeSwaggerTest::Locales.type_for_mapper
43
+ )
44
+
45
+ ReeSwaggerTest::Locales.register_as_swagger_type
46
+
18
47
  serializer = mapper_factory.call.use(:serialize) do
19
48
  integer :id
20
49
  end
@@ -28,6 +57,7 @@ RSpec.describe :build_endpoint_schema do
28
57
  integer :id
29
58
  string :name
30
59
  tag :tag
60
+ locales :locale
31
61
  end
32
62
 
33
63
  schema = build_endpoint_schema(ReeSwagger::EndpointDto.new(
@@ -78,6 +108,10 @@ RSpec.describe :build_endpoint_schema do
78
108
  name: { type: 'string' },
79
109
  value: { type: 'string' }
80
110
  }
111
+ },
112
+ locale: {
113
+ type: 'string',
114
+ enum: ['en', 'ru']
81
115
  }
82
116
  }
83
117
  }
@@ -99,46 +133,11 @@ RSpec.describe :build_endpoint_schema do
99
133
  }
100
134
  },
101
135
  400 => {
102
- description: "1st 400 error\n\n2nd 400 error",
103
- content: {
104
- :'application/json' => {
105
- schema: {
106
- type: 'object',
107
- properties: {
108
- code: {
109
- type: "string"
110
- },
111
- message: {
112
- type: "string"
113
- },
114
- type: {
115
- type: "string"
116
- }
117
- }
118
- }
119
- }
120
- }
136
+ description: "- 1st 400 error\n- 2nd 400 error",
137
+
121
138
  },
122
139
  401 => {
123
- description: "401 error",
124
- content: {
125
- :'application/json' => {
126
- schema: {
127
- type: 'object',
128
- properties: {
129
- code: {
130
- type: "string"
131
- },
132
- message: {
133
- type: "string"
134
- },
135
- type: {
136
- type: "string"
137
- }
138
- }
139
- }
140
- }
141
- }
140
+ description: "- 401 error",
142
141
  }
143
142
  }
144
143
  }
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.2"
4
+ VERSION = "1.0.3"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov