rison 1.2.1 → 2.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.
data/lib/rison/parser.rb DELETED
@@ -1,360 +0,0 @@
1
- require 'dhaka'
2
- require 'rison/grammar'
3
-
4
- module Rison
5
- class Parser < Dhaka::CompiledParser
6
-
7
- self.grammar = Rison::Grammar
8
-
9
- start_with 0
10
-
11
- at_state(48) {
12
- for_symbols("'") { shift_to 2 }
13
- for_symbols("object") { shift_to 25 }
14
- for_symbols("value") { shift_to 50 }
15
- for_symbols("number") { shift_to 46 }
16
- for_symbols("!") { shift_to 47 }
17
- for_symbols("string") { shift_to 26 }
18
- for_symbols("array") { shift_to 28 }
19
- for_symbols("idstart") { shift_to 38 }
20
- for_symbols("integer_token") { shift_to 5 }
21
- for_symbols("!t") { shift_to 24 }
22
- for_symbols(")") { shift_to 49 }
23
- for_symbols("idstart_safe_token") { shift_to 14 }
24
- for_symbols("!f") { shift_to 27 }
25
- for_symbols("(") { shift_to 29 }
26
- for_symbols("id") { shift_to 53 }
27
- for_symbols("int") { shift_to 8 }
28
- for_symbols("!n") { shift_to 1 }
29
- for_symbols("elements") { shift_to 54 }
30
- }
31
-
32
- at_state(47) {
33
- for_symbols("(") { shift_to 48 }
34
- }
35
-
36
- at_state(22) {
37
- for_symbols(",", ":", "_End_", ")") { reduce_with "non_empty_string" }
38
- }
39
-
40
- at_state(19) {
41
- for_symbols("!!", "idstart_safe_token", "integer_token", "!'", "'", "char_token", "idchar_safe_token") { reduce_with "strchar_num" }
42
- }
43
-
44
- at_state(5) {
45
- for_symbols("!!", ",", "frac_token", "idstart_safe_token", "integer_token", ":", "!'", "_End_", "'", "exponent_token", "char_token", ")", "idchar_safe_token") { reduce_with "integer_literal" }
46
- }
47
-
48
- at_state(54) {
49
- for_symbols(")") { shift_to 55 }
50
- }
51
-
52
- at_state(45) {
53
- for_symbols(",", ")") { reduce_with "pair_key_value" }
54
- }
55
-
56
- at_state(41) {
57
- for_symbols(",", ":", "_End_", ")") { reduce_with "idchars_idchars" }
58
- }
59
-
60
- at_state(31) {
61
- for_symbols(",", "_End_", ")") { reduce_with "non_empty_object" }
62
- }
63
-
64
- at_state(8) {
65
- for_symbols("exp") { shift_to 9 }
66
- for_symbols("exponent_token") { shift_to 13 }
67
- for_symbols("frac") { shift_to 11 }
68
- for_symbols("frac_token") { shift_to 10 }
69
- for_symbols("!!", ",", "idstart_safe_token", "integer_token", "!'", "_End_", "'", "char_token", ")", "idchar_safe_token") { reduce_with "number_int" }
70
- }
71
-
72
- at_state(7) {
73
- for_symbols("!!", ",", "idstart_safe_token", "integer_token", ":", "!'", "_End_", "'", "char_token", ")", "idchar_safe_token") { reduce_with "idchar_char" }
74
- }
75
-
76
- at_state(53) {
77
- for_symbols(",", "_End_", ")") { reduce_with "value_id" }
78
- }
79
-
80
- at_state(21) {
81
- for_symbols("'") { shift_to 22 }
82
- }
83
-
84
- at_state(55) {
85
- for_symbols(",", "_End_", ")") { reduce_with "non_empty_array" }
86
- }
87
-
88
- at_state(52) {
89
- for_symbols(")") { reduce_with "element_values" }
90
- }
91
-
92
- at_state(44) {
93
- for_symbols("'") { shift_to 2 }
94
- for_symbols("object") { shift_to 25 }
95
- for_symbols("number") { shift_to 46 }
96
- for_symbols("!") { shift_to 47 }
97
- for_symbols("string") { shift_to 26 }
98
- for_symbols("array") { shift_to 28 }
99
- for_symbols("idstart") { shift_to 38 }
100
- for_symbols("value") { shift_to 45 }
101
- for_symbols("integer_token") { shift_to 5 }
102
- for_symbols("!t") { shift_to 24 }
103
- for_symbols("idstart_safe_token") { shift_to 14 }
104
- for_symbols("!f") { shift_to 27 }
105
- for_symbols("(") { shift_to 29 }
106
- for_symbols("id") { shift_to 53 }
107
- for_symbols("int") { shift_to 8 }
108
- for_symbols("!n") { shift_to 1 }
109
- }
110
-
111
- at_state(42) {
112
- for_symbols(",", ":", "_End_", ")") { reduce_with "id_idstart_idchars" }
113
- }
114
-
115
- at_state(36) {
116
- for_symbols("members") { shift_to 37 }
117
- for_symbols("'") { shift_to 2 }
118
- for_symbols("key") { shift_to 43 }
119
- for_symbols("idstart") { shift_to 38 }
120
- for_symbols("string") { shift_to 33 }
121
- for_symbols("idstart_safe_token") { shift_to 14 }
122
- for_symbols("pair") { shift_to 35 }
123
- for_symbols("id") { shift_to 34 }
124
- }
125
-
126
- at_state(3) {
127
- for_symbols(",", ":", "_End_", ")") { reduce_with "empty_string" }
128
- }
129
-
130
- at_state(39) {
131
- for_symbols(",", ":", "_End_", ")") { reduce_with "idchars_int" }
132
- }
133
-
134
- at_state(35) {
135
- for_symbols(",") { shift_to 36 }
136
- for_symbols(")") { reduce_with "member_pair" }
137
- }
138
-
139
- at_state(27) {
140
- for_symbols(",", "_End_", ")") { reduce_with "value_false" }
141
- }
142
-
143
- at_state(18) {
144
- for_symbols("!!", "idstart_safe_token", "integer_token", "!'", "'", "char_token", "idchar_safe_token") { reduce_with "strchar_quoted_exclamation" }
145
- }
146
-
147
- at_state(11) {
148
- for_symbols("exp") { shift_to 12 }
149
- for_symbols("!!", ",", "idstart_safe_token", "integer_token", "!'", "_End_", "'", "char_token", ")", "idchar_safe_token") { reduce_with "number_int_frac" }
150
- for_symbols("exponent_token") { shift_to 13 }
151
- }
152
-
153
- at_state(51) {
154
- for_symbols("'") { shift_to 2 }
155
- for_symbols("object") { shift_to 25 }
156
- for_symbols("value") { shift_to 50 }
157
- for_symbols("elements") { shift_to 52 }
158
- for_symbols("number") { shift_to 46 }
159
- for_symbols("!") { shift_to 47 }
160
- for_symbols("string") { shift_to 26 }
161
- for_symbols("array") { shift_to 28 }
162
- for_symbols("idstart") { shift_to 38 }
163
- for_symbols("integer_token") { shift_to 5 }
164
- for_symbols("!t") { shift_to 24 }
165
- for_symbols("idstart_safe_token") { shift_to 14 }
166
- for_symbols("!f") { shift_to 27 }
167
- for_symbols("(") { shift_to 29 }
168
- for_symbols("id") { shift_to 53 }
169
- for_symbols("int") { shift_to 8 }
170
- for_symbols("!n") { shift_to 1 }
171
- }
172
-
173
- at_state(50) {
174
- for_symbols(",") { shift_to 51 }
175
- for_symbols(")") { reduce_with "element_value" }
176
- }
177
-
178
- at_state(43) {
179
- for_symbols(":") { shift_to 44 }
180
- }
181
-
182
- at_state(38) {
183
- for_symbols("idchars") { shift_to 42 }
184
- for_symbols(",", ":", "_End_", ")") { reduce_with "id_idstart" }
185
- for_symbols("idstart") { shift_to 17 }
186
- for_symbols("integer_token") { shift_to 5 }
187
- for_symbols("idstart_safe_token") { shift_to 14 }
188
- for_symbols("idchar") { shift_to 40 }
189
- for_symbols("idchar_safe_token") { shift_to 7 }
190
- for_symbols("int") { shift_to 39 }
191
- }
192
-
193
- at_state(37) {
194
- for_symbols(")") { reduce_with "member_pairs" }
195
- }
196
-
197
- at_state(15) {
198
- for_symbols("!!", "idstart_safe_token", "integer_token", "!'", "'", "char_token", "idchar_safe_token") { reduce_with "strchar_idchar" }
199
- }
200
-
201
- at_state(12) {
202
- for_symbols("!!", ",", "idstart_safe_token", "integer_token", "!'", "_End_", "'", "char_token", ")", "idchar_safe_token") { reduce_with "number_int_frac_exp" }
203
- }
204
-
205
- at_state(40) {
206
- for_symbols(",", ":", "_End_", ")") { reduce_with "idchars_idchar" }
207
- for_symbols("idstart") { shift_to 17 }
208
- for_symbols("integer_token") { shift_to 5 }
209
- for_symbols("idchars") { shift_to 41 }
210
- for_symbols("idstart_safe_token") { shift_to 14 }
211
- for_symbols("idchar") { shift_to 40 }
212
- for_symbols("idchar_safe_token") { shift_to 7 }
213
- for_symbols("int") { shift_to 39 }
214
- }
215
-
216
- at_state(34) {
217
- for_symbols(":") { reduce_with "key_id" }
218
- }
219
-
220
- at_state(32) {
221
- for_symbols(",", "_End_", ")") { reduce_with "empty_object" }
222
- }
223
-
224
- at_state(23) {
225
- for_symbols("_End_") { reduce_with "start" }
226
- }
227
-
228
- at_state(17) {
229
- for_symbols("!!", ",", "idstart_safe_token", "integer_token", ":", "!'", "_End_", "'", "char_token", ")", "idchar_safe_token") { reduce_with "idchar_idstart" }
230
- }
231
-
232
- at_state(16) {
233
- for_symbols("idstart") { shift_to 17 }
234
- for_symbols("!'") { shift_to 6 }
235
- for_symbols("strchars") { shift_to 20 }
236
- for_symbols("'") { reduce_with "strchars_char" }
237
- for_symbols("integer_token") { shift_to 5 }
238
- for_symbols("idchar") { shift_to 15 }
239
- for_symbols("char_token") { shift_to 4 }
240
- for_symbols("idstart_safe_token") { shift_to 14 }
241
- for_symbols("strchar") { shift_to 16 }
242
- for_symbols("idchar_safe_token") { shift_to 7 }
243
- for_symbols("int") { shift_to 8 }
244
- for_symbols("number") { shift_to 19 }
245
- for_symbols("!!") { shift_to 18 }
246
- }
247
-
248
- at_state(4) {
249
- for_symbols("!!", "idstart_safe_token", "integer_token", "!'", "'", "char_token", "idchar_safe_token") { reduce_with "strchar_char" }
250
- }
251
-
252
- at_state(49) {
253
- for_symbols(",", "_End_", ")") { reduce_with "empty_array" }
254
- }
255
-
256
- at_state(25) {
257
- for_symbols(",", "_End_", ")") { reduce_with "value_object" }
258
- }
259
-
260
- at_state(10) {
261
- for_symbols("!!", ",", "idstart_safe_token", "integer_token", "!'", "_End_", "'", "exponent_token", "char_token", ")", "idchar_safe_token") { reduce_with "frac_literal" }
262
- }
263
-
264
- at_state(28) {
265
- for_symbols(",", "_End_", ")") { reduce_with "value_array" }
266
- }
267
-
268
- at_state(26) {
269
- for_symbols(",", "_End_", ")") { reduce_with "value_string" }
270
- }
271
-
272
- at_state(0) {
273
- for_symbols("'") { shift_to 2 }
274
- for_symbols("object") { shift_to 25 }
275
- for_symbols("value") { shift_to 23 }
276
- for_symbols("number") { shift_to 46 }
277
- for_symbols("!") { shift_to 47 }
278
- for_symbols("string") { shift_to 26 }
279
- for_symbols("array") { shift_to 28 }
280
- for_symbols("idstart") { shift_to 38 }
281
- for_symbols("integer_token") { shift_to 5 }
282
- for_symbols("!t") { shift_to 24 }
283
- for_symbols("idstart_safe_token") { shift_to 14 }
284
- for_symbols("!f") { shift_to 27 }
285
- for_symbols("(") { shift_to 29 }
286
- for_symbols("id") { shift_to 53 }
287
- for_symbols("int") { shift_to 8 }
288
- for_symbols("!n") { shift_to 1 }
289
- }
290
-
291
- at_state(46) {
292
- for_symbols(",", "_End_", ")") { reduce_with "value_number" }
293
- }
294
-
295
- at_state(24) {
296
- for_symbols(",", "_End_", ")") { reduce_with "value_true" }
297
- }
298
-
299
- at_state(20) {
300
- for_symbols("'") { reduce_with "strchars_chars" }
301
- }
302
-
303
- at_state(13) {
304
- for_symbols("!!", ",", "idstart_safe_token", "integer_token", "!'", "_End_", "'", "char_token", ")", "idchar_safe_token") { reduce_with "exponent_literal" }
305
- }
306
-
307
- at_state(9) {
308
- for_symbols("!!", ",", "idstart_safe_token", "integer_token", "!'", "_End_", "'", "char_token", ")", "idchar_safe_token") { reduce_with "number_int_exp" }
309
- }
310
-
311
- at_state(1) {
312
- for_symbols(",", "_End_", ")") { reduce_with "value_null" }
313
- }
314
-
315
- at_state(33) {
316
- for_symbols(":") { reduce_with "key_string" }
317
- }
318
-
319
- at_state(30) {
320
- for_symbols(")") { shift_to 31 }
321
- }
322
-
323
- at_state(29) {
324
- for_symbols("'") { shift_to 2 }
325
- for_symbols("members") { shift_to 30 }
326
- for_symbols("key") { shift_to 43 }
327
- for_symbols("idstart") { shift_to 38 }
328
- for_symbols("string") { shift_to 33 }
329
- for_symbols("idstart_safe_token") { shift_to 14 }
330
- for_symbols(")") { shift_to 32 }
331
- for_symbols("pair") { shift_to 35 }
332
- for_symbols("id") { shift_to 34 }
333
- }
334
-
335
- at_state(14) {
336
- for_symbols("!!", ",", "idstart_safe_token", "integer_token", ":", "!'", "_End_", "'", "char_token", ")", "idchar_safe_token") { reduce_with "idstart_char" }
337
- }
338
-
339
- at_state(6) {
340
- for_symbols("!!", "idstart_safe_token", "integer_token", "!'", "'", "char_token", "idchar_safe_token") { reduce_with "strchar_quoted_single_quote" }
341
- }
342
-
343
- at_state(2) {
344
- for_symbols("'") { shift_to 3 }
345
- for_symbols("idstart") { shift_to 17 }
346
- for_symbols("!'") { shift_to 6 }
347
- for_symbols("integer_token") { shift_to 5 }
348
- for_symbols("idchar") { shift_to 15 }
349
- for_symbols("char_token") { shift_to 4 }
350
- for_symbols("idstart_safe_token") { shift_to 14 }
351
- for_symbols("strchar") { shift_to 16 }
352
- for_symbols("idchar_safe_token") { shift_to 7 }
353
- for_symbols("int") { shift_to 8 }
354
- for_symbols("strchars") { shift_to 21 }
355
- for_symbols("number") { shift_to 19 }
356
- for_symbols("!!") { shift_to 18 }
357
- }
358
-
359
- end
360
- end
data/test/test_dump.rb DELETED
@@ -1,70 +0,0 @@
1
- require 'rational'
2
- require 'test/unit'
3
- require 'rison'
4
- require 'rison/dump'
5
-
6
- class RisonDumpTests < Test::Unit::TestCase
7
- def r(object)
8
- Rison.dump(object)
9
- end
10
-
11
- def test_true
12
- assert_equal '!t', r(true)
13
- end
14
-
15
- def test_false
16
- assert_equal '!f', r(false)
17
- end
18
-
19
- def test_nil
20
- assert_equal '!n', r(nil)
21
- end
22
-
23
- def test_integers
24
- assert_equal '0', r(0)
25
- assert_equal '42', r(42)
26
- assert_equal '-42', r(-42)
27
- end
28
-
29
- def test_fractions
30
- assert_equal '1.5', r(Rational(3, 2))
31
- assert_equal '99.99', r(Rational(9999, 100))
32
- end
33
-
34
- def test_ids
35
- ['a', 'a-z', 'domain.com'].each { |s| assert_equal s, r(s) }
36
- end
37
-
38
- def test_strings
39
- assert_equal "''", r('')
40
- assert_equal "'0a'", r('0a')
41
- assert_equal "'-h'", r('-h')
42
- assert_equal "'can!'t'", r("can't")
43
- assert_equal "'wow!!'", r('wow!')
44
- assert_equal "'abc def'", r('abc def')
45
- assert_equal "'user@domain.com'", r('user@domain.com')
46
- assert_equal "'US $10'", r('US $10')
47
- end
48
-
49
- def test_empty_object
50
- assert_equal '()', r({})
51
- end
52
-
53
- def test_non_empty_objects
54
- assert_equal '(a:0)', r({:a => 0})
55
- assert_equal '(id:!n,type:/common/document)', r({'id' => nil, 'type' => '/common/document'})
56
- assert_equal '(id:!n,type:/common/document)', r({:id => nil, :type => :'/common/document'})
57
- end
58
-
59
- def test_empty_array
60
- assert_equal '!()', r([])
61
- end
62
-
63
- def test_non_empty_arrays
64
- assert_equal %{!(!t,!f,!n,'')}, r([true, false, nil, ''])
65
- end
66
-
67
- def test_undumpable_objects
68
- assert_raises(ArgumentError) { r(Array) }
69
- end
70
- end
data/test/test_parser.rb DELETED
@@ -1,106 +0,0 @@
1
- require 'rational'
2
- require 'test/unit'
3
- require 'rison'
4
-
5
- class RisonParserTests < Test::Unit::TestCase
6
-
7
- def rison(string)
8
- Rison.load(string)
9
- end
10
-
11
- def assert_invalid(string)
12
- assert_raises(Rison::ParseError) { rison(string) }
13
- end
14
-
15
- # cf. http://mjtemplate.org/examples/rison.html
16
-
17
- def test_true
18
- assert_equal true, rison('!t')
19
- end
20
-
21
- def test_false
22
- assert_equal false, rison('!f')
23
- end
24
-
25
- def test_null
26
- assert_equal nil, rison('!n')
27
- end
28
-
29
- def test_zero
30
- assert_equal 0, rison('0')
31
- end
32
-
33
- def test_positive_integer
34
- assert_equal 1, rison('1')
35
- assert_equal 12, rison('12')
36
- end
37
-
38
- def test_negative_integer
39
- assert_equal -3, rison('-3')
40
- assert_equal -33, rison('-33')
41
- end
42
-
43
- def test_rational
44
- assert_equal Rational(3, 2), rison('1.5')
45
- assert_equal Rational(9999, 100), rison('99.99')
46
- end
47
-
48
- def test_positive_exponent
49
- assert_equal 10**30, rison('1e30')
50
- end
51
-
52
- def test_negative_exponent
53
- assert_equal 10**-30, rison('1e-30')
54
- end
55
-
56
- def test_fraction_and_exponent
57
- assert_equal 150, rison('1.5e2')
58
- end
59
-
60
- def test_ids
61
- %w( a a-z domain.com ).each { |s| assert_equal s.to_sym, rison(s) }
62
- end
63
-
64
- def test_strings
65
- assert_equal '', rison("''")
66
- assert_equal '0a', rison("'0a'")
67
- assert_equal '-h', rison("'-h'")
68
- assert_equal "can't", rison("'can!'t'")
69
- assert_equal 'wow!', rison("'wow!!'")
70
- assert_equal 'abc def', rison("'abc def'")
71
- assert_equal 'user@domain.com', rison("'user@domain.com'")
72
- assert_equal 'US $10', rison("'US $10'")
73
- end
74
-
75
- def test_empty_object
76
- assert_equal Hash.new, rison('()')
77
- end
78
-
79
- def test_non_empty_objects
80
- expected = {:a => 0}
81
- assert_equal expected, rison('(a:0)')
82
-
83
- expected = {:id => nil, :type => :'/common/document'}
84
- assert_equal expected, rison('(id:!n,type:/common/document)')
85
- end
86
-
87
- def test_empty_array
88
- assert_equal [], rison('!()')
89
- end
90
-
91
- def test_array
92
- assert_equal [ true, false, nil, '' ], rison(%{!(!t,!f,!n,'')})
93
- end
94
-
95
- def test_invalid_expressions
96
- assert_invalid '-h'
97
- assert_invalid '1.5e+2'
98
- assert_invalid '1.5E2'
99
- assert_invalid '1.5E+2'
100
- assert_invalid '1.5E-2'
101
- assert_invalid 'abc def'
102
- assert_invalid 'US $10'
103
- assert_invalid 'user@domain.com'
104
- end
105
-
106
- end