summaryrefslogtreecommitdiff
path: root/lib/ffi_yajl
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2013-12-16 14:33:44 -0800
committerLamont Granquist <lamont@scriptkiddie.org>2013-12-16 14:33:44 -0800
commit2cefbfbdf7217537b5a638a6dd697480e47d38d5 (patch)
treeeae560d3c4864c57046614276cb9b3de7e41649a /lib/ffi_yajl
parent58411ea2a9dc1e63150a3c4c496218d817d7cf9f (diff)
downloadffi-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.rb20
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