multi_json 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,34 @@
1
+ shared_examples_for 'JSON-like adapter' do |adapter|
2
+ before do
3
+ begin
4
+ MultiJson.use adapter
5
+ rescue LoadError
6
+ pending "Adapter #{adapter} couldn't be loaded (not installed?)"
7
+ end
8
+ end
9
+
10
+ describe '.dump' do
11
+ describe 'with :pretty option set to true' do
12
+ it 'passes default pretty options' do
13
+ ::JSON.should_receive(:generate).with(['foo'], JSON::PRETTY_STATE_PROTOTYPE.to_h).and_return('["foo"]')
14
+ MultiJson.dump('foo', :pretty => true)
15
+ end
16
+ end
17
+
18
+ describe 'with :indent option' do
19
+ it 'passes it on dump' do
20
+ ::JSON.should_receive(:generate).with(['foo'], {:indent => "\t"}).and_return('["foo"]')
21
+ MultiJson.dump('foo', :indent => "\t")
22
+ end
23
+ end
24
+ end
25
+
26
+ describe '.load' do
27
+ describe 'with :quirks_mode option' do
28
+ it 'passes it on load' do
29
+ ::JSON.should_receive(:parse).with('["foo"]', {:quirks_mode => true, :create_additions => false}).and_return(['foo'])
30
+ MultiJson.load('"foo"', :quirks_mode => true)
31
+ end
32
+ end
33
+ end
34
+ end
@@ -1,24 +1,26 @@
1
1
  require 'helper'
2
2
  require 'adapter_shared_example'
3
+ require 'json_common_shared_example'
3
4
  require 'stringio'
4
5
 
5
6
  describe 'MultiJson' do
6
7
  context 'adapters' do
7
- before do
8
- MultiJson.use nil
9
- end
8
+ before{ MultiJson.use nil }
9
+
10
10
  context 'when no other json implementations are available' do
11
11
  before do
12
12
  @old_map = MultiJson::REQUIREMENT_MAP
13
13
  @old_json = Object.const_get :JSON if Object.const_defined?(:JSON)
14
14
  @old_oj = Object.const_get :Oj if Object.const_defined?(:Oj)
15
15
  @old_yajl = Object.const_get :Yajl if Object.const_defined?(:Yajl)
16
+ @old_gson = Object.const_get :Gson if Object.const_defined?(:Gson)
16
17
  MultiJson::REQUIREMENT_MAP.each_with_index do |(library, adapter), index|
17
18
  MultiJson::REQUIREMENT_MAP[index] = ["foo/#{library}", adapter]
18
19
  end
19
20
  Object.send :remove_const, :JSON if @old_json
20
21
  Object.send :remove_const, :Oj if @old_oj
21
22
  Object.send :remove_const, :Yajl if @old_yajl
23
+ Object.send :remove_const, :Gson if @old_gson
22
24
  end
23
25
 
24
26
  after do
@@ -28,9 +30,11 @@ describe 'MultiJson' do
28
30
  Object.const_set :JSON, @old_json if @old_json
29
31
  Object.const_set :Oj, @old_oj if @old_oj
30
32
  Object.const_set :Yajl, @old_yajl if @old_yajl
33
+ Object.const_set :Gson, @old_gson if @old_gson
31
34
  end
32
35
 
33
36
  it 'defaults to ok_json if no other json implementions are available' do
37
+ Kernel.stub(:warn)
34
38
  expect(MultiJson.default_adapter).to eq :ok_json
35
39
  end
36
40
 
@@ -52,6 +56,12 @@ describe 'MultiJson' do
52
56
  end
53
57
  end
54
58
 
59
+ it 'looks for adapter even if @adapter variable is nil' do
60
+ MultiJson.send(:instance_variable_set, :@adapter, nil)
61
+ MultiJson.should_receive(:default_adapter).and_return(:ok_json)
62
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::OkJson'
63
+ end
64
+
55
65
  it 'is settable via a symbol' do
56
66
  MultiJson.use :json_gem
57
67
  expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::JsonGem'
@@ -62,18 +72,23 @@ describe 'MultiJson' do
62
72
  expect(MultiJson.adapter.name).to eq 'MockDecoder'
63
73
  end
64
74
 
65
- context "using one-shot parser" do
66
- before(:each) do
75
+ it 'is settable via a module' do
76
+ MultiJson.use MockModuleDecoder
77
+ expect(MultiJson.adapter.name).to eq 'MockModuleDecoder'
78
+ end
79
+
80
+ context 'using one-shot parser' do
81
+ before do
67
82
  require 'multi_json/adapters/json_pure'
68
83
  MultiJson::Adapters::JsonPure.should_receive(:dump).exactly(1).times.and_return('dump_something')
69
84
  MultiJson::Adapters::JsonPure.should_receive(:load).exactly(1).times.and_return('load_something')
70
85
  end
71
86
 
72
- it "should use the defined parser just for the call" do
87
+ it 'should use the defined parser just for the call' do
73
88
  MultiJson.use :json_gem
74
89
  expect(MultiJson.dump('', :adapter => :json_pure)).to eq 'dump_something'
75
90
  expect(MultiJson.load('', :adapter => :json_pure)).to eq 'load_something'
76
- expect(MultiJson.adapter.name).to eq "MultiJson::Adapters::JsonGem"
91
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::JsonGem'
77
92
  end
78
93
  end
79
94
  end
@@ -81,38 +96,56 @@ describe 'MultiJson' do
81
96
  it 'can set adapter for a block' do
82
97
  MultiJson.use :ok_json
83
98
  MultiJson.with_adapter(:json_pure) do
99
+ MultiJson.with_engine(:json_gem) do
100
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::JsonGem'
101
+ end
84
102
  expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::JsonPure'
85
103
  end
86
- MultiJson.with_engine(:yajl) do
87
- expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::Yajl'
88
- end
89
104
  expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::OkJson'
90
105
  end
91
106
 
92
- it 'does not create symbols on parse' do
107
+ it 'JSON gem does not create symbols on parse' do
93
108
  MultiJson.with_engine(:json_gem) do
94
- before = Symbol.all_symbols
95
- MultiJson.load('{"json_class":"OMGOMG"}') rescue nil
96
- after = Symbol.all_symbols - before
97
- expect(after).to eq []
109
+ MultiJson.load('{"json_class":"ZOMG"}') rescue nil
110
+
111
+ expect{
112
+ MultiJson.load('{"json_class":"OMG"}') rescue nil
113
+ }.to_not change{Symbol.all_symbols.count}
98
114
  end
99
115
  end
100
116
 
101
- it 'oj does not create symbols on parse' do
102
- MultiJson.with_engine(:oj) do
103
- before = Symbol.all_symbols
104
- MultiJson.load('{"json_class":"OMGOMG"}') rescue nil
105
- after = Symbol.all_symbols - before
106
- expect(after).to eq []
117
+ unless jruby?
118
+ it 'Oj does not create symbols on parse' do
119
+ MultiJson.with_engine(:oj) do
120
+ MultiJson.load('{"json_class":"ZOMG"}') rescue nil
121
+
122
+ expect{
123
+ MultiJson.load('{"json_class":"OMG"}') rescue nil
124
+ }.to_not change{Symbol.all_symbols.count}
125
+ end
107
126
  end
108
127
  end
109
128
 
110
- %w(json_gem json_pure nsjsonserialization oj ok_json yajl).each do |adapter|
111
- next if !macruby? && adapter == 'nsjsonserialization'
129
+ it 'has default_options setter' do
130
+ MultiJson.use MockDecoder
131
+ MockDecoder.should_receive(:dump).with('123', :foo => 'lol', :bar => 'bar', :fizz => 'buzz')
132
+ MultiJson.default_options = { :foo => 'foo', :bar => 'bar' }
133
+ MultiJson.dump('123', :fizz => 'buzz', :foo => 'lol')
134
+ MultiJson.default_options = {}
135
+ end
136
+
137
+ %w(gson json_gem json_pure nsjsonserialization oj ok_json yajl).each do |adapter|
138
+ next if adapter == 'gson' && !jruby?
139
+ next if adapter == 'nsjsonserialization' && !macruby?
112
140
  next if jruby? && (adapter == 'oj' || adapter == 'yajl')
141
+ context adapter do
142
+ it_behaves_like 'an adapter', adapter
143
+ end
144
+ end
113
145
 
146
+ %w(json_gem json_pure).each do |adapter|
114
147
  context adapter do
