yajl-ruby 0.7.4 → 0.7.5
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 +7 -0
- data/VERSION.yml +2 -2
- data/benchmark/encode.rb +5 -1
- data/benchmark/parse.rb +5 -1
- data/benchmark/parse_stream.rb +5 -1
- data/ext/api/yajl_common.h +10 -10
- data/ext/api/yajl_gen.h +26 -26
- data/ext/api/yajl_parse.h +35 -21
- data/ext/extconf.rb +1 -1
- data/ext/yajl.c +19 -12
- data/ext/yajl_alloc.c +7 -7
- data/ext/yajl_alloc.h +7 -7
- data/ext/yajl_buf.c +8 -8
- data/ext/yajl_buf.h +8 -8
- data/ext/yajl_bytestack.h +11 -11
- data/ext/yajl_encode.c +14 -14
- data/ext/yajl_encode.h +8 -8
- data/ext/yajl_ext.c +7 -3
- data/ext/yajl_ext.h +1 -1
- data/ext/yajl_gen.c +16 -18
- data/ext/yajl_lex.c +74 -74
- data/ext/yajl_lex.h +15 -15
- data/ext/yajl_parser.c +42 -39
- data/ext/yajl_parser.h +14 -11
- data/lib/yajl.rb +1 -1
- data/lib/yajl/bzip2/stream_reader.rb +13 -0
- data/lib/yajl/deflate/stream_reader.rb +10 -3
- data/lib/yajl/gzip/stream_reader.rb +13 -0
- data/spec/encoding/encoding_spec.rb +13 -2
- data/spec/spec_helper.rb +1 -0
- data/yajl-ruby.gemspec +2 -2
- metadata +3 -3
    
        data/ext/yajl_parser.c
    CHANGED
    
    | @@ -1,22 +1,22 @@ | |
| 1 1 | 
             
            /*
         | 
| 2 | 
            -
             * Copyright  | 
| 3 | 
            -
             *
         | 
| 2 | 
            +
             * Copyright 2010, Lloyd Hilaiel.
         | 
| 3 | 
            +
             * 
         | 
| 4 4 | 
             
             * Redistribution and use in source and binary forms, with or without
         | 
| 5 5 | 
             
             * modification, are permitted provided that the following conditions are
         | 
| 6 6 | 
             
             * met:
         | 
| 7 | 
            -
             *
         | 
| 7 | 
            +
             * 
         | 
| 8 8 | 
             
             *  1. Redistributions of source code must retain the above copyright
         | 
| 9 9 | 
             
             *     notice, this list of conditions and the following disclaimer.
         | 
| 10 | 
            -
             *
         | 
| 10 | 
            +
             * 
         | 
| 11 11 | 
             
             *  2. Redistributions in binary form must reproduce the above copyright
         | 
| 12 12 | 
             
             *     notice, this list of conditions and the following disclaimer in
         | 
| 13 13 | 
             
             *     the documentation and/or other materials provided with the
         | 
| 14 14 | 
             
             *     distribution.
         | 
| 15 | 
            -
             *
         | 
| 15 | 
            +
             * 
         | 
| 16 16 | 
             
             *  3. Neither the name of Lloyd Hilaiel nor the names of its
         | 
| 17 17 | 
             
             *     contributors may be used to endorse or promote products derived
         | 
| 18 18 | 
             
             *     from this software without specific prior written permission.
         | 
| 19 | 
            -
             *
         | 
| 19 | 
            +
             * 
         | 
| 20 20 | 
             
             * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
         | 
| 21 21 | 
             
             * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 22 22 | 
             
             * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| @@ -28,7 +28,7 @@ | |
| 28 28 | 
             
             * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
         | 
| 29 29 | 
             
             * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
         | 
| 30 30 | 
             
             * POSSIBILITY OF SUCH DAMAGE.
         | 
| 31 | 
            -
             */
         | 
| 31 | 
            +
             */ 
         | 
| 32 32 |  | 
| 33 33 | 
             
            #include "yajl_lex.h"
         | 
| 34 34 | 
             
            #include "yajl_parser.h"
         | 
| @@ -48,12 +48,12 @@ unsigned char * | |
| 48 48 | 
             
            yajl_render_error_string(yajl_handle hand, const unsigned char * jsonText,
         | 
| 49 49 | 
             
                                     unsigned int jsonTextLen, int verbose)
         | 
| 50 50 | 
             
            {
         | 
| 51 | 
            -
                unsigned int offset = hand-> | 
| 51 | 
            +
                unsigned int offset = hand->bytesConsumed;
         | 
| 52 52 | 
             
                unsigned char * str;
         | 
| 53 53 | 
             
                const char * errorType = NULL;
         | 
| 54 54 | 
             
                const char * errorText = NULL;
         | 
| 55 55 | 
             
                char text[72];
         | 
| 56 | 
            -
                const char * arrow = "                     (right here) ------^\n";
         | 
| 56 | 
            +
                const char * arrow = "                     (right here) ------^\n";    
         | 
| 57 57 |  | 
| 58 58 | 
             
                if (yajl_bs_current(hand->stateStack) == yajl_state_parse_error) {
         | 
| 59 59 | 
             
                    errorType = "parse";
         | 
| @@ -70,18 +70,18 @@ yajl_render_error_string(yajl_handle hand, const unsigned char * jsonText, | |
| 70 70 | 
             
                    memneeded += strlen(errorType);
         | 
| 71 71 | 
             
                    memneeded += strlen(" error");
         | 
| 72 72 | 
             
                    if (errorText != NULL) {
         | 
| 73 | 
            -
                        memneeded += strlen(": ");
         | 
| 74 | 
            -
                        memneeded += strlen(errorText);
         | 
| 73 | 
            +
                        memneeded += strlen(": ");            
         | 
| 74 | 
            +
                        memneeded += strlen(errorText);            
         | 
| 75 75 | 
             
                    }
         | 
| 76 76 | 
             
                    str = (unsigned char *) YA_MALLOC(&(hand->alloc), memneeded + 2);
         | 
| 77 77 | 
             
                    str[0] = 0;
         | 
| 78 78 | 
             
                    strcat((char *) str, errorType);
         | 
| 79 | 
            -
                    strcat((char *) str, " error");
         | 
| 79 | 
            +
                    strcat((char *) str, " error");    
         | 
| 80 80 | 
             
                    if (errorText != NULL) {
         | 
| 81 | 
            -
                        strcat((char *) str, ": ");
         | 
| 82 | 
            -
                        strcat((char *) str, errorText);
         | 
| 81 | 
            +
                        strcat((char *) str, ": ");            
         | 
| 82 | 
            +
                        strcat((char *) str, errorText);            
         | 
| 83 83 | 
             
                    }
         | 
| 84 | 
            -
                    strcat((char *) str, "\n");
         | 
| 84 | 
            +
                    strcat((char *) str, "\n");    
         | 
| 85 85 | 
             
                }
         | 
| 86 86 |  | 
| 87 87 | 
             
                /* now we append as many spaces as needed to make sure the error
         | 
| @@ -93,7 +93,7 @@ yajl_render_error_string(yajl_handle hand, const unsigned char * jsonText, | |
| 93 93 | 
             
                    spacesNeeded = (offset < 30 ? 40 - offset : 10);
         | 
| 94 94 | 
             
                    start = (offset >= 30 ? offset - 30 : 0);
         | 
| 95 95 | 
             
                    end = (offset + 30 > jsonTextLen ? jsonTextLen : offset + 30);
         | 
| 96 | 
            -
             | 
| 96 | 
            +
                
         | 
| 97 97 | 
             
                    for (i=0;i<spacesNeeded;i++) text[i] = ' ';
         | 
| 98 98 |  | 
| 99 99 | 
             
                    for (;start < end;start++, i++) {
         | 
| @@ -117,7 +117,7 @@ yajl_render_error_string(yajl_handle hand, const unsigned char * jsonText, | |
| 117 117 | 
             
                        newStr[0] = 0;
         | 
| 118 118 | 
             
                        strcat((char *) newStr, (char *) str);
         | 
| 119 119 | 
             
                        strcat((char *) newStr, text);
         | 
| 120 | 
            -
                        strcat((char *) newStr, arrow);
         | 
| 120 | 
            +
                        strcat((char *) newStr, arrow);    
         | 
| 121 121 | 
             
                        YA_FREE(&(hand->alloc), str);
         | 
| 122 122 | 
             
                        str = (unsigned char *) newStr;
         | 
| 123 123 | 
             
                    }
         | 
| @@ -136,20 +136,23 @@ yajl_render_error_string(yajl_handle hand, const unsigned char * jsonText, | |
| 136 136 |  | 
| 137 137 |  | 
| 138 138 | 
             
            yajl_status
         | 
| 139 | 
            -
            yajl_do_parse(yajl_handle hand, unsigned  | 
| 140 | 
            -
                           | 
| 139 | 
            +
            yajl_do_parse(yajl_handle hand, const unsigned char * jsonText,
         | 
| 140 | 
            +
                          unsigned int jsonTextLen)
         | 
| 141 141 | 
             
            {
         | 
| 142 142 | 
             
                yajl_tok tok;
         | 
| 143 143 | 
             
                const unsigned char * buf;
         | 
| 144 144 | 
             
                unsigned int bufLen;
         | 
| 145 | 
            +
                unsigned int * offset = &(hand->bytesConsumed);
         | 
| 146 | 
            +
             | 
| 147 | 
            +
                *offset = 0;
         | 
| 148 | 
            +
                
         | 
| 145 149 |  | 
| 146 150 | 
             
              around_again:
         | 
| 147 151 | 
             
                switch (yajl_bs_current(hand->stateStack)) {
         | 
| 148 152 | 
             
                    case yajl_state_parse_complete:
         | 
| 149 153 | 
             
                        return yajl_status_ok;
         | 
| 150 154 | 
             
                    case yajl_state_lexical_error:
         | 
| 151 | 
            -
                    case yajl_state_parse_error:
         | 
| 152 | 
            -
                        hand->errorOffset = *offset;
         | 
| 155 | 
            +
                    case yajl_state_parse_error:            
         | 
| 153 156 | 
             
                        return yajl_status_error;
         | 
| 154 157 | 
             
                    case yajl_state_start:
         | 
| 155 158 | 
             
                    case yajl_state_map_need_val:
         | 
| @@ -187,13 +190,13 @@ yajl_do_parse(yajl_handle hand, unsigned int * offset, | |
| 187 190 | 
             
                                                yajl_buf_len(hand->decodeBuf)));
         | 
| 188 191 | 
             
                                }
         | 
| 189 192 | 
             
                                break;
         | 
| 190 | 
            -
                            case yajl_tok_bool:
         | 
| 193 | 
            +
                            case yajl_tok_bool: 
         | 
| 191 194 | 
             
                                if (hand->callbacks && hand->callbacks->yajl_boolean) {
         | 
| 192 195 | 
             
                                    _CC_CHK(hand->callbacks->yajl_boolean(hand->ctx,
         | 
| 193 196 | 
             
                                                                          *buf == 't'));
         | 
| 194 197 | 
             
                                }
         | 
| 195 198 | 
             
                                break;
         | 
| 196 | 
            -
                            case yajl_tok_null:
         | 
| 199 | 
            +
                            case yajl_tok_null: 
         | 
| 197 200 | 
             
                                if (hand->callbacks && hand->callbacks->yajl_null) {
         | 
| 198 201 | 
             
                                    _CC_CHK(hand->callbacks->yajl_null(hand->ctx));
         | 
| 199 202 | 
             
                                }
         | 
| @@ -287,13 +290,13 @@ yajl_do_parse(yajl_handle hand, unsigned int * offset, | |
| 287 290 | 
             
                                        _CC_CHK(hand->callbacks->yajl_end_array(hand->ctx));
         | 
| 288 291 | 
             
                                    }
         | 
| 289 292 | 
             
                                    yajl_bs_pop(hand->stateStack);
         | 
| 290 | 
            -
                                    goto around_again;
         | 
| 293 | 
            +
                                    goto around_again;                        
         | 
| 291 294 | 
             
                                }
         | 
| 292 295 | 
             
                                /* intentional fall-through */
         | 
| 293 296 | 
             
                            }
         | 
| 294 | 
            -
                            case yajl_tok_colon:
         | 
| 295 | 
            -
                            case yajl_tok_comma:
         | 
| 296 | 
            -
                            case yajl_tok_right_bracket:
         | 
| 297 | 
            +
                            case yajl_tok_colon: 
         | 
| 298 | 
            +
                            case yajl_tok_comma: 
         | 
| 299 | 
            +
                            case yajl_tok_right_bracket:                
         | 
| 297 300 | 
             
                                yajl_bs_set(hand->stateStack, yajl_state_parse_error);
         | 
| 298 301 | 
             
                                hand->parseError =
         | 
| 299 302 | 
             
                                    "unallowed token at this point in JSON text";
         | 
| @@ -312,7 +315,7 @@ yajl_do_parse(yajl_handle hand, unsigned int * offset, | |
| 312 315 | 
             
                                yajl_reset_parser(hand);
         | 
| 313 316 | 
             
                            } else if (s == yajl_state_map_need_val) {
         | 
| 314 317 | 
             
                                yajl_bs_set(hand->stateStack, yajl_state_map_got_val);
         | 
| 315 | 
            -
                            } else {
         | 
| 318 | 
            +
                            } else { 
         | 
| 316 319 | 
             
                                yajl_bs_set(hand->stateStack, yajl_state_array_got_val);
         | 
| 317 320 | 
             
                            }
         | 
| 318 321 | 
             
                        }
         | 
