multi_json 1.15.0 → 1.16.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +100 -103
- data/CONTRIBUTING.md +1 -1
- data/LICENSE.md +1 -1
- data/README.md +19 -27
- data/lib/multi_json/adapter.rb +21 -14
- data/lib/multi_json/adapter_error.rb +5 -7
- data/lib/multi_json/adapters/gson.rb +2 -3
- data/lib/multi_json/adapters/jr_jackson.rb +3 -3
- data/lib/multi_json/adapters/json_gem.rb +26 -3
- data/lib/multi_json/adapters/json_pure.rb +2 -6
- data/lib/multi_json/adapters/oj.rb +31 -31
- data/lib/multi_json/adapters/ok_json.rb +3 -3
- data/lib/multi_json/adapters/yajl.rb +3 -3
- data/lib/multi_json/convertible_hash_keys.rb +29 -21
- data/lib/multi_json/options.rb +23 -13
- data/lib/multi_json/options_cache.rb +43 -19
- data/lib/multi_json/parse_error.rb +8 -8
- data/lib/multi_json/vendor/okjson.rb +145 -206
- data/lib/multi_json/version.rb +2 -2
- data/lib/multi_json.rb +59 -48
- metadata +15 -51
- data/lib/multi_json/adapters/json_common.rb +0 -23
- data/lib/multi_json/adapters/nsjsonserialization.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7cfed43da6fae7ff4d1ca11dc248a43fe89d00f184f2e955599467a7b45b6cbe
|
4
|
+
data.tar.gz: d6d16e3c6fd7c3334bf7b44b84896f6ac675dd503ccf4ffc6d2bc2ef415098c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2712e385429e988fddeca64fbe93347eb3a2f6d5d4c3fa83f9ffb40e292e09f35fdf1ee0b82be7d6caa8ccd1d09995f41cb7803546b12e8f3082190bd5556625
|
7
|
+
data.tar.gz: bb3cd2dd7a39f1a6d7aa8b52d2786d908e2e15bc5ed94d750ef458666ef903bcccf2383883841d11795f972bf5923170d84410a1459aa14792448c6d0b583ff8
|
data/CHANGELOG.md
CHANGED
@@ -1,264 +1,263 @@
|
|
1
|
-
1.
|
1
|
+
1.16.0
|
2
2
|
------
|
3
|
-
|
4
|
-
* [
|
3
|
+
* [Remove `NSJSONSerialization`](https://github.com/sferik/multi_json/commit/0423d3b5886e93405f4c2221687b7e3329bd2940)
|
4
|
+
* [Stop referencing `JSON::PRETTY_STATE_PROTOTYPE`](https://github.com/sferik/multi_json/commit/58094d7a0583bf1f5052886806a032c00f16ffc5)
|
5
|
+
* [Drop support for Ruby versions < 3.2](https://github.com/sferik/multi_json/commit/ff3b42c4bc26cd6512914b7e5321976e948985dc)
|
6
|
+
* [Move repo from @intridea to @sferik](https://github.com/sferik/multi_json/commit/e87aeadbc9b9aa6df79818fa01bfc5fa959d8474)
|
7
|
+
* [`JsonCommon`: force encoding to UTF-8, not binary](https://github.com/sferik/multi_json/commit/34dd0247de07f2703c7d42a42d4cefc73635f3cc)
|
8
|
+
* [Stop setting defaults in `JsonCommon`](https://github.com/sferik/multi_json/commit/d5f9e6e72b99a7def695f430f72c8365998de625)
|
9
|
+
* [Make `json_pure` an alias of `json_gem`](https://github.com/sferik/multi_json/commit/9ff7c3dcbe3650e712b38e636ad19061a4c08d1a)
|
10
|
+
|
11
|
+
1.15.0
|
12
|
+
------
|
13
|
+
* [Improve detection of json_gem adapter](https://github.com/sferik/multi_json/commit/62d54019b17ebf83b28c8deb871a02a122e7d9cf)
|
5
14
|
|
6
15
|
1.14.1
|
7
16
|
------
|
8
|
-
|
9
|
-
* [Fix a warning in Ruby 2.7](https://github.com/intridea/multi_json/commit/26a94ab8c78a394cc237e2ea292c1de4f6ed30d7)
|
17
|
+
* [Fix a warning in Ruby 2.7](https://github.com/sferik/multi_json/commit/26a94ab8c78a394cc237e2ea292c1de4f6ed30d7)
|
10
18
|
|
11
19
|
1.14.0
|
12
20
|
------
|
13
|
-
|
14
|
-
* [Support Oj 3.x gem](https://github.com/intridea/multi_json/commit/5d8febdbebc428882811b90d514f3628617a61d5)
|
21
|
+
* [Support Oj 3.x gem](https://github.com/sferik/multi_json/commit/5d8febdbebc428882811b90d514f3628617a61d5)
|
15
22
|
|
16
23
|
1.13.1
|
17
24
|
------
|
18
|
-
|
19
|
-
* [Fix missing stdlib set dependency in oj adapter](https://github.com/intridea/multi_json/commit/c4ff66e7bee6fb4f45e54429813d7fada1c152b8)
|
25
|
+
* [Fix missing stdlib set dependency in oj adapter](https://github.com/sferik/multi_json/commit/c4ff66e7bee6fb4f45e54429813d7fada1c152b8)
|
20
26
|
|
21
27
|
1.13.0
|
22
28
|
-----
|
23
|
-
|
24
|
-
* [Make Oj adapter handle JSON::ParseError correctly](https://github.com/intridea/multi_json/commit/275e3ffd8169797c510d23d9ef5b8b07e64c3b42)
|
29
|
+
* [Make Oj adapter handle JSON::ParseError correctly](https://github.com/sferik/multi_json/commit/275e3ffd8169797c510d23d9ef5b8b07e64c3b42)
|
25
30
|
|
26
31
|
1.12.2
|
27
32
|
------
|
28
|
-
|
29
|
-
* [Renew gem certificate](https://github.com/intridea/multi_json/commit/57922d898c6eb587cc9a28ba5724c11e81724700)
|
33
|
+
* [Renew gem certificate](https://github.com/sferik/multi_json/commit/57922d898c6eb587cc9a28ba5724c11e81724700)
|
30
34
|
|
31
35
|
1.12.1
|
32
36
|
------
|
33
|
-
|
34
|
-
* [Prevent memory leak in OptionsCache](https://github.com/intridea/multi_json/commit/aa7498199ad272f3d4a13750d7c568a66047e2ee)
|
37
|
+
* [Prevent memory leak in OptionsCache](https://github.com/sferik/multi_json/commit/aa7498199ad272f3d4a13750d7c568a66047e2ee)
|
35
38
|
|
36
39
|
1.12.0
|
37
40
|
------
|
38
|
-
|
39
|
-
* [Introduce global options cache to improve peroformance](https://github.com/intridea/multi_json/commit/7aaef2a1bc2b83c95e4208b12dad5d1d87ff20a6)
|
41
|
+
* [Introduce global options cache to improve peroformance](https://github.com/sferik/multi_json/commit/7aaef2a1bc2b83c95e4208b12dad5d1d87ff20a6)
|
40
42
|
|
41
43
|
1.11.2
|
42
44
|
------
|
43
|
-
|
44
|
-
* [Only pass one argument to JrJackson when two is not supported](https://github.com/intridea/multi_json/commit/e798fa517c817fc706982d3f3c61129b6651d601)
|
45
|
+
* [Only pass one argument to JrJackson when two is not supported](https://github.com/sferik/multi_json/commit/e798fa517c817fc706982d3f3c61129b6651d601)
|
45
46
|
|
46
47
|
1.11.1
|
47
48
|
------
|
48
|
-
|
49
|
-
* [Dump method passes options throught for JrJackson adapter](https://github.com/intridea/multi_json/commit/3c730fd12135c3e7bf212f878958004908f13909)
|
49
|
+
* [Dump method passes options throught for JrJackson adapter](https://github.com/sferik/multi_json/commit/3c730fd12135c3e7bf212f878958004908f13909)
|
50
50
|
|
51
51
|
1.11.0
|
52
52
|
------
|
53
|
-
|
54
|
-
* [Make all adapters read IO object before load](https://github.com/intridea/multi_json/commit/167f559e18d4efee05e1f160a2661d16dbb215d4)
|
53
|
+
* [Make all adapters read IO object before load](https://github.com/sferik/multi_json/commit/167f559e18d4efee05e1f160a2661d16dbb215d4)
|
55
54
|
|
56
55
|
1.10.1
|
57
56
|
------
|
58
|
-
* [Explicitly require stringio for Gson adapter](https://github.com/
|
59
|
-
* [Do not read StringIO object before passing it to JrJackson](https://github.com/
|
57
|
+
* [Explicitly require stringio for Gson adapter](https://github.com/sferik/multi_json/commit/623ec8142d4a212fa0db763bb71295789a119929)
|
58
|
+
* [Do not read StringIO object before passing it to JrJackson](https://github.com/sferik/multi_json/commit/a6dc935df08e7b3d5d701fbb9298384c96df0fde)
|
60
59
|
|
61
60
|
1.10.0
|
62
61
|
------
|
63
|
-
* [Performance tweaks](https://github.com/
|
62
|
+
* [Performance tweaks](https://github.com/sferik/multi_json/commit/58724acfed31866d079eaafb1cd824e341ade287)
|
64
63
|
|
65
64
|
1.9.3
|
66
65
|
-----
|
67
|
-
* [Convert indent option to Fixnum before passing to Oj](https://github.com/
|
66
|
+
* [Convert indent option to Fixnum before passing to Oj](https://github.com/sferik/multi_json/commit/826fc5535b863b74fc9f981dfdda3e26f1ee4e5b)
|
68
67
|
|
69
68
|
1.9.2
|
70
69
|
-----
|
71
|
-
* [Enable use_to_json option for Oj adapter by default](https://github.com/
|
70
|
+
* [Enable use_to_json option for Oj adapter by default](https://github.com/sferik/multi_json/commit/76a4aaf697b10bbabd5d535d83cf1149efcfe5c7)
|
72
71
|
|
73
72
|
1.9.1
|
74
73
|
-----
|
75
|
-
* [Remove unused LoadError file](https://github.com/
|
74
|
+
* [Remove unused LoadError file](https://github.com/sferik/multi_json/commit/65dedd84d59baeefc25c477fedf0bbe85e7ce2cd)
|
76
75
|
|
77
76
|
1.9.0
|
78
77
|
----
|
79
|
-
* [Rename LoadError to ParseError](https://github.com/
|
80
|
-
* [Adapter load failure throws AdapterError instead of ArgumentError](https://github.com/
|
78
|
+
* [Rename LoadError to ParseError](https://github.com/sferik/multi_json/commit/4abb98fe3a90b2a7b3d1594515c8a06042b4a27d)
|
79
|
+
* [Adapter load failure throws AdapterError instead of ArgumentError](https://github.com/sferik/multi_json/commit/4da612b617bd932bb6fa1cc4c43210327f98f271)
|
81
80
|
|
82
81
|
1.8.4
|
83
82
|
-----
|
84
|
-
* [Make Gson adapter explicitly read StringIO object](https://github.com/
|
83
|
+
* [Make Gson adapter explicitly read StringIO object](https://github.com/sferik/multi_json/commit/b58b498747ff6e94f41488c971b2a30a98760ef2)
|
85
84
|
|
86
85
|
1.8.3
|
87
86
|
-----
|
88
|
-
* [Make JrJackson explicitly read StringIO objects](https://github.com/
|
89
|
-
* [Prevent calling #downcase on alias symbols](https://github.com/
|
87
|
+
* [Make JrJackson explicitly read StringIO objects](https://github.com/sferik/multi_json/commit/e1f162d5b668e5e4db5afa175361a601a8aa2b05)
|
88
|
+
* [Prevent calling #downcase on alias symbols](https://github.com/sferik/multi_json/commit/c1cf075453ce0110f7decc4f906444b1233bb67c)
|
90
89
|
|
91
90
|
1.8.2
|
92
91
|
-----
|
93
|
-
* [Downcase adapter string name for OS compatibility](https://github.com/
|
92
|
+
* [Downcase adapter string name for OS compatibility](https://github.com/sferik/multi_json/commit/b8e15a032247a63f1410d21a18add05035f3fa66)
|
94
93
|
|
95
94
|
1.8.1
|
96
95
|
-----
|
97
|
-
* [Let the adapter handle strings with invalid encoding](https://github.com/
|
96
|
+
* [Let the adapter handle strings with invalid encoding](https://github.com/sferik/multi_json/commit/6af2bf87b89f44eabf2ae9ca96779febc65ea94b)
|
98
97
|
|
99
98
|
1.8.0
|
100
99
|
-----
|
101
|
-
* [Raise MultiJson::LoadError on blank input](https://github.com/
|
100
|
+
* [Raise MultiJson::LoadError on blank input](https://github.com/sferik/multi_json/commit/c44f9c928bb25fe672246ad394b3e5b991be32e6)
|
102
101
|
|
103
102
|
1.7.9
|
104
103
|
-----
|
105
|
-
* [Explicitly require json gem code even when constant is defined](https://github.com/
|
104
|
+
* [Explicitly require json gem code even when constant is defined](https://github.com/sferik/multi_json/commit/36f7906c66477eb4b55b7afeaa3684b6db69eff2)
|
106
105
|
|
107
106
|
1.7.8
|
108
107
|
-----
|
109
|
-
* [Reorder JrJackson before json_gem](https://github.com/
|
110
|
-
* [Update vendored OkJson to version 43](https://github.com/
|
108
|
+
* [Reorder JrJackson before json_gem](https://github.com/sferik/multi_json/commit/315b6e460b6e4dcdb6c82e04e4be8ee975d395da)
|
109
|
+
* [Update vendored OkJson to version 43](https://github.com/sferik/multi_json/commit/99a6b662f6ef4036e3ee94d7eb547fa72fb2ab50)
|
111
110
|
|
112
111
|
1.7.7
|
113
112
|
-----
|
114
|
-
* [Fix options caching issues](https://github.com/
|
113
|
+
* [Fix options caching issues](https://github.com/sferik/multi_json/commit/a3f14c3661688c5927638fa6088c7b46a67e875e)
|
115
114
|
|
116
115
|
1.7.6
|
117
116
|
-----
|
118
|
-
* [Bring back MultiJson::VERSION constant](https://github.com/
|
117
|
+
* [Bring back MultiJson::VERSION constant](https://github.com/sferik/multi_json/commit/31b990c2725e6673bf8ce57540fe66b57a751a72)
|
119
118
|
|
120
119
|
1.7.5
|
121
120
|
-----
|
122
|
-
* [Fix warning '*' interpreted as argument prefix](https://github.com/
|
123
|
-
* [Remove stdlib warning](https://github.com/
|
121
|
+
* [Fix warning '*' interpreted as argument prefix](https://github.com/sferik/multi_json/commit/b698962c7f64430222a1f06430669706a47aff89)
|
122
|
+
* [Remove stdlib warning](https://github.com/sferik/multi_json/commit/d06eec6b7996ac8b4ff0e2229efd835379b0c30f)
|
124
123
|
|
125
124
|
1.7.4
|
126
125
|
-----
|
127
|
-
* [Cache options for better performance](https://github.com/
|
126
|
+
* [Cache options for better performance](https://github.com/sferik/multi_json/commit/8a26ee93140c4bed36194ed9fb887a1b6919257b)
|
128
127
|
|
129
128
|
1.7.3
|
130
129
|
-----
|
131
|
-
* [Require json/ext to ensure extension version gets loaded for json_gem](https://github.com/
|
132
|
-
* [Rename JrJackson](https://github.com/
|
133
|
-
* [Prefer JrJackson to JSON gem if present](https://github.com/
|
134
|
-
* [Print a warning if outdated gem versions are used](https://github.com/
|
135
|
-
* [Loosen required_rubygems_version for compatibility with Ubuntu 10.04](https://github.com/
|
130
|
+
* [Require json/ext to ensure extension version gets loaded for json_gem](https://github.com/sferik/multi_json/commit/942686f7e8597418c6f90ee69e1d45242fac07b1)
|
131
|
+
* [Rename JrJackson](https://github.com/sferik/multi_json/commit/078de7ba8b6035343c3e96b4767549e9ec43369a)
|
132
|
+
* [Prefer JrJackson to JSON gem if present](https://github.com/sferik/multi_json/commit/af8bd9799a66855f04b3aff1c488485950cec7bf)
|
133
|
+
* [Print a warning if outdated gem versions are used](https://github.com/sferik/multi_json/commit/e7438e7ba2be0236cfa24c2bb9ad40ee821286d1)
|
134
|
+
* [Loosen required_rubygems_version for compatibility with Ubuntu 10.04](https://github.com/sferik/multi_json/commit/59fad014e8fe41dbc6f09485ea0dc21fc42fd7a7)
|
136
135
|
|
137
136
|
1.7.2
|
138
137
|
-----
|
139
|
-
* [Rename Jrjackson adapter to JrJackson](https://github.com/
|
140
|
-
* [Implement jrjackson -> jr_jackson alias for back-compatability](https://github.com/
|
141
|
-
* [Update vendored OkJson module](https://github.com/
|
138
|
+
* [Rename Jrjackson adapter to JrJackson](https://github.com/sferik/multi_json/commit/b36dc915fc0e6548cbad06b5db6f520e040c9c8b)
|
139
|
+
* [Implement jrjackson -> jr_jackson alias for back-compatability](https://github.com/sferik/multi_json/commit/aa50ab8b7bb646b8b75d5d65dfeadae8248a4f10)
|
140
|
+
* [Update vendored OkJson module](https://github.com/sferik/multi_json/commit/30a3f474e17dd86a697c3fab04f468d1a4fd69d7)
|
142
141
|
|
143
142
|
1.7.1
|
144
143
|
-----
|
145
|
-
* [Fix capitalization of JrJackson class](https://github.com/
|
144
|
+
* [Fix capitalization of JrJackson class](https://github.com/sferik/multi_json/commit/5373a5e38c647f02427a0477cb8e0e0dafad1b8d)
|
146
145
|
|
147
146
|
1.7.0
|
148
147
|
-----
|
149
|
-
* [Add load_options/dump_options to MultiJson](https://github.com/
|
150
|
-
* [MultiJson does not modify arguments](https://github.com/
|
151
|
-
* [Enable quirks_mode by default for json_gem/json_pure adapters](https://github.com/
|
152
|
-
* [Add JrJackson adapter](https://github.com/
|
153
|
-
* [Raise ArgumentError on bad adapter input](https://github.com/
|
148
|
+
* [Add load_options/dump_options to MultiJson](https://github.com/sferik/multi_json/commit/a153956be6b0df06ea1705ce3c1ff0b5b0e27ea5)
|
149
|
+
* [MultiJson does not modify arguments](https://github.com/sferik/multi_json/commit/58525b01c4c2f6635ba2ac13d6fd987b79f3962f)
|
150
|
+
* [Enable quirks_mode by default for json_gem/json_pure adapters](https://github.com/sferik/multi_json/commit/1fd4e6635c436515b7d7d5a0bee4548de8571520)
|
151
|
+
* [Add JrJackson adapter](https://github.com/sferik/multi_json/commit/4dd86fa96300aaaf6d762578b9b31ea82adb056d)
|
152
|
+
* [Raise ArgumentError on bad adapter input](https://github.com/sferik/multi_json/commit/911a3756bdff2cb5ac06497da3fa3e72199cb7ad)
|
154
153
|
|
155
154
|
1.6.1
|
156
155
|
-----
|
157
|
-
* [Revert "Use JSON.generate instead of #to_json"](https://github.com/
|
156
|
+
* [Revert "Use JSON.generate instead of #to_json"](https://github.com/sferik/multi_json/issues/86)
|
158
157
|
|
159
158
|
1.6.0
|
160
159
|
-----
|
161
|
-
* [Add gson.rb support](https://github.com/
|
162
|
-
* [Add MultiJson.default_options](https://github.com/
|
163
|
-
* [Add MultiJson.with_adapter](https://github.com/
|
164
|
-
* [Stringify all possible keys for ok_json](https://github.com/
|
165
|
-
* [Use JSON.generate instead of #to_json](https://github.com/
|
166
|
-
* [Alias `MultiJson::DecodeError` to `MultiJson::LoadError`](https://github.com/
|
160
|
+
* [Add gson.rb support](https://github.com/sferik/multi_json/pull/71)
|
161
|
+
* [Add MultiJson.default_options](https://github.com/sferik/multi_json/pull/70)
|
162
|
+
* [Add MultiJson.with_adapter](https://github.com/sferik/multi_json/pull/67)
|
163
|
+
* [Stringify all possible keys for ok_json](https://github.com/sferik/multi_json/pull/66)
|
164
|
+
* [Use JSON.generate instead of #to_json](https://github.com/sferik/multi_json/issues/73)
|
165
|
+
* [Alias `MultiJson::DecodeError` to `MultiJson::LoadError`](https://github.com/sferik/multi_json/pull/79)
|
167
166
|
|
168
167
|
1.5.1
|
169
168
|
-----
|
170
|
-
* [Do not allow Oj or JSON to create symbols by searching for classes](https://github.com/
|
169
|
+
* [Do not allow Oj or JSON to create symbols by searching for classes](https://github.com/sferik/multi_json/commit/193e28cf4dc61b6e7b7b7d80f06f74c76df65c41)
|
171
170
|
|
172
171
|
1.5.0
|
173
172
|
-----
|
174
|
-
* [Add `MultiJson.with_adapter` method](https://github.com/
|
175
|
-
* [Stringify all possible keys for `ok_json`](https://github.com/
|
173
|
+
* [Add `MultiJson.with_adapter` method](https://github.com/sferik/multi_json/commit/d14c5d28cae96557a0421298621b9499e1f28104)
|
174
|
+
* [Stringify all possible keys for `ok_json`](https://github.com/sferik/multi_json/commit/73998074058e1e58c557ffa7b9541d486d6041fa)
|
176
175
|
|
177
176
|
1.4.0
|
178
177
|
-----
|
179
|
-
* [Allow `load`/`dump` of JSON fragments](https://github.com/
|
178
|
+
* [Allow `load`/`dump` of JSON fragments](https://github.com/sferik/multi_json/commit/707aae7d48d39c85b38febbd2c210ba87f6e4a36)
|
180
179
|
|
181
180
|
1.3.7
|
182
181
|
-----
|
183
|
-
* [Fix rescue clause for MagLev](https://github.com/
|
184
|
-
* [Remove unnecessary check for string version of options key](https://github.com/
|
185
|
-
* [Explicitly set default adapter when adapter is set to `nil` or `false`](https://github.com/
|
186
|
-
* [Fix Oj `ParseError` mapping for Oj 1.4.0](https://github.com/
|
182
|
+
* [Fix rescue clause for MagLev](https://github.com/sferik/multi_json/commit/39abdf50199828c50e85b2ce8f8ba31fcbbc9332)
|
183
|
+
* [Remove unnecessary check for string version of options key](https://github.com/sferik/multi_json/commit/660101b70e962b3c007d0b90d45944fa47d13ec4)
|
184
|
+
* [Explicitly set default adapter when adapter is set to `nil` or `false`](https://github.com/sferik/multi_json/commit/a9e587d5a63eafb4baee9fb211265e4dd96a26bc)
|
185
|
+
* [Fix Oj `ParseError` mapping for Oj 1.4.0](https://github.com/sferik/multi_json/commit/7d9045338cc9029401c16f3c409d54ce97f275e2)
|
187
186
|
|
188
187
|
1.3.6
|
189
188
|
-----
|
190
|
-
* [Allow adapter-specific options to be passed through to Oj](https://github.com/
|
189
|
+
* [Allow adapter-specific options to be passed through to Oj](https://github.com/sferik/multi_json/commit/d0e5feeebcba0bc69400dd203a295f5c30971223)
|
191
190
|
|
192
191
|
1.3.5
|
193
192
|
-----
|
194
|
-
* [Add pretty support to Oj adapter](https://github.com/
|
193
|
+
* [Add pretty support to Oj adapter](https://github.com/sferik/multi_json/commit/0c8f75f03020c53bcf4c6be258faf433d24b2c2b)
|
195
194
|
|
196
195
|
1.3.4
|
197
196
|
-----
|
198
|
-
* [Use `class << self` instead of `module_function` to create aliases](https://github.com/
|
197
|
+
* [Use `class << self` instead of `module_function` to create aliases](https://github.com/sferik/multi_json/commit/ba1451c4c48baa297e049889be241a424cb05980)
|
199
198
|
|
200
199
|
1.3.3
|
201
200
|
-----
|
202
|
-
* [Remove deprecation warnings](https://github.com/
|
201
|
+
* [Remove deprecation warnings](https://github.com/sferik/multi_json/commit/36b524e71544eb0186826a891bcc03b2820a008f)
|
203
202
|
|
204
203
|
1.3.2
|
205
204
|
-----
|
206
|
-
* [Add ability to use adapter per call](https://github.com/
|
207
|
-
* [Add and deprecate `default_engine` method](https://github.com/
|
205
|
+
* [Add ability to use adapter per call](https://github.com/sferik/multi_json/commit/106bbec469d5d0a832bfa31fffcb8c0f0cdc9bd3)
|
206
|
+
* [Add and deprecate `default_engine` method](https://github.com/sferik/multi_json/commit/fc3df0c7a3e2ab9ce0c2c7e7617a4da97dd13f6e)
|
208
207
|
|
209
208
|
1.3.1
|
210
209
|
-----
|
211
|
-
* [Only warn once for each instance a deprecated method is called](https://github.com/
|
210
|
+
* [Only warn once for each instance a deprecated method is called](https://github.com/sferik/multi_json/commit/e21d6eb7da74b3f283995c1d27d5880e75f0ae84)
|
212
211
|
|
213
212
|
1.3.0
|
214
213
|
-----
|
215
|
-
* [Implement `load`/`dump`; deprecate `decode`/`encode`](https://github.com/
|
216
|
-
* [Rename engines to adapters](https://github.com/
|
214
|
+
* [Implement `load`/`dump`; deprecate `decode`/`encode`](https://github.com/sferik/multi_json/commit/e90fd6cb1b0293eb0c73c2f4eb0f7a1764370216)
|
215
|
+
* [Rename engines to adapters](https://github.com/sferik/multi_json/commit/ae7fd144a7949a9c221dcaa446196ec23db908df)
|
217
216
|
|
218
217
|
1.2.0
|
219
218
|
-----
|
220
|
-
* [Add support for Oj](https://github.com/
|
219
|
+
* [Add support for Oj](https://github.com/sferik/multi_json/commit/acd06b233edabe6c44f226873db7b49dab560c60)
|
221
220
|
|
222
221
|
1.1.0
|
223
222
|
-----
|
224
|
-
* [`NSJSONSerialization` support for MacRuby](https://github.com/
|
223
|
+
* [`NSJSONSerialization` support for MacRuby](https://github.com/sferik/multi_json/commit/f862e2fc966cac8867fe7da3997fc76e8a6cf5d4)
|
225
224
|
|
226
225
|
1.0.4
|
227
226
|
-----
|
228
|
-
* [Set data context to `DecodeError` exception](https://github.com/
|
229
|
-
* [Allow `ok_json` to fallback to `to_json`](https://github.com/
|
230
|
-
* [Add warning when using `ok_json`](https://github.com/
|
231
|
-
* [Options can be passed to an engine on encode](https://github.com/
|
227
|
+
* [Set data context to `DecodeError` exception](https://github.com/sferik/multi_json/commit/19ddafd44029c6681f66fae2a0f6eabfd0f85176)
|
228
|
+
* [Allow `ok_json` to fallback to `to_json`](https://github.com/sferik/multi_json/commit/c157240b1193b283d06d1bd4d4b5b06bcf3761f8)
|
229
|
+
* [Add warning when using `ok_json`](https://github.com/sferik/multi_json/commit/dd4b68810c84f826fb98f9713bfb29ab96888d57)
|
230
|
+
* [Options can be passed to an engine on encode](https://github.com/sferik/multi_json/commit/e0a7ff5d5ff621ffccc61617ed8aeec5816e81f7)
|
232
231
|
|
233
232
|
1.0.3
|
234
233
|
-----
|
235
|
-
* [`Array` support for `stringify_keys`](https://github.com/
|
236
|
-
* [`Array` support for `symbolize_keys`](https://github.com/
|
234
|
+
* [`Array` support for `stringify_keys`](https://github.com/sferik/multi_json/commit/644d1c5c7c7f6a27663b11668527b346094e38b9)
|
235
|
+
* [`Array` support for `symbolize_keys`](https://github.com/sferik/multi_json/commit/c885377d47a2aa39cb0d971fea78db2d2fa479a7)
|
237
236
|
|
238
237
|
1.0.2
|
239
238
|
-----
|
240
|
-
* [Allow encoding of rootless JSON when `ok_json` is used](https://github.com/
|
239
|
+
* [Allow encoding of rootless JSON when `ok_json` is used](https://github.com/sferik/multi_json/commit/d1cde7de97cb0f6152aef8daf14037521cdce8c6)
|
241
240
|
|
242
241
|
1.0.1
|
243
242
|
-----
|
244
|
-
* [Correct an issue with `ok_json` not being returned as the default engine](https://github.com/
|
243
|
+
* [Correct an issue with `ok_json` not being returned as the default engine](https://github.com/sferik/multi_json/commit/d33c141619c54cccd770199694da8fd1bd8f449d)
|
245
244
|
|
246
245
|
1.0.0
|
247
246
|
-----
|
248
|
-
* [Remove `ActiveSupport::JSON` support](https://github.com/
|
249
|
-
* [Fix `@engine` ivar warning](https://github.com/
|
250
|
-
* [Only `rescue` from parsing errors during decoding, not any `StandardError`](https://github.com/
|
251
|
-
* [Rename `okjson` engine and vendored lib to `ok_json`](https://github.com/
|
252
|
-
* [Add `StringIO` support to `json` gem and `ok_json`](https://github.com/
|
247
|
+
* [Remove `ActiveSupport::JSON` support](https://github.com/sferik/multi_json/commit/c2f4140141d785a24b3f56e58811b0e561b37f6a)
|
248
|
+
* [Fix `@engine` ivar warning](https://github.com/sferik/multi_json/commit/3b978a8995721a8dffedc3b75a7f49e5494ec553)
|
249
|
+
* [Only `rescue` from parsing errors during decoding, not any `StandardError`](https://github.com/sferik/multi_json/commit/391d00b5e85294d42d41347605d8d46b4a7f66cc)
|
250
|
+
* [Rename `okjson` engine and vendored lib to `ok_json`](https://github.com/sferik/multi_json/commit/5bd1afc977a8208ddb0443e1d57cb79665c019f1)
|
251
|
+
* [Add `StringIO` support to `json` gem and `ok_json`](https://github.com/sferik/multi_json/commit/1706b11568db7f50af451fce5f4d679aeb3bbe8f)
|
253
252
|
|
254
253
|
0.0.5
|
255
254
|
-----
|
256
|
-
* [Trap all JSON decoding errors; raise `MultiJson::DecodeError`](https://github.com/
|
255
|
+
* [Trap all JSON decoding errors; raise `MultiJson::DecodeError`](https://github.com/sferik/multi_json/commit/dea9a1aef6dd1212aa1e5a37ab1669f9b045b732)
|
257
256
|
|
258
257
|
0.0.4
|
259
258
|
-----
|
260
|
-
* [Fix default_engine check for `json` gem](https://github.com/
|
261
|
-
* [Make requirement mapper an `Array` to preserve order in Ruby versions < 1.9](https://github.com/
|
259
|
+
* [Fix default_engine check for `json` gem](https://github.com/sferik/multi_json/commit/caced0c4e8c795922a109ebc00c3c4fa8635bed8)
|
260
|
+
* [Make requirement mapper an `Array` to preserve order in Ruby versions < 1.9](https://github.com/sferik/multi_json/commit/526f5f29a42131574a088ad9bbb43d7f48439b2c)
|
262
261
|
|
263
262
|
0.0.3
|
264
263
|
-----
|
@@ -266,10 +265,8 @@
|
|
266
265
|
|
267
266
|
0.0.2
|
268
267
|
-----
|
269
|
-
|
270
268
|
* [Rename to `multi_json`](https://github.com/sferik/twitter/commit/461ab89ce071c8c9fabfc183581e0ec523788b62)
|
271
269
|
|
272
270
|
0.0.1
|
273
271
|
-----
|
274
|
-
|
275
272
|
* [Initial commit](https://github.com/sferik/twitter/commit/518c21ab299c500527491e6c049ab2229e22a805)
|
data/CONTRIBUTING.md
CHANGED
@@ -17,7 +17,7 @@ Here are some ways *you* can contribute:
|
|
17
17
|
* by closing [issues][]
|
18
18
|
* by reviewing patches
|
19
19
|
|
20
|
-
[issues]: https://github.com/
|
20
|
+
[issues]: https://github.com/sferik/multi_json/issues
|
21
21
|
|
22
22
|
## Submitting an Issue
|
23
23
|
We use the [GitHub issue tracker][issues] to track bugs and features. Before
|
data/LICENSE.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2010-
|
1
|
+
Copyright (c) 2010-2025 Michael Bleigh, Josh Kalderimis, Erik Berlin, Pavel Pravosud
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# MultiJSON
|
2
2
|
|
3
3
|
[][gem]
|
4
|
-
[][build]
|
5
|
+
[][qlty]
|
6
6
|
|
7
7
|
Lots of Ruby libraries parse JSON and everyone has their favorite JSON coder.
|
8
8
|
Instead of choosing a single JSON coder and forcing users of your library to be
|
@@ -42,34 +42,27 @@ which inherits from `ArgumentError`.
|
|
42
42
|
MultiJSON tries to have intelligent defaulting. That is, if you have any of the
|
43
43
|
supported engines already loaded, it will utilize them before attempting to
|
44
44
|
load any. When loading, libraries are ordered by speed. First Oj, then Yajl,
|
45
|
-
then the JSON gem
|
45
|
+
then the JSON gem. If no other JSON library is available,
|
46
46
|
MultiJSON falls back to [OkJson][], a simple, vendorable JSON parser.
|
47
47
|
|
48
48
|
## Supported JSON Engines
|
49
49
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
* [JrJackson][jrjackson] JRuby wrapper for Jackson (JRuby only)
|
57
|
-
* [OkJson][okjson] A simple, vendorable JSON parser
|
50
|
+
- [Oj][oj] Optimized JSON by Peter Ohler
|
51
|
+
- [Yajl][yajl] Yet Another JSON Library by Brian Lopez
|
52
|
+
- [JSON][json-gem] The default JSON gem with C-extensions (ships with Ruby 1.9+)
|
53
|
+
- [gson.rb][gson] A Ruby wrapper for google-gson library (JRuby only)
|
54
|
+
- [JrJackson][jrjackson] JRuby wrapper for Jackson (JRuby only)
|
55
|
+
- [OkJson][okjson] A simple, vendorable JSON parser
|
58
56
|
|
59
57
|
## Supported Ruby Versions
|
60
|
-
|
58
|
+
|
59
|
+
This library aims to support and is [tested against](https://github.com/sferik/multi_json/actions/workflows/ci.yml) the following Ruby
|
61
60
|
implementations:
|
62
61
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
* Ruby 2.2
|
68
|
-
* Ruby 2.4
|
69
|
-
* Ruby 2.5
|
70
|
-
* Ruby 2.6
|
71
|
-
* Ruby 2.7
|
72
|
-
* [JRuby][]
|
62
|
+
- Ruby 3.2
|
63
|
+
- Ruby 3.3
|
64
|
+
- Ruby 3.4
|
65
|
+
- [JRuby 10][jruby]
|
73
66
|
|
74
67
|
If something doesn't work in one of these implementations, it's a bug.
|
75
68
|
|
@@ -100,22 +93,21 @@ spec.add_dependency 'multi_json', '~> 1.0'
|
|
100
93
|
```
|
101
94
|
|
102
95
|
## Copyright
|
103
|
-
|
96
|
+
|
97
|
+
Copyright (c) 2010-2025 Michael Bleigh, Josh Kalderimis, Erik Berlin,
|
104
98
|
and Pavel Pravosud. See [LICENSE][] for details.
|
105
99
|
|
106
|
-
[
|
100
|
+
[build]: https://github.com/sferik/multi_json/actions/workflows/ci.yml
|
107
101
|
[gem]: https://rubygems.org/gems/multi_json
|
108
102
|
[gson]: https://github.com/avsej/gson.rb
|
109
103
|
[jrjackson]: https://github.com/guyboertje/jrjackson
|
110
104
|
[jruby]: http://www.jruby.org/
|
111
105
|
[json-gem]: https://github.com/flori/json
|
112
|
-
[json-pure]: https://github.com/flori/json
|
113
106
|
[license]: LICENSE.md
|
114
107
|
[macruby]: http://www.macruby.org/
|
115
|
-
[nsjson]: https://developer.apple.com/library/ios/#documentation/Foundation/Reference/NSJSONSerialization_Class/Reference/Reference.html
|
116
108
|
[oj]: https://github.com/ohler55/oj
|
117
109
|
[okjson]: https://github.com/kr/okjson
|
118
110
|
[pvc]: http://docs.rubygems.org/read/chapter/16#page74
|
111
|
+
[qlty]: https://qlty.sh/gh/sferik/projects/multi_json
|
119
112
|
[semver]: http://semver.org/
|
120
|
-
[travis]: http://travis-ci.org/intridea/multi_json
|
121
113
|
[yajl]: https://github.com/brianmario/yajl-ruby
|
data/lib/multi_json/adapter.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require "singleton"
|
2
|
+
require_relative "options"
|
3
3
|
|
4
4
|
module MultiJson
|
5
5
|
class Adapter
|
@@ -7,17 +7,18 @@ module MultiJson
|
|
7
7
|
include Singleton
|
8
8
|
|
9
9
|
class << self
|
10
|
-
|
11
|
-
|
10
|
+
BLANK_RE = /\A\s*\z/
|
11
|
+
private_constant :BLANK_RE
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
def defaults(action, value)
|
14
|
+
value.freeze
|
15
|
+
define_singleton_method("default_#{action}_options") { value }
|
16
16
|
end
|
17
17
|
|
18
18
|
def load(string, options = {})
|
19
19
|
string = string.read if string.respond_to?(:read)
|
20
|
-
|
20
|
+
raise self::ParseError if blank?(string)
|
21
|
+
|
21
22
|
instance.load(string, cached_load_options(options))
|
22
23
|
end
|
23
24
|
|
@@ -25,25 +26,31 @@ module MultiJson
|
|
25
26
|
instance.dump(object, cached_dump_options(options))
|
26
27
|
end
|
27
28
|
|
28
|
-
|
29
|
+
private
|
29
30
|
|
30
31
|
def blank?(input)
|
31
|
-
input.nil? ||
|
32
|
+
input.nil? || BLANK_RE.match?(input)
|
32
33
|
rescue ArgumentError # invalid byte sequence in UTF-8
|
33
34
|
false
|
34
35
|
end
|
35
36
|
|
36
37
|
def cached_dump_options(options)
|
37
|
-
|
38
|
-
|
38
|
+
opts = options_without_adapter(options)
|
39
|
+
OptionsCache.dump.fetch(opts) do
|
40
|
+
dump_options(opts).merge(MultiJson.dump_options(opts)).merge!(opts)
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
42
44
|
def cached_load_options(options)
|
43
|
-
|
44
|
-
|
45
|
+
opts = options_without_adapter(options)
|
46
|
+
OptionsCache.load.fetch(opts) do
|
47
|
+
load_options(opts).merge(MultiJson.load_options(opts)).merge!(opts)
|
45
48
|
end
|
46
49
|
end
|
50
|
+
|
51
|
+
def options_without_adapter(options)
|
52
|
+
options[:adapter] ? options.except(:adapter) : options
|
53
|
+
end
|
47
54
|
end
|
48
55
|
end
|
49
56
|
end
|
@@ -1,15 +1,13 @@
|
|
1
1
|
module MultiJson
|
2
2
|
class AdapterError < ArgumentError
|
3
|
-
|
3
|
+
def initialize(message = nil, cause: nil)
|
4
|
+
super(message)
|
5
|
+
set_backtrace(cause.backtrace) if cause
|
6
|
+
end
|
4
7
|
|
5
8
|
def self.build(original_exception)
|
6
9
|
message = "Did not recognize your adapter specification (#{original_exception.message})."
|
7
|
-
new(message
|
8
|
-
exception.instance_eval do
|
9
|
-
@cause = original_exception
|
10
|
-
set_backtrace original_exception.backtrace
|
11
|
-
end
|
12
|
-
end
|
10
|
+
new(message, cause: original_exception)
|
13
11
|
end
|
14
12
|
end
|
15
13
|
end
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require
|
2
|
-
|
1
|
+
require "jrjackson" unless defined?(JrJackson)
|
2
|
+
require_relative "../adapter"
|
3
3
|
|
4
4
|
module MultiJson
|
5
5
|
module Adapters
|
@@ -7,7 +7,7 @@ module MultiJson
|
|
7
7
|
class JrJackson < Adapter
|
8
8
|
ParseError = ::JrJackson::ParseError
|
9
9
|
|
10
|
-
def load(string, options = {})
|
10
|
+
def load(string, options = {}) # :nodoc:
|
11
11
|
::JrJackson::Json.load(string, options)
|
12
12
|
end
|
13
13
|
|