115
- it_behaves_like "an adapter", adapter
148
+ it_behaves_like 'JSON-like adapter', adapter
116
149
  end
117
150
  end
118
151
  end
metadata CHANGED
@@ -1,82 +1,62 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi_json
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.1
4
+ version: 1.6.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Michael Bleigh
9
9
  - Josh Kalderimis
10
10
  - Erik Michaels-Ober
11
+ - Pavel Pravosud
11
12
  autorequire:
12
13
  bindir: bin
13
- cert_chain: []
14
- date: 2013-02-11 00:00:00.000000000 Z
14
+ cert_chain:
15
+ - !binary |-
16
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURMakNDQWhhZ0F3SUJB
17
+ Z0lCQURBTkJna3Foa2lHOXcwQkFRVUZBREE5TVE4d0RRWURWUVFEREFaelpt
18
+ VnkKYVdzeEZUQVRCZ29Ka2lhSmsvSXNaQUVaRmdWbmJXRnBiREVUTUJFR0Nn
19
+ bVNKb21UOGl4a0FSa1dBMk52YlRBZQpGdzB4TXpBeU1ETXhNREF5TWpkYUZ3
20
+ MHhOREF5TURNeE1EQXlNamRhTUQweER6QU5CZ05WQkFNTUJuTm1aWEpwCmF6
21
+ RVZNQk1HQ2dtU0pvbVQ4aXhrQVJrV0JXZHRZV2xzTVJNd0VRWUtDWkltaVpQ
22
+ eUxHUUJHUllEWTI5dE1JSUIKSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4
23
+ QU1JSUJDZ0tDQVFFQWwweDVkeDh1S3hpN1Rrckl1eUJVVEpWQgp2MW85M25V
24
+ QjlqL3k0TTk2Z1Yycll3QWNpMUpQQnNlTmQ2RnliempvM1lHdUhsN0VRSHVT
25
+ SE5hZjFwMmx4ZXcvCnk2MEpYSUpCQmdQY0RLL0tDUDROVUhvZm0wamZvWUQr
26
+ SDV1TkpmSENOcTcvWnNUeE90RTNSYTkyczBCQ01UcG0Kd0JNTWxXUjVNdGRF
27
+ aElZdUJPNFhobmVqWWdIMEwvN0JMMmx5bW50Vm5zci9hZ2RRb29qUUNOMUlR
28
+ bXNSSnZyUgpkdVpSTzN0WnZvSW8xcEJjNEpFZWhEdXFDZXlCZ1BMT3FNb0t0
29
+ UWxvbGQxVFFzMWtXVUJLN0tXTUZFaEtDL0tnCnp5ektSSFFvOXlEWXdPdllu
30
+ Z29CTFkrVC9sd0NUNGR5c3NkaHpSYmZueEFoYUt1NFNBc3NJd2FDMDF5Vm93
31
+ SUQKQVFBQm96a3dOekFKQmdOVkhSTUVBakFBTUIwR0ExVWREZ1FXQkJTMHJ1
32
+ RGZSYWs1Y2kxT3BETlgvWmRERWtJcwppVEFMQmdOVkhROEVCQU1DQkxBd0RR
33
+ WUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFISFNNcy9NUDBzT2FMa0V2NEpvCnp2
34
+ a20zcW41QTZ0MHZhSHg3NzRjbWVqeU1VKzV3eVN4UmV6c3BMN1VMaDlOZXVL
35
+ Mk9oVStPZTNUcHFyQWc1VEsKUjhHUUlMblZ1MkZlbUdBNnNBa1BEbGNQdGdB
36
+ NmllSTE5UFpPRjZIVkxtYy9JRC9kUC9OZ1pXV3pFZXFRS21jSwoyK0hNK1NF
37
+ RURoWmtTY1lla3c0Wk9lMTY0WnRaRzgxNm9BdjV4MHBHaXRTSWt1bVVwN1Y4
38
+ aUVaLzZlaHI3WTllClhPZzRlZXVuNUwvSmptakFSb1cya05kdmtSRDNjMkVl
39
+ U0xxV3ZRUnNCbHlwSGZoczZKSnVMbHlaUEdoVTNSL3YKU2YzbFZLcEJDV2dS
40
+ cEdUdnk0NVhWcEIrNTl5MzNQSm1FdVExUFRFT1l2UXlhbzlVS01BQWFBTi83
41
+ cVdRdGpsMApobHc9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
42
+ date: 2013-02-12 00:00:00.000000000 Z
15
43
  dependencies:
