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