json_array_serializer 0.0.2 → 0.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f73b57b7f55339462a957b6c76ab971c88e7dff4
4
- data.tar.gz: 847e31692753ec27162889aa6b6d291b1271e0ce
3
+ metadata.gz: 759b6374e0d2f2f6b141dc720a08e358445a31ca
4
+ data.tar.gz: e129f2d357544ff607187baf39b43855665b6dd9
5
5
  SHA512:
6
- metadata.gz: 086df0f1ea603ff6ceb99427091e00833a44677fac610fb334c60c24749c9619c9ae9bc81a1cd0758a8a082b1bf13d4703133fd4740d102f9282640ace9b57b8
7
- data.tar.gz: 3a03198c64f3c6d2b243fe1bb056f0a30295485025bd88463515e588839496f8f92b2facb2f20f553b2d4a9628d203a16107c4305aac73de24a5cd502e780a72
6
+ metadata.gz: b521b7344f0f00622f628a3f293640daffbf3fae68508aabe7cc7be34cf3c26ceaf2a23422cb6ad71ef4fce5a18a6811e5af7908fca6473b571f24be90b80033
7
+ data.tar.gz: ece9d5e2a0c7905cb41a32f0931518d10ef9db77bbc023918b352dd989d6f04eda4afda9cc3a5c7abbb8716c4c1d462b980c4a7283e7d1c266ec6e2e419325be
data/README.md CHANGED
@@ -26,22 +26,9 @@ class Foo < ActiveRecord::Base
26
26
  end
27
27
  ```
28
28
 
29
- Or if you want to save object with more complexity, and custom functionality, simply extend `JSONArraySerizalizer`.
29
+ ### Specifying Element Class
30
30
 
31
- ```ruby
32
- # A class to hold a collection of commands.
33
- #
34
- class CommandArray < JSONArraySerizalizer
35
- def perform
36
- each do |command|
37
- result = system(command.program)
38
- raise "Error" if !result && command.raise_exception
39
- end
40
- end
41
- end
42
- ```
43
-
44
- You can also pass in a class to load the individual JSON objects as when extending the base `JSONArraySerizalizer`.
31
+ You can pass a class to specify the type of the arrays elements.
45
32
 
46
33
  ```ruby
47
34
  class Developer < OpenStruct
@@ -51,13 +38,68 @@ class Developer < OpenStruct
51
38
  end
52
39
 
53
40
  class Company < ActiveRecord::Base
54
- serialize :developers, JSONArraySerializer.new(Developer)
41
+ serialize :developers, JSONArraySerializer.new(element_class: Developer)
55
42
  end
56
43
  ```
57
44
 
58
- The class you pass to `JSONArraySerializer.new` __must__ have the following two methods.
45
+ The `element_class` you pass to `JSONArraySerializer.new` __must__ have the following two methods.
59
46
 
60
47
  ```
61
48
  # A.new : Hash -> A
62
49
  # a.to_h : -> Hash (where a is an instance of A)
