rocket_pants 1.5.5 → 1.6.0.rc1

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.
@@ -2,6 +2,19 @@ module RocketPants
2
2
  module Respondable
3
3
  extend ActiveSupport::Concern
4
4
 
5
+ SerializerWrapper = Struct.new(:serializer, :object) do
6
+
7
+ def serializable_hash(options = {})
8
+ instance = serializer.new(object, options)
9
+ if instance.respond_to?(:serializable_hash)
10
+ instance.serializable_hash
11
+ else
12
+ instance.as_json options
13
+ end
14
+ end
15
+
16
+ end
17
+
5
18
  def self.pagination_type(object)
6
19
  if object.respond_to?(:total_entries)
7
20
  :will_paginate
@@ -41,6 +54,8 @@ module RocketPants
41
54
  end
42
55
 
43
56
  def self.normalise_object(object, options = {})
57
+ # First, prepare the object for serialization.
58
+ object = normalise_to_serializer object, options
44
59
  # Convert the object using a standard grape-like lookup chain.
45
60
  if object.is_a?(Array) || object.is_a?(Set)
46
61
  object.map { |o| normalise_object o, options }
@@ -53,12 +68,26 @@ module RocketPants
53
68
  end
54
69
  end
55
70
 
71
+ def self.normalise_to_serializer(object, options)
72
+ serializer = options.delete(:serializer)
73
+ serializer = object.active_model_serializer if object.respond_to?(:active_model_serializer) && serializer.nil?
74
+ return object unless serializer
75
+ SerializerWrapper.new serializer, object
76
+ end
77
+
56
78
  RENDERING_OPTIONS = [:status, :content_type]
57
79
 
58
80
  private
59
81
 
60
82
  def normalise_object(object, options = {})
61
- Respondable.normalise_object object, options.except(*RENDERING_OPTIONS)
83
+ Respondable.normalise_object object, options.except(*RENDERING_OPTIONS).reverse_merge(default_serializer_options)
84
+ end
85
+
86
+ def default_serializer_options
87
+ {
88
+ :url_options => url_options,
89
+ :root => false
90
+ }
62
91
  end
63
92
 
64
93
  # Given a json object or encoded json, will encode it
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rocket_pants
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.5
5
- prerelease:
4
+ version: 1.6.0.rc1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Darcy Laycock
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-31 00:00:00.000000000 Z
12
+ date: 2013-01-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack