active_model_serializers 0.10.0 → 0.10.3

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.
Files changed (146) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +2 -4
  3. data/.travis.yml +9 -1
  4. data/CHANGELOG.md +81 -2
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +5 -2
  7. data/README.md +24 -24
  8. data/Rakefile +3 -3
  9. data/active_model_serializers.gemspec +20 -24
  10. data/docs/ARCHITECTURE.md +6 -7
  11. data/docs/README.md +2 -0
  12. data/docs/general/adapters.md +4 -2
  13. data/docs/general/caching.md +7 -1
  14. data/docs/general/configuration_options.md +70 -1
  15. data/docs/general/deserialization.md +1 -1
  16. data/docs/general/fields.md +31 -0
  17. data/docs/general/rendering.md +42 -3
  18. data/docs/general/serializers.md +97 -8
  19. data/docs/howto/add_pagination_links.md +4 -5
  20. data/docs/howto/add_relationship_links.md +137 -0
  21. data/docs/howto/add_root_key.md +4 -0
  22. data/docs/howto/grape_integration.md +42 -0
  23. data/docs/howto/outside_controller_use.md +9 -2
  24. data/docs/howto/passing_arbitrary_options.md +2 -2
  25. data/docs/howto/test.md +2 -0
  26. data/docs/howto/upgrade_from_0_8_to_0_10.md +265 -0
  27. data/docs/integrations/ember-and-json-api.md +64 -32
  28. data/docs/jsonapi/schema.md +1 -1
  29. data/lib/action_controller/serialization.rb +13 -3
  30. data/lib/active_model/serializer/adapter/base.rb +2 -0
  31. data/lib/active_model/serializer/array_serializer.rb +8 -5
  32. data/lib/active_model/serializer/association.rb +19 -4
  33. data/lib/active_model/serializer/belongs_to_reflection.rb +0 -3
  34. data/lib/active_model/serializer/collection_serializer.rb +35 -12
  35. data/lib/active_model/serializer/{associations.rb → concerns/associations.rb} +13 -11
  36. data/lib/active_model/serializer/{attributes.rb → concerns/attributes.rb} +0 -0
  37. data/lib/active_model/serializer/{caching.rb → concerns/caching.rb} +72 -113
  38. data/lib/active_model/serializer/{configuration.rb → concerns/configuration.rb} +25 -1
  39. data/lib/active_model/serializer/{links.rb → concerns/links.rb} +0 -0
  40. data/lib/active_model/serializer/{meta.rb → concerns/meta.rb} +0 -0
  41. data/lib/active_model/serializer/{type.rb → concerns/type.rb} +0 -0
  42. data/lib/active_model/serializer/error_serializer.rb +11 -7
  43. data/lib/active_model/serializer/errors_serializer.rb +25 -20
  44. data/lib/active_model/serializer/has_many_reflection.rb +0 -3
  45. data/lib/active_model/serializer/has_one_reflection.rb +0 -3
  46. data/lib/active_model/serializer/lint.rb +134 -130
  47. data/lib/active_model/serializer/reflection.rb +37 -21
  48. data/lib/active_model/serializer/version.rb +1 -1
  49. data/lib/active_model/serializer.rb +76 -37
  50. data/lib/active_model_serializers/adapter/attributes.rb +3 -66
  51. data/lib/active_model_serializers/adapter/base.rb +38 -38
  52. data/lib/active_model_serializers/adapter/json_api/link.rb +1 -1
  53. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +8 -1
  54. data/lib/active_model_serializers/adapter/json_api/relationship.rb +30 -19
  55. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +23 -9
  56. data/lib/active_model_serializers/adapter/json_api.rb +44 -43
  57. data/lib/active_model_serializers/adapter.rb +6 -0
  58. data/lib/active_model_serializers/deprecate.rb +1 -2
  59. data/lib/active_model_serializers/deserialization.rb +2 -0
  60. data/lib/active_model_serializers/key_transform.rb +4 -0
  61. data/lib/active_model_serializers/lookup_chain.rb +80 -0
  62. data/lib/active_model_serializers/model.rb +4 -2
  63. data/lib/active_model_serializers/railtie.rb +3 -1
  64. data/lib/active_model_serializers/register_jsonapi_renderer.rb +44 -31
  65. data/lib/active_model_serializers/serializable_resource.rb +6 -5
  66. data/lib/active_model_serializers/serialization_context.rb +10 -3
  67. data/lib/active_model_serializers.rb +7 -0
  68. data/lib/generators/rails/serializer_generator.rb +4 -4
  69. data/lib/grape/active_model_serializers.rb +7 -5
  70. data/lib/grape/formatters/active_model_serializers.rb +19 -2
  71. data/lib/grape/helpers/active_model_serializers.rb +1 -0
  72. data/test/action_controller/adapter_selector_test.rb +4 -4
  73. data/test/action_controller/explicit_serializer_test.rb +5 -4
  74. data/test/action_controller/json/include_test.rb +106 -27
  75. data/test/action_controller/json_api/errors_test.rb +6 -7
  76. data/test/action_controller/json_api/fields_test.rb +57 -0
  77. data/test/action_controller/json_api/linked_test.rb +29 -24
  78. data/test/action_controller/json_api/pagination_test.rb +19 -19
  79. data/test/action_controller/json_api/transform_test.rb +3 -3
  80. data/test/action_controller/lookup_proc_test.rb +49 -0
  81. data/test/action_controller/namespace_lookup_test.rb +226 -0
  82. data/test/action_controller/serialization_test.rb +10 -7
  83. data/test/active_model_serializers/json_pointer_test.rb +15 -13
  84. data/test/active_model_serializers/key_transform_test.rb +286 -252
  85. data/test/active_model_serializers/model_test.rb +17 -4
  86. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +143 -0
  87. data/test/active_model_serializers/serialization_context_test_isolated.rb +23 -10
  88. data/test/adapter/attributes_test.rb +43 -0
  89. data/test/adapter/json/collection_test.rb +14 -0
  90. data/test/adapter/json/transform_test.rb +15 -15
  91. data/test/adapter/json_api/collection_test.rb +4 -3
  92. data/test/adapter/json_api/errors_test.rb +17 -19
  93. data/test/adapter/json_api/fields_test.rb +4 -3
  94. data/test/adapter/json_api/has_many_test.rb +39 -18
  95. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +166 -0
  96. data/test/adapter/json_api/json_api_test.rb +5 -7
  97. data/test/adapter/json_api/linked_test.rb +33 -12
  98. data/test/adapter/json_api/links_test.rb +4 -2
  99. data/test/adapter/json_api/pagination_links_test.rb +35 -8
  100. data/test/adapter/json_api/relationship_test.rb +309 -73
  101. data/test/adapter/json_api/resource_identifier_test.rb +27 -2
  102. data/test/adapter/json_api/resource_meta_test.rb +3 -3
  103. data/test/adapter/json_api/transform_test.rb +255 -253
  104. data/test/adapter/json_api/type_test.rb +1 -1
  105. data/test/adapter/json_test.rb +8 -7
  106. data/test/adapter/null_test.rb +1 -2
  107. data/test/adapter/polymorphic_test.rb +5 -5
  108. data/test/adapter_test.rb +1 -1
  109. data/test/benchmark/app.rb +1 -1
  110. data/test/benchmark/benchmarking_support.rb +1 -1
  111. data/test/benchmark/bm_active_record.rb +81 -0
  112. data/test/benchmark/bm_adapter.rb +38 -0
  113. data/test/benchmark/bm_caching.rb +16 -16
  114. data/test/benchmark/bm_lookup_chain.rb +83 -0
  115. data/test/benchmark/bm_transform.rb +16 -5
  116. data/test/benchmark/controllers.rb +16 -17
  117. data/test/benchmark/fixtures.rb +72 -72
  118. data/test/cache_test.rb +143 -49
  119. data/test/collection_serializer_test.rb +3 -3
  120. data/test/fixtures/poro.rb +52 -48
  121. data/test/generators/serializer_generator_test.rb +22 -5
  122. data/test/grape_test.rb +152 -56
  123. data/test/lint_test.rb +1 -1
  124. data/test/logger_test.rb +13 -11
  125. data/test/serializable_resource_test.rb +18 -22
  126. data/test/serializers/association_macros_test.rb +3 -2
  127. data/test/serializers/associations_test.rb +107 -32
  128. data/test/serializers/attribute_test.rb +2 -2
  129. data/test/serializers/attributes_test.rb +1 -1
  130. data/test/serializers/fieldset_test.rb +1 -1
  131. data/test/serializers/meta_test.rb +12 -6
  132. data/test/serializers/root_test.rb +1 -1
  133. data/test/serializers/serializer_for_test.rb +6 -4
  134. data/test/serializers/serializer_for_with_namespace_test.rb +87 -0
  135. data/test/support/isolated_unit.rb +5 -2
  136. data/test/support/rails5_shims.rb +8 -2
  137. data/test/support/rails_app.rb +0 -9
  138. data/test/support/serialization_testing.rb +23 -5
  139. data/test/test_helper.rb +1 -0
  140. metadata +85 -34
  141. data/.rubocop_todo.yml +0 -167
  142. data/lib/active_model/serializer/include_tree.rb +0 -111
  143. data/test/adapter/json_api/relationships_test.rb +0 -199
  144. data/test/include_tree/from_include_args_test.rb +0 -26
  145. data/test/include_tree/from_string_test.rb +0 -94
  146. data/test/include_tree/include_args_to_hash_test.rb +0 -64
