active_model_serializers 0.10.6 → 0.10.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.travis.yml +28 -31
- data/CHANGELOG.md +47 -1
- data/Gemfile +20 -4
- data/README.md +1 -3
- data/active_model_serializers.gemspec +1 -1
- data/appveyor.yml +4 -6
- data/docs/general/adapters.md +6 -0
- data/docs/general/configuration_options.md +16 -0
- data/docs/general/rendering.md +1 -1
- data/docs/general/serializers.md +4 -1
- data/docs/howto/add_root_key.md +7 -0
- data/lib/active_model/serializer.rb +2 -1
- data/lib/active_model/serializer/collection_serializer.rb +4 -1
- data/lib/active_model/serializer/reflection.rb +1 -1
- data/lib/active_model/serializer/version.rb +1 -1
- data/lib/active_model_serializers.rb +1 -1
- data/lib/active_model_serializers/adapter/json_api/deserialization.rb +1 -1
- data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +40 -21
- data/lib/active_model_serializers/adapter/json_api/relationship.rb +16 -4
- data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +31 -25
- data/test/action_controller/json_api/deserialization_test.rb +1 -1
- data/test/action_controller/json_api/pagination_test.rb +14 -6
- data/test/adapter/json_api/include_data_if_sideloaded_test.rb +32 -2
- data/test/adapter/json_api/pagination_links_test.rb +20 -7
- data/test/adapter/json_api/parse_test.rb +1 -1
- data/test/adapter/json_api/type_test.rb +168 -36
- data/test/adapter/polymorphic_test.rb +47 -0
- data/test/collection_serializer_test.rb +6 -2
- data/test/fixtures/active_record.rb +2 -2
- data/test/serializers/associations_test.rb +45 -1
- data/test/support/isolated_unit.rb +4 -2
- data/test/support/serialization_testing.rb +8 -0
- metadata +37 -41
- data/test/adapter/json_api/has_many_embed_ids_test.rb +0 -43
- data/test/adapter/json_api/resource_identifier_test.rb +0 -110
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 0c3a5900ed1c671e57b90ea00e3130ad3a5fe4939a6a1c36e1481dbdeeef3199
|
4
|
+
data.tar.gz: 59ed63aa89861c650f87ba5bfeb5dfc90c997cd8fe4542129f28d1194d3c24ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ee2569a69953e286d63861bb01a37836ee9b25463980da1dc561815e0d7e7902aa1b1d344b265bb50f3c41b1e93ea6cfec2ba241c5314511d4a55a5082f5ce0
|
7
|
+
data.tar.gz: d011e2d950d8b7869d4f49139d23cf994f2b1f6e8319aa2a3ff018d4f1c578d24bb64cfe632c912e91edd92e0f5945fa58a1a7742b611ef33c5a4d0a14dfbc70
|
data/.travis.yml
CHANGED
@@ -1,55 +1,52 @@
|
|
1
1
|
language: ruby
|
2
|
-
|
3
2
|
sudo: false
|
4
3
|
|
5
|
-
rvm:
|
6
|
-
- 2.1
|
7
|
-
- 2.2.6
|
8
|
-
- 2.3.3
|
9
|
-
- ruby-head
|
10
|
-
- jruby-9.1.5.0 # is precompiled per http://rubies.travis-ci.org/
|
11
|
-
- jruby-head
|
12
|
-
|
13
|
-
jdk:
|
14
|
-
- oraclejdk8
|
15
|
-
|
16
|
-
before_install:
|
17
|
-
- gem update --system
|
18
|
-
- rvm @global do gem uninstall bundler -a -x
|
19
|
-
- rvm @global do gem install bundler -v 1.13.7
|
20
|
-
install: bundle install --path=vendor/bundle --retry=3 --jobs=3
|
21
4
|
cache:
|
22
5
|
directories:
|
23
6
|
- vendor/bundle
|
24
7
|
|
8
|
+
before_install:
|
9
|
+
- "travis_retry gem update --system"
|
10
|
+
- "travis_retry gem update bundler"
|
11
|
+
install: bundle install --path=vendor/bundle --retry=3 --jobs=3
|
12
|
+
|
25
13
|
script:
|
26
14
|
- bundle exec rake ci
|
27
15
|
after_success:
|
28
16
|
- codeclimate-test-reporter
|
17
|
+
|
29
18
|
env:
|
30
|
-
global:
|
31
|
-
- "JRUBY_OPTS='--dev -J-Xmx1024M --debug'"
|
32
19
|
matrix:
|
33
20
|
- "RAILS_VERSION=4.1"
|
34
21
|
- "RAILS_VERSION=4.2"
|
35
22
|
- "RAILS_VERSION=5.0"
|
23
|
+
- "RAILS_VERSION=5.1"
|
36
24
|
- "RAILS_VERSION=master"
|
37
25
|
|
26
|
+
rvm:
|
27
|
+
- 2.1.10
|
28
|
+
- 2.2.8
|
29
|
+
- 2.3.5
|
30
|
+
- 2.4.2
|
31
|
+
- ruby-head
|
32
|
+
|
38
33
|
matrix:
|
34
|
+
include:
|
35
|
+
- { rvm: jruby-9.1.13.0, jdk: oraclejdk8, env: "RAILS_VERSION=4.1 JRUBY_OPTS='--dev -J-Xmx1024M --debug'" }
|
36
|
+
- { rvm: jruby-9.1.13.0, jdk: oraclejdk8, env: "RAILS_VERSION=4.2 JRUBY_OPTS='--dev -J-Xmx1024M --debug'" }
|
37
|
+
- { rvm: jruby-9.1.13.0, jdk: oraclejdk8, env: "RAILS_VERSION=5.1 JRUBY_OPTS='--dev -J-Xmx1024M --debug'" }
|
38
|
+
# See JRuby currently failing on Rails 5+ https://github.com/jruby/activerecord-jdbc-adapter/issues/708
|
39
|
+
# - { rvm: jruby-9.1.13.0, jdk: oraclejdk8, env: "RAILS_VERSION=5.0 JRUBY_OPTS='--dev -J-Xmx1024M --debug'" }
|
40
|
+
# - { rvm: jruby-head, jdk: oraclejdk8, env: "RAILS_VERSION=5.1 JRUBY_OPTS='--dev -J-Xmx1024M --debug'" }
|
39
41
|
exclude:
|
40
|
-
- rvm: 2.1
|
41
|
-
|
42
|
-
- rvm:
|
43
|
-
|
44
|
-
- rvm:
|
45
|
-
env: RAILS_VERSION=master
|
46
|
-
- rvm: 2.1
|
47
|
-
env: RAILS_VERSION=5.0
|
48
|
-
- rvm: jruby-9.1.5.0
|
49
|
-
env: RAILS_VERSION=5.0
|
50
|
-
- rvm: jruby-head
|
51
|
-
env: RAILS_VERSION=5.0
|
42
|
+
- { rvm: 2.1.10, env: RAILS_VERSION=master }
|
43
|
+
- { rvm: 2.1.10, env: RAILS_VERSION=5.0 }
|
44
|
+
- { rvm: 2.1.10, env: RAILS_VERSION=5.1 }
|
45
|
+
- { rvm: 2.4.2, env: RAILS_VERSION=4.1 }
|
46
|
+
- { rvm: ruby-head, env: RAILS_VERSION=4.1 }
|
52
47
|
allow_failures:
|
53
48
|
- rvm: ruby-head
|
54
49
|
- rvm: jruby-head
|
50
|
+
# See JRuby currently failing on Rails 5+ https://github.com/jruby/activerecord-jdbc-adapter/issues/708
|
51
|
+
- { rvm: jruby-9.1.13.0, jdk: oraclejdk8, env: "RAILS_VERSION=5.1 JRUBY_OPTS='--dev -J-Xmx1024M --debug'" }
|
55
52
|
fast_finish: true
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
## 0.10.x
|
2
2
|
|
3
|
-
### [master (unreleased)](https://github.com/rails-api/active_model_serializers/compare/v0.10.
|
3
|
+
### [master (unreleased)](https://github.com/rails-api/active_model_serializers/compare/v0.10.7...0-10-stable)
|
4
4
|
|
5
5
|
Breaking changes:
|
6
6
|
|
@@ -10,6 +10,52 @@ Fixes:
|
|
10
10
|
|
11
11
|
Misc:
|
12
12
|
|
13
|
+
### [v0.10.7 (2017-11-14)](https://github.com/rails-api/active_model_serializers/compare/v0.10.6...v0.10.7)
|
14
|
+
|
15
|
+
Regressions Fixed From v0.10.6:
|
16
|
+
|
17
|
+
- [#2211](https://github.com/rails-api/active_model_serializers/pull/2211). Fixes #2125, #2160. (@bf4)
|
18
|
+
- Fix polymorphic belongs_to tests; passes on v0.10.5, fails on v0.10.6
|
19
|
+
- Fix JSON:API polymorphic type regression from v0.10.5
|
20
|
+
- Fix JSON:API: for_type_and_id should always inflect_type
|
21
|
+
```
|
22
|
+
Should Serializer._type ever be inflected?
|
23
|
+
Right now, it won't be, but association.serializer._type will be inflected.
|
24
|
+
|
25
|
+
That's the current behavior.
|
26
|
+
```
|
27
|
+
- [#2216](https://github.com/rails-api/active_model_serializers/pull/2216). Fixes #2132, #2180. (@bf4)
|
28
|
+
- Fix JSON:API: Serialize resource type for unpersisted records (blank id)
|
29
|
+
- [#2218](https://github.com/rails-api/active_model_serializers/pull/2218). Fixes #2178. (@bf4)
|
30
|
+
- Fix JSON:API: Make using foreign key on belongs_to opt-in. No effect on polymorphic relationships.
|
31
|
+
```
|
32
|
+
# set to true to opt-in
|
33
|
+
ActiveModelSerializer.config.jsonapi_use_foreign_key_on_belongs_to_relationship = true
|
34
|
+
```
|
35
|
+
|
36
|
+
Features:
|
37
|
+
|
38
|
+
- [#2136](https://github.com/rails-api/active_model_serializers/pull/2136) Enable inclusion of sideloaded relationship objects by `key`. (@caomania)
|
39
|
+
- [#2021](https://github.com/rails-api/active_model_serializers/pull/2021) ActiveModelSerializers::Model#attributes. Originally in [#1982](https://github.com/rails-api/active_model_serializers/pull/1982). (@bf4)
|
40
|
+
- [#2130](https://github.com/rails-api/active_model_serializers/pull/2130) Allow serialized ID to be overwritten for belongs-to relationships. (@greysteil)
|
41
|
+
- [#2189](https://github.com/rails-api/active_model_serializers/pull/2189)
|
42
|
+
Update version constraint for jsonapi-renderer to `['>= 0.1.1.beta1', '< 0.3']`
|
43
|
+
(@tagliala)
|
44
|
+
|
45
|
+
Fixes:
|
46
|
+
|
47
|
+
- [#2022](https://github.com/rails-api/active_model_serializers/pull/2022) Mutation of ActiveModelSerializers::Model now changes the attributes. Originally in [#1984](https://github.com/rails-api/active_model_serializers/pull/1984). (@bf4)
|
48
|
+
- [#2200](https://github.com/rails-api/active_model_serializers/pull/2200) Fix deserialization of polymorphic relationships. (@dennis95stumm)
|
49
|
+
- [#2214](https://github.com/rails-api/active_model_serializers/pull/2214) Fail if unable to infer collection type with json adapter. (@jmeredith16)
|
50
|
+
- [#2149](https://github.com/rails-api/active_model_serializers/pull/2149) Always include self, first, last pagination link. (@mecampbellsoup)
|
51
|
+
- [#2179](https://github.com/rails-api/active_model_serializers/pull/2179) Fixes #2173, Pass block to Enumerator.new. (@drn)
|
52
|
+
|
53
|
+
Misc:
|
54
|
+
|
55
|
+
- [#2176](https://github.com/rails-api/active_model_serializers/pull/2176) Documentation for global adapter config. (@mrpinsky)
|
56
|
+
- [#2215](https://github.com/rails-api/active_model_serializers/pull/2215) Update `serializers.md` documentation to denote alternate use cases for `scope`. (@stratigos)
|
57
|
+
- [#2212](https://github.com/rails-api/active_model_serializers/pull/2212) Remove legacy has_many_embed_ids test. (@bf4)
|
58
|
+
|
13
59
|
### [v0.10.6 (2017-05-01)](https://github.com/rails-api/active_model_serializers/compare/v0.10.5...v0.10.6)
|
14
60
|
|
15
61
|
Fixes:
|
data/Gemfile
CHANGED
@@ -12,6 +12,7 @@ version = ENV['RAILS_VERSION'] || '4.2'
|
|
12
12
|
if version == 'master'
|
13
13
|
gem 'rack', github: 'rack/rack'
|
14
14
|
gem 'arel', github: 'rails/arel'
|
15
|
+
gem 'rails', github: 'rails/rails'
|
15
16
|
git 'https://github.com/rails/rails.git' do
|
16
17
|
gem 'railties'
|
17
18
|
gem 'activesupport'
|
@@ -23,6 +24,7 @@ if version == 'master'
|
|
23
24
|
end
|
24
25
|
else
|
25
26
|
gem_version = "~> #{version}.0"
|
27
|
+
gem 'rails', gem_version
|
26
28
|
gem 'railties', gem_version
|
27
29
|
gem 'activesupport', gem_version
|
28
30
|
gem 'activemodel', gem_version
|
@@ -36,18 +38,32 @@ end
|
|
36
38
|
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
37
39
|
gem 'tzinfo-data', platforms: (@windows_platforms + [:jruby])
|
38
40
|
|
41
|
+
if ENV['CI']
|
42
|
+
if RUBY_VERSION < '2.4'
|
43
|
+
# Windows: An error occurred while installing nokogiri (1.8.0)
|
44
|
+
gem 'nokogiri', '< 1.7', platforms: @windows_platforms
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
39
48
|
group :bench do
|
40
49
|
# https://github.com/rails-api/active_model_serializers/commit/cb4459580a6f4f37f629bf3185a5224c8624ca76
|
41
50
|
gem 'benchmark-ips', '>= 2.7.2', require: false, group: :development
|
42
51
|
end
|
43
52
|
|
44
53
|
group :test do
|
45
|
-
gem 'sqlite3',
|
46
|
-
|
54
|
+
gem 'sqlite3', platform: (@windows_platforms + [:ruby])
|
55
|
+
platforms :jruby do
|
56
|
+
if version == 'master' || version >= '5'
|
57
|
+
gem 'activerecord-jdbcsqlite3-adapter', '>= 1.3.0' # github: 'jruby/activerecord-jdbc-adapter', branch: 'master'
|
58
|
+
else
|
59
|
+
gem 'activerecord-jdbcsqlite3-adapter'
|
60
|
+
end
|
61
|
+
end
|
47
62
|
gem 'codeclimate-test-reporter', require: false
|
48
63
|
gem 'm', '~> 1.5'
|
49
|
-
gem 'pry', '
|
50
|
-
gem '
|
64
|
+
gem 'pry', '>= 0.10'
|
65
|
+
gem 'byebug', '~> 8.2' if RUBY_VERSION < '2.2'
|
66
|
+
gem 'pry-byebug', platform: :ruby
|
51
67
|
end
|
52
68
|
|
53
69
|
group :development, :test do
|
data/README.md
CHANGED
@@ -49,8 +49,6 @@ Check how to change the adapter in the sections below.
|
|
49
49
|
`0.10.x` is based on the `0.8.0` code, but with a more flexible
|
50
50
|
architecture. We'd love your help. [Learn how you can help here.](CONTRIBUTING.md)
|
51
51
|
|
52
|
-
It is generally safe and recommended to use the master branch.
|
53
|
-
|
54
52
|
## Installation
|
55
53
|
|
56
54
|
Add this line to your application's Gemfile:
|
@@ -187,7 +185,7 @@ and, if there is no serializer, primitives.
|
|
187
185
|
|
188
186
|
### ActiveModelSerializers::Adapter::Base
|
189
187
|
|
190
|
-
The **`
|
188
|
+
The **`ActiveModelSerializers::Adapter::Base`** describes the structure of the JSON document generated from a
|
191
189
|
serializer. For example, the `Attributes` example represents each serializer as its
|
192
190
|
unmodified attributes. The `JsonApi` adapter represents the serializer as a [JSON
|
193
191
|
API](http://jsonapi.org/) document.
|
@@ -42,7 +42,7 @@ Gem::Specification.new do |spec|
|
|
42
42
|
# 'minitest'
|
43
43
|
# 'thread_safe'
|
44
44
|
|
45
|
-
spec.add_runtime_dependency 'jsonapi-renderer', ['>= 0.1.1.beta1', '< 0.
|
45
|
+
spec.add_runtime_dependency 'jsonapi-renderer', ['>= 0.1.1.beta1', '< 0.3']
|
46
46
|
spec.add_runtime_dependency 'case_transform', '>= 0.2'
|
47
47
|
|
48
48
|
spec.add_development_dependency 'activerecord', rails_versions
|
data/appveyor.yml
CHANGED
@@ -5,19 +5,17 @@ skip_tags: true
|
|
5
5
|
environment:
|
6
6
|
JRUBY_OPTS: "--dev -J-Xmx1024M --debug"
|
7
7
|
matrix:
|
8
|
-
- ruby_version: "
|
9
|
-
- ruby_version: "
|
8
|
+
- ruby_version: "Ruby23"
|
9
|
+
- ruby_version: "Ruby23-x64"
|
10
10
|
|
11
11
|
cache:
|
12
12
|
- vendor/bundle
|
13
13
|
|
14
14
|
install:
|
15
15
|
- SET PATH=C:\%ruby_version%\bin;%PATH%
|
16
|
-
- gem update --system
|
17
|
-
- gem uninstall bundler -a -x
|
18
|
-
- gem install bundler -v 1.13.7
|
19
16
|
- bundle env
|
20
|
-
- bundle install --path=vendor/bundle --retry=3 --jobs=3
|
17
|
+
- bundle check || bundle install --path=vendor/bundle --retry=3 --jobs=3
|
18
|
+
- bundle clean --force
|
21
19
|
|
22
20
|
before_test:
|
23
21
|
- ruby -v
|
data/docs/general/adapters.md
CHANGED
@@ -36,6 +36,12 @@ The `Attributes` adapter does not include a root key. It is just the serialized
|
|
36
36
|
|
37
37
|
Use either the `JSON` or `JSON API` adapters if you want the response document to have a root key.
|
38
38
|
|
39
|
+
***IMPORTANT***: Adapter configuration has *no effect* on a serializer instance
|
40
|
+
being used directly. That is, `UserSerializer.new(user).as_json` will *always*
|
41
|
+
behave as if the adapter were the 'Attributes' adapter. See [Outside Controller
|
42
|
+
Usage](../howto/outside_controller_use.md) for more details on recommended
|
43
|
+
usage.
|
44
|
+
|
39
45
|
## Built in Adapters
|
40
46
|
|
41
47
|
### Attributes - Default
|
@@ -57,6 +57,7 @@ still prefer the render option `:key_transform` over this setting.
|
|
57
57
|
application, setting `config.key_transform` to `:unaltered` will provide a performance boost.*
|
58
58
|
|
59
59
|
##### default_includes
|
60
|
+
|
60
61
|
What relationships to serialize by default. Default: `'*'`, which includes one level of related
|
61
62
|
objects. See [includes](adapters.md#included) for more info.
|
62
63
|
|
@@ -162,6 +163,21 @@ Default: `{}`.
|
|
162
163
|
|
163
164
|
*Used when `jsonapi_include_toplevel_object` is `true`*
|
164
165
|
|
166
|
+
##### jsonapi_use_foreign_key_on_belongs_to_relationship
|
167
|
+
|
168
|
+
When true, the relationship will determine its resource object identifier
|
169
|
+
without calling the association or its serializer. This can be useful when calling
|
170
|
+
the association object is triggering unnecessary queries.
|
171
|
+
|
172
|
+
For example, if a `comment` belongs to a `post`, and the comment
|
173
|
+
uses the foreign key `post_id`, we can determine the resource object
|
174
|
+
identifier `id` as `comment.post_id` and the `type` from the association options.
|
175
|
+
Or quite simply, it behaves as `belongs_to :post, type: :posts, foreign_key: :post_id`.
|
176
|
+
|
177
|
+
Note: This option has *no effect* on polymorphic associations as we cannot reliably
|
178
|
+
determine the associated object's type without instantiating it.
|
179
|
+
|
180
|
+
Default: `false`.
|
165
181
|
|
166
182
|
## Hooks
|
167
183
|
|
data/docs/general/rendering.md
CHANGED
@@ -290,4 +290,4 @@ See [Usage outside of a controller](../howto/outside_controller_use.md#serializi
|
|
290
290
|
|
291
291
|
## Pagination
|
292
292
|
|
293
|
-
See [How to add pagination links](
|
293
|
+
See [How to add pagination links](../howto/add_pagination_links.md).
|
data/docs/general/serializers.md
CHANGED
@@ -294,6 +294,8 @@ end
|
|
294
294
|
Whether you write the method as above or as `object.comments.where(created_by: scope)`
|
295
295
|
is a matter of preference (assuming `scope_name` has been set).
|
296
296
|
|
297
|
+
Keep in mind that the scope can be set to any available controller reference. This can be utilized to provide access to any other data scopes or presentation helpers.
|
298
|
+
|
297
299
|
##### Controller Authorization Context
|
298
300
|
|
299
301
|
In the controller, the scope/scope_name options are equal to
|
@@ -311,7 +313,7 @@ current authorization scope when you call `render :json`.
|
|
311
313
|
called on every request. This was [also a problem](https://github.com/rails-api/active_model_serializers/pull/1252#issuecomment-159810477)
|
312
314
|
in [`0.9`](https://github.com/rails-api/active_model_serializers/tree/0-9-stable#customizing-scope).
|
313
315
|
|
314
|
-
We can change the scope from `current_user` to `view_context`.
|
316
|
+
We can change the scope from `current_user` to `view_context`, which is included in subclasses of `ActionController::Base`.
|
315
317
|
|
316
318
|
```diff
|
317
319
|
class SomeController < ActionController::Base
|
@@ -379,6 +381,7 @@ class PostsController < ActionController::Base
|
|
379
381
|
end
|
380
382
|
end
|
381
383
|
```
|
384
|
+
Note that any controller reference which provides the desired scope is acceptable, such as another controller method for loading a different resource or reference to helpers. For example, `ActionController::API` does not include `ActionView::ViewContext`, and would need a different reference for passing any helpers into a serializer via `serialization_scope`.
|
382
385
|
|
383
386
|
#### #read_attribute_for_serialization(key)
|
384
387
|
|
data/docs/howto/add_root_key.md
CHANGED
@@ -18,6 +18,13 @@ In order to add the root key you need to use the ```JSON``` Adapter, you can cha
|
|
18
18
|
ActiveModelSerializers.config.adapter = :json
|
19
19
|
```
|
20
20
|
|
21
|
+
Note that adapter configuration has no effect on a serializer that is called
|
22
|
+
directly, e.g. in a serializer unit test. Instead, something like
|
23
|
+
`UserSerializer.new(user).as_json` will *always* behave as if the adapter were
|
24
|
+
the 'Attributes' adapter. See [Outside Controller
|
25
|
+
Usage](../howto/outside_controller_use.md) for more details on recommended
|
26
|
+
usage.
|
27
|
+
|
21
28
|
You can also specify a class as adapter, as long as it complies with the ActiveModelSerializers adapters interface.
|
22
29
|
It will add the root key to all your serialized endpoints.
|
23
30
|
|
@@ -142,6 +142,7 @@ module ActiveModel
|
|
142
142
|
# Make JSON API top-level jsonapi member opt-in
|
143
143
|
# ref: http://jsonapi.org/format/#document-top-level
|
144
144
|
config.jsonapi_include_toplevel_object = false
|
145
|
+
config.jsonapi_use_foreign_key_on_belongs_to_relationship = false
|
145
146
|
config.include_data_default = true
|
146
147
|
|
147
148
|
# For configuring how serializers are found.
|
@@ -337,7 +338,7 @@ module ActiveModel
|
|
337
338
|
# @return [Enumerator<Association>]
|
338
339
|
def associations(include_directive = ActiveModelSerializers.default_include_directive, include_slice = nil)
|
339
340
|
include_slice ||= include_directive
|
340
|
-
return Enumerator.new unless object
|
341
|
+
return Enumerator.new {} unless object
|
341
342
|
|
342
343
|
Enumerator.new do |y|
|
343
344
|
self.class._reflections.each do |key, reflection|
|
@@ -46,7 +46,10 @@ module ActiveModel
|
|
46
46
|
# 3. get from collection name, if a named collection
|
47
47
|
key ||= object.respond_to?(:name) ? object.name && object.name.underscore : nil
|
48
48
|
# 4. key may be nil for empty collection and no serializer option
|
49
|
-
key
|
49
|
+
key &&= key.pluralize
|
50
|
+
# 5. fail if the key cannot be determined
|
51
|
+
key || fail(ArgumentError, 'Cannot infer root key from collection type. Please
|
52
|
+
specify the root or each_serializer option, or render a JSON String')
|
50
53
|
end
|
51
54
|
# rubocop:enable Metrics/CyclomaticComplexity
|
52
55
|
|
@@ -140,7 +140,7 @@ module ActiveModel
|
|
140
140
|
def include_data?(include_slice)
|
141
141
|
include_data_setting = options[:include_data_setting]
|
142
142
|
case include_data_setting
|
143
|
-
when :if_sideloaded then include_slice.key?(name)
|
143
|
+
when :if_sideloaded then include_slice.key?(options.fetch(:key, name))
|
144
144
|
when true then true
|
145
145
|
when false then false
|
146
146
|
else fail ArgumentError, "Unknown include_data_setting '#{include_data_setting.inspect}'"
|
@@ -49,5 +49,5 @@ module ActiveModelSerializers
|
|
49
49
|
require 'active_model/serializer/version'
|
50
50
|
require 'active_model/serializer'
|
51
51
|
require 'active_model/serializable_resource'
|
52
|
-
require 'active_model_serializers/railtie' if defined?(::Rails)
|
52
|
+
require 'active_model_serializers/railtie' if defined?(::Rails::Railtie)
|
53
53
|
end
|
@@ -189,7 +189,7 @@ module ActiveModelSerializers
|
|
189
189
|
|
190
190
|
polymorphic = (options[:polymorphic] || []).include?(assoc_name.to_sym)
|
191
191
|
if polymorphic
|
192
|
-
hash["#{prefix_key}_type".to_sym] = assoc_data.present? ? assoc_data['type'] : nil
|
192
|
+
hash["#{prefix_key}_type".to_sym] = assoc_data.present? ? assoc_data['type'].classify : nil
|
193
193
|
end
|
194
194
|
|
195
195
|
hash
|
@@ -15,17 +15,18 @@ module ActiveModelSerializers
|
|
15
15
|
JsonApi::PaginationLinks requires a ActiveModelSerializers::SerializationContext.
|
16
16
|
Please pass a ':serialization_context' option or
|
17
17
|
override CollectionSerializer#paginated? to return 'false'.
|
18
|
-
|
18
|
+
EOF
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
22
|
def as_json
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
{
|
24
|
+
self: location_url,
|
25
|
+
first: first_page_url,
|
26
|
+
prev: prev_page_url,
|
27
|
+
next: next_page_url,
|
28
|
+
last: last_page_url
|
29
|
+
}
|
29
30
|
end
|
30
31
|
|
31
32
|
protected
|
@@ -34,25 +35,39 @@ module ActiveModelSerializers
|
|
34
35
|
|
35
36
|
private
|
36
37
|
|
37
|
-
def
|
38
|
-
|
39
|
-
|
40
|
-
{}.tap do |pages|
|
41
|
-
pages[:self] = collection.current_page
|
38
|
+
def location_url
|
39
|
+
url_for_page(collection.current_page)
|
40
|
+
end
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
end
|
42
|
+
def first_page_url
|
43
|
+
url_for_page(1)
|
44
|
+
end
|
47
45
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
46
|
+
def last_page_url
|
47
|
+
if collection.total_pages == 0
|
48
|
+
url_for_page(FIRST_PAGE)
|
49
|
+
else
|
50
|
+
url_for_page(collection.total_pages)
|
52
51
|
end
|
53
52
|
end
|
54
53
|
|
55
|
-
def
|
54
|
+
def prev_page_url
|
55
|
+
return nil if collection.current_page == FIRST_PAGE
|
56
|
+
url_for_page(collection.current_page - FIRST_PAGE)
|
57
|
+
end
|
58
|
+
|
59
|
+
def next_page_url
|
60
|
+
return nil if collection.total_pages == 0 || collection.current_page == collection.total_pages
|
61
|
+
url_for_page(collection.next_page)
|
62
|
+
end
|
63
|
+
|
64
|
+
def url_for_page(number)
|
65
|
+
params = query_parameters.dup
|
66
|
+
params[:page] = { size: per_page, number: number }
|
67
|
+
"#{url(adapter_options)}?#{params.to_query}"
|
68
|
+
end
|
69
|
+
|
70
|
+
def url(options = {})
|
56
71
|
@url ||= options.fetch(:links, {}).fetch(:self, nil) || request_url
|
57
72
|
end
|
58
73
|
|
@@ -63,6 +78,10 @@ module ActiveModelSerializers
|
|
63
78
|
def query_parameters
|
64
79
|
@query_parameters ||= context.query_parameters
|
65
80
|
end
|
81
|
+
|
82
|
+
def per_page
|
83
|
+
@per_page ||= collection.try(:per_page) || collection.try(:limit_value) || collection.size
|
84
|
+
end
|
66
85
|
end
|
67
86
|
end
|
68
87
|
end
|