multi_json 1.7.7 → 1.7.8
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +1 -1
- data/lib/multi_json.rb +16 -19
- data/lib/multi_json/load_error.rb +11 -0
- data/lib/multi_json/vendor/okjson.rb +12 -6
- data/lib/multi_json/version.rb +1 -1
- data/spec/adapter_shared_example.rb +3 -3
- data/spec/has_options.rb +108 -63
- data/spec/json_common_shared_example.rb +3 -3
- data/spec/multi_json_spec.rb +20 -20
- metadata +39 -28
- metadata.gz.sig +2 -3
- checksums.yaml +0 -7
- checksums.yaml.gz.sig +0 -1
data.tar.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,8 @@
|
|
1
|
+
1.7.8
|
2
|
+
-----
|
3
|
+
* [Reorder JrJackson before json_gem](https://github.com/intridea/multi_json/commit/315b6e460b6e4dcdb6c82e04e4be8ee975d395da)
|
4
|
+
* [Update vendored OkJson to version 43](https://github.com/intridea/multi_json/commit/99a6b662f6ef4036e3ee94d7eb547fa72fb2ab50)
|
5
|
+
|
1
6
|
1.7.7
|
2
7
|
-----
|
3
8
|
* [Fix options caching issues](https://github.com/intridea/multi_json/commit/a3f14c3661688c5927638fa6088c7b46a67e875e)
|
data/Gemfile
CHANGED
data/lib/multi_json.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'multi_json/options'
|
2
2
|
require 'multi_json/version'
|
3
|
+
require 'multi_json/load_error'
|
3
4
|
|
4
5
|
module MultiJson
|
5
6
|
include Options
|
@@ -7,7 +8,7 @@ module MultiJson
|
|
7
8
|
|
8
9
|
class << self
|
9
10
|
def cached_options
|
10
|
-
@cached_options
|
11
|
+
@cached_options ||= {}
|
11
12
|
end
|
12
13
|
|
13
14
|
def reset_cached_options!
|
@@ -15,16 +16,6 @@ module MultiJson
|
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
|
-
class LoadError < StandardError
|
19
|
-
attr_reader :data
|
20
|
-
def initialize(message='', backtrace=[], data='')
|
21
|
-
super(message)
|
22
|
-
self.set_backtrace(backtrace)
|
23
|
-
@data = data
|
24
|
-
end
|
25
|
-
end
|
26
|
-
DecodeError = LoadError # Legacy support
|
27
|
-
|
28
19
|
# Since `default_options` is deprecated, the
|
29
20
|
# reader is aliased to `dump_options` and the
|
30
21
|
# writer sets both `dump_options` and `load_options`
|
@@ -42,9 +33,9 @@ module MultiJson
|
|
42
33
|
REQUIREMENT_MAP = [
|
43
34
|
['oj', :oj],
|
44
35
|
['yajl', :yajl],
|
36
|
+
['jrjackson', :jr_jackson],
|
45
37
|
['json/ext', :json_gem],
|
46
38
|
['gson', :gson],
|
47
|
-
['jrjackson', :jr_jackson],
|
48
39
|
['json/pure', :json_pure]
|
49
40
|
]
|
50
41
|
|
@@ -55,9 +46,9 @@ module MultiJson
|
|
55
46
|
def default_adapter
|
56
47
|
return :oj if defined?(::Oj)
|
57
48
|
return :yajl if defined?(::Yajl)
|
49
|
+
return :jr_jackson if defined?(::JrJackson)
|
58
50
|
return :json_gem if defined?(::JSON)
|
59
51
|
return :gson if defined?(::Gson)
|
60
|
-
return :jr_jackson if defined?(::JrJackson)
|
61
52
|
|
62
53
|
REQUIREMENT_MAP.each do |library, adapter|
|
63
54
|
begin
|
@@ -103,18 +94,15 @@ module MultiJson
|
|
103
94
|
def load_adapter(new_adapter)
|
104
95
|
case new_adapter
|
105
96
|
when String, Symbol
|
106
|
-
|
107
|
-
require "multi_json/adapters/#{new_adapter}"
|
108
|
-
klass_name = new_adapter.to_s.split('_').map(&:capitalize) * ''
|
109
|
-
MultiJson::Adapters.const_get(klass_name)
|
97
|
+
load_adapter_from_string_name new_adapter.to_s
|
110
98
|
when NilClass, FalseClass
|
111
99
|
load_adapter default_adapter
|
112
100
|
when Class, Module
|
113
101
|
new_adapter
|
114
102
|
else
|
115
|
-
raise
|
103
|
+
raise ::LoadError
|
116
104
|
end
|
117
|
-
rescue
|
105
|
+
rescue ::LoadError
|
118
106
|
raise ArgumentError, 'Did not recognize your adapter specification.'
|
119
107
|
end
|
120
108
|
|
@@ -157,4 +145,13 @@ module MultiJson
|
|
157
145
|
end
|
158
146
|
alias with_engine with_adapter
|
159
147
|
|
148
|
+
private
|
149
|
+
|
150
|
+
def load_adapter_from_string_name(name)
|
151
|
+
name = ALIASES.fetch(name, name)
|
152
|
+
require "multi_json/adapters/#{name}"
|
153
|
+
klass_name = name.to_s.split('_').map(&:capitalize) * ''
|
154
|
+
MultiJson::Adapters.const_get(klass_name)
|
155
|
+
end
|
156
|
+
|
160
157
|
end
|
@@ -24,12 +24,12 @@
|
|
24
24
|
|
25
25
|
require 'stringio'
|
26
26
|
|
27
|
-
# Some parts adapted from
|
28
|
-
# http://golang.org/src/pkg/json/decode.go and
|
29
|
-
# http://golang.org/src/pkg/utf8/utf8.go
|
30
27
|
module MultiJson
|
28
|
+
# Some parts adapted from
|
29
|
+
# http://golang.org/src/pkg/json/decode.go and
|
30
|
+
# http://golang.org/src/pkg/utf8/utf8.go
|
31
31
|
module OkJson
|
32
|
-
Upstream = '
|
32
|
+
Upstream = '43'
|
33
33
|
extend self
|
34
34
|
|
35
35
|
|
@@ -64,7 +64,8 @@ module MultiJson
|
|
64
64
|
case x
|
65
65
|
when Hash then objenc(x)
|
66
66
|
when Array then arrenc(x)
|
67
|
-
else
|
67
|
+
else
|
68
|
+
raise Error, 'root value must be an Array or a Hash'
|
68
69
|
end
|
69
70
|
end
|
70
71
|
|
@@ -465,11 +466,16 @@ module MultiJson
|
|
465
466
|
# In ruby >= 1.9, s[r] is a codepoint, not a byte.
|
466
467
|
if rubydoesenc?
|
467
468
|
begin
|
468
|
-
c.ord
|
469
|
+
# c.ord will raise an error if c is invalid UTF-8
|
470
|
+
if c.ord < Spc.ord
|
471
|
+
c = "\\u%04x" % [c.ord]
|
472
|
+
end
|
469
473
|
t.write(c)
|
470
474
|
rescue
|
471
475
|
t.write(Ustrerr)
|
472
476
|
end
|
477
|
+
elsif c < Spc
|
478
|
+
t.write("\\u%04x" % c)
|
473
479
|
elsif Spc <= c && c <= ?~
|
474
480
|
t.putc(c)
|
475
481
|
else
|
data/lib/multi_json/version.rb
CHANGED
@@ -2,7 +2,7 @@ module MultiJson
|
|
2
2
|
class Version
|
3
3
|
MAJOR = 1 unless defined? MultiJson::Version::MAJOR
|
4
4
|
MINOR = 7 unless defined? MultiJson::Version::MINOR
|
5
|
-
PATCH =
|
5
|
+
PATCH = 8 unless defined? MultiJson::Version::PATCH
|
6
6
|
PRE = nil unless defined? MultiJson::Version::PRE
|
7
7
|
|
8
8
|
class << self
|
@@ -23,7 +23,7 @@ shared_examples_for 'an adapter' do |adapter|
|
|
23
23
|
before{ MultiJson.dump_options = MultiJson.adapter.dump_options = {} }
|
24
24
|
|
25
25
|
after do
|
26
|
-
MultiJson.adapter.instance.
|
26
|
+
expect(MultiJson.adapter.instance).to receive(:dump).with(1, :foo => 'bar', :fizz => 'buzz')
|
27
27
|
MultiJson.dump(1, :fizz => 'buzz')
|
28
28
|
MultiJson.dump_options = MultiJson.adapter.dump_options = nil
|
29
29
|
end
|
@@ -100,7 +100,7 @@ shared_examples_for 'an adapter' do |adapter|
|
|
100
100
|
end
|
101
101
|
|
102
102
|
it 'passes options to the adapter' do
|
103
|
-
MultiJson.adapter.
|
103
|
+
expect(MultiJson.adapter).to receive(:dump).with('foo', {:bar => :baz})
|
104
104
|
MultiJson.dump('foo', :bar => :baz)
|
105
105
|
end
|
106
106
|
|
@@ -131,7 +131,7 @@ shared_examples_for 'an adapter' do |adapter|
|
|
131
131
|
before{ MultiJson.load_options = MultiJson.adapter.load_options = {} }
|
132
132
|
|
133
133
|
after do
|
134
|
-
MultiJson.adapter.instance.
|
134
|
+
expect(MultiJson.adapter.instance).to receive(:load).with('1', :foo => 'bar', :fizz => 'buzz')
|
135
135
|
MultiJson.load('1', :fizz => 'buzz')
|
136
136
|
MultiJson.load_options = MultiJson.adapter.load_options = nil
|
137
137
|
end
|
data/spec/has_options.rb
CHANGED
@@ -6,69 +6,114 @@ shared_examples_for 'has options' do |object|
|
|
6
6
|
subject{ object }
|
7
7
|
end
|
8
8
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
9
|
+
describe "dump options" do
|
10
|
+
|
11
|
+
before do
|
12
|
+
subject.dump_options = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
after do
|
16
|
+
subject.dump_options = nil
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'returns default options if not set' do
|
20
|
+
expect(subject.dump_options).to eq(subject.default_dump_options)
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'allows hashes' do
|
24
|
+
subject.dump_options = {:foo => 'bar'}
|
25
|
+
expect(subject.dump_options).to eq(:foo => 'bar')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'allows objects that implement #to_hash' do
|
29
|
+
value = Class.new do
|
30
|
+
def to_hash
|
31
|
+
{:foo => 'bar'}
|
32
|
+
end
|
33
|
+
end.new
|
34
|
+
|
35
|
+
subject.dump_options = value
|
36
|
+
expect(subject.dump_options).to eq(:foo => 'bar')
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'evaluates lambda returning options (with args)' do
|
40
|
+
subject.dump_options = lambda{ |a1, a2| { a1 => a2 }}
|
41
|
+
expect(subject.dump_options('1', '2')).to eq('1' => '2')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'evaluates lambda returning options (with no args)' do
|
45
|
+
subject.dump_options = lambda{{:foo => 'bar'}}
|
46
|
+
expect(subject.dump_options).to eq(:foo => 'bar')
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'returns empty hash in all other cases' do
|
50
|
+
subject.dump_options = true
|
51
|
+
expect(subject.dump_options).to eq(subject.default_dump_options)
|
52
|
+
|
53
|
+
subject.dump_options = false
|
54
|
+
expect(subject.dump_options).to eq(subject.default_dump_options)
|
55
|
+
|
56
|
+
subject.dump_options = 10
|
57
|
+
expect(subject.dump_options).to eq(subject.default_dump_options)
|
58
|
+
|
59
|
+
subject.dump_options = nil
|
60
|
+
expect(subject.dump_options).to eq(subject.default_dump_options)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe "load options" do
|
65
|
+
|
66
|
+
before do
|
67
|
+
subject.load_options = nil
|
68
|
+
end
|
69
|
+
|
70
|
+
after do
|
71
|
+
subject.load_options = nil
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'returns default options if not set' do
|
75
|
+
expect(subject.load_options).to eq(subject.default_load_options)
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'allows hashes' do
|
79
|
+
subject.load_options = {:foo => 'bar'}
|
80
|
+
expect(subject.load_options).to eq(:foo => 'bar')
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'allows objects that implement #to_hash' do
|
84
|
+
value = Class.new do
|
85
|
+
def to_hash
|
86
|
+
{:foo => 'bar'}
|
87
|
+
end
|
88
|
+
end.new
|
89
|
+
|
90
|
+
subject.load_options = value
|
91
|
+
expect(subject.load_options).to eq(:foo => 'bar')
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'evaluates lambda returning options (with args)' do
|
95
|
+
subject.load_options = lambda{ |a1, a2| { a1 => a2 }}
|
96
|
+
expect(subject.load_options('1', '2')).to eq('1' => '2')
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'evaluates lambda returning options (with no args)' do
|
100
|
+
subject.load_options = lambda{{:foo => 'bar'}}
|
101
|
+
expect(subject.load_options).to eq(:foo => 'bar')
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'returns empty hash in all other cases' do
|
105
|
+
subject.load_options = true
|
106
|
+
expect(subject.load_options).to eq(subject.default_load_options)
|
107
|
+
|
108
|
+
subject.load_options = false
|
109
|
+
expect(subject.load_options).to eq(subject.default_load_options)
|
110
|
+
|
111
|
+
subject.load_options = 10
|
112
|
+
expect(subject.load_options).to eq(subject.default_load_options)
|
113
|
+
|
114
|
+
subject.load_options = nil
|
115
|
+
expect(subject.load_options).to eq(subject.default_load_options)
|
72
116
|
end
|
73
117
|
end
|
118
|
+
|
74
119
|
end
|
@@ -7,7 +7,7 @@ shared_examples_for 'JSON-like adapter' do |adapter|
|
|
7
7
|
describe 'with :pretty option set to true' do
|
8
8
|
it 'passes default pretty options' do
|
9
9
|
object = 'foo'
|
10
|
-
object.
|
10
|
+
expect(object).to receive(:to_json).with(JSON::PRETTY_STATE_PROTOTYPE.to_h)
|
11
11
|
MultiJson.dump(object, :pretty => true)
|
12
12
|
end
|
13
13
|
end
|
@@ -15,7 +15,7 @@ shared_examples_for 'JSON-like adapter' do |adapter|
|
|
15
15
|
describe 'with :indent option' do
|
16
16
|
it 'passes it on dump' do
|
17
17
|
object = 'foo'
|
18
|
-
object.
|
18
|
+
expect(object).to receive(:to_json).with(:indent => "\t")
|
19
19
|
MultiJson.dump(object, :indent => "\t")
|
20
20
|
end
|
21
21
|
end
|
@@ -23,7 +23,7 @@ shared_examples_for 'JSON-like adapter' do |adapter|
|
|
23
23
|
|
24
24
|
describe '.load' do
|
25
25
|
it 'passes :quirks_mode option' do
|
26
|
-
::JSON.
|
26
|
+
expect(::JSON).to receive(:parse).with('[123]', {:quirks_mode => false, :create_additions => false})
|
27
27
|
MultiJson.load('[123]', :quirks_mode => false)
|
28
28
|
end
|
29
29
|
end
|
data/spec/multi_json_spec.rb
CHANGED
@@ -20,22 +20,22 @@ describe 'MultiJson' do
|
|
20
20
|
MultiJson::REQUIREMENT_MAP.each_with_index do |(library, adapter), index|
|
21
21
|
MultiJson::REQUIREMENT_MAP[index] = ["foo/#{library}", adapter]
|
22
22
|
end
|
23
|
-
Object.send :remove_const, :JSON if
|
24
|
-
Object.send :remove_const, :Oj if
|
25
|
-
Object.send :remove_const, :Yajl if
|
26
|
-
Object.send :remove_const, :Gson if
|
27
|
-
Object.send :remove_const, :JrJackson if
|
23
|
+
Object.send :remove_const, :JSON if instance_variable_defined?(:@old_json)
|
24
|
+
Object.send :remove_const, :Oj if instance_variable_defined?(:@old_oj)
|
25
|
+
Object.send :remove_const, :Yajl if instance_variable_defined?(:@old_yajl)
|
26
|
+
Object.send :remove_const, :Gson if instance_variable_defined?(:@old_gson)
|
27
|
+
Object.send :remove_const, :JrJackson if instance_variable_defined?(:@old_jrjackson)
|
28
28
|
end
|
29
29
|
|
30
30
|
after do
|
31
31
|
@old_map.each_with_index do |(library, adapter), index|
|
32
32
|
MultiJson::REQUIREMENT_MAP[index] = [library, adapter]
|
33
33
|
end
|
34
|
-
Object.const_set :JSON, @old_json if
|
35
|
-
Object.const_set :Oj, @old_oj if
|
36
|
-
Object.const_set :Yajl, @old_yajl if
|
37
|
-
Object.const_set :Gson, @old_gson if
|
38
|
-
Object.const_set :JrJackson, @old_jrjackson if
|
34
|
+
Object.const_set :JSON, @old_json if instance_variable_defined?(:@old_json)
|
35
|
+
Object.const_set :Oj, @old_oj if instance_variable_defined?(:@old_oj)
|
36
|
+
Object.const_set :Yajl, @old_yajl if instance_variable_defined?(:@old_yajl)
|
37
|
+
Object.const_set :Gson, @old_gson if instance_variable_defined?(:@old_gson)
|
38
|
+
Object.const_set :JrJackson, @old_jrjackson if instance_variable_defined?(:@old_jrjackson)
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'defaults to ok_json if no other json implementions are available' do
|
@@ -45,7 +45,7 @@ describe 'MultiJson' do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'prints a warning' do
|
48
|
-
Kernel.
|
48
|
+
expect(Kernel).to receive(:warn).with(/warning/i)
|
49
49
|
MultiJson.default_adapter
|
50
50
|
end
|
51
51
|
end
|
@@ -74,16 +74,16 @@ describe 'MultiJson' do
|
|
74
74
|
it 'defaults to the best available gem' do
|
75
75
|
# Clear cache variable already set by previous tests
|
76
76
|
MultiJson.send(:remove_instance_variable, :@adapter)
|
77
|
-
|
78
|
-
expect(MultiJson.adapter).to eq MultiJson::Adapters::
|
77
|
+
if jruby?
|
78
|
+
expect(MultiJson.adapter.to_s).to eq 'MultiJson::Adapters::JrJackson'
|
79
79
|
else
|
80
|
-
expect(MultiJson.adapter).to eq MultiJson::Adapters::
|
80
|
+
expect(MultiJson.adapter.to_s).to eq 'MultiJson::Adapters::Oj'
|
81
81
|
end
|
82
82
|
end
|
83
83
|
|
84
84
|
it 'looks for adapter even if @adapter variable is nil' do
|
85
85
|
MultiJson.send(:instance_variable_set, :@adapter, nil)
|
86
|
-
MultiJson.
|
86
|
+
expect(MultiJson).to receive(:default_adapter).and_return(:ok_json)
|
87
87
|
expect(MultiJson.adapter).to eq MultiJson::Adapters::OkJson
|
88
88
|
end
|
89
89
|
|
@@ -110,8 +110,8 @@ describe 'MultiJson' do
|
|
110
110
|
|
111
111
|
context 'using one-shot parser' do
|
112
112
|
before do
|
113
|
-
MultiJson::Adapters::JsonPure.
|
114
|
-
MultiJson::Adapters::JsonPure.
|
113
|
+
expect(MultiJson::Adapters::JsonPure).to receive(:dump).once.and_return('dump_something')
|
114
|
+
expect(MultiJson::Adapters::JsonPure).to receive(:load).once.and_return('load_something')
|
115
115
|
end
|
116
116
|
|
117
117
|
it 'should use the defined parser just for the call' do
|
@@ -178,13 +178,13 @@ describe 'MultiJson' do
|
|
178
178
|
after(:all){ MultiJson.load_options = MultiJson.dump_options = nil }
|
179
179
|
|
180
180
|
it 'is deprecated' do
|
181
|
-
Kernel.
|
181
|
+
expect(Kernel).to receive(:warn).with(/deprecated/i)
|
182
182
|
silence_warnings{ MultiJson.default_options = {:foo => 'bar'} }
|
183
183
|
end
|
184
184
|
|
185
185
|
it 'sets both load and dump options' do
|
186
|
-
MultiJson.
|
187
|
-
MultiJson.
|
186
|
+
expect(MultiJson).to receive(:dump_options=).with(:foo => 'bar')
|
187
|
+
expect(MultiJson).to receive(:load_options=).with(:foo => 'bar')
|
188
188
|
silence_warnings{ MultiJson.default_options = {:foo => 'bar'} }
|
189
189
|
end
|
190
190
|
end
|
metadata
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: multi_json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.7.
|
4
|
+
version: 1.7.8
|
5
|
+
prerelease:
|
5
6
|
platform: ruby
|
6
7
|
authors:
|
7
8
|
- Michael Bleigh
|
@@ -11,32 +12,39 @@ authors:
|
|
11
12
|
autorequire:
|
12
13
|
bindir: bin
|
13
14
|
cert_chain:
|
14
|
-
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
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-08-04 00:00:00.000000000 Z
|
36
43
|
dependencies:
|
37
44
|
- !ruby/object:Gem::Dependency
|
38
45
|
name: bundler
|
39
46
|
requirement: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
40
48
|
requirements:
|
41
49
|
- - ~>
|
42
50
|
- !ruby/object:Gem::Version
|
@@ -44,6 +52,7 @@ dependencies:
|
|
44
52
|
type: :development
|
45
53
|
prerelease: false
|
46
54
|
version_requirements: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
47
56
|
requirements:
|
48
57
|
- - ~>
|
49
58
|
- !ruby/object:Gem::Version
|
@@ -86,6 +95,7 @@ files:
|
|
86
95
|
- lib/multi_json/adapters/ok_json.rb
|
87
96
|
- lib/multi_json/adapters/yajl.rb
|
88
97
|
- lib/multi_json/convertible_hash_keys.rb
|
98
|
+
- lib/multi_json/load_error.rb
|
89
99
|
- lib/multi_json/options.rb
|
90
100
|
- lib/multi_json/vendor/okjson.rb
|
91
101
|
- lib/multi_json/version.rb
|
@@ -93,26 +103,27 @@ files:
|
|
93
103
|
homepage: http://github.com/intridea/multi_json
|
94
104
|
licenses:
|
95
105
|
- MIT
|
96
|
-
metadata: {}
|
97
106
|
post_install_message:
|
98
107
|
rdoc_options: []
|
99
108
|
require_paths:
|
100
109
|
- lib
|
101
110
|
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
102
112
|
requirements:
|
103
|
-
- - '>='
|
113
|
+
- - ! '>='
|
104
114
|
- !ruby/object:Gem::Version
|
105
115
|
version: '0'
|
106
116
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
107
118
|
requirements:
|
108
|
-
- - '>='
|
119
|
+
- - ! '>='
|
109
120
|
- !ruby/object:Gem::Version
|
110
121
|
version: 1.3.5
|
111
122
|
requirements: []
|
112
123
|
rubyforge_project:
|
113
|
-
rubygems_version:
|
124
|
+
rubygems_version: 1.8.23
|
114
125
|
signing_key:
|
115
|
-
specification_version:
|
126
|
+
specification_version: 3
|
116
127
|
summary: A common interface to multiple JSON libraries.
|
117
128
|
test_files:
|
118
129
|
- spec/adapter_shared_example.rb
|
metadata.gz.sig
CHANGED
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
#��Q�S�=�1 c4֠,-4��J����l.r���.�~����w-(�L-��Gyt�o��9ʑ��U�k�#0�@j�[+�F��:�
|
1
|
+
Z�-�R��7����T�j��;���S�`�����M��� ��ʶ?�W�f�6J���5μRpl&r���/�,�U�ƒQ ��f��l0ɲ�FƨfE�Ld)1�H���f.
|
2
|
+
N_`~�{\Q�f��8���"�8�e�"#��)1;�G�_']��/���<��·4���7��WEh"�71.�4�y�T��˦0EPi���ZG91n�)��9WI��x�)�(�k�յ��N��!����g�Mbʘ
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: 1526efc5eb9f327a9e7d99b8334583259f52ec51
|
4
|
-
data.tar.gz: 665a9bc1822afd536e0564d0e2743934652aa068
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 205f05da917cb2cc834962ac06189ef06e11b6ee47ef0f2162e6afa0849a6002610ecdd3e8524daf6c7835e500e1dd46ba888e4a5e84c2951653475d2c36e4b3
|
7
|
-
data.tar.gz: cdaf1b1d9f0ab8242c93576c63d1b80b96752043cfe6c511fdcf7bf3757fb74816486a667c37c803e0fdb23493736bc50baa840423192e48ef0ac6f8dbffce4b
|
checksums.yaml.gz.sig
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
nH�:%b>��R$��u�=z��Y�J?^Q����pȩ4|{�|f@��&��JYK&�ʯ#+N�"h\3�+R5�S''����xF=��K!�dfNi��S�˵w�T���=4�Էˑ�o�3�]X���`��B�hE�
|