json_array_serializer 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
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