active_model_serializers 0.10.6 → 0.10.13

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 (215) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +114 -1
  3. data/README.md +21 -24
  4. data/lib/action_controller/serialization.rb +11 -1
  5. data/lib/active_model/serializable_resource.rb +2 -0
  6. data/lib/active_model/serializer/adapter/attributes.rb +2 -0
  7. data/lib/active_model/serializer/adapter/base.rb +2 -0
  8. data/lib/active_model/serializer/adapter/json.rb +2 -0
  9. data/lib/active_model/serializer/adapter/json_api.rb +2 -0
  10. data/lib/active_model/serializer/adapter/null.rb +2 -0
  11. data/lib/active_model/serializer/adapter.rb +2 -0
  12. data/lib/active_model/serializer/array_serializer.rb +2 -0
  13. data/lib/active_model/serializer/association.rb +2 -0
  14. data/lib/active_model/serializer/attribute.rb +2 -0
  15. data/lib/active_model/serializer/belongs_to_reflection.rb +2 -0
  16. data/lib/active_model/serializer/collection_serializer.rb +17 -5
  17. data/lib/active_model/serializer/concerns/caching.rb +7 -2
  18. data/lib/active_model/serializer/error_serializer.rb +2 -0
  19. data/lib/active_model/serializer/errors_serializer.rb +2 -0
  20. data/lib/active_model/serializer/field.rb +2 -0
  21. data/lib/active_model/serializer/fieldset.rb +3 -1
  22. data/lib/active_model/serializer/has_many_reflection.rb +2 -0
  23. data/lib/active_model/serializer/has_one_reflection.rb +2 -0
  24. data/lib/active_model/serializer/lazy_association.rb +6 -2
  25. data/lib/active_model/serializer/link.rb +23 -0
  26. data/lib/active_model/serializer/lint.rb +2 -0
  27. data/lib/active_model/serializer/null.rb +2 -0
  28. data/lib/active_model/serializer/reflection.rb +10 -5
  29. data/lib/active_model/serializer/version.rb +3 -1
  30. data/lib/active_model/serializer.rb +37 -19
  31. data/lib/active_model_serializers/adapter/attributes.rb +23 -0
  32. data/lib/active_model_serializers/adapter/base.rb +2 -0
  33. data/lib/active_model_serializers/adapter/json.rb +2 -0
  34. data/lib/active_model_serializers/adapter/json_api/deserialization.rb +3 -1
  35. data/lib/active_model_serializers/adapter/json_api/error.rb +2 -0
  36. data/lib/active_model_serializers/adapter/json_api/jsonapi.rb +2 -0
  37. data/lib/active_model_serializers/adapter/json_api/link.rb +2 -0
  38. data/lib/active_model_serializers/adapter/json_api/meta.rb +2 -0
  39. data/lib/active_model_serializers/adapter/json_api/pagination_links.rb +45 -20
  40. data/lib/active_model_serializers/adapter/json_api/relationship.rb +18 -4
  41. data/lib/active_model_serializers/adapter/json_api/resource_identifier.rb +33 -25
  42. data/lib/active_model_serializers/adapter/json_api.rb +14 -9
  43. data/lib/active_model_serializers/adapter/null.rb +2 -0
  44. data/lib/active_model_serializers/adapter.rb +3 -1
  45. data/lib/active_model_serializers/callbacks.rb +2 -0
  46. data/lib/active_model_serializers/deprecate.rb +2 -0
  47. data/lib/active_model_serializers/deserialization.rb +2 -0
  48. data/lib/active_model_serializers/json_pointer.rb +2 -0
  49. data/lib/active_model_serializers/logging.rb +2 -0
  50. data/lib/active_model_serializers/lookup_chain.rb +2 -0
  51. data/lib/active_model_serializers/model/caching.rb +26 -0
  52. data/lib/active_model_serializers/model.rb +2 -0
  53. data/lib/active_model_serializers/railtie.rb +4 -0
  54. data/lib/active_model_serializers/register_jsonapi_renderer.rb +2 -0
  55. data/lib/active_model_serializers/serializable_resource.rb +4 -2
  56. data/lib/active_model_serializers/serialization_context.rb +2 -0
  57. data/lib/active_model_serializers/test/schema.rb +2 -0
  58. data/lib/active_model_serializers/test/serializer.rb +2 -0
  59. data/lib/active_model_serializers/test.rb +2 -0
  60. data/lib/active_model_serializers.rb +21 -11
  61. data/lib/generators/rails/resource_override.rb +2 -0
  62. data/lib/generators/rails/serializer_generator.rb +2 -0
  63. data/lib/grape/active_model_serializers.rb +2 -0
  64. data/lib/grape/formatters/active_model_serializers.rb +2 -0
  65. data/lib/grape/helpers/active_model_serializers.rb +2 -0
  66. data/lib/tasks/rubocop.rake +2 -0
  67. metadata +43 -298
  68. data/.github/ISSUE_TEMPLATE.md +0 -29
  69. data/.github/PULL_REQUEST_TEMPLATE.md +0 -15
  70. data/.gitignore +0 -35
  71. data/.rubocop.yml +0 -105
  72. data/.simplecov +0 -110
  73. data/.travis.yml +0 -55
  74. data/CODE_OF_CONDUCT.md +0 -74
  75. data/CONTRIBUTING.md +0 -105
  76. data/Gemfile +0 -56
  77. data/Rakefile +0 -74
  78. data/active_model_serializers.gemspec +0 -63
  79. data/appveyor.yml +0 -30
  80. data/bin/bench +0 -171
  81. data/bin/bench_regression +0 -316
  82. data/bin/rubocop +0 -38
  83. data/bin/serve_benchmark +0 -39
  84. data/docs/README.md +0 -41
  85. data/docs/STYLE.md +0 -58
  86. data/docs/general/adapters.md +0 -263
  87. data/docs/general/caching.md +0 -58
  88. data/docs/general/configuration_options.md +0 -169
  89. data/docs/general/deserialization.md +0 -100
  90. data/docs/general/fields.md +0 -31
  91. data/docs/general/getting_started.md +0 -133
  92. data/docs/general/instrumentation.md +0 -40
  93. data/docs/general/key_transforms.md +0 -40
  94. data/docs/general/logging.md +0 -21
  95. data/docs/general/rendering.md +0 -293
  96. data/docs/general/serializers.md +0 -480
  97. data/docs/how-open-source-maintained.jpg +0 -0
  98. data/docs/howto/add_pagination_links.md +0 -138
  99. data/docs/howto/add_relationship_links.md +0 -140
  100. data/docs/howto/add_root_key.md +0 -55
  101. data/docs/howto/grape_integration.md +0 -42
  102. data/docs/howto/outside_controller_use.md +0 -66
  103. data/docs/howto/passing_arbitrary_options.md +0 -27
  104. data/docs/howto/serialize_poro.md +0 -73
  105. data/docs/howto/test.md +0 -154
  106. data/docs/howto/upgrade_from_0_8_to_0_10.md +0 -265
  107. data/docs/integrations/ember-and-json-api.md +0 -147
  108. data/docs/integrations/grape.md +0 -19
  109. data/docs/jsonapi/errors.md +0 -56
  110. data/docs/jsonapi/schema/schema.json +0 -366
  111. data/docs/jsonapi/schema.md +0 -151
  112. data/docs/rfcs/0000-namespace.md +0 -106
  113. data/docs/rfcs/template.md +0 -15
  114. data/test/action_controller/adapter_selector_test.rb +0 -62
  115. data/test/action_controller/explicit_serializer_test.rb +0 -135
  116. data/test/action_controller/json/include_test.rb +0 -246
  117. data/test/action_controller/json_api/deserialization_test.rb +0 -112
  118. data/test/action_controller/json_api/errors_test.rb +0 -40
  119. data/test/action_controller/json_api/fields_test.rb +0 -66
  120. data/test/action_controller/json_api/linked_test.rb +0 -202
  121. data/test/action_controller/json_api/pagination_test.rb +0 -116
  122. data/test/action_controller/json_api/transform_test.rb +0 -189
  123. data/test/action_controller/lookup_proc_test.rb +0 -49
  124. data/test/action_controller/namespace_lookup_test.rb +0 -232
  125. data/test/action_controller/serialization_scope_name_test.rb +0 -235
  126. data/test/action_controller/serialization_test.rb +0 -472
  127. data/test/active_model_serializers/adapter_for_test.rb +0 -208
  128. data/test/active_model_serializers/json_pointer_test.rb +0 -22
  129. data/test/active_model_serializers/logging_test.rb +0 -77
  130. data/test/active_model_serializers/model_test.rb +0 -142
  131. data/test/active_model_serializers/railtie_test_isolated.rb +0 -68
  132. data/test/active_model_serializers/register_jsonapi_renderer_test_isolated.rb +0 -161
  133. data/test/active_model_serializers/serialization_context_test_isolated.rb +0 -71
  134. data/test/active_model_serializers/test/schema_test.rb +0 -131
  135. data/test/active_model_serializers/test/serializer_test.rb +0 -62
  136. data/test/active_record_test.rb +0 -9
  137. data/test/adapter/attributes_test.rb +0 -40
  138. data/test/adapter/deprecation_test.rb +0 -100
  139. data/test/adapter/json/belongs_to_test.rb +0 -45
  140. data/test/adapter/json/collection_test.rb +0 -104
  141. data/test/adapter/json/has_many_test.rb +0 -53
  142. data/test/adapter/json/transform_test.rb +0 -93
  143. data/test/adapter/json_api/belongs_to_test.rb +0 -155
  144. data/test/adapter/json_api/collection_test.rb +0 -96
  145. data/test/adapter/json_api/errors_test.rb +0 -76
  146. data/test/adapter/json_api/fields_test.rb +0 -96
  147. data/test/adapter/json_api/has_many_embed_ids_test.rb +0 -43
  148. data/test/adapter/json_api/has_many_explicit_serializer_test.rb +0 -96
  149. data/test/adapter/json_api/has_many_test.rb +0 -173
  150. data/test/adapter/json_api/has_one_test.rb +0 -80
  151. data/test/adapter/json_api/include_data_if_sideloaded_test.rb +0 -183
  152. data/test/adapter/json_api/json_api_test.rb +0 -33
  153. data/test/adapter/json_api/linked_test.rb +0 -413
  154. data/test/adapter/json_api/links_test.rb +0 -95
  155. data/test/adapter/json_api/pagination_links_test.rb +0 -193
  156. data/test/adapter/json_api/parse_test.rb +0 -137
  157. data/test/adapter/json_api/relationship_test.rb +0 -397
  158. data/test/adapter/json_api/resource_identifier_test.rb +0 -110
  159. data/test/adapter/json_api/resource_meta_test.rb +0 -100
  160. data/test/adapter/json_api/toplevel_jsonapi_test.rb +0 -82
  161. data/test/adapter/json_api/transform_test.rb +0 -512
  162. data/test/adapter/json_api/type_test.rb +0 -61
  163. data/test/adapter/json_test.rb +0 -46
  164. data/test/adapter/null_test.rb +0 -22
  165. data/test/adapter/polymorphic_test.rb +0 -171
  166. data/test/adapter_test.rb +0 -67
  167. data/test/array_serializer_test.rb +0 -22
  168. data/test/benchmark/app.rb +0 -65
  169. data/test/benchmark/benchmarking_support.rb +0 -67
  170. data/test/benchmark/bm_active_record.rb +0 -81
  171. data/test/benchmark/bm_adapter.rb +0 -38
  172. data/test/benchmark/bm_caching.rb +0 -119
  173. data/test/benchmark/bm_lookup_chain.rb +0 -83
  174. data/test/benchmark/bm_transform.rb +0 -45
  175. data/test/benchmark/config.ru +0 -3
  176. data/test/benchmark/controllers.rb +0 -83
  177. data/test/benchmark/fixtures.rb +0 -219
  178. data/test/cache_test.rb +0 -651
  179. data/test/collection_serializer_test.rb +0 -123
  180. data/test/fixtures/active_record.rb +0 -113
  181. data/test/fixtures/poro.rb +0 -225
  182. data/test/generators/scaffold_controller_generator_test.rb +0 -24
  183. data/test/generators/serializer_generator_test.rb +0 -75
  184. data/test/grape_test.rb +0 -196
  185. data/test/lint_test.rb +0 -49
  186. data/test/logger_test.rb +0 -20
  187. data/test/poro_test.rb +0 -9
  188. data/test/serializable_resource_test.rb +0 -79
  189. data/test/serializers/association_macros_test.rb +0 -37
  190. data/test/serializers/associations_test.rb +0 -424
  191. data/test/serializers/attribute_test.rb +0 -153
  192. data/test/serializers/attributes_test.rb +0 -52
  193. data/test/serializers/caching_configuration_test_isolated.rb +0 -170
  194. data/test/serializers/configuration_test.rb +0 -32
  195. data/test/serializers/fieldset_test.rb +0 -14
  196. data/test/serializers/meta_test.rb +0 -202
  197. data/test/serializers/options_test.rb +0 -32
  198. data/test/serializers/read_attribute_for_serialization_test.rb +0 -79
  199. data/test/serializers/reflection_test.rb +0 -427
  200. data/test/serializers/root_test.rb +0 -21
  201. data/test/serializers/serialization_test.rb +0 -55
  202. data/test/serializers/serializer_for_test.rb +0 -136
  203. data/test/serializers/serializer_for_with_namespace_test.rb +0 -88
  204. data/test/support/custom_schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  205. data/test/support/isolated_unit.rb +0 -82
  206. data/test/support/rails5_shims.rb +0 -53
  207. data/test/support/rails_app.rb +0 -38
  208. data/test/support/schemas/active_model_serializers/test/schema_test/my/index.json +0 -6
  209. data/test/support/schemas/active_model_serializers/test/schema_test/my/show.json +0 -6
  210. data/test/support/schemas/custom/show.json +0 -7
  211. data/test/support/schemas/hyper_schema.json +0 -93
  212. data/test/support/schemas/render_using_json_api.json +0 -43
  213. data/test/support/schemas/simple_json_pointers.json +0 -10
  214. data/test/support/serialization_testing.rb +0 -71
  215. data/test/test_helper.rb +0 -70
