diff options
author | Lamont Granquist <lamont@scriptkiddie.org> | 2013-12-16 14:33:44 -0800 |
---|---|---|
committer | Lamont Granquist <lamont@scriptkiddie.org> | 2013-12-16 14:33:44 -0800 |
commit | 2cefbfbdf7217537b5a638a6dd697480e47d38d5 (patch) | |
tree | eae560d3c4864c57046614276cb9b3de7e41649a /lib/ffi_yajl | |
parent | 58411ea2a9dc1e63150a3c4c496218d817d7cf9f (diff) | |
download | ffi-yajl-2cefbfbdf7217537b5a638a6dd697480e47d38d5.tar.gz |
fix encoding of fixnums and floats as keys
Diffstat (limited to 'lib/ffi_yajl')
-rw-r--r-- | lib/ffi_yajl/ffi/encoder.rb | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/lib/ffi_yajl/ffi/encoder.rb b/lib/ffi_yajl/ffi/encoder.rb index c84dbea..eaf52cd 100644 --- a/lib/ffi_yajl/ffi/encoder.rb +++ b/lib/ffi_yajl/ffi/encoder.rb @@ -120,8 +120,14 @@ end class Bignum def ffi_yajl(yajl_gen, state) str = self.to_s - if ( status = FFI_Yajl.yajl_gen_number(yajl_gen, str, str.bytesize) ) != 0 - FFI_Yajl::Encoder.raise_error_for_status(status) + if state[:processing_key] + if ( status = FFI_Yajl.yajl_gen_string(yajl_gen, str, str.bytesize) ) != 0 + FFI_Yajl::Encoder.raise_error_for_status(status) + end + else + if ( status = FFI_Yajl.yajl_gen_number(yajl_gen, str, str.bytesize) ) != 0 + FFI_Yajl::Encoder.raise_error_for_status(status) + end end end end @@ -129,8 +135,14 @@ end class Float def ffi_yajl(yajl_gen, state) str = self.to_s - if ( status = FFI_Yajl.yajl_gen_number(yajl_gen, str, str.bytesize) ) != 0 - FFI_Yajl::Encoder.raise_error_for_status(status) + if state[:processing_key] + if ( status = FFI_Yajl.yajl_gen_string(yajl_gen, str, str.bytesize) ) != 0 + FFI_Yajl::Encoder.raise_error_for_status(status) + end + else + if ( status = FFI_Yajl.yajl_gen_number(yajl_gen, str, str.bytesize) ) != 0 + FFI_Yajl::Encoder.raise_error_for_status(status) + end end end end |