rest_framework 0.6.3 → 0.6.5

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: 9310e248327d207a68953d1f629bb9c094c860ee7fe50f1ada4cb87e88e1da43
4
- data.tar.gz: c7ffe0f8ef8bf0c0f26b7d918cccbd91c9b1650f144c7ba071d9f9db0c2b4a2b
3
+ metadata.gz: 68ebf30c14f9f70796c6963505e7b45421ee838d076784073505feb9b05c3ddb
4
+ data.tar.gz: 71918c4b2b2eeaed10833d84cb54f6bbb860ea3205895bc75abf9a543d0bedc9
5
5
  SHA512:
6
- metadata.gz: 49c1bd1aa35b97b3543ffe3a66b1eb8a19fe339f996483071be1cb6817aa3f8d4848ff90f0b5bd7e20769c9c1c028f605de1e8251cb80bd2fcfb979ec10de2bd
7
- data.tar.gz: 1c5e9ef47b970fd883023ac2eb11b3febabfb83d929908de28553b46a668c2136286bef4873f489e5fa263959cbf33a8b8cecef6bce7ace29926983566cad94a
6
+ metadata.gz: d909e86567107d2565a65e9c99f67b771e462a2bd9dae04289c9846cc0ba68bfe3728b63d1b8a154c532e7a5cb1aeac1f593401a98bbc0b1f405f474aabb8527
7
+ data.tar.gz: abe06a65bb999c4926e6a54295afc4c55e254fba1276b0257eb2af765bbc3f367fe5ebc5d9fe1d6181c45157369440de13a7f4aed331a49271426d2468110a99
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.3
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.get_serializer_class.new(page, controller: self).serialize
240
+ serialized_page = self.serialize(page)
236
241
  return paginator.get_paginated_response(serialized_page)
237
242
  else
238
- return self.get_serializer_class.new(@records, controller: self).serialize
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.get_serializer_class.new(@record, controller: self).serialize
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.get_serializer_class.new(@record, controller: self).serialize
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.get_serializer_class.new(@record, controller: self).serialize
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.3
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-09-16 00:00:00.000000000 Z
11
+ date: 2022-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails