restful_json 3.2.0 → 3.2.1

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.
data/README.md CHANGED
@@ -271,15 +271,11 @@ You can have something as simple as:
271
271
 
272
272
  which would use the restful_json configuration and the controller's classname for the service definition.
273
273
 
274
- Or you could have a superclass:
274
+ Or, you could define more bells and whistles (read on to see what these do...):
275
275
 
276
- class ServiceController < ApplicationController
277
- acts_as_restful_json
278
- end
279
-
280
- And define more bells and whistles (read on to see what these do...):
276
+ class FoobarsController < ApplicationController
281
277
 
282
- class FoobarsController < ServiceController
278
+ acts_as_restful_json
283
279
 
284
280
  query_for :index, is: ->(t,q) {q.joins(:apples, :pears).where(apples: {color: 'green'}).where(pears: {color: 'green'})}
285
281
 
@@ -308,6 +304,28 @@ And define more bells and whistles (read on to see what these do...):
308
304
 
309
305
  end
310
306
 
307
+ ##### Parent/Ancestor Class Definition Not Supported
308
+
309
+ Have had issues with putting `acts_as_restful_json` in parent/ancestor class, so even though it seems like it would be a good idea at first to move it into a shared parent controller, please keep it in each individual controller, e.g.:
310
+
311
+ Don't do this:
312
+
313
+ class ServiceController < ApplicationController
314
+ acts_as_restful_json
315
+ end
316
+
317
+ class FoobarsController < ServiceController
318
+ acts_as_restful_json
319
+ end
320
+
321
+ It may appear to work when using the same controller, but when you make requests to more than one controller sharing the same parent/ancestor that define `acts_as_restful_json`, it may fail in very strange ways that are hard to diagnose from the error message.
322
+
323
+ Do this instead:
324
+
325
+ class FoobarsController < ApplicationController
326
+ acts_as_restful_json
327
+ end
328
+
311
329
  #### Default Filtering by Attribute(s)
312
330
 
313
331
  First, declare in the controller:
@@ -4,6 +4,20 @@ require 'active_model_serializers'
4
4
  require 'strong_parameters'
5
5
  require 'cancan'
6
6
 
7
+ # The restful_json controller module. This module (RestfulJson::Controller) is included on ActionController
8
+ # and then each individual controller should call acts_as_restful_json.
9
+ #
10
+ # Only use acts_as_restful_json in each individual service controller rather than a parent or
11
+ # ancestor class of the service controller. class_attribute's are supposed to work when you subclass,
12
+ # if you use setters (=, =+ to add to array instead of <<, etc.) but we have seen strange errors
13
+ # about missing columns, etc. related to the model_class, etc. being wrong if you share a
14
+ # parent/ancestor class that acts_as_restful_json and then switch back and forth between controllers.
15
+ # Why? The controller class overrides the shared class_attribute's when the controller class loads,
16
+ # which other than re-loading via Rails autoload, only happens once; so you hit one controller, then the
17
+ # the other, it starts overwriting/adding to attributes, and then when you hit the first one again, no
18
+ # class method calling on class instantiation is being called, so it is using the wrong model. That is
19
+ # bad, so don't do that.
20
+ #
7
21
  module RestfulJson
8
22
  module Controller
9
23
  extend ActiveSupport::Concern
@@ -358,11 +372,12 @@ module RestfulJson
358
372
  @value.save
359
373
  instance_variable_set(@model_at_singular_name_sym, @value)
360
374
 
361
- if self.render_enabled
362
- custom_action_serializer = self.action_to_serializer[params[:action].to_s]
375
+ if self.render_enabled
363
376
  if !@value.nil? && RestfulJson.return_resource
364
377
  respond_with(@value) do |format|
365
378
  format.json do
379
+ # define local variables in blocks, not outside of them, to be safe, even though would work in this case
380
+ custom_action_serializer = self.action_to_serializer[params[:action].to_s]
366
381
  if @value.errors.empty?
367
382
  render custom_action_serializer ? {json: @value, status: :created, serializer: custom_action_serializer} : {json: @value, status: :created}
368
383
  else
@@ -371,6 +386,7 @@ module RestfulJson
371
386
  end
372
387
  end
373
388
  else
389
+ custom_action_serializer = self.action_to_serializer[params[:action].to_s]
374
390
  respond_with @value, custom_action_serializer ? {serializer: custom_action_serializer} : {}
375
391
  end
376
392
  else
@@ -396,10 +412,11 @@ module RestfulJson
396
412
  instance_variable_set(@model_at_singular_name_sym, @value)
397
413
 
398
414
  if self.render_enabled
399
- custom_action_serializer = self.action_to_serializer[params[:action].to_s]
400
415
  if !@value.nil? && RestfulJson.return_resource
401
416
  respond_with(@value) do |format|
402
417
  format.json do
418
+ # define local variables in blocks, not outside of them, to be safe, even though would work in this case
419
+ custom_action_serializer = self.action_to_serializer[params[:action].to_s]
403
420
  if @value.errors.empty?
404
421
  render custom_action_serializer ? {json: @value, status: :ok, serializer: custom_action_serializer} : {json: @value, status: :ok}
405
422
  else
@@ -408,6 +425,7 @@ module RestfulJson
408
425
  end
409
426
  end
410
427
  else
428
+ custom_action_serializer = self.action_to_serializer[params[:action].to_s]
411
429
  respond_with @value, custom_action_serializer ? {serializer: custom_action_serializer} : {}
412
430
  end
413
431
  else
@@ -423,6 +441,7 @@ module RestfulJson
423
441
  instance_variable_set(@model_at_singular_name_sym, @value)
424
442
 
425
443
  if self.render_enabled
444
+ custom_action_serializer = self.action_to_serializer[params[:action].to_s]
426
445
  respond_with @value, custom_action_serializer ? {serializer: custom_action_serializer} : {}
427
446
  else
428
447
  @value
@@ -1,3 +1,3 @@
1
1
  module RestfulJson
2
- VERSION = '3.2.0'
2
+ VERSION = '3.2.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restful_json
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.2.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-03-25 00:00:00.000000000 Z
13
+ date: 2013-03-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: actionpack