yajl-ruby 0.6.6 → 0.6.7
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.
Potentially problematic release.
This version of yajl-ruby might be problematic. Click here for more details.
- data/CHANGELOG.md +4 -0
- data/VERSION.yml +2 -2
- data/benchmark/encode.rb +1 -1
- data/benchmark/parse.rb +1 -1
- data/benchmark/parse_stream.rb +1 -1
- data/ext/api/yajl_gen.h +31 -1
- data/ext/yajl_encode.c +12 -3
- data/ext/yajl_encode.h +6 -0
- data/ext/yajl_gen.c +52 -29
- data/lib/yajl.rb +1 -1
- data/yajl-ruby.gemspec +2 -2
- metadata +2 -2
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.6.7 (December 4th, 2009)
|
4
|
+
* Bump internal version constant to the proper value (doh!)
|
5
|
+
* Bring over latest from Yajl upstream
|
6
|
+
|
3
7
|
## 0.6.6 (December 1st, 2009)
|
4
8
|
* Brought over some optimizations from Macruby's use of some yajl-ruby codez
|
5
9
|
* Yajl::HttpStream now supports being killed for long-running requests, thanks to Filipe Giusti <filipegiusti@gmail.com>
|
data/VERSION.yml
CHANGED
data/benchmark/encode.rb
CHANGED
data/benchmark/parse.rb
CHANGED
data/benchmark/parse_stream.rb
CHANGED
data/ext/api/yajl_gen.h
CHANGED
@@ -60,12 +60,20 @@ extern "C" {
|
|
60
60
|
yajl_gen_generation_complete,
|
61
61
|
/** yajl_gen_double was passed an invalid floating point value
|
62
62
|
* (infinity or NaN). */
|
63
|
-
yajl_gen_invalid_number
|
63
|
+
yajl_gen_invalid_number,
|
64
|
+
/** A print callback was passed in, so there is no internal
|
65
|
+
* buffer to get from */
|
66
|
+
yajl_gen_no_buf
|
64
67
|
} yajl_gen_status;
|
65
68
|
|
66
69
|
/** an opaque handle to a generator */
|
67
70
|
typedef struct yajl_gen_t * yajl_gen;
|
68
71
|
|
72
|
+
/** a callback used for "printing" the results. */
|
73
|
+
typedef void (*yajl_print_t)(void * ctx,
|
74
|
+
const char * str,
|
75
|
+
unsigned int len);
|
76
|
+
|
69
77
|
/** configuration structure for the generator */
|
70
78
|
typedef struct {
|
71
79
|
/** generate indented (beautiful) output */
|
@@ -89,6 +97,28 @@ extern "C" {
|
|
89
97
|
yajl_gen YAJL_API yajl_gen_alloc(const yajl_gen_config * config,
|
90
98
|
const yajl_alloc_funcs * allocFuncs);
|
91
99
|
|
100
|
+
/** allocate a generator handle that will print to the specified
|
101
|
+
* callback rather than storing the results in an internal buffer.
|
102
|
+
* \param callback a pointer to a printer function. May be NULL
|
103
|
+
* in which case, the results will be store in an
|
104
|
+
* internal buffer.
|
105
|
+
* \param config a pointer to a structure containing parameters
|
106
|
+
* which configure the behavior of the json
|
107
|
+
* generator.
|
108
|
+
* \param allocFuncs an optional pointer to a structure which allows
|
109
|
+
* the client to overide the memory allocation
|
110
|
+
* used by yajl. May be NULL, in which case
|
111
|
+
* malloc/free/realloc will be used.
|
112
|
+
* \param ctx a context pointer that will be passed to the
|
113
|
+
* printer callback.
|
114
|
+
*
|
115
|
+
* \returns an allocated handle on success, NULL on failure (bad params)
|
116
|
+
*/
|
117
|
+
yajl_gen YAJL_API yajl_gen_alloc2(yajl_print_t callback,
|
118
|
+
const yajl_gen_config * config,
|
119
|
+
const yajl_alloc_funcs * allocFuncs,
|
120
|
+
void * ctx);
|
121
|
+
|
92
122
|
/** free a generator handle */
|
93
123
|
void YAJL_API yajl_gen_free(yajl_gen handle);
|
94
124
|
|
data/ext/yajl_encode.c
CHANGED
@@ -47,6 +47,15 @@ static void CharToHex(unsigned char c, char * hexBuf)
|
|
47
47
|
void
|
48
48
|
yajl_string_encode(yajl_buf buf, const unsigned char * str,
|
49
49
|
unsigned int len)
|
50
|
+
{
|
51
|
+
yajl_string_encode2((yajl_print_t) &yajl_buf_append, buf, str, len);
|
52
|
+
}
|
53
|
+
|
54
|
+
void
|
55
|
+
yajl_string_encode2(const yajl_print_t print,
|
56
|
+
void * ctx,
|
57
|
+
const unsigned char * str,
|
58
|
+
unsigned int len)
|
50
59
|
{
|
51
60
|
unsigned int beg = 0;
|
52
61
|
unsigned int end = 0;
|
@@ -73,14 +82,14 @@ yajl_string_encode(yajl_buf buf, const unsigned char * str,
|
|
73
82
|
break;
|
74
83
|
}
|
75
84
|
if (escaped != NULL) {
|
76
|
-
|
77
|
-
|
85
|
+
print(ctx, (const char *) (str + beg), end - beg);
|
86
|
+
print(ctx, escaped, strlen(escaped));
|
78
87
|
beg = ++end;
|
79
88
|
} else {
|
80
89
|
++end;
|
81
90
|
}
|
82
91
|
}
|
83
|
-
|
92
|
+
print(ctx, (const char *) (str + beg), end - beg);
|
84
93
|
}
|
85
94
|
|
86
95
|
static void hexToDigit(unsigned int * val, const unsigned char * hex)
|
data/ext/yajl_encode.h
CHANGED
@@ -34,6 +34,12 @@
|
|
34
34
|
#define __YAJL_ENCODE_H__
|
35
35
|
|
36
36
|
#include "yajl_buf.h"
|
37
|
+
#include "api/yajl_gen.h"
|
38
|
+
|
39
|
+
void yajl_string_encode2(yajl_print_t printer,
|
40
|
+
void * ctx,
|
41
|
+
const unsigned char * str,
|
42
|
+
unsigned int length);
|
37
43
|
|
38
44
|
void yajl_string_encode(yajl_buf buf, const unsigned char * str,
|
39
45
|
unsigned int length);
|
data/ext/yajl_gen.c
CHANGED
@@ -56,7 +56,8 @@ struct yajl_gen_t
|
|
56
56
|
unsigned int pretty;
|
57
57
|
const char * indentString;
|
58
58
|
yajl_gen_state state[YAJL_MAX_DEPTH];
|
59
|
-
|
59
|
+
yajl_print_t print;
|
60
|
+
void * ctx; /* yajl_buf */
|
60
61
|
/* memory allocation routines */
|
61
62
|
yajl_alloc_funcs alloc;
|
62
63
|
};
|
@@ -64,6 +65,15 @@ struct yajl_gen_t
|
|
64
65
|
yajl_gen
|
65
66
|
yajl_gen_alloc(const yajl_gen_config * config,
|
66
67
|
const yajl_alloc_funcs * afs)
|
68
|
+
{
|
69
|
+
return yajl_gen_alloc2(NULL, config, afs, NULL);
|
70
|
+
}
|
71
|
+
|
72
|
+
yajl_gen
|
73
|
+
yajl_gen_alloc2(yajl_print_t callback,
|
74
|
+
const yajl_gen_config * config,
|
75
|
+
const yajl_alloc_funcs * afs,
|
76
|
+
void * ctx)
|
67
77
|
{
|
68
78
|
yajl_gen g = NULL;
|
69
79
|
yajl_alloc_funcs afsBuffer;
|
@@ -88,7 +98,14 @@ yajl_gen_alloc(const yajl_gen_config * config,
|
|
88
98
|
g->pretty = config->beautify;
|
89
99
|
g->indentString = config->indentString ? config->indentString : " ";
|
90
100
|
}
|
91
|
-
|
101
|
+
|
102
|
+
if (callback) {
|
103
|
+
g->print = callback;
|
104
|
+
g->ctx = ctx;
|
105
|
+
} else {
|
106
|
+
g->print = (yajl_print_t)&yajl_buf_append;
|
107
|
+
g->ctx = yajl_buf_alloc(&(g->alloc));
|
108
|
+
}
|
92
109
|
|
93
110
|
return g;
|
94
111
|
}
|
@@ -96,18 +113,18 @@ yajl_gen_alloc(const yajl_gen_config * config,
|
|
96
113
|
void
|
97
114
|
yajl_gen_free(yajl_gen g)
|
98
115
|
{
|
99
|
-
yajl_buf_free(g->
|
116
|
+
if (g->print == (yajl_print_t)&yajl_buf_append) yajl_buf_free((yajl_buf)g->ctx);
|
100
117
|
YA_FREE(&(g->alloc), g);
|
101
118
|
}
|
102
119
|
|
103
120
|
#define INSERT_SEP \
|
104
121
|
if (g->state[g->depth] == yajl_gen_map_key || \
|
105
122
|
g->state[g->depth] == yajl_gen_in_array) { \
|
106
|
-
|
107
|
-
if (g->pretty)
|
123
|
+
g->print(g->ctx, ",", 1); \
|
124
|
+
if (g->pretty) g->print(g->ctx, "\n", 1); \
|
108
125
|
} else if (g->state[g->depth] == yajl_gen_map_val) { \
|
109
|
-
|
110
|
-
if (g->pretty)
|
126
|
+
g->print(g->ctx, ":", 1); \
|
127
|
+
if (g->pretty) g->print(g->ctx, " ", 1); \
|
111
128
|
}
|
112
129
|
|
113
130
|
#define INSERT_WHITESPACE \
|
@@ -115,8 +132,8 @@ yajl_gen_free(yajl_gen g)
|
|
115
132
|
if (g->state[g->depth] != yajl_gen_map_val) { \
|
116
133
|
unsigned int _i; \
|
117
134
|
for (_i=0;_i<g->depth;_i++) \
|
118
|
-
|
119
|
-
|
135
|
+
g->print(g->ctx, g->indentString, \
|
136
|
+
strlen(g->indentString)); \
|
120
137
|
} \
|
121
138
|
}
|
122
139
|
|
@@ -161,7 +178,7 @@ yajl_gen_integer(yajl_gen g, long int number)
|
|
161
178
|
char i[32];
|
162
179
|
ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE;
|
163
180
|
sprintf(i, "%ld", number);
|
164
|
-
|
181
|
+
g->print(g->ctx, i, strlen(i));
|
165
182
|
APPENDED_ATOM;
|
166
183
|
FINAL_NEWLINE;
|
167
184
|
return yajl_gen_status_ok;
|
@@ -181,7 +198,7 @@ yajl_gen_double(yajl_gen g, double number)
|
|
181
198
|
if (isnan(number) || isinf(number)) return yajl_gen_invalid_number;
|
182
199
|
INSERT_SEP; INSERT_WHITESPACE;
|
183
200
|
sprintf(i, "%g", number);
|
184
|
-
|
201
|
+
g->print(g->ctx, i, strlen(i));
|
185
202
|
APPENDED_ATOM;
|
186
203
|
FINAL_NEWLINE;
|
187
204
|
return yajl_gen_status_ok;
|
@@ -191,7 +208,7 @@ yajl_gen_status
|
|
191
208
|
yajl_gen_number(yajl_gen g, const char * s, unsigned int l)
|
192
209
|
{
|
193
210
|
ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE;
|
194
|
-
|
211
|
+
g->print(g->ctx, s, l);
|
195
212
|
APPENDED_ATOM;
|
196
213
|
FINAL_NEWLINE;
|
197
214
|
return yajl_gen_status_ok;
|
@@ -203,13 +220,18 @@ yajl_gen_string(yajl_gen g, const unsigned char * str,
|
|
203
220
|
{
|
204
221
|
ENSURE_VALID_STATE; INSERT_SEP; INSERT_WHITESPACE;
|
205
222
|
if (quote) {
|
206
|
-
|
207
|
-
|
208
|
-
|
223
|
+
g->print(g->ctx, "\"", 1);
|
224
|
+
yajl_string_encode2(g->print, g->ctx, str, len);
|
225
|
+
g->print(g->ctx, "\"", 1);
|
209
226
|
} else {
|
210
|
-
|
227
|
+
g->print(g->ctx, (const char *)str, len);
|
211
228
|
}
|
212
229
|
|
230
|
+
|
231
|
+
APPENDED_ATOM;
|
232
|
+
FINAL_NEWLINE;
|
233
|
+
return yajl_gen_status_ok;
|
234
|
+
|
213
235
|
APPENDED_ATOM;
|
214
236
|
FINAL_NEWLINE;
|
215
237
|
return yajl_gen_status_ok;
|
@@ -219,7 +241,7 @@ yajl_gen_status
|
|
219
241
|
yajl_gen_null(yajl_gen g)
|
220
242
|
{
|
221
243
|
ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE;
|
222
|
-
|
244
|
+
g->print(g->ctx, "null", strlen("null"));
|
223
245
|
APPENDED_ATOM;
|
224
246
|
FINAL_NEWLINE;
|
225
247
|
return yajl_gen_status_ok;
|
@@ -231,7 +253,7 @@ yajl_gen_bool(yajl_gen g, int boolean)
|
|
231
253
|
const char * val = boolean ? "true" : "false";
|
232
254
|
|
233
255
|
ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE;
|
234
|
-
|
256
|
+
g->print(g->ctx, val, strlen(val));
|
235
257
|
APPENDED_ATOM;
|
236
258
|
FINAL_NEWLINE;
|
237
259
|
return yajl_gen_status_ok;
|
@@ -244,8 +266,8 @@ yajl_gen_map_open(yajl_gen g)
|
|
244
266
|
INCREMENT_DEPTH;
|
245
267
|
|
246
268
|
g->state[g->depth] = yajl_gen_map_start;
|
247
|
-
|
248
|
-
if (g->pretty)
|
269
|
+
g->print(g->ctx, "{", 1);
|
270
|
+
if (g->pretty) g->print(g->ctx, "\n", 1);
|
249
271
|
FINAL_NEWLINE;
|
250
272
|
return yajl_gen_status_ok;
|
251
273
|
}
|
@@ -255,10 +277,10 @@ yajl_gen_map_close(yajl_gen g)
|
|
255
277
|
{
|
256
278
|
ENSURE_VALID_STATE;
|
257
279
|
(g->depth)--;
|
258
|
-
if (g->pretty)
|
280
|
+
if (g->pretty) g->print(g->ctx, "\n", 1);
|
259
281
|
APPENDED_ATOM;
|
260
282
|
INSERT_WHITESPACE;
|
261
|
-
|
283
|
+
g->print(g->ctx, "}", 1);
|
262
284
|
FINAL_NEWLINE;
|
263
285
|
return yajl_gen_status_ok;
|
264
286
|
}
|
@@ -269,8 +291,8 @@ yajl_gen_array_open(yajl_gen g)
|
|
269
291
|
ENSURE_VALID_STATE; ENSURE_NOT_KEY; INSERT_SEP; INSERT_WHITESPACE;
|
270
292
|
INCREMENT_DEPTH;
|
271
293
|
g->state[g->depth] = yajl_gen_array_start;
|
272
|
-
|
273
|
-
if (g->pretty)
|
294
|
+
g->print(g->ctx, "[", 1);
|
295
|
+
if (g->pretty) g->print(g->ctx, "\n", 1);
|
274
296
|
FINAL_NEWLINE;
|
275
297
|
return yajl_gen_status_ok;
|
276
298
|
}
|
@@ -279,11 +301,11 @@ yajl_gen_status
|
|
279
301
|
yajl_gen_array_close(yajl_gen g)
|
280
302
|
{
|
281
303
|
ENSURE_VALID_STATE;
|
282
|
-
if (g->pretty)
|
304
|
+
if (g->pretty) g->print(g->ctx, "\n", 1);
|
283
305
|
(g->depth)--;
|
284
306
|
APPENDED_ATOM;
|
285
307
|
INSERT_WHITESPACE;
|
286
|
-
|
308
|
+
g->print(g->ctx, "]", 1);
|
287
309
|
FINAL_NEWLINE;
|
288
310
|
return yajl_gen_status_ok;
|
289
311
|
}
|
@@ -292,13 +314,14 @@ yajl_gen_status
|
|
292
314
|
yajl_gen_get_buf(yajl_gen g, const unsigned char ** buf,
|
293
315
|
unsigned int * len)
|
294
316
|
{
|
295
|
-
|
296
|
-
*
|
317
|
+
if (g->print != (yajl_print_t)&yajl_buf_append) return yajl_gen_no_buf;
|
318
|
+
*buf = yajl_buf_data((yajl_buf)g->ctx);
|
319
|
+
*len = yajl_buf_len((yajl_buf)g->ctx);
|
297
320
|
return yajl_gen_status_ok;
|
298
321
|
}
|
299
322
|
|
300
323
|
void
|
301
324
|
yajl_gen_clear(yajl_gen g)
|
302
325
|
{
|
303
|
-
yajl_buf_clear(g->
|
326
|
+
if (g->print == (yajl_print_t)&yajl_buf_append) yajl_buf_clear((yajl_buf)g->ctx);
|
304
327
|
}
|
data/lib/yajl.rb
CHANGED
@@ -13,7 +13,7 @@ require 'yajl_ext'
|
|
13
13
|
#
|
14
14
|
# Ruby bindings to the excellent Yajl (Yet Another JSON Parser) ANSI C library.
|
15
15
|
module Yajl
|
16
|
-
VERSION = "0.6.
|
16
|
+
VERSION = "0.6.7"
|
17
17
|
|
18
18
|
# For compatibility, has the same signature of Yajl::Parser.parse
|
19
19
|
def self.load(str_or_io, options={}, read_bufsize=nil, &block)
|
data/yajl-ruby.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{yajl-ruby}
|
8
|
-
s.version = "0.6.
|
8
|
+
s.version = "0.6.7"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Brian Lopez", "Lloyd Hilaiel"]
|
12
|
-
s.date = %q{2009-12-
|
12
|
+
s.date = %q{2009-12-04}
|
13
13
|
s.email = %q{seniorlopez@gmail.com}
|
14
14
|
s.extensions = ["ext/extconf.rb"]
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yajl-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Lopez
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2009-12-
|
13
|
+
date: 2009-12-04 00:00:00 -08:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|