@@ -32,13 +32,14 @@ module ActiveModelSerializers
32
32
  adapter = ActiveModelSerializers::Adapter::Json.new(serializer)
33
33
 
34
34
  assert_equal({
35
- id: 1,
36
- reviews: [{ id: 1, body: 'ZOMG A COMMENT' },
37
- { id: 2, body: 'ZOMG ANOTHER COMMENT' }
38
- ],
39
- writer: { id: 1, name: 'Steve K.' },
40
- site: { id: 1, name: 'My Blog!!' }
41
- }, adapter.serializable_hash[:post])
35
+ id: 1,
36
+ reviews: [
37
+ { id: 1, body: 'ZOMG A COMMENT' },
38
+ { id: 2, body: 'ZOMG ANOTHER COMMENT' }
39
+ ],
40
+ writer: { id: 1, name: 'Steve K.' },
41
+ site: { id: 1, name: 'My Blog!!' }
42
+ }, adapter.serializable_hash[:post])
42
43
  end
43
44
  end
44
45
  end
@@ -4,7 +4,7 @@ module ActiveModelSerializers
4
4
  module Adapter
5
5
  class NullTest < ActiveSupport::TestCase
6
6
  def setup
7
- profile = Profile.new({ name: 'Name 1', description: 'Description 1', comments: 'Comments 1' })
7
+ profile = Profile.new(name: 'Name 1', description: 'Description 1', comments: 'Comments 1')
8
8
  serializer = ProfileSerializer.new(profile)
