Skip to content

Commit 62d5401

Browse files
authored
Merge pull request #197 from eregon/fix-detection-json-gem
Fix detection for the json_gem adapter
2 parents db64069 + 401362d commit 62d5401

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

lib/multi_json.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ def default_adapter
4747
return :oj if defined?(::Oj)
4848
return :yajl if defined?(::Yajl)
4949
return :jr_jackson if defined?(::JrJackson)
50-
return :json_gem if defined?(::JSON::JSON_LOADED)
50+
return :json_gem if defined?(::JSON::Ext::Parser)
5151
return :gson if defined?(::Gson)
5252

5353
REQUIREMENT_MAP.each do |adapter, library|

spec/multi_json_spec.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,24 @@
3030
end
3131
end
3232

33+
context 'when JSON pure is already loaded' do
34+
it 'default_adapter tries to require each adapter in turn and does not assume :json_gem is already loaded' do
35+
require 'json/pure'
36+
expect(JSON::JSON_LOADED).to be_truthy
37+
38+
undefine_constants :Oj, :Yajl, :Gson, :JrJackson do
39+
# simulate that the json_gem is not loaded
40+
ext = defined?(JSON::Ext::Parser) ? JSON::Ext.send(:remove_const, :Parser) : nil
41+
begin
42+
expect(MultiJson).to receive(:require)
43+
MultiJson.default_adapter
44+
ensure
45+
JSON::Ext::Parser = ext if ext
46+
end
47+
end
48+
end
49+
end
50+
3351
context 'caching' do
3452
before { MultiJson.use adapter }
3553
let(:adapter) { MultiJson::Adapters::JsonGem }

0 commit comments

Comments
 (0)