@@ -1,123 +0,0 @@
1
- require 'test_helper'
2
-
3
- module ActiveModel
4
- class Serializer
5
- class CollectionSerializerTest < ActiveSupport::TestCase
6
- class SingularModel < ::Model; end
7
- class SingularModelSerializer < ActiveModel::Serializer
8
- end
9
- class HasManyModel < ::Model
10
- associations :singular_models
11
- end
12
- class HasManyModelSerializer < ActiveModel::Serializer
13
- has_many :singular_models
14
-
15
- def custom_options
16
- instance_options
17
- end
18
- end
19
- class MessagesSerializer < ActiveModel::Serializer
20
- type 'messages'
21
- end
22
-
23
- def setup
24
- @singular_model = SingularModel.new
25
- @has_many_model = HasManyModel.new
26
- @resource = build_named_collection @singular_model, @has_many_model
27
- @serializer = collection_serializer.new(@resource, some: :options)
28
- end
29
-
30
- def collection_serializer
31
- CollectionSerializer
32
- end
33
-
34
- def build_named_collection(*resource)
35
- resource.define_singleton_method(:name) { 'MeResource' }
36
- resource
37
- end
38
-
39
- def test_has_object_reader_serializer_interface
40
- assert_equal @serializer.object, @resource
41
- end
42
-
43
- def test_respond_to_each
44
- assert_respond_to @serializer, :each
45
- end
46
-
47
- def test_each_object_should_be_serialized_with_appropriate_serializer
48
- serializers = @serializer.to_a
49
-
50
- assert_kind_of SingularModelSerializer, serializers.first
51
- assert_kind_of SingularModel, serializers.first.object
52
-
53
- assert_kind_of HasManyModelSerializer, serializers.last
54
- assert_kind_of HasManyModel, serializers.last.object
55
-
56
- assert_equal :options, serializers.last.custom_options[:some]
57
- end
58
-
59
- def test_serializer_option_not_passed_to_each_serializer
60
- serializers = collection_serializer.new([@has_many_model], serializer: HasManyModelSerializer).to_a
61
-
62
- refute serializers.first.custom_options.key?(:serializer)
63
- end
64
-
65
- def test_root_default
66
- @serializer = collection_serializer.new([@singular_model, @has_many_model])
67
- assert_nil @serializer.root
68
- end
69
-
70
- def test_root
71
- expected = 'custom_root'
72
- @serializer = collection_serializer.new([@singular_model, @has_many_model], root: expected)
73
- assert_equal expected, @serializer.root
74
- end
75
-
76
- def test_root_with_no_serializers
77
- expected = 'custom_root'
78
- @serializer = collection_serializer.new([], root: expected)
79
- assert_equal expected, @serializer.root
80
- end
81
-
82
- def test_json_key_with_resource_with_serializer
83
- singular_key = @serializer.send(:serializers).first.json_key
84
- assert_equal singular_key.pluralize, @serializer.json_key
85
- end
86
-
87
- def test_json_key_with_resource_with_name_and_no_serializers
88
- serializer = collection_serializer.new(build_named_collection)
89
- assert_equal 'me_resources', serializer.json_key
90
- end
91
-
92
- def test_json_key_with_resource_with_nil_name_and_no_serializers
93
- resource = []
94
- resource.define_singleton_method(:name) { nil }
95
- serializer = collection_serializer.new(resource)
96
- assert_nil serializer.json_key
97
- end
98
-
99
- def test_json_key_with_resource_without_name_and_no_serializers
100
- serializer = collection_serializer.new([])
101
- assert_nil serializer.json_key
102
- end
103
-
104
- def test_json_key_with_empty_resources_with_serializer
105
- resource = []
106
- serializer = collection_serializer.new(resource, serializer: MessagesSerializer)
107
- assert_equal 'messages', serializer.json_key
108
- end
109
-
110
- def test_json_key_with_root
111
- expected = 'custom_root'
112
- serializer = collection_serializer.new(@resource, root: expected)
113
- assert_equal expected, serializer.json_key
114
- end
115
-
116
- def test_json_key_with_root_and_no_serializers
117
- expected = 'custom_root'
118
- serializer = collection_serializer.new(build_named_collection, root: expected)
119
- assert_equal expected, serializer.json_key
120
- end
121
- end
122
- end
123
- end
@@ -1,113 +0,0 @@
1
- require 'active_record'
2
-
3
- ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
4
- ActiveRecord::Schema.define do
5
- self.verbose = false
6
- create_table :posts, force: true do |t|
7
- t.string :title
8
- t.text :body
9
- t.references :author
10
- t.timestamps null: false
11
- end
12
- create_table :authors, force: true do |t|
13
- t.string :name
14
- t.timestamps null: false
15
- end
16
- create_table :comments, force: true do |t|
17
- t.text :contents
18
- t.references :author
19
- t.references :post
20
- t.timestamp null: false
21
- end
22
- create_table :employees, force: true do |t|
23
- t.string :name
24
- t.string :email
25
- t.timestamp null: false
26
- end
27
- create_table :object_tags, force: true do |t|
28
- t.string :poly_tag_id
29
- t.string :taggable_type
30
- t.string :taggable_id
31
- t.timestamp null: false
32
- end
33
- create_table :poly_tags, force: true do |t|
34
- t.string :phrase
35
- t.timestamp null: false
36
- end
37
- create_table :pictures, force: true do |t|
38
- t.string :title
39
- t.string :imageable_type
40
- t.string :imageable_id
41
- t.timestamp null: false
42
- end
43
- end
44
-
45
- module ARModels
46
- class Post < ActiveRecord::Base
47
- has_many :comments
48
- belongs_to :author
49
- end
50
- class PostSerializer < ActiveModel::Serializer
51
- attributes :id, :title, :body
52
-
53
- has_many :comments
54
- belongs_to :author
55
- end
56
-
57
- class Comment < ActiveRecord::Base
58
- belongs_to :post
59
- belongs_to :author
60
- end
61
- class CommentSerializer < ActiveModel::Serializer
62
- attributes :id, :contents
63
-
64
- belongs_to :author
65
- end
66
-
67
- class Author < ActiveRecord::Base
68
- has_many :posts
69
- end
70
- class AuthorSerializer < ActiveModel::Serializer
71
- attributes :id, :name
72
-
73
- has_many :posts
74
- end
75
- end
76
-
77
- class Employee < ActiveRecord::Base
78
- has_many :pictures, as: :imageable
79
- has_many :object_tags, as: :taggable
80
- end
81
-
82
- class PolymorphicSimpleSerializer < ActiveModel::Serializer
83
- attributes :id
84
- end
85
-
86
- class ObjectTag < ActiveRecord::Base
87
- belongs_to :poly_tag
88
- belongs_to :taggable, polymorphic: true
89
- end
90
- class PolymorphicObjectTagSerializer < ActiveModel::Serializer
91
- attributes :id
92
- has_many :taggable, serializer: PolymorphicSimpleSerializer, polymorphic: true
93
- end
94
-
95
- class PolyTag < ActiveRecord::Base
96
- has_many :object_tags
97
- end
98
- class PolymorphicTagSerializer < ActiveModel::Serializer
99
- attributes :id, :phrase
100
- has_many :object_tags, serializer: PolymorphicObjectTagSerializer
101
- end
102
-
103
- class Picture < ActiveRecord::Base
104
- belongs_to :imageable, polymorphic: true
105
- has_many :object_tags, as: :taggable
106
- end
107
- class PolymorphicHasManySerializer < ActiveModel::Serializer
108
- attributes :id, :name
109
- end
110
- class PolymorphicBelongsToSerializer < ActiveModel::Serializer
111
- attributes :id, :title
112
- has_one :imageable, serializer: PolymorphicHasManySerializer, polymorphic: true
113
- end
@@ -1,225 +0,0 @@
1
- class Model < ActiveModelSerializers::Model
2
- rand(2).zero? && derive_attributes_from_names_and_fix_accessors
3
-
4
- attr_writer :id
5
-
6
- # At this time, just for organization of intent
7
- class_attribute :association_names
8
- self.association_names = []
9
-
10
- def self.associations(*names)
11
- self.association_names |= names.map(&:to_sym)
12
- # Silence redefinition of methods warnings
13
- ActiveModelSerializers.silence_warnings do
14
- attr_accessor(*names)
15
- end
16
- end
17
-
18
- def associations
19
- association_names.each_with_object({}) do |association_name, result|
20
- result[association_name] = public_send(association_name).freeze
21
- end.with_indifferent_access.freeze
22
- end
23
-
24
- def attributes
25
- super.except(*association_names)
26
- end
27
- end
28
-
29
- # see
30
- # https://github.com/rails/rails/blob/4-2-stable/activemodel/lib/active_model/errors.rb
31
- # The below allows you to do:
32
- #
33
- # model = ModelWithErrors.new
34
- # model.validate! # => ["cannot be nil"]
35
- # model.errors.full_messages # => ["name cannot be nil"]
36
- class ModelWithErrors < Model
37
- attributes :name
38
- end
39
-
40
- class Profile < Model
41
- attributes :name, :description
42
- associations :comments
43
- end
44
- class ProfileSerializer < ActiveModel::Serializer
45
- attributes :name, :description
46
- end
47
- class ProfilePreviewSerializer < ActiveModel::Serializer
48
- attributes :name
49
- end
50
-
51
- class Author < Model
52
- attributes :name
53
- associations :posts, :bio, :roles, :comments
54
- end
55
- class AuthorSerializer < ActiveModel::Serializer
56
- cache key: 'writer', skip_digest: true
57
- attribute :id
58
- attribute :name
59
-
60
- has_many :posts
61
- has_many :roles
62
- has_one :bio
63
- end
64
- class AuthorPreviewSerializer < ActiveModel::Serializer
65
- attributes :id
66
- has_many :posts
67
- end
68
-
69
- class Comment < Model
70
- attributes :body, :date
71
- associations :post, :author, :likes
72
- end
73
- class CommentSerializer < ActiveModel::Serializer
74
- cache expires_in: 1.day, skip_digest: true
75
- attributes :id, :body
76
- belongs_to :post
77
- belongs_to :author
78
- end
79
- class CommentPreviewSerializer < ActiveModel::Serializer
80
- attributes :id
81
-
82
- belongs_to :post
83
- end
84
-
85
- class Post < Model
86
- attributes :title, :body
87
- associations :author, :comments, :blog, :tags, :related
88
- end
89
- class PostSerializer < ActiveModel::Serializer
90
- cache key: 'post', expires_in: 0.1, skip_digest: true
91
- attributes :id, :title, :body
92
-
93
- has_many :comments
94
- belongs_to :blog
95
- belongs_to :author
96
-
97
- def blog
98
- Blog.new(id: 999, name: 'Custom blog')
99
- end
100
- end
101
- class SpammyPostSerializer < ActiveModel::Serializer
102
- attributes :id
103
- has_many :related
104
- end
105
- class PostPreviewSerializer < ActiveModel::Serializer
106
- attributes :title, :body, :id
107
-
108
- has_many :comments, serializer: ::CommentPreviewSerializer
109
- belongs_to :author, serializer: ::AuthorPreviewSerializer
110
- end
111
- class PostWithCustomKeysSerializer < ActiveModel::Serializer
112
- attributes :id
113
- has_many :comments, key: :reviews
114
- belongs_to :author, key: :writer
115
- has_one :blog, key: :site
116
- end
117
-
118
- class Bio < Model
119
- attributes :content, :rating
120
- associations :author
121
- end
122
- class BioSerializer < ActiveModel::Serializer
123
- cache except: [:content], skip_digest: true
124
- attributes :id, :content, :rating
125
-
126
- belongs_to :author
127
- end
128
-
129
- class Blog < Model
130
- attributes :name, :type, :special_attribute
131
- associations :writer, :articles
132
- end
133
- class BlogSerializer < ActiveModel::Serializer
134
- cache key: 'blog'
135
- attributes :id, :name
136
-
137
- belongs_to :writer
138
- has_many :articles
139
- end
140
- class AlternateBlogSerializer < ActiveModel::Serializer
141
- attribute :id
142
- attribute :name, key: :title
143
- end
144
- class CustomBlogSerializer < ActiveModel::Serializer
145
- attribute :id
146
- attribute :special_attribute
147
- has_many :articles
148
- end
149
-
150
- class Role < Model
151
- attributes :name, :description, :special_attribute
152
- associations :author
153
- end
154
- class RoleSerializer < ActiveModel::Serializer
155
- cache only: [:name, :slug], skip_digest: true
156
- attributes :id, :name, :description
157
- attribute :friendly_id, key: :slug
158
- belongs_to :author
159
-
160
- def friendly_id
161
- "#{object.name}-#{object.id}"
162
- end
163
- end
164
-
165
- class Location < Model
166
- attributes :lat, :lng
167
- associations :place
168
- end
169
- class LocationSerializer < ActiveModel::Serializer
170
- cache only: [:address], skip_digest: true
171
- attributes :id, :lat, :lng
172
-
173
- belongs_to :place, key: :address
174
-
175
- def place
176
- 'Nowhere'
177
- end
178
- end
179
-
180
- class Place < Model
181
- attributes :name
182
- associations :locations
183
- end
184
- class PlaceSerializer < ActiveModel::Serializer
185
- attributes :id, :name
186
- has_many :locations
187
- end
188
-
189
- class Like < Model
190
- attributes :time
191
- associations :likeable
192
- end
193
- class LikeSerializer < ActiveModel::Serializer
194
- attributes :id, :time
195
- belongs_to :likeable
196
- end
197
-
198
- module Spam
199
- class UnrelatedLink < Model
200
- end
201
- class UnrelatedLinkSerializer < ActiveModel::Serializer
202
- cache only: [:id]
203
- attributes :id
204
- end
205
- end
206
-
207
- class VirtualValue < Model; end
208
- class VirtualValueSerializer < ActiveModel::Serializer
209
- attributes :id
210
- has_many :reviews, virtual_value: [{ type: 'reviews', id: '1' },
211
- { type: 'reviews', id: '2' }]
212
- has_one :maker, virtual_value: { type: 'makers', id: '1' }
213
-
214
- def reviews
215
- end
216
-
217
- def maker
218
- end
219
- end
220
-
221
- class PaginatedSerializer < ActiveModel::Serializer::CollectionSerializer
222
- def json_key
223
- 'paginated'
224
- end
225
- end
@@ -1,24 +0,0 @@
1
- require 'test_helper'
2
- require 'generators/rails/resource_override'
3
-
4
- class ResourceGeneratorTest < Rails::Generators::TestCase
5
- destination File.expand_path('../../../tmp/generators', __FILE__)
6
- setup :prepare_destination, :copy_routes
7
-
8
- tests Rails::Generators::ResourceGenerator
9
- arguments %w(account)
10
-
11
- def test_serializer_file_is_generated
12
- run_generator
13
-
14
- assert_file 'app/serializers/account_serializer.rb', /class AccountSerializer < ActiveModel::Serializer/
15
- end
16
-
17
- private
18
-
19
- def copy_routes
20
- config_dir = File.join(destination_root, 'config')
21
- FileUtils.mkdir_p(config_dir)
22
- File.write(File.join(config_dir, 'routes.rb'), 'Rails.application.routes.draw {}')
23
- end
24
- end
@@ -1,75 +0,0 @@
1
- require 'test_helper'
2
- require 'generators/rails/resource_override'
3
- require 'generators/rails/serializer_generator'
4
-
5
- class SerializerGeneratorTest < Rails::Generators::TestCase
6
- destination File.expand_path('../../../tmp/generators', __FILE__)
7
- setup :prepare_destination
8
-
9
- tests Rails::Generators::SerializerGenerator
10
- arguments %w(account name:string description:text business:references)
11
-
12
- def test_generates_a_serializer
13
- run_generator
14
- assert_file 'app/serializers/account_serializer.rb', /class AccountSerializer < ActiveModel::Serializer/
15
- end
16
-
17
- def test_generates_a_namespaced_serializer
18
- run_generator ['admin/account']
19
- assert_file 'app/serializers/admin/account_serializer.rb', /class Admin::AccountSerializer < ActiveModel::Serializer/
20
- end
21
-
22
- def test_uses_application_serializer_if_one_exists
23
- stub_safe_constantize(expected: 'ApplicationSerializer') do
24
- run_generator
25
- assert_file 'app/serializers/account_serializer.rb', /class AccountSerializer < ApplicationSerializer/
26
- end
27
- end
28
-
29
- def test_uses_given_parent
30
- Object.const_set(:ApplicationSerializer, Class.new)
31
- run_generator ['Account', '--parent=MySerializer']
32
- assert_file 'app/serializers/account_serializer.rb', /class AccountSerializer < MySerializer/
33
- ensure
34
- Object.send :remove_const, :ApplicationSerializer
35
- end
36
-
37
- def test_generates_attributes_and_associations
38
- run_generator
39
- assert_file 'app/serializers/account_serializer.rb' do |serializer|
40
- assert_match(/^ attributes :id, :name, :description$/, serializer)
41
- assert_match(/^ has_one :business$/, serializer)
42
- assert_match(/^end\n*\z/, serializer)
43
- end
44
- end
45
-
46
- def test_with_no_attributes_does_not_add_extra_space
47
- run_generator ['account']
48
- assert_file 'app/serializers/account_serializer.rb' do |content|
49
- if RUBY_PLATFORM =~ /mingw/
50
- assert_no_match(/\r\n\r\nend/, content)
51
- else
52
- assert_no_match(/\n\nend/, content)
53
- end
54
- end
55
- end
56
-
57
- private
58
-
59
- def stub_safe_constantize(expected:)
60
- String.class_eval do
61
- alias_method :old, :safe_constantize
62
- end
63
- String.send(:define_method, :safe_constantize) do
64
- Class if self == expected
65
- end
66
-
67
- yield
68
- ensure
69
- String.class_eval do
70
- undef_method :safe_constantize
71
- alias_method :safe_constantize, :old
72
- undef_method :old
73
- end
74
- end
75
- end