| @@ -322,7 +325,7 @@ yajl_do_parse(yajl_handle hand, unsigned int * offset, | |
| 322 325 |  | 
| 323 326 | 
             
                        goto around_again;
         | 
| 324 327 | 
             
                    }
         | 
| 325 | 
            -
                    case yajl_state_map_start:
         | 
| 328 | 
            +
                    case yajl_state_map_start: 
         | 
| 326 329 | 
             
                    case yajl_state_map_need_key: {
         | 
| 327 330 | 
             
                        /* only difference between these two states is that in
         | 
| 328 331 | 
             
                         * start '}' is valid, whereas in need_key, we've parsed
         | 
| @@ -358,12 +361,12 @@ yajl_do_parse(yajl_handle hand, unsigned int * offset, | |
| 358 361 | 
             
                                        _CC_CHK(hand->callbacks->yajl_end_map(hand->ctx));
         | 
| 359 362 | 
             
                                    }
         | 
| 360 363 | 
             
                                    yajl_bs_pop(hand->stateStack);
         | 
| 361 | 
            -
                                    goto around_again;
         | 
| 364 | 
            +
                                    goto around_again;                        
         | 
| 362 365 | 
             
                                }
         | 
| 363 366 | 
             
                            default:
         | 
| 364 367 | 
             
                                yajl_bs_set(hand->stateStack, yajl_state_parse_error);
         | 
| 365 368 | 
             
                                hand->parseError =
         | 
| 366 | 
            -
                                    "invalid object key (must be a string)";
         | 
| 369 | 
            +
                                    "invalid object key (must be a string)"; 
         | 
| 367 370 | 
             
                                goto around_again;
         | 
| 368 371 | 
             
                        }
         | 
| 369 372 | 
             
                    }
         | 
| @@ -373,7 +376,7 @@ yajl_do_parse(yajl_handle hand, unsigned int * offset, | |
| 373 376 | 
             
                        switch (tok) {
         | 
| 374 377 | 
             
                            case yajl_tok_colon:
         | 
| 375 378 | 
             
                                yajl_bs_set(hand->stateStack, yajl_state_map_need_val);
         | 
| 376 | 
            -
                                goto around_again;
         | 
| 379 | 
            +
                                goto around_again;                    
         | 
| 377 380 | 
             
                            case yajl_tok_eof:
         | 
| 378 381 | 
             
                                return yajl_status_insufficient_data;
         | 
| 379 382 | 
             
                            case yajl_tok_error:
         | 
| @@ -395,10 +398,10 @@ yajl_do_parse(yajl_handle hand, unsigned int * offset, | |
| 395 398 | 
             
                                    _CC_CHK(hand->callbacks->yajl_end_map(hand->ctx));
         | 
| 396 399 | 
             
                                }
         | 
| 397 400 | 
             
                                yajl_bs_pop(hand->stateStack);
         | 
| 398 | 
            -
                                goto around_again;
         | 
| 401 | 
            +
                                goto around_again;                        
         | 
| 399 402 | 
             
                            case yajl_tok_comma:
         | 
| 400 403 | 
             
                                yajl_bs_set(hand->stateStack, yajl_state_map_need_key);
         | 
| 401 | 
            -
                                goto around_again;
         | 
| 404 | 
            +
                                goto around_again;                    
         | 
| 402 405 | 
             
                            case yajl_tok_eof:
         | 
| 403 406 | 
             
                                return yajl_status_insufficient_data;
         | 
| 404 407 | 
             
                            case yajl_tok_error:
         | 
| @@ -406,8 +409,8 @@ yajl_do_parse(yajl_handle hand, unsigned int * offset, | |
| 406 409 | 
             
                                goto around_again;
         | 
| 407 410 | 
             
                            default:
         | 
| 408 411 | 
             
                                yajl_bs_set(hand->stateStack, yajl_state_parse_error);
         | 
| 409 | 
            -
                                hand->parseError = "after key and value, inside map, "
         | 
| 410 | 
            -
                                                   "I expect ',' or '}'";
         | 
| 412 | 
            +
                                hand->parseError = "after key and value, inside map, " 
         | 
| 413 | 
            +
                                                   "I expect ',' or '}'"; 
         | 
| 411 414 | 
             
                                /* try to restore error offset */
         | 
| 412 415 | 
             
                                if (*offset >= bufLen) *offset -= bufLen;
         | 
| 413 416 | 
             
                                else *offset = 0;
         | 
| @@ -423,10 +426,10 @@ yajl_do_parse(yajl_handle hand, unsigned int * offset, | |
| 423 426 | 
             
                                    _CC_CHK(hand->callbacks->yajl_end_array(hand->ctx));
         | 
| 424 427 | 
             
                                }
         | 
| 425 428 | 
             
                                yajl_bs_pop(hand->stateStack);
         | 
| 426 | 
            -
                                goto around_again;
         | 
| 429 | 
            +
                                goto around_again;                        
         | 
| 427 430 | 
             
                            case yajl_tok_comma:
         | 
| 428 431 | 
             
                                yajl_bs_set(hand->stateStack, yajl_state_array_need_val);
         | 
| 429 | 
            -
                                goto around_again;
         | 
| 432 | 
            +
                                goto around_again;                    
         | 
| 430 433 | 
             
                            case yajl_tok_eof:
         | 
| 431 434 | 
             
                                return yajl_status_insufficient_data;
         | 
| 432 435 | 
             
                            case yajl_tok_error:
         | 
| @@ -440,7 +443,7 @@ yajl_do_parse(yajl_handle hand, unsigned int * offset, | |
| 440 443 | 
             
                        }
         | 
| 441 444 | 
             
                    }
         | 
