json-serializer 0.0.9 → 1.0.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 76888e2b15ca5525cbdd7f61258c324970c927f8
4
- data.tar.gz: 5efc3b4502238c316a99aa9dc8ec879b3298017f
3
+ metadata.gz: ab535952b239a5ac4719d466197e12030773fddf
4
+ data.tar.gz: 4ecfc2356129405540b9f22ac43e4da2f8de6358
5
5
  SHA512:
6
- metadata.gz: 3cd2636c9670d3a11dbad89dfa7aacb7d236dca3967794457048cec2d56e2ce3e89e63c10ea243ba853e5f19bf8c6a21141ae812e284632f4ec3b4225724f7c9
7
- data.tar.gz: cb7d1fd32e48bdadd5cc628d21aeb89f17fe2c50e4bfdfa305f444c0fba20132cf8ac9943e5e0d76f529e04201d18442bab50bf5ce8a0f33f73bc72ba1ee1c65
6
+ metadata.gz: fede701fc5c873531b15c0b2501983843032082f9eb3629644612124b8a98937707bea26d38fcaa57def76a7318666aa9ad724e4f134a0e46bbb169b53e3cbcd
7
+ data.tar.gz: 644198f622a0b6b90353c568ec7436fc5610a52c1ab20b819a6fb23cb38d7fca50a93f2a788f0d90e896f4ac93d48499f053bf4894f9f4947cc37b0e33ef8fdc
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2014-Present Harmoni LLC
1
+ Copyright (c) 2014-2016 Francesco Rodríguez
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy
4
4
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,22 +1,32 @@
1
- json-serializer
1
+ json-serializer [![Build Status](https://travis-ci.org/frodsan/json-serializer.svg)](https://travis-ci.org/frodsan/json-serializer)
2
2
  ===============
3
3
 
4
4
  Customizes JSON output through serializer objects.
5
5
 
6
- A minimal implementation of [active_model_serializers][active_model_serializers] gem.
7
-
8
6
  Installation
9
7
  ------------
10
8
 
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem "json-serializer"
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ ```
18
+ $ bundle
19
+ ```
20
+
21
+ Or install it yourself as:
22
+
11
23
  ```
12
- gem install json-serializer
24
+ $ gem install json-serializer
13
25
  ```
14
26
 
15
27
  Usage
16
28
  -----
17
29
 
18
- ### Basics
19
-
20
30
  Here's a simple example:
21
31
 
22
32
  ```ruby
@@ -48,7 +58,8 @@ UserSerializer.new(user).to_json(root: :user)
48
58
  # => "{\"user\":{\"id\":1,\"first_name\":\"Sonny\",\"last_name\":\"Moore\"}}"
49
59
  ```
50
60
 
51
- ### Arrays
61
+ Arrays
62
+ ------
52
63
 
53
64
  A serializer can be used for objects contained in an array:
54
65
 
@@ -77,7 +88,8 @@ Given the example above, it will return a json output like:
77
88
  ]
78
89
  ```
79
90
 
80
- ### Attributes
91
+ Attributes
92
+ ----------
81
93
 
82
94
  By default, before looking up the attribute on the object, it checks the presence
83
95
  of a method with the name of the attribute. This allow serializes to include
@@ -116,7 +128,7 @@ class UserSerializer < JsonSerializer
116
128
  attribute :first_name
117
129
  attribute :last_name
118
130
 
119
- attr :current_user
131
+ attr_reader :current_user
120
132
 
121
133
  def initialize(object, current_user)
122
134
  super(object)
@@ -131,7 +143,8 @@ class UserSerializer < JsonSerializer
131
143
  end
132
144
  ```
133
145
 
134
- ### Attributes with Custom Serializer
146
+ Attributes with Custom Serializer
147
+ ---------------------------------
135
148
 
136
149
  You can specify a serializer class for a defined attribute. This is very useful
137
150
  for serializing each element of an association.
@@ -192,4 +205,34 @@ The example above returns the following json output:
192
205
  }
