DSON 0.1.0 → 0.2.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.
- data/.gitignore +22 -22
- data/.travis.yml +6 -0
- data/DSON.gemspec +28 -24
- data/Gemfile +4 -4
- data/LICENSE.txt +22 -22
- data/README.md +61 -62
- data/Rakefile +6 -2
- data/lib/DSON.rb +14 -13
- data/lib/DSON/value.rb +94 -98
- data/lib/DSON/value/array_value.rb +49 -47
- data/lib/DSON/value/false_value.rb +21 -21
- data/lib/DSON/value/hash_value.rb +56 -59
- data/lib/DSON/value/nil_value.rb +21 -21
- data/lib/DSON/value/numeric_value.rb +40 -20
- data/lib/DSON/value/object_value.rb +37 -37
- data/lib/DSON/value/string_value.rb +26 -25
- data/lib/DSON/value/true_value.rb +21 -21
- data/lib/DSON/version.rb +7 -7
- data/spec/lib/example_class.rb +15 -15
- data/spec/parsing_spec.rb +364 -292
- data/spec/serialization_spec.rb +378 -390
- metadata +57 -15
data/spec/serialization_spec.rb
CHANGED
@@ -1,390 +1,378 @@
|
|
1
|
-
# -*- encoding : utf-8 -*-
|
2
|
-
require 'DSON'
|
3
|
-
|
4
|
-
require_relative 'lib/example_class'
|
5
|
-
|
6
|
-
PUNCTUATION_MATCH = '(,|\.|!|\\?)'
|
7
|
-
AND_MATCH = '(and|also)'
|
8
|
-
|
9
|
-
describe 'simple hashes' do
|
10
|
-
|
11
|
-
it 'should be correct with an empty hash' do
|
12
|
-
dson_hash = Hash.new
|
13
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
14
|
-
|
15
|
-
expect(dson_string).to eq(
|
16
|
-
'such wow'
|
17
|
-
)
|
18
|
-
end
|
19
|
-
|
20
|
-
it 'should be correct with a hash with one element' do
|
21
|
-
dson_hash = {
|
22
|
-
dson: 'awesome'
|
23
|
-
}
|
24
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
25
|
-
|
26
|
-
expect(dson_string).to eq(
|
27
|
-
'such "dson" is "awesome" wow'
|
28
|
-
)
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'should be correct with a hash with two elements' do
|
32
|
-
dson_or_ruby = '("dson" is "awesome"|"ruby" is "great")'
|
33
|
-
|
34
|
-
dson_hash = {
|
35
|
-
dson: 'awesome',
|
36
|
-
ruby: 'great'
|
37
|
-
}
|
38
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
39
|
-
|
40
|
-
expect(dson_string).to match(
|
41
|
-
/such #{dson_or_ruby}#{PUNCTUATION_MATCH} #{dson_or_ruby} wow/
|
42
|
-
)
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'should be correct with a hash with three elements' do
|
46
|
-
dson_ruby_or_dogescript =
|
47
|
-
'(' \
|
48
|
-
'"dson" is "awesome"' \
|
49
|
-
'|' \
|
50
|
-
'"ruby" is "great"' \
|
51
|
-
'|' \
|
52
|
-
'"dogescript" is "fine"' \
|
53
|
-
')'
|
54
|
-
|
55
|
-
dson_hash = {
|
56
|
-
dson: 'awesome',
|
57
|
-
ruby: 'great',
|
58
|
-
dogescript: 'fine'
|
59
|
-
}
|
60
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
61
|
-
|
62
|
-
regex_string =
|
63
|
-
'such' \
|
64
|
-
' ' +
|
65
|
-
dson_ruby_or_dogescript +
|
66
|
-
PUNCTUATION_MATCH +
|
67
|
-
' ' +
|
68
|
-
dson_ruby_or_dogescript +
|
69
|
-
PUNCTUATION_MATCH +
|
70
|
-
' ' +
|
71
|
-
dson_ruby_or_dogescript +
|
72
|
-
' ' +
|
73
|
-
'wow'
|
74
|
-
|
75
|
-
expect(dson_string).to match(
|
76
|
-
/#{regex_string}/
|
77
|
-
)
|
78
|
-
end
|
79
|
-
|
80
|
-
end
|
81
|
-
|
82
|
-
describe 'DSON simple array handling' do
|
83
|
-
|
84
|
-
it 'should correctly handle an empty array' do
|
85
|
-
dson_array = Array.new
|
86
|
-
dson_string = DSON.such_serialize_wow(dson_array)
|
87
|
-
|
88
|
-
expect(dson_string).to eq(
|
89
|
-
'so many'
|
90
|
-
)
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'should correctly handle an array with a single element' do
|
94
|
-
dson_array = %w(cheese)
|
95
|
-
dson_string = DSON.such_serialize_wow(dson_array)
|
96
|
-
|
97
|
-
expect(dson_string).to eq(
|
98
|
-
'so "cheese" many'
|
99
|
-
)
|
100
|
-
end
|
101
|
-
|
102
|
-
it 'should correctly handle an array with two elements' do
|
103
|
-
dson_array = %w(cheese wine)
|
104
|
-
dson_string = DSON.such_serialize_wow(dson_array)
|
105
|
-
|
106
|
-
expect(dson_string).to match(
|
107
|
-
/so "cheese" #{AND_MATCH} "wine" many/
|
108
|
-
)
|
109
|
-
end
|
110
|
-
|
111
|
-
it 'should correctly handle an array with three elements' do
|
112
|
-
dson_array = %w(cheese wine bread)
|
113
|
-
dson_string = DSON.such_serialize_wow(dson_array)
|
114
|
-
|
115
|
-
expect(dson_string).to match(
|
116
|
-
/so "cheese" #{AND_MATCH} "wine" #{AND_MATCH} "bread" many/
|
117
|
-
)
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
121
|
-
|
122
|
-
describe 'DSON nested arrays' do
|
123
|
-
|
124
|
-
it 'should correctly handle empty nested arrays' do
|
125
|
-
dson_array = [[]]
|
126
|
-
dson_string = DSON.such_serialize_wow(dson_array)
|
127
|
-
|
128
|
-
expect(dson_string).to eq(
|
129
|
-
'so so many many'
|
130
|
-
)
|
131
|
-
end
|
132
|
-
|
133
|
-
it 'should correctly handle nested arrays with elements' do
|
134
|
-
dson_array = ['cheese', []]
|
135
|
-
dson_string = DSON.such_serialize_wow(dson_array)
|
136
|
-
|
137
|
-
expect(dson_string).to match(
|
138
|
-
/so "cheese" #{AND_MATCH} so many many/
|
139
|
-
)
|
140
|
-
end
|
141
|
-
|
142
|
-
it 'should correctly handle a nested array with an element' do
|
143
|
-
dson_array = [['cheese']]
|
144
|
-
dson_string = DSON.such_serialize_wow(dson_array)
|
145
|
-
|
146
|
-
expect(dson_string).to eq(
|
147
|
-
'so so "cheese" many many'
|
148
|
-
)
|
149
|
-
end
|
150
|
-
|
151
|
-
it 'should correctly handle a more complex nested array' do
|
152
|
-
dson_array = ['cheese', ['cheese', ['cheese']]]
|
153
|
-
dson_string = DSON.such_serialize_wow(dson_array)
|
154
|
-
|
155
|
-
expect(dson_string).to match(
|
156
|
-
/so "cheese" #{AND_MATCH} so "cheese" #{AND_MATCH} so "cheese" many many many/
|
157
|
-
)
|
158
|
-
end
|
159
|
-
|
160
|
-
end
|
161
|
-
|
162
|
-
describe 'DSON nested hashes' do
|
163
|
-
|
164
|
-
it 'should handle a simple nested hash' do
|
165
|
-
dson_hash = {
|
166
|
-
nested: {}
|
167
|
-
}
|
168
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
169
|
-
|
170
|
-
expect(dson_string).to eq(
|
171
|
-
'such "nested" is such wow wow'
|
172
|
-
)
|
173
|
-
end
|
174
|
-
|
175
|
-
it 'should handle a further nested hash' do
|
176
|
-
dson_hash = {
|
177
|
-
nested: {
|
178
|
-
further_nested: {
|
179
|
-
}
|
180
|
-
}
|
181
|
-
}
|
182
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
183
|
-
|
184
|
-
expect(dson_string).to eq(
|
185
|
-
'such "nested" is such "further_nested" is such wow wow wow'
|
186
|
-
)
|
187
|
-
end
|
188
|
-
|
189
|
-
it 'should handle other elements in this hash' do
|
190
|
-
dson_hash = {
|
191
|
-
other: 'true',
|
192
|
-
nested: {
|
193
|
-
}
|
194
|
-
}
|
195
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
196
|
-
|
197
|
-
other_or_nested = '("other" is "true"|"nested" is such wow)'
|
198
|
-
|
199
|
-
expect(dson_string).to match(
|
200
|
-
/such #{other_or_nested}#{PUNCTUATION_MATCH} #{other_or_nested} wow/
|
201
|
-
)
|
202
|
-
end
|
203
|
-
|
204
|
-
it 'should handle elements in a nested hash' do
|
205
|
-
dson_hash = {
|
206
|
-
other: 'true',
|
207
|
-
nested: {
|
208
|
-
element: 'great'
|
209
|
-
}
|
210
|
-
}
|
211
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
212
|
-
|
213
|
-
other_or_nested = '("other" is "true"|"nested" is such "element" is "great" wow)'
|
214
|
-
|
215
|
-
expect(dson_string).to match(
|
216
|
-
/such #{other_or_nested}#{PUNCTUATION_MATCH} #{other_or_nested} wow/
|
217
|
-
)
|
218
|
-
end
|
219
|
-
|
220
|
-
it 'should handle multiple elements in the nested hash' do
|
221
|
-
dson_hash = {
|
222
|
-
wine: {
|
223
|
-
white: 'great',
|
224
|
-
red: 'greater'
|
225
|
-
}
|
226
|
-
}
|
227
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
228
|
-
|
229
|
-
white_or_red = '("white" is "great"|"red" is "greater")'
|
230
|
-
|
231
|
-
expect(dson_string).to match(
|
232
|
-
/such "wine" is such #{white_or_red}#{PUNCTUATION_MATCH} #{white_or_red} wow wow/
|
233
|
-
)
|
234
|
-
end
|
235
|
-
|
236
|
-
end
|
237
|
-
|
238
|
-
describe 'DSON hash and array mixes' do
|
239
|
-
|
240
|
-
it 'should handle an array of empty objects' do
|
241
|
-
dson_array = [
|
242
|
-
{}, {}
|
243
|
-
]
|
244
|
-
dson_string = DSON.such_serialize_wow(dson_array)
|
245
|
-
|
246
|
-
expect(dson_string).to match(
|
247
|
-
/so such wow #{AND_MATCH} such wow many/
|
248
|
-
)
|
249
|
-
end
|
250
|
-
|
251
|
-
it 'should handle an object with an empty array element' do
|
252
|
-
dson_hash = {
|
253
|
-
array: []
|
254
|
-
}
|
255
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
256
|
-
|
257
|
-
expect(dson_string).to eq(
|
258
|
-
'such "array" is so many wow'
|
259
|
-
)
|
260
|
-
end
|
261
|
-
|
262
|
-
it 'should handle an object with an array element' do
|
263
|
-
dson_hash = {
|
264
|
-
array: %w(olive grape)
|
265
|
-
}
|
266
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
267
|
-
|
268
|
-
expect(dson_string).to match(
|
269
|
-
/such "array" is so "olive" #{AND_MATCH} "grape" many wow/
|
270
|
-
)
|
271
|
-
end
|
272
|
-
|
273
|
-
it 'should handle an array with an object element' do
|
274
|
-
dson_array = [
|
275
|
-
{
|
276
|
-
first_name: 'Cyril',
|
277
|
-
surname: 'Figgis'
|
278
|
-
}
|
279
|
-
]
|
280
|
-
dson_string = DSON.such_serialize_wow(dson_array)
|
281
|
-
|
282
|
-
first_or_last_name = '("first_name" is "Cyril"|"surname" is "Figgis")'
|
283
|
-
|
284
|
-
expect(dson_string).to match(
|
285
|
-
/so such #{first_or_last_name}#{PUNCTUATION_MATCH} #{first_or_last_name} wow many/
|
286
|
-
)
|
287
|
-
end
|
288
|
-
|
289
|
-
end
|
290
|
-
|
291
|
-
describe 'DSON empty' do
|
292
|
-
|
293
|
-
it 'translates a nil object to empty' do
|
294
|
-
dson_hash = {
|
295
|
-
value: nil
|
296
|
-
}
|
297
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
298
|
-
|
299
|
-
expect(dson_string).to eq(
|
300
|
-
'such "value" is empty wow'
|
301
|
-
)
|
302
|
-
end
|
303
|
-
|
304
|
-
end
|
305
|
-
|
306
|
-
describe 'DSON booleans' do
|
307
|
-
|
308
|
-
it 'translates a true object to yes' do
|
309
|
-
dson_hash = {
|
310
|
-
value: true
|
311
|
-
}
|
312
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
313
|
-
|
314
|
-
expect(dson_string).to eq(
|
315
|
-
'such "value" is yes wow'
|
316
|
-
)
|
317
|
-
end
|
318
|
-
|
319
|
-
it 'translates a false object to no' do
|
320
|
-
dson_hash = {
|
321
|
-
value: false
|
322
|
-
}
|
323
|
-
dson_string = DSON.such_serialize_wow(dson_hash)
|
324
|
-
|
325
|
-
expect(dson_string).to eq(
|
326
|
-
'such "value" is no wow'
|
327
|
-
)
|
328
|
-
end
|
329
|
-
|
330
|
-
end
|
331
|
-
|
332
|
-
describe 'ruby objects' do
|
333
|
-
|
334
|
-
it 'translates a trivial class instance to DSON' do
|
335
|
-
ruby_object = DSONSpec::TrivialClass.new
|
336
|
-
dson_string = DSON.such_serialize_wow(ruby_object)
|
337
|
-
|
338
|
-
expect(dson_string).to eq('such wow')
|
339
|
-
end
|
340
|
-
|
341
|
-
it 'translates an example class instance to DSON' do
|
342
|
-
ruby_object = DSONSpec::ExampleClass.new('awesome', 'superb')
|
343
|
-
dson_string = DSON.such_serialize_wow(ruby_object)
|
344
|
-
|
345
|
-
name_or_value = '("name" is "awesome"|"value" is "superb")'
|
346
|
-
|
347
|
-
expect(dson_string).to match(
|
348
|
-
/such #{name_or_value}#{PUNCTUATION_MATCH} #{name_or_value} wow/
|
349
|
-
)
|
350
|
-
end
|
351
|
-
|
352
|
-
end
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
# it "quotes float values" do
|
380
|
-
# dson_hash = {
|
381
|
-
# value: 12.5
|
382
|
-
# }
|
383
|
-
# dson_string = DSON.such_serialize_wow(dson_hash)
|
384
|
-
|
385
|
-
# expect(dson_string).to eq(
|
386
|
-
# 'such "value" is 12.5 wow'
|
387
|
-
# )
|
388
|
-
# end
|
389
|
-
|
390
|
-
# end
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'DSON'
|
3
|
+
|
4
|
+
require_relative 'lib/example_class'
|
5
|
+
|
6
|
+
PUNCTUATION_MATCH = '(,|\.|!|\\?)'
|
7
|
+
AND_MATCH = '(and|also)'
|
8
|
+
|
9
|
+
describe 'simple hashes' do
|
10
|
+
|
11
|
+
it 'should be correct with an empty hash' do
|
12
|
+
dson_hash = Hash.new
|
13
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
14
|
+
|
15
|
+
expect(dson_string).to eq(
|
16
|
+
'such wow'
|
17
|
+
)
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should be correct with a hash with one element' do
|
21
|
+
dson_hash = {
|
22
|
+
dson: 'awesome'
|
23
|
+
}
|
24
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
25
|
+
|
26
|
+
expect(dson_string).to eq(
|
27
|
+
'such "dson" is "awesome" wow'
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'should be correct with a hash with two elements' do
|
32
|
+
dson_or_ruby = '("dson" is "awesome"|"ruby" is "great")'
|
33
|
+
|
34
|
+
dson_hash = {
|
35
|
+
dson: 'awesome',
|
36
|
+
ruby: 'great'
|
37
|
+
}
|
38
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
39
|
+
|
40
|
+
expect(dson_string).to match(
|
41
|
+
/such #{dson_or_ruby}#{PUNCTUATION_MATCH} #{dson_or_ruby} wow/
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'should be correct with a hash with three elements' do
|
46
|
+
dson_ruby_or_dogescript =
|
47
|
+
'(' \
|
48
|
+
'"dson" is "awesome"' \
|
49
|
+
'|' \
|
50
|
+
'"ruby" is "great"' \
|
51
|
+
'|' \
|
52
|
+
'"dogescript" is "fine"' \
|
53
|
+
')'
|
54
|
+
|
55
|
+
dson_hash = {
|
56
|
+
dson: 'awesome',
|
57
|
+
ruby: 'great',
|
58
|
+
dogescript: 'fine'
|
59
|
+
}
|
60
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
61
|
+
|
62
|
+
regex_string =
|
63
|
+
'such' \
|
64
|
+
' ' +
|
65
|
+
dson_ruby_or_dogescript +
|
66
|
+
PUNCTUATION_MATCH +
|
67
|
+
' ' +
|
68
|
+
dson_ruby_or_dogescript +
|
69
|
+
PUNCTUATION_MATCH +
|
70
|
+
' ' +
|
71
|
+
dson_ruby_or_dogescript +
|
72
|
+
' ' +
|
73
|
+
'wow'
|
74
|
+
|
75
|
+
expect(dson_string).to match(
|
76
|
+
/#{regex_string}/
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
describe 'DSON simple array handling' do
|
83
|
+
|
84
|
+
it 'should correctly handle an empty array' do
|
85
|
+
dson_array = Array.new
|
86
|
+
dson_string = DSON.such_serialize_wow(dson_array)
|
87
|
+
|
88
|
+
expect(dson_string).to eq(
|
89
|
+
'so many'
|
90
|
+
)
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should correctly handle an array with a single element' do
|
94
|
+
dson_array = %w(cheese)
|
95
|
+
dson_string = DSON.such_serialize_wow(dson_array)
|
96
|
+
|
97
|
+
expect(dson_string).to eq(
|
98
|
+
'so "cheese" many'
|
99
|
+
)
|
100
|
+
end
|
101
|
+
|
102
|
+
it 'should correctly handle an array with two elements' do
|
103
|
+
dson_array = %w(cheese wine)
|
104
|
+
dson_string = DSON.such_serialize_wow(dson_array)
|
105
|
+
|
106
|
+
expect(dson_string).to match(
|
107
|
+
/so "cheese" #{AND_MATCH} "wine" many/
|
108
|
+
)
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'should correctly handle an array with three elements' do
|
112
|
+
dson_array = %w(cheese wine bread)
|
113
|
+
dson_string = DSON.such_serialize_wow(dson_array)
|
114
|
+
|
115
|
+
expect(dson_string).to match(
|
116
|
+
/so "cheese" #{AND_MATCH} "wine" #{AND_MATCH} "bread" many/
|
117
|
+
)
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
describe 'DSON nested arrays' do
|
123
|
+
|
124
|
+
it 'should correctly handle empty nested arrays' do
|
125
|
+
dson_array = [[]]
|
126
|
+
dson_string = DSON.such_serialize_wow(dson_array)
|
127
|
+
|
128
|
+
expect(dson_string).to eq(
|
129
|
+
'so so many many'
|
130
|
+
)
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'should correctly handle nested arrays with elements' do
|
134
|
+
dson_array = ['cheese', []]
|
135
|
+
dson_string = DSON.such_serialize_wow(dson_array)
|
136
|
+
|
137
|
+
expect(dson_string).to match(
|
138
|
+
/so "cheese" #{AND_MATCH} so many many/
|
139
|
+
)
|
140
|
+
end
|
141
|
+
|
142
|
+
it 'should correctly handle a nested array with an element' do
|
143
|
+
dson_array = [['cheese']]
|
144
|
+
dson_string = DSON.such_serialize_wow(dson_array)
|
145
|
+
|
146
|
+
expect(dson_string).to eq(
|
147
|
+
'so so "cheese" many many'
|
148
|
+
)
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'should correctly handle a more complex nested array' do
|
152
|
+
dson_array = ['cheese', ['cheese', ['cheese']]]
|
153
|
+
dson_string = DSON.such_serialize_wow(dson_array)
|
154
|
+
|
155
|
+
expect(dson_string).to match(
|
156
|
+
/so "cheese" #{AND_MATCH} so "cheese" #{AND_MATCH} so "cheese" many many many/
|
157
|
+
)
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
describe 'DSON nested hashes' do
|
163
|
+
|
164
|
+
it 'should handle a simple nested hash' do
|
165
|
+
dson_hash = {
|
166
|
+
nested: {}
|
167
|
+
}
|
168
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
169
|
+
|
170
|
+
expect(dson_string).to eq(
|
171
|
+
'such "nested" is such wow wow'
|
172
|
+
)
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'should handle a further nested hash' do
|
176
|
+
dson_hash = {
|
177
|
+
nested: {
|
178
|
+
further_nested: {
|
179
|
+
}
|
180
|
+
}
|
181
|
+
}
|
182
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
183
|
+
|
184
|
+
expect(dson_string).to eq(
|
185
|
+
'such "nested" is such "further_nested" is such wow wow wow'
|
186
|
+
)
|
187
|
+
end
|
188
|
+
|
189
|
+
it 'should handle other elements in this hash' do
|
190
|
+
dson_hash = {
|
191
|
+
other: 'true',
|
192
|
+
nested: {
|
193
|
+
}
|
194
|
+
}
|
195
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
196
|
+
|
197
|
+
other_or_nested = '("other" is "true"|"nested" is such wow)'
|
198
|
+
|
199
|
+
expect(dson_string).to match(
|
200
|
+
/such #{other_or_nested}#{PUNCTUATION_MATCH} #{other_or_nested} wow/
|
201
|
+
)
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'should handle elements in a nested hash' do
|
205
|
+
dson_hash = {
|
206
|
+
other: 'true',
|
207
|
+
nested: {
|
208
|
+
element: 'great'
|
209
|
+
}
|
210
|
+
}
|
211
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
212
|
+
|
213
|
+
other_or_nested = '("other" is "true"|"nested" is such "element" is "great" wow)'
|
214
|
+
|
215
|
+
expect(dson_string).to match(
|
216
|
+
/such #{other_or_nested}#{PUNCTUATION_MATCH} #{other_or_nested} wow/
|
217
|
+
)
|
218
|
+
end
|
219
|
+
|
220
|
+
it 'should handle multiple elements in the nested hash' do
|
221
|
+
dson_hash = {
|
222
|
+
wine: {
|
223
|
+
white: 'great',
|
224
|
+
red: 'greater'
|
225
|
+
}
|
226
|
+
}
|
227
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
228
|
+
|
229
|
+
white_or_red = '("white" is "great"|"red" is "greater")'
|
230
|
+
|
231
|
+
expect(dson_string).to match(
|
232
|
+
/such "wine" is such #{white_or_red}#{PUNCTUATION_MATCH} #{white_or_red} wow wow/
|
233
|
+
)
|
234
|
+
end
|
235
|
+
|
236
|
+
end
|
237
|
+
|
238
|
+
describe 'DSON hash and array mixes' do
|
239
|
+
|
240
|
+
it 'should handle an array of empty objects' do
|
241
|
+
dson_array = [
|
242
|
+
{}, {}
|
243
|
+
]
|
244
|
+
dson_string = DSON.such_serialize_wow(dson_array)
|
245
|
+
|
246
|
+
expect(dson_string).to match(
|
247
|
+
/so such wow #{AND_MATCH} such wow many/
|
248
|
+
)
|
249
|
+
end
|
250
|
+
|
251
|
+
it 'should handle an object with an empty array element' do
|
252
|
+
dson_hash = {
|
253
|
+
array: []
|
254
|
+
}
|
255
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
256
|
+
|
257
|
+
expect(dson_string).to eq(
|
258
|
+
'such "array" is so many wow'
|
259
|
+
)
|
260
|
+
end
|
261
|
+
|
262
|
+
it 'should handle an object with an array element' do
|
263
|
+
dson_hash = {
|
264
|
+
array: %w(olive grape)
|
265
|
+
}
|
266
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
267
|
+
|
268
|
+
expect(dson_string).to match(
|
269
|
+
/such "array" is so "olive" #{AND_MATCH} "grape" many wow/
|
270
|
+
)
|
271
|
+
end
|
272
|
+
|
273
|
+
it 'should handle an array with an object element' do
|
274
|
+
dson_array = [
|
275
|
+
{
|
276
|
+
first_name: 'Cyril',
|
277
|
+
surname: 'Figgis'
|
278
|
+
}
|
279
|
+
]
|
280
|
+
dson_string = DSON.such_serialize_wow(dson_array)
|
281
|
+
|
282
|
+
first_or_last_name = '("first_name" is "Cyril"|"surname" is "Figgis")'
|
283
|
+
|
284
|
+
expect(dson_string).to match(
|
285
|
+
/so such #{first_or_last_name}#{PUNCTUATION_MATCH} #{first_or_last_name} wow many/
|
286
|
+
)
|
287
|
+
end
|
288
|
+
|
289
|
+
end
|
290
|
+
|
291
|
+
describe 'DSON empty' do
|
292
|
+
|
293
|
+
it 'translates a nil object to empty' do
|
294
|
+
dson_hash = {
|
295
|
+
value: nil
|
296
|
+
}
|
297
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
298
|
+
|
299
|
+
expect(dson_string).to eq(
|
300
|
+
'such "value" is empty wow'
|
301
|
+
)
|
302
|
+
end
|
303
|
+
|
304
|
+
end
|
305
|
+
|
306
|
+
describe 'DSON booleans' do
|
307
|
+
|
308
|
+
it 'translates a true object to yes' do
|
309
|
+
dson_hash = {
|
310
|
+
value: true
|
311
|
+
}
|
312
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
313
|
+
|
314
|
+
expect(dson_string).to eq(
|
315
|
+
'such "value" is yes wow'
|
316
|
+
)
|
317
|
+
end
|
318
|
+
|
319
|
+
it 'translates a false object to no' do
|
320
|
+
dson_hash = {
|
321
|
+
value: false
|
322
|
+
}
|
323
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
324
|
+
|
325
|
+
expect(dson_string).to eq(
|
326
|
+
'such "value" is no wow'
|
327
|
+
)
|
328
|
+
end
|
329
|
+
|
330
|
+
end
|
331
|
+
|
332
|
+
describe 'ruby objects' do
|
333
|
+
|
334
|
+
it 'translates a trivial class instance to DSON' do
|
335
|
+
ruby_object = DSONSpec::TrivialClass.new
|
336
|
+
dson_string = DSON.such_serialize_wow(ruby_object)
|
337
|
+
|
338
|
+
expect(dson_string).to eq('such wow')
|
339
|
+
end
|
340
|
+
|
341
|
+
it 'translates an example class instance to DSON' do
|
342
|
+
ruby_object = DSONSpec::ExampleClass.new('awesome', 'superb')
|
343
|
+
dson_string = DSON.such_serialize_wow(ruby_object)
|
344
|
+
|
345
|
+
name_or_value = '("name" is "awesome"|"value" is "superb")'
|
346
|
+
|
347
|
+
expect(dson_string).to match(
|
348
|
+
/such #{name_or_value}#{PUNCTUATION_MATCH} #{name_or_value} wow/
|
349
|
+
)
|
350
|
+
end
|
351
|
+
|
352
|
+
end
|
353
|
+
|
354
|
+
describe "DSON numbers" do
|
355
|
+
|
356
|
+
it 'converts integers to octal' do
|
357
|
+
dson_hash = {
|
358
|
+
value: 13
|
359
|
+
}
|
360
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
361
|
+
|
362
|
+
expect(dson_string).to eq(
|
363
|
+
'such "value" is 15 wow'
|
364
|
+
)
|
365
|
+
end
|
366
|
+
|
367
|
+
it 'converts floats to octal' do
|
368
|
+
dson_hash = {
|
369
|
+
value: 18.00001
|
370
|
+
}
|
371
|
+
dson_string = DSON.such_serialize_wow(dson_hash)
|
372
|
+
|
373
|
+
expect(dson_string).to eq(
|
374
|
+
'such "value" is 22.8 wow'
|
375
|
+
)
|
376
|
+
end
|
377
|
+
|
378
|
+
end
|