| 442 445 | 
             
                }
         | 
| 443 | 
            -
             | 
| 446 | 
            +
                
         | 
| 444 447 | 
             
                abort();
         | 
| 445 448 | 
             
                return yajl_status_error;
         | 
| 446 449 | 
             
            }
         | 
    
        data/ext/yajl_parser.h
    CHANGED
    
    | @@ -1,22 +1,22 @@ | |
| 1 1 | 
             
            /*
         | 
| 2 | 
            -
             * Copyright  | 
| 3 | 
            -
             *
         | 
| 2 | 
            +
             * Copyright 2010, Lloyd Hilaiel.
         | 
| 3 | 
            +
             * 
         | 
| 4 4 | 
             
             * Redistribution and use in source and binary forms, with or without
         | 
| 5 5 | 
             
             * modification, are permitted provided that the following conditions are
         | 
| 6 6 | 
             
             * met:
         | 
| 7 | 
            -
             *
         | 
| 7 | 
            +
             * 
         | 
| 8 8 | 
             
             *  1. Redistributions of source code must retain the above copyright
         | 
| 9 9 | 
             
             *     notice, this list of conditions and the following disclaimer.
         | 
| 10 | 
            -
             *
         | 
| 10 | 
            +
             * 
         | 
| 11 11 | 
             
             *  2. Redistributions in binary form must reproduce the above copyright
         | 
| 12 12 | 
             
             *     notice, this list of conditions and the following disclaimer in
         | 
| 13 13 | 
             
             *     the documentation and/or other materials provided with the
         | 
| 14 14 | 
             
             *     distribution.
         | 
| 15 | 
            -
             *
         | 
| 15 | 
            +
             * 
         | 
| 16 16 | 
             
             *  3. Neither the name of Lloyd Hilaiel nor the names of its
         | 
| 17 17 | 
             
             *     contributors may be used to endorse or promote products derived
         | 
| 18 18 | 
             
             *     from this software without specific prior written permission.
         | 
| 19 | 
            -
             *
         | 
| 19 | 
            +
             * 
         | 
| 20 20 | 
             
             * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
         | 
| 21 21 | 
             
             * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
         | 
| 22 22 | 
             
             * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
         | 
| @@ -28,7 +28,7 @@ | |
| 28 28 | 
             
             * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
         | 
| 29 29 | 
             
             * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
         | 
| 30 30 | 
             
             * POSSIBILITY OF SUCH DAMAGE.
         | 
| 31 | 
            -
             */
         | 
