active_model_serializers 0.8.1 → 0.8.2
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/.travis.yml +1 -2
- data/CHANGELOG.md +3 -1
- data/Gemfile +0 -2
- data/README.md +31 -22
- data/active_model_serializers.gemspec +0 -2
- data/lib/active_model/array_serializer.rb +1 -1
- data/lib/active_model/serializer.rb +1 -0
- data/lib/active_model/serializers/version.rb +1 -1
- data/lib/active_model_serializers.rb +1 -3
- data/test/array_serializer_test.rb +21 -0
- data/test/serializer_test.rb +13 -0
- data/test/test_fakes.rb +23 -0
- data/test/test_helper.rb +0 -9
- metadata +14 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee11c77cee4b5f85a7a31b2ae7fded2ae12dcab1
|
4
|
+
data.tar.gz: a8a8c430d80820d373fa123dc22199418e7150ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3b468f9db91455e90e6f61f12c6168224f59c151e58f51ac54a2a09791daa0160119470154325b0983b7c73f2a4e614c6ac5d29a40e9914ddbdbabba35bd3574
|
7
|
+
data.tar.gz: 74dff8c032533a17b4e917ff8eaa57a35e19a789f0081294918b6f87619eab7abdc043ff1be9aec2bdaac8ebd38c92d7dfcef7adbc81da8a5e1518ce8b168c3c
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -22,9 +22,11 @@
|
|
22
22
|
* URL helpers used inside of Engines now work properly.
|
23
23
|
|
24
24
|
* Serializers now can filter attributes with `only` and `except`:
|
25
|
-
|
25
|
+
|
26
|
+
```
|
26
27
|
UserSerializer.new(user, only: [:first_name, :last_name])
|
27
28
|
UserSerializer.new(user, except: :first_name)
|
29
|
+
```
|
28
30
|
|
29
31
|
* Basic Mongoid support. We now include our mixins in the right place.
|
30
32
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
[](https://travis-ci.org/rails-api/active_model_serializers) [](https://codeclimate.com/github/rails-api/active_model_serializers)
|
1
|
+
[](https://travis-ci.org/rails-api/active_model_serializers) [](https://codeclimate.com/github/rails-api/active_model_serializers)
|
2
2
|
|
3
3
|
# Purpose
|
4
4
|
|
@@ -19,7 +19,7 @@ The easiest way to install `ActiveModel::Serializers` is to add it to your
|
|
19
19
|
`Gemfile`:
|
20
20
|
|
21
21
|
```ruby
|
22
|
-
gem "active_model_serializers", "~> 0.
|
22
|
+
gem "active_model_serializers", "~> 0.8.0"
|
23
23
|
```
|
24
24
|
|
25
25
|
Then, install it on the command line:
|
@@ -54,7 +54,7 @@ compliant but do not descend from `ActiveRecord` or include
|
|
54
54
|
`Mongoid::Document`, you must add an include statement for
|
55
55
|
`ActiveModel::SerializerSupport` to make models serializable. If you
|
56
56
|
also want to make collections serializable, you should include
|
57
|
-
`ActiveModel::
|
57
|
+
`ActiveModel::ArraySerializerSupport` into your ORM's
|
58
58
|
relation/criteria class.
|
59
59
|
|
60
60
|
# ActiveModel::Serializer
|
@@ -139,23 +139,47 @@ render :json => @posts, :root => "some_posts"
|
|
139
139
|
```
|
140
140
|
|
141
141
|
You may disable the root element for arrays at the top level, which will result in
|
142
|
-
more concise json.
|
142
|
+
more concise json. See the next section for ways on how to do this. Disabling the
|
143
|
+
root element of the array with any of those methods will produce
|
143
144
|
|
144
|
-
|
145
|
+
```json
|
146
|
+
[
|
147
|
+
{ "title": "Post 1", "body": "Hello!" },
|
148
|
+
{ "title": "Post 2", "body": "Goodbye!" }
|
149
|
+
]
|
150
|
+
```
|
151
|
+
|
152
|
+
To specify a custom serializer for the items within an array:
|
153
|
+
|
154
|
+
```ruby
|
155
|
+
render :json => @posts, :each_serializer => FancyPostSerializer
|
156
|
+
```
|
157
|
+
|
158
|
+
## Disabling the root element
|
159
|
+
|
160
|
+
You have 4 options to disable the root element, each with a slightly different scope:
|
161
|
+
|
162
|
+
#### 1. Disable root globally for all, or per class
|
163
|
+
|
164
|
+
In an initializer:
|
145
165
|
|
146
166
|
```ruby
|
147
167
|
ActiveSupport.on_load(:active_model_serializers) do
|
168
|
+
# Disable for all serializers (except ArraySerializer)
|
169
|
+
ActiveModel::Serializer.root = false
|
170
|
+
|
171
|
+
# Disable for ArraySerializer
|
148
172
|
ActiveModel::ArraySerializer.root = false
|
149
173
|
end
|
150
174
|
```
|
151
175
|
|
152
|
-
#### 2. Disable root per render call in your controller
|
176
|
+
#### 2. Disable root per render call in your controller
|
153
177
|
|
154
178
|
```ruby
|
155
179
|
render :json => @posts, :root => false
|
156
180
|
```
|
157
181
|
|
158
|
-
#### 3.
|
182
|
+
#### 3. Subclass the serializer, and specify using it
|
159
183
|
|
160
184
|
```ruby
|
161
185
|
class CustomArraySerializer < ActiveModel::ArraySerializer
|
@@ -166,21 +190,6 @@ end
|
|
166
190
|
render :json => @posts, :serializer => CustomArraySerializer
|
167
191
|
```
|
168
192
|
|
169
|
-
Disabling the root element of the array with any of the above 3 methods
|
170
|
-
will produce
|
171
|
-
|
172
|
-
```json
|
173
|
-
[
|
174
|
-
{ "title": "Post 1", "body": "Hello!" },
|
175
|
-
{ "title": "Post 2", "body": "Goodbye!" }
|
176
|
-
]
|
177
|
-
```
|
178
|
-
|
179
|
-
To specify a custom serializer for the items within an array:
|
180
|
-
|
181
|
-
```ruby
|
182
|
-
render :json => @posts, :each_serializer => FancyPostSerializer
|
183
|
-
```
|
184
193
|
#### 4. Define default_serializer_options in your controller
|
185
194
|
|
186
195
|
If you define `default_serializer_options` method in your controller,
|
@@ -20,6 +20,4 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.add_dependency 'activemodel', '>= 3.0'
|
21
21
|
gem.add_development_dependency "rails", ">= 3.0"
|
22
22
|
gem.add_development_dependency "pry"
|
23
|
-
gem.add_development_dependency "simplecov"
|
24
|
-
gem.add_development_dependency "coveralls"
|
25
23
|
end
|
@@ -83,7 +83,7 @@ module ActiveModel
|
|
83
83
|
serializer = item.active_model_serializer
|
84
84
|
end
|
85
85
|
|
86
|
-
serializable = serializer ? serializer.new(item, @options) : DefaultSerializer.new(item, @options)
|
86
|
+
serializable = serializer ? serializer.new(item, @options) : DefaultSerializer.new(item, @options.merge(:root => false))
|
87
87
|
|
88
88
|
if serializable.respond_to?(:serializable_hash)
|
89
89
|
serializable.serializable_hash
|
@@ -337,6 +337,7 @@ module ActiveModel
|
|
337
337
|
# Returns a json representation of the serializable
|
338
338
|
# object including the root.
|
339
339
|
def as_json(options={})
|
340
|
+
options ||= {}
|
340
341
|
if root = options.fetch(:root, @options.fetch(:root, root_name))
|
341
342
|
@options[:hash] = hash = {}
|
342
343
|
@options[:unique_values] = {}
|
@@ -20,9 +20,7 @@ if defined?(Rails)
|
|
20
20
|
|
21
21
|
initializer "include_routes.active_model_serializer" do |app|
|
22
22
|
ActiveSupport.on_load(:active_model_serializers) do
|
23
|
-
include
|
24
|
-
extend ::AbstractController::Railties::RoutesHelpers.with(app.routes)
|
25
|
-
include app.routes.mounted_helpers
|
23
|
+
include app.routes.url_helpers
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
@@ -2,6 +2,27 @@ require "test_helper"
|
|
2
2
|
require "test_fakes"
|
3
3
|
|
4
4
|
class ArraySerializerTest < ActiveModel::TestCase
|
5
|
+
|
6
|
+
def test_array_items_do_not_have_root
|
7
|
+
array = [
|
8
|
+
BasicActiveModel.new(:name => "First model"),
|
9
|
+
BasicActiveModel.new(:name => "Second model")
|
10
|
+
]
|
11
|
+
expected = { "root" => [
|
12
|
+
{ :name => "First model" },
|
13
|
+
{ :name => "Second model" }
|
14
|
+
] }
|
15
|
+
|
16
|
+
default_serializer = array.active_model_serializer.new(array, :root => "root")
|
17
|
+
each_serializer = array.active_model_serializer.new(array, :root => "root", :each_serializer => BasicSerializer)
|
18
|
+
|
19
|
+
default_json = default_serializer.as_json
|
20
|
+
each_json = each_serializer.as_json
|
21
|
+
|
22
|
+
assert_equal(expected, default_json)
|
23
|
+
assert_equal(expected, each_json)
|
24
|
+
end
|
25
|
+
|
5
26
|
# serialize different typed objects
|
6
27
|
def test_array_serializer
|
7
28
|
model = Model.new
|
data/test/serializer_test.rb
CHANGED
@@ -1449,4 +1449,17 @@ class SerializerTest < ActiveModel::TestCase
|
|
1449
1449
|
}
|
1450
1450
|
}, post_serializer.as_json)
|
1451
1451
|
end
|
1452
|
+
|
1453
|
+
def test_as_json_with_nil_options
|
1454
|
+
user = User.new
|
1455
|
+
user_serializer = DefaultUserSerializer.new(user, {})
|
1456
|
+
|
1457
|
+
# ActiveSupport 3.1 Object#to_json generates this downstream call
|
1458
|
+
assert_equal({
|
1459
|
+
:default_user => {
|
1460
|
+
:first_name => "Jose",
|
1461
|
+
:last_name => "Valim"
|
1462
|
+
}
|
1463
|
+
}, user_serializer.as_json(nil))
|
1464
|
+
end
|
1452
1465
|
end
|
data/test/test_fakes.rb
CHANGED
@@ -1,3 +1,26 @@
|
|
1
|
+
class BasicActiveModel
|
2
|
+
include ActiveModel::Serializers::JSON
|
3
|
+
def initialize(hash = {})
|
4
|
+
@attributes = hash
|
5
|
+
end
|
6
|
+
|
7
|
+
def serializable_hash(*)
|
8
|
+
@attributes
|
9
|
+
end
|
10
|
+
|
11
|
+
def method_missing(method)
|
12
|
+
if @attributes.key? method
|
13
|
+
@attributes[method]
|
14
|
+
else
|
15
|
+
raise NoMethodError
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class BasicSerializer < ActiveModel::Serializer
|
21
|
+
attributes :name
|
22
|
+
end
|
23
|
+
|
1
24
|
class Model
|
2
25
|
def initialize(hash={})
|
3
26
|
@attributes = hash
|
data/test/test_helper.rb
CHANGED
@@ -1,15 +1,6 @@
|
|
1
1
|
require "rubygems"
|
2
2
|
require "bundler/setup"
|
3
3
|
|
4
|
-
require 'simplecov'
|
5
|
-
SimpleCov.start do
|
6
|
-
add_group "lib", "lib"
|
7
|
-
add_group "spec", "spec"
|
8
|
-
end
|
9
|
-
|
10
|
-
require 'coveralls'
|
11
|
-
Coveralls.wear!
|
12
|
-
|
13
4
|
require "pry"
|
14
5
|
|
15
6
|
require "active_model_serializers"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_model_serializers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- José Valim
|
@@ -9,76 +9,48 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2014-09-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activemodel
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- -
|
18
|
+
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '3.0'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- -
|
25
|
+
- - ">="
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '3.0'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: rails
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '3.0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '3.0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: pry
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- -
|
54
|
-
- !ruby/object:Gem::Version
|
55
|
-
version: '0'
|
56
|
-
- !ruby/object:Gem::Dependency
|
57
|
-
name: simplecov
|
58
|
-
requirement: !ruby/object:Gem::Requirement
|
59
|
-
requirements:
|
60
|
-
- - '>='
|
61
|
-
- !ruby/object:Gem::Version
|
62
|
-
version: '0'
|
63
|
-
type: :development
|
64
|
-
prerelease: false
|
65
|
-
version_requirements: !ruby/object:Gem::Requirement
|
66
|
-
requirements:
|
67
|
-
- - '>='
|
68
|
-
- !ruby/object:Gem::Version
|
69
|
-
version: '0'
|
70
|
-
- !ruby/object:Gem::Dependency
|
71
|
-
name: coveralls
|
72
|
-
requirement: !ruby/object:Gem::Requirement
|
73
|
-
requirements:
|
74
|
-
- - '>='
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '0'
|
77
|
-
type: :development
|
78
|
-
prerelease: false
|
79
|
-
version_requirements: !ruby/object:Gem::Requirement
|
80
|
-
requirements:
|
81
|
-
- - '>='
|
53
|
+
- - ">="
|
82
54
|
- !ruby/object:Gem::Version
|
83
55
|
version: '0'
|
84
56
|
description: Making it easy to serialize models for client-side use
|
@@ -89,8 +61,8 @@ executables: []
|
|
89
61
|
extensions: []
|
90
62
|
extra_rdoc_files: []
|
91
63
|
files:
|
92
|
-
- .gitignore
|
93
|
-
- .travis.yml
|
64
|
+
- ".gitignore"
|
65
|
+
- ".travis.yml"
|
94
66
|
- CHANGELOG.md
|
95
67
|
- DESIGN.textile
|
96
68
|
- Gemfile
|
@@ -132,31 +104,19 @@ require_paths:
|
|
132
104
|
- lib
|
133
105
|
required_ruby_version: !ruby/object:Gem::Requirement
|
134
106
|
requirements:
|
135
|
-
- -
|
107
|
+
- - ">="
|
136
108
|
- !ruby/object:Gem::Version
|
137
109
|
version: '0'
|
138
110
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
111
|
requirements:
|
140
|
-
- -
|
112
|
+
- - ">="
|
141
113
|
- !ruby/object:Gem::Version
|
142
114
|
version: '0'
|
143
115
|
requirements: []
|
144
116
|
rubyforge_project:
|
145
|
-
rubygems_version: 2.
|
117
|
+
rubygems_version: 2.2.2
|
146
118
|
signing_key:
|
147
119
|
specification_version: 4
|
148
120
|
summary: Bringing consistency and object orientation to model serialization. Works
|
149
121
|
great for client-side MVC frameworks!
|
150
|
-
test_files:
|
151
|
-
- test/array_serializer_test.rb
|
152
|
-
- test/association_test.rb
|
153
|
-
- test/caching_test.rb
|
154
|
-
- test/generators_test.rb
|
155
|
-
- test/no_serialization_scope_test.rb
|
156
|
-
- test/serialization_scope_name_test.rb
|
157
|
-
- test/serialization_test.rb
|
158
|
-
- test/serializer_support_test.rb
|
159
|
-
- test/serializer_test.rb
|
160
|
-
- test/test_fakes.rb
|
161
|
-
- test/test_helper.rb
|
162
|
-
has_rdoc:
|
122
|
+
test_files: []
|