193
206
  ```
194
207
 
208
+ Contributing
209
+ ------------
210
+
211
+ Fork the project with:
212
+
213
+ ```
214
+ $ git clone git@github.com:frodsan/json-serializer.git
215
+ ```
216
+
217
+ To install dependencies, use:
218
+
219
+ ```
220
+ $ bundle install
221
+ ```
222
+
223
+ To run the test suite, do:
224
+
225
+ ```
226
+ $ rake test
227
+ ```
228
+
229
+ For bug reports and pull requests use [GitHub][issues].
230
+
231
+ License
232
+ -------
233
+
234
+ This gem is released under the [MIT License][mit].
235
+
195
236
  [active_model_serializers]: https://github.com/rails-api/active_model_serializers
237
+ [mit]: http://www.opensource.org/licenses/MIT
238
+ [issues]: https://github.com/frodsan/json-serializer/issues
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "json"
2
4
 
3
5
  class JsonSerializer
@@ -25,37 +27,41 @@ class JsonSerializer
25
27
  @attributes ||= {}
26
28
  end
27
29
 
28
- attr :object
30
+ attr_reader :object
29
31
 
30
32
  def initialize(object)
31
33
  @object = object
32
34
  end
33
35
 
34
- def to_json(options={})
35
- if root = options[:root]
36
- { root => serializable_object }.to_json
37
- else
38
- serializable_object.to_json
39
- end
40
- end
36
+ def to_json(root: nil)
37
+ result = decorate
38
+ result = { root => result } if root
41
39
 
42
- protected
40
+ result.to_json
41
+ end
43
42
 
44
- def serializable_object
45
- return nil unless @object
43
+ def decorate
44
+ return nil unless object
46
45
 
47
- if @object.respond_to?(:to_a)
48
- @object.to_a.map { |item| self.class.new(item).to_hash }
46
+ if object.respond_to?(:to_a)
47
+ to_arry
49
48
  else
50
49
  to_hash
51
50
  end
52
51
  end
53
52
 
53
+ protected
54
+
55
+ def to_arry
56
+ object.to_a.map { |o| self.class.new(o).to_hash }
57
+ end
58
+
54
59
  def to_hash
55
60
  self.class.attributes.each_with_object({}) do |(name, serializer), hash|
56
- data = self.class.method_defined?(name) ? self.send(name) : @object.send(name)
57
- data = Utils.const(self.class, serializer).new(data).serializable_object if serializer
58
- hash[name] = data
61
+ res = self.class.method_defined?(name) ? send(name) : object.send(name)
62
+ res = Utils.const(self.class, serializer).new(res).decorate if serializer
63
+
64
+ hash[name] = res
59
65
  end
60
66
  end
61
67
  end
@@ -0,0 +1,178 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "helper"
4
+
5
+ class OrganizationSerializer < JsonSerializer
6
+ attribute :id
7
+ attribute :name
8
+ end
9
+
10
+ class UserWithOrganizationSerializer < JsonSerializer
11
+ attribute :id
12
+ attribute :name
13
+ attribute :organization, :OrganizationSerializer
14
+ end
15
+
16
+ class UserWithCustomOrganizationSerializer < JsonSerializer
17
+ attribute :organizations, :OrganizationSerializer
18
+
19
+ def organizations
20
+ [Organization.new(id: 1, name: "enterprise")]
21
+ end
22
+ end
23
+
24
+ # rubocop:disable ClassLength
25
+ class AssociationTest < Minitest::Test
26
+ test "serializes object with association" do
27
+ user = User.new(id: 1, name: "sonny")
28
+ user.organization = Organization.new(id: 1, name: "enterprise")
29
+
30
+ result = {
31
+ id: 1,
32
+ name: "sonny",
33
+ organization: {
34
+ id: 1,
35
+ name: "enterprise"
36
+ }
37
+ }.to_json
38
+
39
+ assert_equal result, UserWithOrganizationSerializer.new(user).to_json
40
+ end
41
+
42
+ test "serializes object with a nil association" do
43
+ user = User.new(id: 1, name: "sonny")
44
+ user.organization = nil
45
+
46
+ result = {
47
+ id: 1,
48
+ name: "sonny",
49
+ organization: nil
50
+ }.to_json
51
+
52
+ assert_equal result, UserWithOrganizationSerializer.new(user).to_json
53
+ end
54
+
55
+ test "serializes array with association" do
56
+ users = [
57
+ User.new(
58
+ id: 1,
59
+ name: "sonny",
60
+ organization: Organization.new(id: 1, name: "enterprise")
61
+ ),
62
+ User.new(
63
+ id: 2,
64
+ name: "anton",
65
+ organization: Organization.new(id: 2, name: "evil")
66
+ )
67
+ ]
68
+
69
+ result = [
70
+ {
71
+ id: 1,
72
+ name: "sonny",
73
+ organization: {
74
+ id: 1,
75
+ name: "enterprise"
76
+ }
77
+ },
78
+ {
79
+ id: 2,
80
+ name: "anton",
81
+ organization: {
82
+ id: 2,
83
+ name: "evil"
84
+ }
85
+ }
86
+ ].to_json
87
+
88
+ assert_equal result, UserWithOrganizationSerializer.new(users).to_json
89
+ end
90
+
91
+ class UserWithOrganizationsSerializer < JsonSerializer
92
+ attribute :id
93
+ attribute :name
94
+ attribute :organizations, :OrganizationSerializer
95
+ end
96
+
97
+ test "serializes object with collection" do
98
+ user = User.new(id: 1, name: "sonny")
99
+ user.organizations = [
100
+ Organization.new(id: 1, name: "enterprise"),
101
+ Organization.new(id: 2, name: "evil")
102
+ ]
103
+
104
+ result = {
105
+ id: 1,
106
+ name: "sonny",
107
+ organizations: [
108
+ {
109
+ id: 1,
110
+ name: "enterprise"
111
+ },
112
+ {
113
+ id: 2,
114
+ name: "evil"
115
+ }
116
+ ]
117
+ }.to_json
118
+
119
+ assert_equal result, UserWithOrganizationsSerializer.new(user).to_json
120
+ end
121
+
122
+ test "serializes array with nested collections" do
123
+ users = [
124
+ User.new(
125
+ id: 1,
126
+ name: "sonny",
127
+ organizations: [
128
+ Organization.new(id: 1, name: "enterprise"),
129
+ Organization.new(id: 2, name: "evil")
130
+ ]
131
+ ),
132
+ User.new(
133
+ id: 2,
134
+ name: "anton",
135
+ organizations: [
136
+ Organization.new(id: 3, name: "showtek")
137
+ ]
138
+ )
139
+ ]
140
+
141
+ result = [
142
+ {
143
+ id: 1,
144
+ name: "sonny",
145
+ organizations: [
146
+ {
147
+ id: 1,
148
+ name: "enterprise"
149
+ },
150
+ {
151
+ id: 2,
152
+ name: "evil"
153
+ }
154
+ ]
155
+ },
156
+ {
157
+ id: 2,
158
+ name: "anton",
159
+ organizations: [
160
+ {
161
+ id: 3,
162
+ name: "showtek"
163
+ }
164
+ ]
165
+ }
166
+ ].to_json
167
+
168
+ assert_equal result, UserWithOrganizationsSerializer.new(users).to_json
169
+ end
170
+
171
+ test "implements association method and returns different result" do
172
+ user = User.new
173
+
174
+ result = { organizations: [{ id: 1, name: "enterprise" }] }.to_json
175
+
176
+ assert_equal result, UserWithCustomOrganizationSerializer.new(user).to_json
177
+ end
178
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "helper"
4
+
5
+ class PostSerializer < JsonSerializer
6
+ attribute :id
7
+ attribute :title
8
+ attribute :slug
9
+
10
+ def slug
11
+ "#{ object.id }-#{ object.title }"
12
+ end
13
+ end
14
+
15
+ class ParentSerializer < JsonSerializer
16
+ attribute :parent
17
+ end
18
+
19
+ class ChildSerializer < ParentSerializer
20
+ attribute :child
21
+ end
22
+
23
+ class UserSerializer < JsonSerializer
24
+ attribute :id
25
+ attribute :fullname
26
+
27
+ def fullname
28
+ object.name + " " + object.lastname
29
+ end
30
+ end
31
+
32
+ class AttributeTest < Minitest::Test
33
+ test "converts defined attributes into json" do
34
+ post = Post.new(id: 1, title: "tsunami")
35
+
36
+ result = {
37
+ id: 1,
38
+ title: "tsunami",
39
+ slug: "1-tsunami"
40
+ }.to_json
41
+
42
+ assert_equal result, PostSerializer.new(post).to_json
43
+ end
44
+
45
+ test "serializes array" do
46
+ users = [
47
+ User.new(id: 1, name: "sonny", lastname: "moore"),
48
+ User.new(id: 2, name: "anton", lastname: "zaslavski")
49
+ ]
50
+
51
+ result = [
52
+ { id: 1, fullname: "sonny moore" },
53
+ { id: 2, fullname: "anton zaslavski" }
54
+ ].to_json
55
+
56
+ assert_equal result, UserSerializer.new(users).to_json
57
+ end
58
+
59
+ test "inheritance" do
60
+ parent = ParentSerializer.attributes
61
+ child = ChildSerializer.attributes
62
+
63
+ assert_equal(parent.merge(child: nil), child)
64
+ end
65
+ end
@@ -1,3 +1,13 @@
1
- require "cutest"
2
- require_relative "../lib/json_serializer"
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/setup"
4
+ require "minitest/autorun"
5
+ require "minitest/pride"
6
+ require "minitest/sugar"
3
7
  require "ostruct"
8
+ require_relative "../lib/json_serializer"
9
+
10
+ User = OpenStruct
11
+ Organization = OpenStruct
12
+ Person = OpenStruct
13
+ Post = OpenStruct
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "helper"
4
+
5
+ class PersonSerializer < JsonSerializer
6
+ attribute :name
7
+ end
8
+
9
+ class RootTest < Minitest::Test
10
+ setup do
11
+ @person = Person.new(name: "sonny")
12
+ end
13
+
14
+ test "serialized object includes root" do
15
+ result = { person: @person.to_h }.to_json
16
+
17
+ assert_equal result, PersonSerializer.new(@person).to_json(root: :person)
18
+ end
19
+
20
+ test "serialized array includes root" do
21
+ result = { people: [@person.to_h] }.to_json
22
+
23
+ assert_equal result, PersonSerializer.new([@person]).to_json(root: :people)
24
+ end
25
+ end
metadata CHANGED
@@ -1,49 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-serializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.9
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francesco Rodríguez
8
- - Mayn Kjær
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-06-02 00:00:00.000000000 Z
11
+ date: 2016-04-12 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: cutest
14
+ name: minitest
16
15
  requirement: !ruby/object:Gem::Requirement
17
16
  requirements:
18
- - - ">="
17
+ - - "~>"
19
18
  - !ruby/object:Gem::Version
20
- version: '0'
19
+ version: '5.8'
21
20
  type: :development
22
21
  prerelease: false
23
22
  version_requirements: !ruby/object:Gem::Requirement
24
23
  requirements:
25
- - - ">="
24
+ - - "~>"
26
25
  - !ruby/object:Gem::Version
27
- version: '0'
28
- description: Customize JSON ouput through serializer objects.
29
- email:
30
- - frodsan@me.com
31
- - mayn.kjaer@gmail.com
26
+ version: '5.8'
27
+ - !ruby/object:Gem::Dependency
28
+ name: minitest-sugar
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '11.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '11.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.39'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.39'
69
+ description: Customize JSON ouput through serializer objects
70
+ email: hello@frodsan.com
32
71
  executables: []
33
72
  extensions: []
34
73
  extra_rdoc_files: []
35
74
  files:
36
- - ".gems"
37
75
  - LICENSE
38
76
  - README.md
39
- - json-serializer.gemspec
40
77
  - lib/json_serializer.rb
41
- - makefile
42
- - test/association.rb
43
- - test/attribute.rb
78
+ - test/association_test.rb
79
+ - test/attribute_test.rb
44
80
  - test/helper.rb
45
- - test/root.rb
46
- homepage: https://github.com/harmoni/json-serializer
81
+ - test/root_test.rb
82
+ homepage: https://github.com/frodsan/json-serializer
47
83
  licenses:
48
84
  - MIT
49
85
  metadata: {}
@@ -63,8 +99,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
63
99
  version: '0'
64
100
  requirements: []
65
101
  rubyforge_project:
66
- rubygems_version: 2.4.5
102
+ rubygems_version: 2.5.1
67
103
  signing_key:
68
104
  specification_version: 4
69
- summary: Customize JSON ouput through serializer objects.
70
- test_files: []
105
+ summary: Customize JSON ouput through serializer objects
106
+ test_files:
107
+ - test/association_test.rb
108
+ - test/attribute_test.rb
109
+ - test/helper.rb
110
+ - test/root_test.rb
data/.gems DELETED
@@ -1 +0,0 @@
1
- cutest -v 1.2.2
@@ -1,14 +0,0 @@
1
- Gem::Specification.new do |s|
2
- s.name = "json-serializer"
3
- s.version = "0.0.9"
4
- s.summary = "Customize JSON ouput through serializer objects."
5
- s.description = s.summary
6
- s.authors = ["Francesco Rodríguez", "Mayn Kjær"]
7
- s.email = ["frodsan@me.com", "mayn.kjaer@gmail.com"]
8
- s.homepage = "https://github.com/harmoni/json-serializer"
9
- s.license = "MIT"
10
-
11
- s.files = `git ls-files`.split("\n")
12
-
13
- s.add_development_dependency "cutest"
14
- end
data/makefile DELETED
@@ -1,8 +0,0 @@
1
- .DEFAULT_GOAL := test
2
- .PHONY: test
3
-
4
- gem:
5
- gem build *.gemspec
6
-
7
- test:
8
- cutest test/*.rb
@@ -1,168 +0,0 @@
1
- require_relative "helper"
2
-
3
- User = OpenStruct
4
- Organization = OpenStruct
5
-
6
- class OrganizationSerializer < JsonSerializer
7
- attribute :id
8
- attribute :name
9
- end
10
-
11
- class UserWithOrganizationSerializer < JsonSerializer
12
- attribute :id
13
- attribute :name
14
- attribute :organization, :OrganizationSerializer
15
- end
16
-
17
- test "serializes object with association" do
18
- user = User.new(id: 1, name: "sonny")
19
- user.organization = Organization.new(id: 1, name: "enterprise")
20
-
21
- result = {
22
- id: 1,
23
- name: "sonny",
24
- organization: {
25
- id: 1,
26
- name: "enterprise"
27
- }
28
- }.to_json
29
-
30
- assert_equal result, UserWithOrganizationSerializer.new(user).to_json
31
- end
32
-
33
- test "serializes object with a nil association" do
34
- user = User.new(id: 1, name: "sonny")
35
- user.organization = nil
36
-
37
- result = {
38
- id: 1,
39
- name: "sonny",
40
- organization: nil
41
- }.to_json
42
-
43
- assert_equal result, UserWithOrganizationSerializer.new(user).to_json
44
- end
45
-
46
- test "serializes array with association" do
47
- users = [
48
- User.new(id: 1, name: "sonny", organization: Organization.new(id: 1, name: "enterprise")),
49
- User.new(id: 2, name: "anton", organization: Organization.new(id: 2, name: "evil"))
50
- ]
51
-
52
- result = [
53
- {
54
- id: 1,
55
- name: "sonny",
56
- organization: {
57
- id: 1,
58
- name: "enterprise"
59
- }
60
- },
61
- {
62
- id: 2,
63
- name: "anton",
64
- organization: {
65
- id: 2,
66
- name: "evil"
67
- }
68
- }
69
- ].to_json
70
-
71
- assert_equal result, UserWithOrganizationSerializer.new(users).to_json
72
- end
73
-
74
- class UserWithOrganizationsSerializer < JsonSerializer
75
- attribute :id
76
- attribute :name
77
- attribute :organizations, :OrganizationSerializer
78
- end
79
-
80
- test "serializes object with collection" do
81
- user = User.new(id: 1, name: "sonny")
82
- user.organizations = [
83
- Organization.new(id: 1, name: "enterprise"),
84
- Organization.new(id: 2, name: "evil")
85
- ]
86
-
87
- result = {
88
- id: 1,
89
- name: "sonny",
90
- organizations: [
91
- {
92
- id: 1,
93
- name: "enterprise"
94
- },
95
- {
96
- id: 2,
97
- name: "evil"
98
- }
99
- ]
100
- }.to_json
101
-
102
- assert_equal result, UserWithOrganizationsSerializer.new(user).to_json
103
- end
104
-
105
- test "serializes array with nested collections" do
106
- users = [
107
- User.new(
108
- id: 1,
109
- name: "sonny",
110
- organizations: [
111
- Organization.new(id: 1, name: "enterprise"),
112
- Organization.new(id: 2, name: "evil"),
113
- ]
114
- ),
115
- User.new(
116
- id: 2,
117
- name: "anton",
118
- organizations: [
119
- Organization.new(id: 3, name: "showtek")
120
- ]
121
- )
122
- ]
123
-
124
- result = [
125
- {
126
- id: 1,
127
- name: "sonny",
128
- organizations: [
129
- {
130
- id: 1,
131
- name: "enterprise"
132
- },
133
- {
134
- id: 2,
135
- name: "evil"
136
- }
137
- ]
138
- },
139
- {
140
- id: 2,
141
- name: "anton",
142
- organizations: [
143
- {
144
- id: 3,
145
- name: "showtek"
146
- }
147
- ]
148
- }
149
- ].to_json
150
-
151
- assert_equal result, UserWithOrganizationsSerializer.new(users).to_json
152
- end
153
-
154
- class UserWithCustomOrganizationSerializer < JsonSerializer
155
- attribute :organizations, :OrganizationSerializer
156
-
157
- def organizations
158
- [Organization.new(id: 1, name: "enterprise")]
159
- end
160
- end
161
-
162
- test "implements association method and returns different result" do
163
- user = User.new
164
-
165
- result = { organizations: [ { id: 1, name: "enterprise" } ] }.to_json
166
-
167
- assert_equal result, UserWithCustomOrganizationSerializer.new(user).to_json
168
- end
@@ -1,64 +0,0 @@
1
- require_relative "helper"
2
-
3
- Post = OpenStruct
4
- User = OpenStruct
5
-
6
- class PostSerializer < JsonSerializer
7
- attribute :id
8
- attribute :title
9
- attribute :slug
10
-
11
- def slug
12
- "#{ object.id }-#{ object.title }"
13
- end
14
- end
15
-
16
- test "converts defined attributes into json" do
17
- post = Post.new(id: 1, title: "tsunami")
18
-
19
- result = {
20
- id: 1,
21
- title: "tsunami",
22
- slug: "1-tsunami"
23
- }.to_json
24
-
25
- assert_equal result, PostSerializer.new(post).to_json
26
- end
27
-
28
- class UserSerializer < JsonSerializer
29
- attribute :id
30
- attribute :fullname
31
-
32
- def fullname
33
- object.name + " " + object.lastname
34
- end
35
- end
36
-
37
- test "serializes array" do
38
- users = [
39
- User.new(id: 1, name: "sonny", lastname: "moore"),
40
- User.new(id: 2, name: "anton", lastname: "zaslavski")
41
- ]
42
-
43
- result = [
44
- { id: 1, fullname: "sonny moore" },
45
- { id: 2, fullname: "anton zaslavski" }
46
- ].to_json
47
-
48
- assert_equal result, UserSerializer.new(users).to_json
49
- end
50
-
51
- class ParentSerializer < JsonSerializer
52
- attribute :parent
53
- end
54
-
55
- class ChildSerializer < ParentSerializer
56
- attribute :child
57
- end
58
-
59
- test "inheritance" do
60
- parent = ParentSerializer.attributes
61
- child = ChildSerializer.attributes
62
-
63
- assert_equal(parent.merge(child: nil), child)
64
- end
@@ -1,23 +0,0 @@
1
- require_relative "helper"
2
-
3
- Person = OpenStruct
4
-
5
- class PersonSerializer < JsonSerializer
6
- attribute :name
7
- end
8
-
9
- setup do
10
- Person.new(name: "sonny")
11
- end
12
-
13
- test "serialized object includes root" do |person|
14
- result = { person: person.to_h }.to_json
15
-
16
- assert_equal result, PersonSerializer.new(person).to_json(root: :person)
17
- end
18
-
19
- test "serialized array includes root" do |person|
20
- result = { people: [person.to_h] }.to_json
21
-
22
- assert_equal result, PersonSerializer.new([person]).to_json(root: :people)
23
- end