mini_api 0.1.3 → 0.1.4
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 +4 -4
- data/README.md +46 -0
- data/lib/mini_api/default_responder.rb +9 -2
- data/lib/mini_api/model_responder.rb +26 -7
- data/lib/mini_api/serialization.rb +6 -0
- data/lib/mini_api/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf126960ba6eec18c20dcf69715848c827eef16840540c45fe0d76fc1a61341c
|
4
|
+
data.tar.gz: 69caf5e66fdacee7e9b5a4c5271387e0823f6f10f90373b9cdd149966563ad3f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 11a71582b7e0ed144cc0d3256dabc4c2e7f2f459c81459f2d809af16ddd02de0ee9ec9af45cdc6fbaae4d2c809857148b668e47186c0c110a1b708153f687373
|
7
|
+
data.tar.gz: c34d2b7773016ccd2328778d1d8b9a9be5cca14c403684b3870dfe47d3fe5988ae3acad1ec0bcb2453468304b4a329e16a35aa7f72efec48f64d9da1ca2fcf19
|
data/README.md
CHANGED
@@ -9,6 +9,8 @@ A gem to standardize json responses in Rails applications, highly inspired on [R
|
|
9
9
|
- [Usage](#usage)
|
10
10
|
- [Respondering json](#respondering-json)
|
11
11
|
- [Success and failure actions](#success-and-failure-actions)
|
12
|
+
- [Errors](#errors)
|
13
|
+
- [Message](#message)
|
12
14
|
- [Transform keys](#transform-keys)
|
13
15
|
- [Overriding response](#overriding-response)
|
14
16
|
- [Pagination](#pagination)
|
@@ -142,6 +144,50 @@ The `message` key is different based on actions on informed model: create, updat
|
|
142
144
|
|
143
145
|
You can respond any type of data, but ActiveRecord/ActiveModel::Model and ActiveRecord::Relation has a special treatment as shown above
|
144
146
|
|
147
|
+
### Errors
|
148
|
+
To show errors of a model, by default will use the `errors.messages` method, but `MiniApi` adds an ability to `active_model_serializers` to create a error serializer
|
149
|
+
as a nested class in your serializer. Example:
|
150
|
+
```ruby
|
151
|
+
class UserSerializer < ActiveModel::Serializer
|
152
|
+
attributes :id, :first_name, :last_name
|
153
|
+
|
154
|
+
class Error < ActiveModel::Serializer
|
155
|
+
attributes :user
|
156
|
+
|
157
|
+
def user
|
158
|
+
{
|
159
|
+
first_name: object.errors[:first_name],
|
160
|
+
last_name: object.errors[:last_name],
|
161
|
+
}
|
162
|
+
end
|
163
|
+
end
|
164
|
+
end
|
165
|
+
```
|
166
|
+
The response will be like:
|
167
|
+
```json
|
168
|
+
{
|
169
|
+
"success": false,
|
170
|
+
"errors": {
|
171
|
+
"user": {
|
172
|
+
"first_name": "can't be blank",
|
173
|
+
"last_name": "can't be blank"
|
174
|
+
}
|
175
|
+
},
|
176
|
+
"message": "User could not be created."
|
177
|
+
}
|
178
|
+
```
|
179
|
+
You can create serializers for non `ActiveRecord` and add a nested `Error` class too
|
180
|
+
|
181
|
+
### Message
|
182
|
+
|
183
|
+
The `I18n` path for the key `message` is `mini_api.messages.actions`, the controller action name and the `notice` for success actions
|
184
|
+
or `alert` for failure actions. Example `mini_api.messages.actions.create.notice`
|
185
|
+
|
186
|
+
By default support the actions: `create`, `update` and `delete`, but you can add more actions to translate
|
187
|
+
|
188
|
+
You can add translation based on models, changing the `action` key for your model name. Example:
|
189
|
+
`mini_api.messages.model_name.create.alert`. With this, is more easy personalize messages
|
190
|
+
|
145
191
|
### Transform keys
|
146
192
|
|
147
193
|
It is possible to transform the keys of request and response. By default, will transform to `snake_case`, but the possible values are `snake_case`, `camel_lower` and `camel_case`
|
@@ -15,11 +15,18 @@ module MiniApi
|
|
15
15
|
|
16
16
|
data = transform_keys
|
17
17
|
|
18
|
+
body =
|
19
|
+
if success
|
20
|
+
{ data: data }
|
21
|
+
else
|
22
|
+
{ errors: data }
|
23
|
+
end
|
24
|
+
|
18
25
|
@controller.render(
|
19
26
|
json: {
|
20
27
|
success: success,
|
21
|
-
|
22
|
-
|
28
|
+
message: @options[:message] || nil,
|
29
|
+
**body
|
23
30
|
},
|
24
31
|
status: @options[:status] || :ok
|
25
32
|
)
|
@@ -22,7 +22,7 @@ module MiniApi
|
|
22
22
|
|
23
23
|
body =
|
24
24
|
if resource_has_errors?
|
25
|
-
|
25
|
+
errors.merge(body)
|
26
26
|
else
|
27
27
|
{ data: serialiable_body(@resource).as_json }.merge(body)
|
28
28
|
end
|
@@ -42,6 +42,14 @@ module MiniApi
|
|
42
42
|
!@resource.errors.empty?
|
43
43
|
end
|
44
44
|
|
45
|
+
def errors
|
46
|
+
error_serializer = get_error_serializer(@resource)
|
47
|
+
|
48
|
+
return { errors: @resource.errors.messages } unless error_serializer
|
49
|
+
|
50
|
+
{ errors: error_serializer.new(@resource).as_json }
|
51
|
+
end
|
52
|
+
|
45
53
|
def status_code
|
46
54
|
return @options[:status] if @options[:status].present?
|
47
55
|
|
@@ -57,12 +65,23 @@ module MiniApi
|
|
57
65
|
def default_message
|
58
66
|
kind = resource_has_errors? ? 'alert' : 'notice'
|
59
67
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
68
|
+
model_path = "mini_api.messages.#{@resource.model_name.i18n_key}"
|
69
|
+
|
70
|
+
if I18n.exists? model_path
|
71
|
+
I18n.t(
|
72
|
+
kind,
|
73
|
+
scope: "#{model_path}.#{@controller.action_name}",
|
74
|
+
resource_name: @resource.class.model_name.human,
|
75
|
+
default: ''
|
76
|
+
)
|
77
|
+
else
|
78
|
+
I18n.t(
|
79
|
+
kind,
|
80
|
+
scope: [:mini_api, :messages, :actions, @controller.action_name],
|
81
|
+
resource_name: @resource.class.model_name.human,
|
82
|
+
default: ''
|
83
|
+
)
|
84
|
+
end
|
66
85
|
end
|
67
86
|
|
68
87
|
def previously_new_record?
|
data/lib/mini_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mini_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leon Cruz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-06-
|
11
|
+
date: 2023-06-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|