rest_framework 0.6.3 → 0.6.5
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/VERSION +1 -1
- data/lib/rest_framework/controller_mixins/base.rb +15 -0
- data/lib/rest_framework/controller_mixins/models.rb +10 -5
- data/lib/rest_framework/serializers.rb +3 -19
- 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: 68ebf30c14f9f70796c6963505e7b45421ee838d076784073505feb9b05c3ddb
|
4
|
+
data.tar.gz: 71918c4b2b2eeaed10833d84cb54f6bbb860ea3205895bc75abf9a543d0bedc9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d909e86567107d2565a65e9c99f67b771e462a2bd9dae04289c9846cc0ba68bfe3728b63d1b8a154c532e7a5cb1aeac1f593401a98bbc0b1f405f474aabb8527
|
7
|
+
data.tar.gz: abe06a65bb999c4926e6a54295afc4c55e254fba1276b0257eb2af765bbc3f367fe5ebc5d9fe1d6181c45157369440de13a7f4aed331a49271426d2468110a99
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.5
|
@@ -51,6 +51,10 @@ module RESTFramework::BaseControllerMixin
|
|
51
51
|
serialize_to_xml: true,
|
52
52
|
singleton_controller: nil,
|
53
53
|
skip_actions: nil,
|
54
|
+
|
55
|
+
# Helper to disable serializer adapters by default, mainly introduced because Active Model
|
56
|
+
# Serializers will do things like serialize `[]` into `{"":[]}`.
|
57
|
+
disable_adapters_by_default: true,
|
54
58
|
}.each do |a, default|
|
55
59
|
next if base.respond_to?(a)
|
56
60
|
|
@@ -86,6 +90,12 @@ module RESTFramework::BaseControllerMixin
|
|
86
90
|
def get_serializer_class
|
87
91
|
return nil unless serializer_class = self.class.serializer_class
|
88
92
|
|
93
|
+
# Support dynamically resolving serializer given a symbol or string.
|
94
|
+
serializer_class = serializer_class.to_s if serializer_class.is_a?(Symbol)
|
95
|
+
if serializer_class.is_a?(String)
|
96
|
+
serializer_class = self.class.const_get(serializer_class)
|
97
|
+
end
|
98
|
+
|
89
99
|
# Wrap it with an adapter if it's an active_model_serializer.
|
90
100
|
if defined?(ActiveModel::Serializer) && (serializer_class < ActiveModel::Serializer)
|
91
101
|
serializer_class = RESTFramework::ActiveModelSerializerAdapterFactory.for(serializer_class)
|
@@ -138,6 +148,11 @@ module RESTFramework::BaseControllerMixin
|
|
138
148
|
json_kwargs = kwargs.delete(:json_kwargs) || {}
|
139
149
|
xml_kwargs = kwargs.delete(:xml_kwargs) || {}
|
140
150
|
|
151
|
+
# Do not use any adapters by default, if configured.
|
152
|
+
if self.class.disable_adapters_by_default && !kwargs.key?(:adapter)
|
153
|
+
kwargs[:adapter] = nil
|
154
|
+
end
|
155
|
+
|
141
156
|
# Raise helpful error if payload is nil. Usually this happens when a record is not found (e.g.,
|
142
157
|
# when passing something like `User.find_by(id: some_id)` to `api_response`). The caller should
|
143
158
|
# actually be calling `find_by!` to raise ActiveRecord::RecordNotFound and allowing the REST
|
@@ -114,6 +114,11 @@ module RESTFramework::BaseModelControllerMixin
|
|
114
114
|
return super || RESTFramework::NativeSerializer
|
115
115
|
end
|
116
116
|
|
117
|
+
# Helper to serialize data using the `serializer_class`.
|
118
|
+
def serialize(data, **kwargs)
|
119
|
+
return self.get_serializer_class.new(data, controller: self, **kwargs).serialize
|
120
|
+
end
|
121
|
+
|
117
122
|
# Helper to get filtering backends, defaulting to using `ModelFilter` and `ModelOrderingFilter`.
|
118
123
|
def get_filter_backends
|
119
124
|
return self.class.filter_backends || [
|
@@ -232,10 +237,10 @@ module RESTFramework::ListModelMixin
|
|
232
237
|
if self.class.paginator_class
|
233
238
|
paginator = self.class.paginator_class.new(data: @records, controller: self)
|
234
239
|
page = paginator.get_page
|
235
|
-
serialized_page = self.
|
240
|
+
serialized_page = self.serialize(page)
|
236
241
|
return paginator.get_paginated_response(serialized_page)
|
237
242
|
else
|
238
|
-
return self.
|
243
|
+
return self.serialize(@records)
|
239
244
|
end
|
240
245
|
end
|
241
246
|
end
|
@@ -248,7 +253,7 @@ module RESTFramework::ShowModelMixin
|
|
248
253
|
|
249
254
|
def show!
|
250
255
|
@record ||= self.get_record
|
251
|
-
return self.
|
256
|
+
return self.serialize(@record)
|
252
257
|
end
|
253
258
|
end
|
254
259
|
|
@@ -269,7 +274,7 @@ module RESTFramework::CreateModelMixin
|
|
269
274
|
@record ||= self.get_model.create!(self.get_create_params)
|
270
275
|
end
|
271
276
|
|
272
|
-
return self.
|
277
|
+
return self.serialize(@record)
|
273
278
|
end
|
274
279
|
end
|
275
280
|
|
@@ -282,7 +287,7 @@ module RESTFramework::UpdateModelMixin
|
|
282
287
|
def update!
|
283
288
|
@record ||= self.get_record
|
284
289
|
@record.update!(self.get_update_params)
|
285
|
-
return self.
|
290
|
+
return self.serialize(@record)
|
286
291
|
end
|
287
292
|
end
|
288
293
|
|
@@ -177,14 +177,13 @@ class RESTFramework::NativeSerializer < RESTFramework::BaseSerializer
|
|
177
177
|
only = only.split(",").map(&:strip).map(&:to_sym)
|
178
178
|
|
179
179
|
unless only.empty?
|
180
|
-
# For the `except` part of the serializer, we need to append any columns not in `only`.
|
181
|
-
model = @controller.get_model
|
182
|
-
except_cols = model&.column_names&.map(&:to_sym)&.reject { |c| c.in?(only) }
|
183
|
-
|
184
180
|
# Filter `only`, `except` (additive), `include`, and `methods`.
|
185
181
|
if cfg[:only]
|
186
182
|
cfg[:only] = self.class.filter_subcfg(cfg[:only], fields: only, only: true)
|
187
183
|
elsif cfg[:except]
|
184
|
+
# For the `except` part of the serializer, we need to append any columns not in `only`.
|
185
|
+
model = @controller.get_model
|
186
|
+
except_cols = model&.column_names&.map(&:to_sym)&.reject { |c| c.in?(only) }
|
188
187
|
cfg[:except] = self.class.filter_subcfg(cfg[:except], fields: except_cols, add: true)
|
189
188
|
else
|
190
189
|
cfg[:only] = only
|
@@ -283,21 +282,6 @@ class RESTFramework::NativeSerializer < RESTFramework::BaseSerializer
|
|
283
282
|
end
|
284
283
|
end
|
285
284
|
|
286
|
-
# :nocov:
|
287
|
-
# Alias NativeModelSerializer -> NativeSerializer.
|
288
|
-
class RESTFramework::NativeModelSerializer < RESTFramework::NativeSerializer
|
289
|
-
def initialize(**kwargs)
|
290
|
-
super
|
291
|
-
ActiveSupport::Deprecation.warn(
|
292
|
-
<<~MSG.split("\n").join(" "),
|
293
|
-
RESTFramework::NativeModelSerializer is deprecated and will be removed in future versions of
|
294
|
-
REST Framework; you should use RESTFramework::NativeSerializer instead.
|
295
|
-
MSG
|
296
|
-
)
|
297
|
-
end
|
298
|
-
end
|
299
|
-
# :nocov:
|
300
|
-
|
301
285
|
# This is a helper factory to wrap an ActiveModelSerializer to provide a `serialize` method which
|
302
286
|
# accepts both collections and individual records. Use `.for` to build adapters.
|
303
287
|
class RESTFramework::ActiveModelSerializerAdapterFactory
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest_framework
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregory N. Schmit
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|