9
9
 
10
10
  @adapter = Null.new(serializer)
@@ -20,4 +20,3 @@ module ActiveModelSerializers
20
20
  end
21
21
  end
22
22
  end
23
-
@@ -27,11 +27,11 @@ module ActiveModel
27
27
  id: 1,
28
28
  title: 'headshot-1.jpg',
29
29
  imageable: {
30
- type: 'employee',
31
- employee: {
32
- id: 42,
33
- name: 'Zoop Zoopler'
34
- }
30
+ type: 'employee',
31
+ employee: {
32
+ id: 42,
33
+ name: 'Zoop Zoopler'
34
+ }
35
35
  }
36
36
  }
37
37
 
data/test/adapter_test.rb CHANGED
@@ -51,7 +51,7 @@ module ActiveModelSerializers
51
51
  end
52
52
 
53
53
  def test_create_adapter_with_override
54
- adapter = ActiveModelSerializers::Adapter.create(@serializer, { adapter: :json_api })
54
+ adapter = ActiveModelSerializers::Adapter.create(@serializer, adapter: :json_api)
55
55
  assert_equal ActiveModelSerializers::Adapter::JsonApi, adapter.class
56
56
  end
57
57
 
@@ -43,7 +43,7 @@ class BenchmarkApp < Rails::Application
43
43
  config.secret_key_base = 'abc123'