63
50
  ```
51
+
52
+ ### Specifying Array Class
53
+
54
+ You can pass a class to specify the type of the loaded array itself. This allows for serializing classes that act like arrays.
55
+
56
+ ```ruby
57
+ class SongArray < Array
58
+ def play_all
59
+ each do |song|
60
+ queue song['name']
61
+ end
62
+ end
63
+ end
64
+
65
+ class Playlist < ActiveRecord::Base
66
+ serialize :songs, JSONArraySerializer.new(array_class: SongArray)
67
+ end
68
+ ```
69
+
70
+ The `array_class` you pass to `JSONArraySerializer.new` __must__ have the following two methods.
71
+
72
+ ```
73
+ # A.new : Array -> A
74
+ # a.to_a : -> Array (where a is an instance of A) ?????
75
+ ```
76
+
77
+ ### Specifying the Database Type
78
+
79
+ This gem allows you to save arrays on either Text/String columns or Array columns. The default is `:text`.
80
+
81
+ ```ruby
82
+ serialize :foo, JSONArraySerializer.new # Will save to :text.
83
+ serialize :foo, JSONArraySerializer.new(column_type: :text) # Same as above.
84
+ serialize :foo, JSONArraySerializer.new(column_type: :array) # Saves to array column.
85
+ ```
86
+
87
+ ## Example
88
+
89
+ ```ruby
90
+ class Developer < OpenStruct
91
+ def develop(name)
92
+ # Write code.
93
+ end
94
+ end
95
+
96
+ class DeveloperArray < Array
97
+ def develop
98
+ each { |d| d.develop }
99
+ end
100
+ end
101
+
102
+ class Company < ActiveRecord::Base
103
+ serialize :developers, JSONArraySerializer.new(array_class: DeveloperArray, element_class: Developer)
104
+ end
105
+ ```
@@ -1,3 +1,3 @@
1
1
  class JSONArraySerializer < Array
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,8 +1,8 @@
1
1
  require 'json'
2
2
  require 'json_array_serializer/version'
3
3
 
4
- class JSONArraySerializer < Array
5
- attr_accessor :element_class
4
+ class JSONArraySerializer
5
+ attr_accessor :element_class, :array_class
6
6
 
7
7
  # Class -> void (hook)
8
8
  # Sets up the new JSONArraySerializer with it's elements
@@ -14,44 +14,46 @@ class JSONArraySerializer < Array
14
14
  # A.new : Hash -> A
15
15
  # a.to_h : -> Hash (where a is an instance of A)
16
16
  #
17
- def initialize(element_class = Hash, column_type = :text)
17
+ def initialize(array_class: Array, element_class: Hash, column_type: :text)
18
+ @array_class = array_class
18
19
  @element_class = element_class
19
20
  @column_type = column_type
20
21
  end
21
22
 
22
- # [JSON String] || JSON String -> [element_class]
23
+ # [JSON String] || JSON String -> array_class<element_class>
23
24
  # Takes an array of JSON strings and loads them
24
25
  # into an array of element_classes.
25
26
  #
26
27
  def load(data)
28
+ return data if data.nil?
29
+
27
30
  array = case @column_type
28
31
  when :array
29
- data
32
+ data.map do |json|
33
+ hash = JSON.load(json)
34
+ (element_class == Hash) ? hash : element_class.new(hash)
35
+ end
30
36
  when :string, :text
31
- JSON.load(data)
37
+ JSON.load(data).map do |hash|
38
+ (element_class == Hash) ? hash : element_class.new(hash)
39
+ end
32
40
  end
33
41
 
34
- array.map do |json|
35
- hash = JSON.load(json)
36
- (element_class == Hash) ? hash : element_class.new(hash)
37
- end
42
+ (array_class == Array) ? array : array_class.new(array)
38
43
  end
39
44
 
40
- # [element_class] -> [JSON String] || JSON String
45
+ # array_class<element_class> -> [JSON String] || JSON String
41
46
  # Takes an array of element_classes and dumps them
42
47
  # into JSON Strings, and returns the array of them.
43
48
  #
44
- def dump(array)
45
- serialized_array = array.map do |e|
46
- hash = (element_class == Hash) ? e : e.to_h
47
- JSON.dump(hash)
48
- end
49
+ def dump(data)
50
+ return data if data.nil?
49
51
 
50
52
  case @column_type
51
53
  when :array
52
- serialized_array
54
+ data.to_a.map { |e| JSON.dump(e.to_h) }
53
55
  when :string, :text
54
- JSON.dump(serialized_array)
56
+ JSON.dump(data.to_a.map { |e| e.to_h })
55
57
  end
56
58
  end
57
59
  end
@@ -1,296 +1,218 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe JSONArraySerializer do
4
+ let(:array) { Array.new(5, foo: 'bar', baz: 1337) }
5
+ let(:array_string) { JSON.dump(array) }
6
+ let(:serializer) { JSONArraySerializer.new }
4
7
 
5
- it 'is an array' do
6
- serializer = JSONArraySerializer.new
7
- expect(serializer).to be_an(Array)
8
+ describe '#load' do
9
+ it 'returns nil given nil' do
10
+ expect(serializer.load(nil)).to eq(nil)
11
+ end
12
+
13
+ it 'returns an empty array given an empty array' do
14
+ expect(serializer.load('[]')).to eq([])
15
+ end
16
+
17
+ it 'returns an array of the same length as it\'s given' do
18
+ expect(serializer.load(array_string).length).to eq(array.length)
19
+ end
20
+ end
21
+
22
+ describe '#dump' do
23
+ it 'returns nil given nil' do
24
+ expect(serializer.dump(nil)).to eq(nil)
25
+ end
26
+
27
+ it 'returns a string given an array' do
28
+ expect(serializer.dump(array)).to be_a(String)
29
+ end
30
+ end
31
+
32
+ it 'converts symbols to strings' do
33
+ symbol_array = [
34
+ { foo: 'bar' },
35
+ { name: 'nate', age: 21 },
36
+ { ramble: 'rara', float: 21.13 },
37
+ { symbol: :very_symbol },
38
+ { hash: { 'foo' => 'bar' } },
39
+ { symbol_hash: { foo: 'bar' } }
40
+ ]
41
+ expected = symbol_array.map(&:stringify)
42
+ expect(serializer.load(serializer.dump(symbol_array))).to eq(expected)
8
43
  end
9
44
 
10
- context 'text backed serialization' do
11
- context 'default class (Hash)' do
12
- let(:serializer) { JSONArraySerializer.new }
45
+ context 'with default array_class (Array)' do
46
+ let(:serializer) { JSONArraySerializer.new }
13
47
 
14
- describe '.new' do
15
- it 'sets it\'s element class to a Hash' do
16
- expect(serializer.element_class).to eq(Hash)
17
- end
48
+ describe '.new' do
49
+ it 'sets it\'s array class to Array' do
50
+ expect(serializer.array_class).to eq(Array)
18
51
  end
52
+ end
19
53
 
20
- describe '#load' do
21
- it 'returns an empty array given an empty array' do
22
- expect(serializer.load("[]")).to eq([])
23
- end
24
-
25
- it 'returns an array of the same length as it\'s given' do
26
- array = Array.new(5, "{}")
27
- expect(serializer.load(JSON.dump(array)).length).to eq(array.length)
28
- end
29
-
30
- it 'has elements that are in fact Hashs' do
31
- array = Array.new(5, "{}")
32
- expect(serializer.load(JSON.dump(array)).reject { |e| e.is_a? Hash }).to be_empty
33
- end
34
-
35
- it 'loads arrays of JSON with data' do
36
- array = Array.new(5, "{\"foo\":\"bar\",\"baz\":1337}")
37
- expect(serializer.load(JSON.dump(array)).first).to eq({'foo' => 'bar', 'baz' => 1337})
38
- end
54
+ describe '#load' do
55
+ it 'returns an instance of Array' do
56
+ expect(serializer.load(array_string)).to be_a(Array)
39
57
  end
58
+ end
40
59
 
41
- describe '#dump' do
42
- it 'returns a string given an array' do
43
- array = Array.new(5, {})
44
- expect(serializer.dump(array)).to be_a(String)
45
- end
60
+ describe '#dump' do
61
+ it 'returns a string given an Array' do
62
+ expect(serializer.dump(array)).to be_a(String)
63
+ end
46
64
 
47
- it 'JSON can load it' do
48
- array = Array.new(5, {foo: 'bar'})
49
- expect { JSON.load(serializer.dump(array)) }.not_to raise_error
50
- end
65
+ it 'JSON can load it' do
66
+ expect { JSON.load(serializer.dump(array)) }.not_to raise_error
51
67
  end
68
+ end
69
+ end
52
70
 
53
- it 'dumps and loads equivalent arrays' do
54
- array = [
55
- { 'foo' => 'bar' },
56
- { 'name' => 'nate', 'age' => 21 },
57
- { 'ramble' => 'rara', 'float' => 21.13 }
58
- ]
59
- expect(serializer.load(serializer.dump(array))).to eq(array)
71
+ context 'with CustomArray array_class' do
72
+ class CustomArray
73
+ def initialize(array)
74
+ @arr = array
60
75
  end
61
76
 
62
- it 'converts symbols to strings' do
63
- array = [
64
- { foo: 'bar' },
65
- { name: 'nate', age: 21 },
66
- { ramble: 'rara', float: 21.13 },
67
- { symbol: :very_symbol },
68
- { hash: { 'foo' => 'bar' } },
69
- { symbol_hash: { foo: 'bar' } }
70
- ]
71
- expected = array.map(&:stringify)
72
- expect(serializer.load(serializer.dump(array))).to eq(expected)
77
+ def to_a
78
+ @arr
73
79
  end
74
80
  end
75
81
 
76
- context 'with OpenStruct class' do
77
- let(:serializer) { JSONArraySerializer.new(OpenStruct) }
82
+ let(:serializer) { JSONArraySerializer.new(array_class: CustomArray) }
78
83
 
79
- describe '.new' do
80
- it 'sets it\'s element class to a OpenStruct' do
81
- expect(serializer.element_class).to eq(OpenStruct)
82
- end
84
+ describe '.new' do
85
+ it 'sets it\'s array class to CustomArray' do
86
+ expect(serializer.array_class).to eq(CustomArray)
83
87
  end
88
+ end
84
89
 
85
- describe '#load' do
86
- it 'returns an empty array given an empty array' do
87
- expect(serializer.load(JSON.dump([]))).to eq([])
88
- end
89
-
90
- it 'returns an array of the same length as it\'s given' do
91
- array = Array.new(5, "{}")
92
- expect(serializer.load(JSON.dump(array)).length).to eq(array.length)
93
- end
94
-
95
- it 'has elements that are in fact OpenStructs' do
96
- array = Array.new(5, "{}")
97
- expect(serializer.load(JSON.dump(array)).reject { |e| e.is_a? OpenStruct }).to be_empty
98
- end
99
-
100
- it 'loads arrays of JSON with data' do
101
- array = Array.new(5, "{\"foo\":\"bar\",\"baz\":1337}")
102
- expect(serializer.load(JSON.dump(array)).first).to eq(OpenStruct.new(foo: 'bar', baz: 1337))
103
- end
90
+ describe '#load' do
91
+ it 'returns an instance of CustomArray' do
92
+ expect(serializer.load(array_string)).to be_a(CustomArray)
104
93
  end
94
+ end
105
95
 
106
- describe '#dump' do
107
- it 'returns a string given an array' do
108
- array = Array.new(5, {})
109
- expect(serializer.dump(array)).to be_a(String)
110
- end
96
+ describe '#dump' do
97
+ let(:custom_array) { CustomArray.new([{foo: 'bar'}, {}]) }
98
+ it 'returns a string given an CustomArray' do
99
+ expect(serializer.dump(custom_array)).to be_a(String)
100
+ end
111
101
 
112
- it 'JSON can load it' do
113
- array = Array.new(5, {foo: 'bar'})
114
- expect { JSON.load(serializer.dump(array)) }.not_to raise_error
115
- end
102
+ it 'JSON can load it' do
103
+ expect { JSON.load(serializer.dump(custom_array)) }.not_to raise_error
116
104
  end
105
+ end
106
+ end
117
107
 
118
- it 'dumps and loads equivalent arrays' do
119
- array = [
120
- OpenStruct.new('foo' => 'bar'),
121
- OpenStruct.new('name' => 'nate', 'age' => 21),
122
- OpenStruct.new('ramble' => 'rara', 'float' => 21.13)
123
- ]
124
- expect(serializer.load(serializer.dump(array))).to eq(array)
108
+ context 'with default element_class (Hash)' do
109
+ let(:serializer) { JSONArraySerializer.new }
110
+
111
+ describe '.new' do
112
+ it 'sets it\'s element class to a Hash' do
113
+ expect(serializer.element_class).to eq(Hash)
125
114
  end
115
+ end
126
116
 
127
- it 'converts symbols to strings' do
128
- array = [
129
- OpenStruct.new(foo: 'bar'),
130
- OpenStruct.new(name: 'nate', age: 21),
131
- OpenStruct.new(ramble: 'rara', float: 21.13),
132
- OpenStruct.new(symbol: :very_symbol),
133
- OpenStruct.new(hash: { 'foo' => 'bar' }),
134
- OpenStruct.new(symbol_hash: { foo: 'bar' })
135
- ]
136
- expected = array.map(&:stringify_values)
137
- expect(serializer.load(serializer.dump(array))).to eq(expected)
117
+ describe '#load' do
118
+ it 'has elements that are in fact Hashs' do
119
+ expect(serializer.load(array_string).reject { |e| e.is_a? Hash }).to be_empty
138
120
  end
139
121
  end
140
- end
141
122
 
142
- context 'array backed serialization' do
143
- context 'default class (Hash)' do
144
- let(:serializer) { JSONArraySerializer.new(Hash, :array) }
123
+ describe '#dump' do
124
+ it 'returns a string given an array of hashes' do
125
+ expect(serializer.dump(array)).to be_a(String)
126
+ end
145
127
 
146
- describe '.new' do
147
- it 'sets it\'s element class to a Hash' do
148
- expect(serializer.element_class).to eq(Hash)
149
- end
128
+ it 'JSON can load it' do
129
+ expect { JSON.load(serializer.dump(array)) }.not_to raise_error
150
130
  end
131
+ end
151
132
 
152
- describe '#load' do
153
- it 'returns an empty array given an empty array' do
154
- expect(serializer.load([])).to eq([])
155
- end
156
-
157
- it 'returns an array of the same length as it\'s given' do
158
- array = Array.new(5, "{}")
159
- expect(serializer.load(array).length).to eq(array.length)
160
- end
161
-
162
- it 'has elements that are in fact Hashs' do
163
- array = Array.new(5, "{}")
164
- expect(serializer.load(array).reject { |e| e.is_a? Hash }).to be_empty
165
- end
166
-
167
- it 'loads arrays of JSON with data' do
168
- array = Array.new(5, "{\"foo\":\"bar\",\"baz\":1337}")
169
- expect(serializer.load(array).first).to eq({'foo' => 'bar', 'baz' => 1337})
170
- end
133
+ it 'dumps and loads equivalent arrays' do
134
+ hash_array = [
135
+ { 'foo' => 'bar' },
136
+ { 'name' => 'nate', 'age' => 21 },
137
+ { 'ramble' => 'rara', 'float' => 21.13 }
138
+ ]
139
+ expect(serializer.load(serializer.dump(hash_array))).to eq(hash_array)
140
+ end
141
+ end
142
+
143
+ context 'with OpenStruct element_class' do
144
+ let(:serializer) { JSONArraySerializer.new(element_class: OpenStruct) }
145
+
146
+ describe '.new' do
147
+ it 'sets it\'s element class to a OpenStruct' do
148
+ expect(serializer.element_class).to eq(OpenStruct)
171
149
  end
150
+ end
172
151
 
173
- describe '#dump' do
174
- it 'returns an empty array given an empty array' do
175
- expect(serializer.dump([])).to eq([])
176
- end
177
-
178
- it 'returns an array of the same length as it\'s given' do
179
- array = Array.new(5, {})
180
- expect(serializer.dump(array).length).to eq(array.length)
181
- end
182
-
183
- it 'has elements that are JSON strings' do
184
- array = Array.new(5, {foo: 'bar'})
185
- expect {
186
- serializer.dump(array).map { |e| JSON.load(e) }
187
- }.not_to raise_error
188
- end
189
-
190
- it 'dumps hashes with data' do
191
- array = Array.new(5, {foo: 'bar', baz: 1337})
192
- expect(serializer.dump(array).first).to eq("{\"foo\":\"bar\",\"baz\":1337}")
193
- end
152
+ describe '#load' do
153
+ it 'has elements that are in fact OpenStructs' do
154
+ expect(serializer.load(array_string).reject { |e| e.is_a? OpenStruct }).to be_empty
194
155
  end
156
+ end
195
157
 
196
- it 'dumps and loads equivalent arrays' do
197
- array = [
198
- { 'foo' => 'bar' },
199
- { 'name' => 'nate', 'age' => 21 },
200
- { 'ramble' => 'rara', 'float' => 21.13 }
201
- ]
202
- expect(serializer.load(serializer.dump(array))).to eq(array)
158
+ describe '#dump' do
159
+ it 'returns a string given an array of OpenStructs' do
160
+ expect(serializer.dump(array)).to be_a(String)
203
161
  end
204
162
 
205
- it 'converts symbols to strings' do
206
- array = [
207
- { foo: 'bar' },
208
- { name: 'nate', age: 21 },
209
- { ramble: 'rara', float: 21.13 },
210
- { symbol: :very_symbol },
211
- { hash: { 'foo' => 'bar' } },
212
- { symbol_hash: { foo: 'bar' } }
213
- ]
214
- expected = array.map(&:stringify)
215
- expect(serializer.load(serializer.dump(array))).to eq(expected)
163
+ it 'JSON can load it' do
164
+ expect { JSON.load(serializer.dump(array)) }.not_to raise_error
216
165
  end
217
166
  end
218
167
 
219
- context 'with OpenStruct class' do
220
- let(:serializer) { JSONArraySerializer.new(OpenStruct, :array) }
168
+ it 'dumps and loads equivalent arrays' do
169
+ open_struct_array = [
170
+ OpenStruct.new('foo' => 'bar'),
171
+ OpenStruct.new('name' => 'nate', 'age' => 21),
172
+ OpenStruct.new('ramble' => 'rara', 'float' => 21.13)
173
+ ]
174
+ expect(serializer.load(serializer.dump(open_struct_array))).to eq(open_struct_array)
175
+ end
176
+ end
177
+
178
+ context 'with string/text column_type' do
179
+ let(:serializer) { JSONArraySerializer.new(column_type: :text) }
180
+
181
+ describe '#load' do
182
+ it 'loads arrays of JSON with data' do
183
+ expect(serializer.load(array_string).first).to eq({'foo' => 'bar', 'baz' => 1337})
184
+ end
185
+ end
221
186
 
222
- describe '.new' do
223
- it 'sets it\'s element class to a OpenStruct' do
224
- expect(serializer.element_class).to eq(OpenStruct)
225
- end
187
+ describe '#dump' do
188
+ it 'returns a string given an array' do
189
+ expect(serializer.dump(array)).to be_a(String)
226
190
  end
227
191
 
228
- describe '#load' do
229
- it 'returns an empty array given an empty array' do
230
- expect(serializer.load([])).to eq([])
231
- end
232
-
233
- it 'returns an array of the same length as it\'s given' do
234
- array = Array.new(5, "{}")
235
- expect(serializer.load(array).length).to eq(array.length)
236
- end
237
-
238
- it 'has elements that are in fact OpenStructs' do
239
- array = Array.new(5, "{}")
240
- expect(serializer.load(array).reject { |e| e.is_a? OpenStruct }).to be_empty
241
- end
242
-
243
- it 'loads arrays of JSON with data' do
244
- array = Array.new(5, "{\"foo\":\"bar\",\"baz\":1337}")
245
- expect(serializer.load(array).first).to eq(OpenStruct.new(foo: 'bar', baz: 1337))
246
- end
192
+ it 'JSON can load it' do
193
+ expect { JSON.load(serializer.dump(array)) }.not_to raise_error
247
194
  end
195
+ end
196
+ end
248
197
 
249
- describe '#dump' do
250
- it 'returns an empty array given an empty array' do
251
- expect(serializer.dump([])).to eq([])
252
- end
253
-
254
- it 'returns an array of the same length as it\'s given' do
255
- array = Array.new(5, OpenStruct.new)
256
- expect(serializer.dump(array).length).to eq(array.length)
257
- end
258
-
259
- it 'has elements that are JSON strings' do
260
- array = Array.new(5, OpenStruct.new({foo: 'bar'}))
261
- expect {
262
- serializer.dump(array).map { |e| JSON.load(e) }
263
- }.not_to raise_error
264
- end
265
-
266
- it 'dumps OpenStructs with data' do
267
- array = Array.new(5, OpenStruct.new(foo: 'bar', baz: 1337))
268
- expect(serializer.dump(array).first).to eq("{\"foo\":\"bar\",\"baz\":1337}")
269
- end
198
+ context 'with array column_type' do
199
+ let(:serializer) { JSONArraySerializer.new(column_type: :array) }
200
+ let(:array_of_json) { Array.new(5, JSON.dump(foo: 'bar', baz: 1337)) }
201
+
202
+ describe '#load' do
203
+ it 'loads arrays of JSON with data' do
204
+ expect(serializer.load(array_of_json).first).to eq({'foo' => 'bar', 'baz' => 1337})
270
205
  end
206
+ end
271
207
 
272
- it 'dumps and loads equivalent arrays' do
273
- array = [
274
- OpenStruct.new('foo' => 'bar'),
275
- OpenStruct.new('name' => 'nate', 'age' => 21),
276
- OpenStruct.new('ramble' => 'rara', 'float' => 21.13),
277
- OpenStruct.new(symbol: 'rara', 'float' => 21.13)
278
- ]
279
- expect(serializer.load(serializer.dump(array))).to eq(array)
208
+ describe '#dump' do
209
+ it 'returns an array given an array' do
210
+ expect(serializer.dump(array)).to be_a(Array)
280
211
  end
281
212
 
282
- it 'converts symbols to strings' do
283
- array = [
284
- OpenStruct.new(foo: 'bar'),
285
- OpenStruct.new(name: 'nate', age: 21),
286
- OpenStruct.new(ramble: 'rara', float: 21.13),
287
- OpenStruct.new(symbol: :very_symbol),
288
- OpenStruct.new(hash: { 'foo' => 'bar' }),
289
- OpenStruct.new(symbol_hash: { foo: 'bar' })
290
- ]
291
- expected = array.map(&:stringify_values)
292
- expect(serializer.load(serializer.dump(array))).to eq(expected)
213
+ it 'JSON can load it\'s elements' do
214
+ expect { serializer.dump(array).each { |s| JSON.load(s) } }.not_to raise_error
293
215
  end
294
216
  end
295
217
  end
296
- end
218
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_array_serializer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Lilienthal