ree_lib 1.0.2 → 1.0.3

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