44
44
  config.consider_all_requests_local = false
45
45
 
46
- # otherwise deadlock occured
46
+ # otherwise deadlock occurred
47
47
  config.middleware.delete 'Rack::Lock'
48
48
 
49
49
  # to disable log files
@@ -36,7 +36,7 @@ module Benchmark
36
36
  version: ::ActiveModel::Serializer::VERSION.to_s,
37
37
  rails_version: ::Rails.version.to_s,
38
38
  iterations_per_second: entry.ips,
39
- iterations_per_second_standard_deviation: entry.stddev_percentage,
39
+ iterations_per_second_standard_deviation: entry.error_percentage,
40
40
  total_allocated_objects_per_iteration: count_total_allocated_objects(&block)
41
41
  }.to_json
42
42
 
@@ -0,0 +1,81 @@
1
+ require_relative './benchmarking_support'
2
+ require_relative './app'
3
+
4
+ time = 10
5
+ disable_gc = true
6
+
7
+ # This is to disable any key transform effects that may impact performance
8
+ ActiveModelSerializers.config.key_transform = :unaltered
9
+
10
+ ###########################################
11
+ # Setup active record models
12
+ ##########################################
13
+ require 'active_record'
14
+ require 'sqlite3'
15
+
16
+ # For debugging SQL output
17
+ # ActiveRecord::Base.logger = Logger.new(STDERR)
18
+
19
+ # Change the following to reflect your database settings
20
+ ActiveRecord::Base.establish_connection(
21
+ adapter: 'sqlite3',
22
+ database: ':memory:'
23
+ )
24
+
25
+ # Don't show migration output when constructing fake db
26
+ ActiveRecord::Migration.verbose = false
27
+
28
+ ActiveRecord::Schema.define do
29
+ create_table :authors, force: true do |t|
30
+ t.string :name
31
+ end
32
+
33
+ create_table :posts, force: true do |t|
34
+ t.text :body
35
+ t.string :title
36
+ t.references :author
37
+ end
38
+
39
+ create_table :profiles, force: true do |t|
40
+ t.text :project_url
41
+ t.text :bio
42
+ t.date :birthday
43
+ t.references :author
44
+ end
45
+ end
46
+
47
+ class Author < ActiveRecord::Base
48
+ has_one :profile
49
+ has_many :posts
50
+ end
51
+
52
+ class Post < ActiveRecord::Base
53
+ belongs_to :author
54
+ end
55
+
56
+ class Profile < ActiveRecord::Base
57
+ belongs_to :author
58
+ end
59
+
60
+ # Build out the data to serialize
61
+ author = Author.create(name: 'Preston Sego')
62
+ Profile.create(project_url: 'https://github.com/NullVoxPopuli', author: author)
63
+ 50.times do
64
+ Post.create(
65
+ body: 'something about how password restrictions are evil, and less secure, and with the math to prove it.',
66
+ title: 'Your bank is does not know how to do security',
67
+ author: author
68
+ )
69
+ end
70
+
71
+ Benchmark.ams('AR: attributes', time: time, disable_gc: disable_gc) do
72
+ ActiveModelSerializers::SerializableResource.new(author, adapter: :attributes, include: 'profile,posts').serializable_hash
73
+ end
74
+
75
+ Benchmark.ams('AR: json', time: time, disable_gc: disable_gc) do
76
+ ActiveModelSerializers::SerializableResource.new(author, adapter: :json, include: 'profile,posts').serializable_hash
77
+ end
78
+
79
+ Benchmark.ams('AR: JSON API', time: time, disable_gc: disable_gc) do
80
+ ActiveModelSerializers::SerializableResource.new(author, adapter: :json_api, include: 'profile,posts').serializable_hash
81
+ end
@@ -0,0 +1,38 @@
1
+ require_relative './benchmarking_support'
2
+ require_relative './app'
3
+
4
+ time = 10
5
+ disable_gc = true
6
+ ActiveModelSerializers.config.key_transform = :unaltered
7
+ has_many_relationships = (0..60).map do |i|
8
+ HasManyRelationship.new(id: i, body: 'ZOMG A HAS MANY RELATIONSHIP')
9
+ end
10
+ has_one_relationship = HasOneRelationship.new(
11
+ id: 42,
12
+ first_name: 'Joao',
13
+ last_name: 'Moura'
14
+ )
15
+ primary_resource = PrimaryResource.new(
16
+ id: 1337,
17
+ title: 'New PrimaryResource',
18
+ virtual_attribute: nil,
19
+ body: 'Body',
20
+ has_many_relationships: has_many_relationships,
21
+ has_one_relationship: has_one_relationship
22
+ )
23
+ serializer = PrimaryResourceSerializer.new(primary_resource)
24
+
25
+ Benchmark.ams('attributes', time: time, disable_gc: disable_gc) do
26
+ attributes = ActiveModelSerializers::Adapter::Attributes.new(serializer)
27
+ attributes.as_json
28
+ end
29
+
30
+ Benchmark.ams('json_api', time: time, disable_gc: disable_gc) do
31
+ json_api = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
32
+ json_api.as_json
33
+ end
34
+
35
+ Benchmark.ams('json', time: time, disable_gc: disable_gc) do
36
+ json = ActiveModelSerializers::Adapter::Json.new(serializer)
37
+ json.as_json
38
+ end
@@ -4,7 +4,7 @@ require_relative './app'
4
4
  # https://github.com/ruby-bench/ruby-bench-suite/blob/8ad567f7e43a044ae48c36833218423bb1e2bd9d/rails/benchmarks/actionpack_router.rb
