summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/ffi_yajl/ffi/parser.rb2
-rw-r--r--lib/ffi_yajl/json_gem.rb3
-rw-r--r--lib/ffi_yajl/parser.rb4
-rw-r--r--spec/ffi_yajl/json_gem_spec.rb10
-rw-r--r--spec/ffi_yajl/parser_spec.rb10
5 files changed, 17 insertions, 12 deletions
diff --git a/lib/ffi_yajl/ffi/parser.rb b/lib/ffi_yajl/ffi/parser.rb
index 2e21627..e557905 100644
--- a/lib/ffi_yajl/ffi/parser.rb
+++ b/lib/ffi_yajl/ffi/parser.rb
@@ -73,7 +73,7 @@ module FFI_Yajl
@map_key_callback = ::FFI::Function.new(:int, [:pointer, :string, :size_t]) do |ctx, key, keylen|
s = key.slice(0,keylen)
s.force_encoding('UTF-8') if defined? Encoding
- self.key = s
+ self.key = @opts[:symbolize_keys] ? s.to_sym : s
1
end
@end_map_callback = ::FFI::Function.new(:int, [:pointer]) do |ctx|
diff --git a/lib/ffi_yajl/json_gem.rb b/lib/ffi_yajl/json_gem.rb
index f46f6e5..0e64d50 100644
--- a/lib/ffi_yajl/json_gem.rb
+++ b/lib/ffi_yajl/json_gem.rb
@@ -37,8 +37,7 @@ module JSON
end
def self.default_options
- #@default_options ||= {:symbolize_keys => false}
- @default_options ||= {}
+ @default_options ||= {:symbolize_keys => false}
end
def self.parse(str, opts=JSON.default_options)
diff --git a/lib/ffi_yajl/parser.rb b/lib/ffi_yajl/parser.rb
index 6465106..ce6ee89 100644
--- a/lib/ffi_yajl/parser.rb
+++ b/lib/ffi_yajl/parser.rb
@@ -25,7 +25,9 @@ module FFI_Yajl
end
def initialize(opts = {})
- @opts = opts
+ @opts = opts ? opts.dup : {}
+ # JSON gem uses 'symbolize_names' and ruby-yajl supports this as well
+ @opts[:symbolize_keys] = true if @opts[:symbolize_names]
end
def parse(str)
diff --git a/spec/ffi_yajl/json_gem_spec.rb b/spec/ffi_yajl/json_gem_spec.rb
index 0a910fb..8da827a 100644
--- a/spec/ffi_yajl/json_gem_spec.rb
+++ b/spec/ffi_yajl/json_gem_spec.rb
@@ -86,42 +86,36 @@ describe "JSON Gem Compat API" do
end
context "when setting symbolize_keys via JSON.default_options" do
- before(:all) { @saved_default = JSON.default_options[:symbolize_keys] }
- after(:all) { JSON.default_options[:symbolize_keys] = @saved_default }
+ after(:each) { JSON.default_options[:symbolize_keys] = false }
it "the default behavior should be to not symbolize keys" do
expect(JSON.parse('{"foo": 1234}')).to eq( "foo" => 1234 )
end
it "changing the default_options should change the behavior to true" do
- skip("implement symbolize keys")
JSON.default_options[:symbolize_keys] = true
expect(JSON.parse('{"foo": 1234}')).to eq( :foo => 1234 )
end
end
context "when setting symbolize_names via JSON.default_options" do
- before(:all) { @saved_default = JSON.default_options[:symbolize_names] }
- after(:all) { JSON.default_options[:symbolize_names] = @saved_default }
+ after { JSON.default_options.delete(:symbolize_names)}
it "the default behavior should be to not symbolize keys" do
expect(JSON.parse('{"foo": 1234}')).to eq( "foo" => 1234 )
end
it "changing the default_options should change the behavior to true" do
- skip("implement symbolize keys")
JSON.default_options[:symbolize_names] = true
expect(JSON.parse('{"foo": 1234}')).to eq( :foo => 1234 )
end
end
it "should support passing symbolize_names to JSON.parse" do
- skip("implement symbolize keys")
expect(JSON.parse('{"foo": 1234}', :symbolize_names => true)).to eq( :foo => 1234 )
end
it "should support passing symbolize_keys to JSON.parse" do
- skip("implement symbolize keys")
expect(JSON.parse('{"foo": 1234}', :symbolize_keys => true)).to eq( :foo => 1234 )
end
diff --git a/spec/ffi_yajl/parser_spec.rb b/spec/ffi_yajl/parser_spec.rb
index 721209d..4e1f138 100644
--- a/spec/ffi_yajl/parser_spec.rb
+++ b/spec/ffi_yajl/parser_spec.rb
@@ -21,6 +21,7 @@ describe "FFI_Yajl::Parser" do
let(:options) { { :allow_comments => false } }
it "should not parse" do
+ skip "implement :allow_comments"
expect{parser}.to raise_error(FFI_Yajl::ParseError)
end
end
@@ -29,6 +30,7 @@ describe "FFI_Yajl::Parser" do
let(:options) { { :allow_comments => true } }
it "should parse" do
+ skip "implement :allow_comments"
expect(parser).to eq({}) # FIXME
end
end
@@ -41,6 +43,7 @@ describe "FFI_Yajl::Parser" do
let(:options) { { :check_utf8 => true } }
it "should not parse" do
+ skip "implement :check_utf8"
expect{parser}.to raise_error(FFI_Yajl::ParseError)
end
end
@@ -49,6 +52,7 @@ describe "FFI_Yajl::Parser" do
let(:options) { { :check_utf8 => false } }
it "should parse" do
+ skip "implement :check_utf8"
expect(parser).to eq({}) # FIXME
end
end
@@ -58,6 +62,7 @@ describe "FFI_Yajl::Parser" do
let(:json) { StringIO.new('{"key": 1234}') }
it "should parse" do
+ skip "handle StringIOs"
expect(parser).to eq({"key" => 1234})
end
end
@@ -79,6 +84,7 @@ describe "FFI_Yajl::Parser" do
context "when passing a block" do
it "should parse correctly" do
+ skip "handle blocks"
output = nil
parser do |obj|
output = obj
@@ -86,6 +92,10 @@ describe "FFI_Yajl::Parser" do
expect(output).to eq({"key" => 1234})
end
end
+ end
+
+ context "when parsing a JSON hash with only strings" do
+ let(:json) { '{"key": "value"}' }
if RUBY_VERSION.to_f >= 1.9
context "when Encoding.default_internal is nil" do