| 31 | 
            +
             */ 
         | 
| 32 32 |  | 
| 33 33 | 
             
            #ifndef __YAJL_PARSER_H__
         | 
| 34 34 | 
             
            #define __YAJL_PARSER_H__
         | 
| @@ -44,7 +44,7 @@ typedef enum { | |
| 44 44 | 
             
                yajl_state_parse_error,
         | 
| 45 45 | 
             
                yajl_state_lexical_error,
         | 
| 46 46 | 
             
                yajl_state_map_start,
         | 
| 47 | 
            -
                yajl_state_map_sep,
         | 
| 47 | 
            +
                yajl_state_map_sep,    
         | 
| 48 48 | 
             
                yajl_state_map_need_val,
         | 
| 49 49 | 
             
                yajl_state_map_got_val,
         | 
| 50 50 | 
             
                yajl_state_map_need_key,
         | 
| @@ -58,7 +58,10 @@ struct yajl_handle_t { | |
| 58 58 | 
             
                void * ctx;
         | 
| 59 59 | 
             
                yajl_lexer lexer;
         | 
| 60 60 | 
             
                const char * parseError;
         | 
| 61 | 
            -
                 | 
| 61 | 
            +
                /* the number of bytes consumed from the last client buffer,
         | 
| 62 | 
            +
                 * in the case of an error this will be an error offset, in the
         | 
| 63 | 
            +
                 * case of an error this can be used as the error offset */
         | 
| 64 | 
            +
                unsigned int bytesConsumed;
         | 
| 62 65 | 
             
                /* temporary storage for decoded strings */
         | 
| 63 66 | 
             
                yajl_buf decodeBuf;
         | 
| 64 67 | 
             
                /* a stack of states.  access with yajl_state_XXX routines */
         | 
| @@ -68,8 +71,8 @@ struct yajl_handle_t { | |
| 68 71 | 
             
            };
         | 
| 69 72 |  | 
| 70 73 | 
             
            yajl_status
         | 
| 71 | 
            -
            yajl_do_parse(yajl_handle handle, unsigned  | 
| 72 | 
            -
                           | 
| 74 | 
            +
            yajl_do_parse(yajl_handle handle, const unsigned char * jsonText,
         | 
| 75 | 
            +
                          unsigned int jsonTextLen);
         | 
| 73 76 |  | 
| 74 77 | 
             
            unsigned char *
         | 
| 75 78 | 
             
            yajl_render_error_string(yajl_handle hand, const unsigned char * jsonText,
         | 
    
        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.7. | 
| 16 | 
            +
              VERSION = "0.7.5"
         | 
| 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)
         | 
| @@ -4,6 +4,19 @@ module Yajl | |
| 4 4 | 
             
                # This is a wrapper around Bzip::Reader to allow it's #read method to adhere
         | 
| 5 5 | 
             
                # to the IO spec, allowing for two parameters (length, and buffer)
         | 
| 6 6 | 
             
                class StreamReader < ::Bzip2::Reader
         | 
| 7 | 
            +
                  # A helper method to allow use similar to IO#read
         | 
| 8 | 
            +
                  def read(len=nil, buffer=nil)
         | 
| 9 | 
            +
                    if val = super(len)
         | 
| 10 | 
            +
                      unless buffer.nil?
         | 
| 11 | 
            +
                        buffer.replace(val)
         | 
| 12 | 
            +
                        return buffer
         | 
| 13 | 
            +
                      end
         | 
| 14 | 
            +
                      super(len)
         | 
| 15 | 
            +
                    else
         | 
| 16 | 
            +
                      nil
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 7 20 | 
             
                  # Helper method for one-off parsing from a bzip2-compressed stream
         | 
| 8 21 | 
             
                  #
         | 
| 9 22 | 
             
                  # See Yajl::Parser#parse for parameter documentation
         | 
| @@ -12,9 +12,16 @@ module Yajl | |
| 12 12 | 
             
                  end
         | 
| 13 13 |  | 
| 14 14 | 
             
                  # A helper method to allow use similar to IO#read
         | 
| 15 | 
            -
                  def read(len=nil)
         | 
| 16 | 
            -
                     | 
| 17 | 
            -
             | 
| 15 | 
            +
                  def read(len=nil, buffer=nil)
         | 
| 16 | 
            +
                    if val = @io.read(len)
         | 
| 17 | 
            +
                      unless buffer.nil?
         | 
| 18 | 
            +
                        buffer.replace(inflate(val))
         | 
| 19 | 
            +
                        return buffer
         | 
| 20 | 
            +
                      end
         | 
| 21 | 
            +
                      inflate(@io.read(len))
         | 
| 22 | 
            +
                    else
         | 
| 23 | 
            +
                      nil
         | 
| 24 | 
            +
                    end
         | 
| 18 25 | 
             
                  end
         | 
| 19 26 |  | 
| 20 27 | 
             
                  # Helper method for one-off parsing from a deflate-compressed stream
         | 
| @@ -4,6 +4,19 @@ module Yajl | |
| 4 4 | 
             
                # This is a wrapper around Zlib::GzipReader to allow it's #read method to adhere
         | 
| 5 5 | 
             
                # to the IO spec, allowing for two parameters (length, and buffer)
         | 
| 6 6 | 
             
                class StreamReader < ::Zlib::GzipReader
         | 
| 7 | 
            +
                  # A helper method to allow use similar to IO#read
         | 
| 8 | 
            +
                  def read(len=nil, buffer=nil)
         | 
| 9 | 
            +
                    if val = super(len)
         | 
| 10 | 
            +
                      unless buffer.nil?
         | 
| 11 | 
            +
                        buffer.replace(val)
         | 
| 12 | 
            +
                        return buffer
         | 
| 13 | 
            +
                      end
         | 
| 14 | 
            +
                      super(len)
         | 
| 15 | 
            +
                    else
         | 
| 16 | 
            +
                      nil
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 7 20 | 
             
                  # Helper method for one-off parsing from a gzip-compressed stream
         | 
| 8 21 | 
             
                  #
         | 
| 9 22 | 
             
                  # See Yajl::Parser#parse for parameter documentation
         | 
| @@ -3,7 +3,13 @@ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb') | |
| 3 3 |  | 
| 4 4 | 
             
            class Dummy2
         | 
| 5 5 | 
             
              def to_json
         | 
| 6 | 
            -
                "hawtness" | 
| 6 | 
            +
                "{\"hawtness\":true}"
         | 
| 7 | 
            +
              end
         | 
| 8 | 
            +
            end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            class Dummy3
         | 
| 11 | 
            +
              def as_json
         | 
| 12 | 
            +
                {:hawtness => true}
         | 
| 7 13 | 
             
              end
         | 
| 8 14 | 
             
            end
         | 
| 9 15 |  | 
| @@ -152,7 +158,12 @@ describe "Yajl JSON encoder" do | |
| 152 158 |  | 
| 153 159 | 
             
              it "should check for and call #to_json if it exists on custom objects" do
         | 
| 154 160 | 
             
                d = Dummy2.new
         | 
| 155 | 
            -
                Yajl::Encoder.encode({:foo => d}).should eql('{"foo":"hawtness"}')
         | 
| 161 | 
            +
                Yajl::Encoder.encode({:foo => d}).should eql('{"foo":{"hawtness":true}}')
         | 
| 162 | 
            +
              end
         | 
| 163 | 
            +
             | 
| 164 | 
            +
              it "should check for and call #as_json if it exists on custom objects" do
         | 
| 165 | 
            +
                d = Dummy3.new
         | 
| 166 | 
            +
                Yajl::Encoder.encode(d).should eql('{"hawtness":true}')
         | 
| 156 167 | 
             
              end
         | 
| 157 168 |  | 
| 158 169 | 
             
              it "should encode a hash where the key and value can be symbols" do
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        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.7. | 
| 8 | 
            +
              s.version = "0.7.5"
         | 
| 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{2010-03- | 
| 12 | 
            +
              s.date = %q{2010-03-23}
         | 
| 13 13 | 
             
              s.email = %q{seniorlopez@gmail.com}
         | 
| 14 14 | 
             
              s.extensions = ["ext/extconf.rb"]
         | 
| 15 15 | 
             
              s.extra_rdoc_files = [
         | 
    
        metadata
    CHANGED
    
    | @@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version | |
| 5 5 | 
             
              segments: 
         | 
| 6 6 | 
             
              - 0
         | 
| 7 7 | 
             
              - 7
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              version: 0.7. | 
| 8 | 
            +
              - 5
         | 
| 9 | 
            +
              version: 0.7.5
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Brian Lopez
         | 
| @@ -15,7 +15,7 @@ autorequire: | |
| 15 15 | 
             
            bindir: bin
         | 
| 16 16 | 
             
            cert_chain: []
         | 
| 17 17 |  | 
| 18 | 
            -
            date: 2010-03- | 
| 18 | 
            +
            date: 2010-03-23 00:00:00 -07:00
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: []
         | 
| 21 21 |  |