5
5
  class ApiAssertion
6
6
  include Benchmark::ActiveModelSerializers::TestMethods
7
- BadRevisionError = Class.new(StandardError)
7
+ class BadRevisionError < StandardError; end
8
8
 
9
9
  def valid?
10
10
  caching = get_caching
@@ -66,27 +66,27 @@ class ApiAssertion
66
66
  def expected
67
67
  @expected ||=
68
68
  {
69
- 'post' => {
70
- 'id' => 1337,
71
- 'title' => 'New Post',
69
+ 'primary_resource' => {
70
+ 'id' => 1337,
71
+ 'title' => 'New PrimaryResource',
72
72
  'body' => 'Body',
73
- 'comments' => [
74
- {
75
- 'id' => 1,
76
- 'body' => 'ZOMG A COMMENT'
77
- }
78
- ],
79
- 'blog' => {
80
- 'id' => 999,
81
- 'name' => 'Custom blog'
73
+ 'virtual_attribute' => {
74
+ 'id' => 999,
75
+ 'name' => 'Free-Range Virtual Attribute'
82
76
  },
83
- 'author' => {
77
+ 'has_one_relationship' => {
84
78
  'id' => 42,
85
79
  'first_name' => 'Joao',
86
80
  'last_name' => 'Moura'
87
- }
81
+ },
82
+ 'has_many_relationships' => [
83
+ {
84
+ 'id' => 1,
85
+ 'body' => 'ZOMG A HAS MANY RELATIONSHIP'
86
+ }
87
+ ]
88
88
  }
89
- }
89
+ }
90
90
  end
91
91
 
92
92
  def assert_equal(expected, actual, message)
@@ -0,0 +1,83 @@
1
+ require_relative './benchmarking_support'
2
+ require_relative './app'
3
+
4
+ time = 10
5
+ disable_gc = true
6
+ ActiveModelSerializers.config.key_transform = :unaltered
7
+
8
+ module AmsBench
9
+ module Api
10
+ module V1
11
+ class PrimaryResourceSerializer < ActiveModel::Serializer
12
+ attributes :title, :body
13
+
14
+ has_many :has_many_relationships
15
+ end
16
+
17
+ class HasManyRelationshipSerializer < ActiveModel::Serializer
18
+ attribute :body
19
+ end
20
+ end
21
+ end
22
+ class PrimaryResourceSerializer < ActiveModel::Serializer
23
+ attributes :title, :body
24
+
25
+ has_many :has_many_relationships
26
+
27
+ class HasManyRelationshipSerializer < ActiveModel::Serializer
28
+ attribute :body
29
+ end
30
+ end
31
+ end
32
+
33
+ resource = PrimaryResource.new(
34
+ id: 1,
35
+ title: 'title',
36
+ body: 'body',
37
+ has_many_relationships: [
38
+ HasManyRelationship.new(id: 1, body: 'body1'),
39
+ HasManyRelationship.new(id: 2, body: 'body1')
40
+ ]
41
+ )
42
+
43
+ serialization = lambda do
44
+ ActiveModelSerializers::SerializableResource.new(resource, serializer: AmsBench::PrimaryResourceSerializer).as_json
45
+ ActiveModelSerializers::SerializableResource.new(resource, namespace: AmsBench::Api::V1).as_json
46
+ ActiveModelSerializers::SerializableResource.new(resource).as_json
47
+ end
48
+
49
+ def clear_cache
50
+ AmsBench::PrimaryResourceSerializer.serializers_cache.clear
51
+ AmsBench::Api::V1::PrimaryResourceSerializer.serializers_cache.clear
52
+ ActiveModel::Serializer.serializers_cache.clear
53
+ end
54
+
55
+ configurable = lambda do
56
+ clear_cache
57
+ Benchmark.ams('Configurable Lookup Chain', time: time, disable_gc: disable_gc, &serialization)
58
+ end
59
+
60
+ old = lambda do
61
+ clear_cache
62
+ module ActiveModel
63
+ class Serializer
64
+ def self.serializer_lookup_chain_for(klass, namespace = nil)
65
+ chain = []
66
+
67
+ resource_class_name = klass.name.demodulize
68
+ resource_namespace = klass.name.deconstantize
69
+ serializer_class_name = "#{resource_class_name}Serializer"
70
+
71
+ chain.push("#{namespace}::#{serializer_class_name}") if namespace
72
+ chain.push("#{name}::#{serializer_class_name}") if self != ActiveModel::Serializer
73
+ chain.push("#{resource_namespace}::#{serializer_class_name}")
74
+ chain
75
+ end
76
+ end
77
+ end
78
+
79
+ Benchmark.ams('Old Lookup Chain (v0.10)', time: time, disable_gc: disable_gc, &serialization)
80
+ end
81
+
82
+ configurable.call
83
+ old.call
@@ -4,12 +4,23 @@ require_relative './app'
4
4
  time = 10
5
5
  disable_gc = true
6
6
  ActiveModelSerializers.config.key_transform = :unaltered
7
- comments = (0..50).map do |i|
8
- Comment.new(id: i, body: 'ZOMG A COMMENT')
7
+ has_many_relationships = (0..50).map do |i|
8
+ HasManyRelationship.new(id: i, body: 'ZOMG A HAS MANY RELATIONSHIP')
9
9
  end
10
- author = Author.new(id: 42, first_name: 'Joao', last_name: 'Moura')
11
- post = Post.new(id: 1337, title: 'New Post', blog: nil, body: 'Body', comments: comments, author: author)
12
- serializer = PostSerializer.new(post)
10
+ has_one_relationship = HasOneRelationship.new(
11
+ id: 42,
12
+ first_name: 'Joao',
13
+ last_name: 'Moura'
14
+ )
15
+ primary_resource = PrimaryResource.new(
16
+ id: 1337,
17
+ title: 'New PrimaryResource',
18
+ virtual_attribute: nil,
19
+ body: 'Body',
20
+ has_many_relationships: has_many_relationships,
21
+ has_one_relationship: has_one_relationship
22
+ )
23
+ serializer = PrimaryResourceSerializer.new(primary_resource)
13
24
  adapter = ActiveModelSerializers::Adapter::JsonApi.new(serializer)
14
25
  serialization = adapter.as_json
15
26
 
@@ -1,31 +1,30 @@
1
- class PostController < ActionController::Base
2
- POST =
1
+ class PrimaryResourceController < ActionController::Base
2
+ PRIMARY_RESOURCE =
3
3
  begin
4
- updated_at = Time.current
5
4
  if ENV['BENCH_STRESS']
6
- comments = (0..50).map do |i|
7
- Comment.new(id: i, body: 'ZOMG A COMMENT', updated_at: updated_at + i)
5
+ has_many_relationships = (0..50).map do |i|
6
+ HasManyRelationship.new(id: i, body: 'ZOMG A HAS MANY RELATIONSHIP')
8
7
  end
9
8
  else
10
- comments = [Comment.new(id: 1, body: 'ZOMG A COMMENT', updated_at: updated_at)]
9
+ has_many_relationships = [HasManyRelationship.new(id: 1, body: 'ZOMG A HAS MANY RELATIONSHIP')]
11
10
  end
12
- author = Author.new(id: 42, first_name: 'Joao', last_name: 'Moura')
13
- Post.new(id: 1337, title: 'New Post', blog: nil, body: 'Body', comments: comments, author: author)
11
+ has_one_relationship = HasOneRelationship.new(id: 42, first_name: 'Joao', last_name: 'Moura')
12
+ PrimaryResource.new(id: 1337, title: 'New PrimaryResource', virtual_attribute: nil, body: 'Body', has_many_relationships: has_many_relationships, has_one_relationship: has_one_relationship)
14
13
  end
15
14
 
16
15
  def render_with_caching_serializer
17
16
  toggle_cache_status
18
- render json: POST, serializer: CachingPostSerializer, adapter: :json, meta: { caching: perform_caching }
17
+ render json: PRIMARY_RESOURCE, serializer: CachingPrimaryResourceSerializer, adapter: :json, meta: { caching: perform_caching }
19
18
  end
20
19
 
21
20
  def render_with_fragment_caching_serializer
22
21
  toggle_cache_status
23
- render json: POST, serializer: FragmentCachingPostSerializer, adapter: :json, meta: { caching: perform_caching }
22
+ render json: PRIMARY_RESOURCE, serializer: FragmentCachingPrimaryResourceSerializer, adapter: :json, meta: { caching: perform_caching }
24
23
  end
25
24
 
26
25
  def render_with_non_caching_serializer
27
26
  toggle_cache_status
28
- render json: POST, adapter: :json, meta: { caching: perform_caching }
27
+ render json: PRIMARY_RESOURCE, adapter: :json, meta: { caching: perform_caching }
29
28
  end
30
29
 
31
30
  def render_cache_status
@@ -33,7 +32,7 @@ class PostController < ActionController::Base
33
32
  # Uncomment to debug
34
33
  # STDERR.puts cache_store.class
35
34
  # STDERR.puts cache_dependencies
36
- # ActiveSupport::Cache::Store.logger.debug [ActiveModelSerializers.config.cache_store, ActiveModelSerializers.config.perform_caching, CachingPostSerializer._cache, perform_caching, params].inspect
35
+ # ActiveSupport::Cache::Store.logger.debug [ActiveModelSerializers.config.cache_store, ActiveModelSerializers.config.perform_caching, CachingPrimaryResourceSerializer._cache, perform_caching, params].inspect
37
36
  render json: { caching: perform_caching, meta: { cache_log: cache_messages, cache_status: cache_status } }.to_json
38
37
  end
39
38
 
@@ -76,9 +75,9 @@ class PostController < ActionController::Base
76
75
  end
77
76
 
78
77
  Rails.application.routes.draw do
79
- get '/status(/:on)' => 'post#render_cache_status'
80
- get '/clear' => 'post#clear'
81
- get '/caching(/:on)' => 'post#render_with_caching_serializer'
82
- get '/fragment_caching(/:on)' => 'post#render_with_fragment_caching_serializer'
83
- get '/non_caching(/:on)' => 'post#render_with_non_caching_serializer'
78
+ get '/status(/:on)' => 'primary_resource#render_cache_status'
79
+ get '/clear' => 'primary_resource#clear'
80
+ get '/caching(/:on)' => 'primary_resource#render_with_caching_serializer'
81
+ get '/fragment_caching(/:on)' => 'primary_resource#render_with_fragment_caching_serializer'
82
+ get '/non_caching(/:on)' => 'primary_resource#render_with_non_caching_serializer'
84
83
  end