diff options
-rw-r--r-- | lib/ffi_yajl/ffi/parser.rb | 2 | ||||
-rw-r--r-- | lib/ffi_yajl/json_gem.rb | 3 | ||||
-rw-r--r-- | lib/ffi_yajl/parser.rb | 4 | ||||
-rw-r--r-- | spec/ffi_yajl/json_gem_spec.rb | 10 | ||||
-rw-r--r-- | spec/ffi_yajl/parser_spec.rb | 10 |
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 |