16
44
  - !ruby/object:Gem::Dependency
17
- name: rake
45
+ name: bundler
18
46
  requirement: !ruby/object:Gem::Requirement
19
47
  none: false
20
48
  requirements:
21
- - - ! '>='
49
+ - - ~>
22
50
  - !ruby/object:Gem::Version
23
- version: '0.9'
51
+ version: '1.0'
24
52
  type: :development
25
53
  prerelease: false
26
54
  version_requirements: !ruby/object:Gem::Requirement
27
55
  none: false
28
56
  requirements:
29
- - - ! '>='
57
+ - - ~>
30
58
  - !ruby/object:Gem::Version
31
- version: '0.9'
32
- - !ruby/object:Gem::Dependency
33
- name: rdoc
34
- requirement: !ruby/object:Gem::Requirement
35
- none: false
36
- requirements:
37
- - - ! '>='
38
- - !ruby/object:Gem::Version
39
- version: '3.9'
40
- type: :development
41
- prerelease: false
42
- version_requirements: !ruby/object:Gem::Requirement
43
- none: false
44
- requirements:
45
- - - ! '>='
46
- - !ruby/object:Gem::Version
47
- version: '3.9'
48
- - !ruby/object:Gem::Dependency
49
- name: rspec
50
- requirement: !ruby/object:Gem::Requirement
51
- none: false
52
- requirements:
53
- - - ! '>='
54
- - !ruby/object:Gem::Version
55
- version: '2.6'
56
- type: :development
57
- prerelease: false
58
- version_requirements: !ruby/object:Gem::Requirement
59
- none: false
60
- requirements:
61
- - - ! '>='
62
- - !ruby/object:Gem::Version
63
- version: '2.6'
64
- - !ruby/object:Gem::Dependency
65
- name: simplecov
66
- requirement: !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
69
- - - ! '>='
70
- - !ruby/object:Gem::Version
71
- version: '0.4'
72
- type: :development
73
- prerelease: false
74
- version_requirements: !ruby/object:Gem::Requirement
75
- none: false
76
- requirements:
77
- - - ! '>='
78
- - !ruby/object:Gem::Version
79
- version: '0.4'
59
+ version: '1.0'
80
60
  description: A gem to provide easy switching between different JSON backends, including
81
61
  Oj, Yajl, the JSON gem (with C-extensions), the pure-Ruby JSON gem, and OkJson.
82
62
  email:
@@ -85,10 +65,11 @@ email:
85
65
  - sferik@gmail.com
86
66
  executables: []
87
67
  extensions: []
88
- extra_rdoc_files:
89
- - LICENSE.md
90
- - README.md
68
+ extra_rdoc_files: []
91
69
  files:
70
+ - .yardopts
71
+ - CHANGELOG.md
72
+ - CONTRIBUTING.md
92
73
  - LICENSE.md
93
74
  - README.md
94
75
  - Rakefile
@@ -99,7 +80,9 @@ files:
99
80
  - .travis.yml
100
81
  - spec/adapter_shared_example.rb
101
82
  - spec/helper.rb
83
+ - spec/json_common_shared_example.rb
102
84
  - spec/multi_json_spec.rb
85
+ - lib/multi_json/adapters/gson.rb
103
86
  - lib/multi_json/adapters/json_common.rb
104
87
  - lib/multi_json/adapters/json_gem.rb
105
88
  - lib/multi_json/adapters/json_pure.rb
@@ -114,8 +97,7 @@ homepage: http://github.com/intridea/multi_json
114
97
  licenses:
115
98
  - MIT
116
99
  post_install_message:
117
- rdoc_options:
118
- - --charset=UTF-8
100
+ rdoc_options: []
119
101
  require_paths:
120
102
  - lib
121
103
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -139,5 +121,6 @@ summary: A gem to provide swappable JSON backends.
139
121
  test_files:
140
122
  - spec/adapter_shared_example.rb
141
123
  - spec/helper.rb
124
+ - spec/json_common_shared_example.rb
142
125
  - spec/multi_json_spec.rb
143
126
  has_rdoc:
metadata.gz.sig ADDED
Binary file