multi_json 1.17.0 → 1.19.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8391f158a04fe4c56abc8c880ff370642f80e2311c870d51f7f393db946b53df
4
- data.tar.gz: 9677ed8bdaa4c4f03717767544c1cd8bc5f1a55510adbd42ac38fd898b85087b
3
+ metadata.gz: 0d32c6ecf7a376a7280adac3692fd9b256d0934b1cff4724955b815a76a8b8d1
4
+ data.tar.gz: f273e11d29ac7ec97954410f1b9af76d4e3f43a299c0507583371e15d01af0cd
5
5
  SHA512:
6
- metadata.gz: c8812d112eae4f61445ed679551ef0e73a075673be3676b85b1c748397559c48447b781be6297ca66007107676ceee757c1fe6774b77baf34f1fc5744a9f02ec
7
- data.tar.gz: a3852e7e36a07428b466ee6a64edafd67f72552556164c851e44a237e2d745625302955c445a67169997d86525a49cec117153523bae03d52b2b8fd56d4a49de
6
+ metadata.gz: 01ae1a673f2ccb2bbe25ee7e960f1e2984859495c50bdeeab4e1c5aa0315915f2b8f815b88a23bd5de781fed52d35b0ab8f0986a1aad8d74a3e055d554347107
7
+ data.tar.gz: 69f7aa6acd371a2852f12a616d0501f33acd85c01ac0204669ef4c30ebb058b7399cccb4b0fa830c41ec0a4cdd2ad8273ca134d9915b59dc53c4f5c4f6bf664c
data/CHANGELOG.md CHANGED
@@ -1,276 +1,228 @@
1
- 1.17.0
2
- ------
1
+ # Changelog
2
+
3
+ ## 1.19.1
4
+ * [Restore deprecated encode/decode methods](https://github.com/sferik/multi_json/commit/c5bf2fc95dfdde6b30d63fefb0b2f4aa29633969)
5
+
6
+ ## 1.19.0
7
+ * [Fix serialization of ActiveSupport-enhanced objects](https://github.com/sferik/multi_json/commit/03a367813ebd7ed87eb22ea05249cc6453bb3c10)
8
+
9
+ ## 1.18.0
10
+ * [Fix conflict between JSON gem and ActiveSupport](https://github.com/intridea/multi_json/issues/222)
11
+
12
+ ## 1.17.0
3
13
  * [Revert minimum ruby version requirement](https://github.com/sferik/multi_json/pull/16)
4
14
 
5
- 1.16.0
6
- ------
7
- * [Remove `NSJSONSerialization`](https://github.com/sferik/multi_json/commit/0423d3b5886e93405f4c2221687b7e3329bd2940)
8
- * [Stop referencing `JSON::PRETTY_STATE_PROTOTYPE`](https://github.com/sferik/multi_json/commit/58094d7a0583bf1f5052886806a032c00f16ffc5)
15
+ ## 1.16.0
16
+ * [Remove NSJSONSerialization](https://github.com/sferik/multi_json/commit/0423d3b5886e93405f4c2221687b7e3329bd2940)
17
+ * [Stop referencing JSON::PRETTY\_STATE\_PROTOTYPE](https://github.com/sferik/multi_json/commit/58094d7a0583bf1f5052886806a032c00f16ffc5)
9
18
  * [Drop support for Ruby versions < 3.2](https://github.com/sferik/multi_json/commit/ff3b42c4bc26cd6512914b7e5321976e948985dc)
10
19
  * [Move repo from @intridea to @sferik](https://github.com/sferik/multi_json/commit/e87aeadbc9b9aa6df79818fa01bfc5fa959d8474)
11
- * [`JsonCommon`: force encoding to UTF-8, not binary](https://github.com/sferik/multi_json/commit/34dd0247de07f2703c7d42a42d4cefc73635f3cc)
12
- * [Stop setting defaults in `JsonCommon`](https://github.com/sferik/multi_json/commit/d5f9e6e72b99a7def695f430f72c8365998de625)
13
- * [Make `json_pure` an alias of `json_gem`](https://github.com/sferik/multi_json/commit/9ff7c3dcbe3650e712b38e636ad19061a4c08d1a)
20
+ * [JsonCommon: force encoding to UTF-8, not binary](https://github.com/sferik/multi_json/commit/34dd0247de07f2703c7d42a42d4cefc73635f3cc)
21
+ * [Stop setting defaults in JsonCommon](https://github.com/sferik/multi_json/commit/d5f9e6e72b99a7def695f430f72c8365998de625)
22
+ * [Make json\_pure an alias of json\_gem](https://github.com/sferik/multi_json/commit/9ff7c3dcbe3650e712b38e636ad19061a4c08d1a)
14
23
 
15
- 1.15.0
16
- ------
24
+ ## 1.15.0
17
25
  * [Improve detection of json_gem adapter](https://github.com/sferik/multi_json/commit/62d54019b17ebf83b28c8deb871a02a122e7d9cf)
18
26
 
19
- 1.14.1
20
- ------
27
+ ## 1.14.1
21
28
  * [Fix a warning in Ruby 2.7](https://github.com/sferik/multi_json/commit/26a94ab8c78a394cc237e2ea292c1de4f6ed30d7)
22
29
 
23
- 1.14.0
24
- ------
30
+ ## 1.14.0
25
31
  * [Support Oj 3.x gem](https://github.com/sferik/multi_json/commit/5d8febdbebc428882811b90d514f3628617a61d5)
26
32
 
27
- 1.13.1
28
- ------
33
+ ## 1.13.1
29
34
  * [Fix missing stdlib set dependency in oj adapter](https://github.com/sferik/multi_json/commit/c4ff66e7bee6fb4f45e54429813d7fada1c152b8)
30
35
 
31
- 1.13.0
32
- -----
36
+ ## 1.13.0
33
37
  * [Make Oj adapter handle JSON::ParseError correctly](https://github.com/sferik/multi_json/commit/275e3ffd8169797c510d23d9ef5b8b07e64c3b42)
34
38
 
35
- 1.12.2
36
- ------
39
+ ## 1.12.2
37
40
  * [Renew gem certificate](https://github.com/sferik/multi_json/commit/57922d898c6eb587cc9a28ba5724c11e81724700)
38
41
 
39
- 1.12.1
40
- ------
42
+ ## 1.12.1
41
43
  * [Prevent memory leak in OptionsCache](https://github.com/sferik/multi_json/commit/aa7498199ad272f3d4a13750d7c568a66047e2ee)
42
44
 
43
- 1.12.0
44
- ------
45
+ ## 1.12.0
45
46
  * [Introduce global options cache to improve peroformance](https://github.com/sferik/multi_json/commit/7aaef2a1bc2b83c95e4208b12dad5d1d87ff20a6)
46
47
 
47
- 1.11.2
48
- ------
48
+ ## 1.11.2
49
49
  * [Only pass one argument to JrJackson when two is not supported](https://github.com/sferik/multi_json/commit/e798fa517c817fc706982d3f3c61129b6651d601)
50
50
 
51
- 1.11.1
52
- ------
51
+ ## 1.11.1
53
52
  * [Dump method passes options throught for JrJackson adapter](https://github.com/sferik/multi_json/commit/3c730fd12135c3e7bf212f878958004908f13909)
54
53
 
55
- 1.11.0
56
- ------
54
+ ## 1.11.0
57
55
  * [Make all adapters read IO object before load](https://github.com/sferik/multi_json/commit/167f559e18d4efee05e1f160a2661d16dbb215d4)
58
56
 
59
- 1.10.1
60
- ------
57
+ ## 1.10.1
61
58
  * [Explicitly require stringio for Gson adapter](https://github.com/sferik/multi_json/commit/623ec8142d4a212fa0db763bb71295789a119929)
62
59
  * [Do not read StringIO object before passing it to JrJackson](https://github.com/sferik/multi_json/commit/a6dc935df08e7b3d5d701fbb9298384c96df0fde)
63
60
 
64
- 1.10.0
65
- ------
61
+ ## 1.10.0
66
62
  * [Performance tweaks](https://github.com/sferik/multi_json/commit/58724acfed31866d079eaafb1cd824e341ade287)
67
63
 
68
- 1.9.3
69
- -----
64
+ ## 1.9.3
70
65
  * [Convert indent option to Fixnum before passing to Oj](https://github.com/sferik/multi_json/commit/826fc5535b863b74fc9f981dfdda3e26f1ee4e5b)
71
66
 
72
- 1.9.2
73
- -----
67
+ ## 1.9.2
74
68
  * [Enable use_to_json option for Oj adapter by default](https://github.com/sferik/multi_json/commit/76a4aaf697b10bbabd5d535d83cf1149efcfe5c7)
75
69
 
76
- 1.9.1
77
- -----
70
+ ## 1.9.1
78
71
  * [Remove unused LoadError file](https://github.com/sferik/multi_json/commit/65dedd84d59baeefc25c477fedf0bbe85e7ce2cd)
79
72
 
80
- 1.9.0
81
- ----
73
+ ## 1.9.0
82
74
  * [Rename LoadError to ParseError](https://github.com/sferik/multi_json/commit/4abb98fe3a90b2a7b3d1594515c8a06042b4a27d)
83
75
  * [Adapter load failure throws AdapterError instead of ArgumentError](https://github.com/sferik/multi_json/commit/4da612b617bd932bb6fa1cc4c43210327f98f271)
84
76
 
85
- 1.8.4
86
- -----
77
+ ## 1.8.4
87
78
  * [Make Gson adapter explicitly read StringIO object](https://github.com/sferik/multi_json/commit/b58b498747ff6e94f41488c971b2a30a98760ef2)
88
79
 
89
- 1.8.3
90
- -----
80
+ ## 1.8.3
91
81
  * [Make JrJackson explicitly read StringIO objects](https://github.com/sferik/multi_json/commit/e1f162d5b668e5e4db5afa175361a601a8aa2b05)
92
82
  * [Prevent calling #downcase on alias symbols](https://github.com/sferik/multi_json/commit/c1cf075453ce0110f7decc4f906444b1233bb67c)
93
83
 
94
- 1.8.2
95
- -----
84
+ ## 1.8.2
96
85
  * [Downcase adapter string name for OS compatibility](https://github.com/sferik/multi_json/commit/b8e15a032247a63f1410d21a18add05035f3fa66)
97
86
 
98
- 1.8.1
99
- -----
87
+ ## 1.8.1
100
88
  * [Let the adapter handle strings with invalid encoding](https://github.com/sferik/multi_json/commit/6af2bf87b89f44eabf2ae9ca96779febc65ea94b)
101
89
 
102
- 1.8.0
103
- -----
90
+ ## 1.8.0
104
91
  * [Raise MultiJson::LoadError on blank input](https://github.com/sferik/multi_json/commit/c44f9c928bb25fe672246ad394b3e5b991be32e6)
105
92
 
106
- 1.7.9
107
- -----
93
+ ## 1.7.9
108
94
  * [Explicitly require json gem code even when constant is defined](https://github.com/sferik/multi_json/commit/36f7906c66477eb4b55b7afeaa3684b6db69eff2)
109
95
 
110
- 1.7.8
111
- -----
96
+ ## 1.7.8
112
97
  * [Reorder JrJackson before json_gem](https://github.com/sferik/multi_json/commit/315b6e460b6e4dcdb6c82e04e4be8ee975d395da)
113
98
  * [Update vendored OkJson to version 43](https://github.com/sferik/multi_json/commit/99a6b662f6ef4036e3ee94d7eb547fa72fb2ab50)
114
99
 
115
- 1.7.7
116
- -----
100
+ ## 1.7.7
117
101
  * [Fix options caching issues](https://github.com/sferik/multi_json/commit/a3f14c3661688c5927638fa6088c7b46a67e875e)
118
102
 
119
- 1.7.6
120
- -----
103
+ ## 1.7.6
121
104
  * [Bring back MultiJson::VERSION constant](https://github.com/sferik/multi_json/commit/31b990c2725e6673bf8ce57540fe66b57a751a72)
122
105
 
123
- 1.7.5
124
- -----
106
+ ## 1.7.5
125
107
  * [Fix warning '*' interpreted as argument prefix](https://github.com/sferik/multi_json/commit/b698962c7f64430222a1f06430669706a47aff89)
126
108
  * [Remove stdlib warning](https://github.com/sferik/multi_json/commit/d06eec6b7996ac8b4ff0e2229efd835379b0c30f)
127
109
 
128
- 1.7.4
129
- -----
110
+ ## 1.7.4
130
111
  * [Cache options for better performance](https://github.com/sferik/multi_json/commit/8a26ee93140c4bed36194ed9fb887a1b6919257b)
131
112
 
132
- 1.7.3
133
- -----
113
+ ## 1.7.3
134
114
  * [Require json/ext to ensure extension version gets loaded for json_gem](https://github.com/sferik/multi_json/commit/942686f7e8597418c6f90ee69e1d45242fac07b1)
135
115
  * [Rename JrJackson](https://github.com/sferik/multi_json/commit/078de7ba8b6035343c3e96b4767549e9ec43369a)
136
116
  * [Prefer JrJackson to JSON gem if present](https://github.com/sferik/multi_json/commit/af8bd9799a66855f04b3aff1c488485950cec7bf)
137
117
  * [Print a warning if outdated gem versions are used](https://github.com/sferik/multi_json/commit/e7438e7ba2be0236cfa24c2bb9ad40ee821286d1)
138
118
  * [Loosen required_rubygems_version for compatibility with Ubuntu 10.04](https://github.com/sferik/multi_json/commit/59fad014e8fe41dbc6f09485ea0dc21fc42fd7a7)
139
119
 
140
- 1.7.2
141
- -----
120
+ ## 1.7.2
142
121
  * [Rename Jrjackson adapter to JrJackson](https://github.com/sferik/multi_json/commit/b36dc915fc0e6548cbad06b5db6f520e040c9c8b)
143
122
  * [Implement jrjackson -> jr_jackson alias for back-compatability](https://github.com/sferik/multi_json/commit/aa50ab8b7bb646b8b75d5d65dfeadae8248a4f10)
144
123
  * [Update vendored OkJson module](https://github.com/sferik/multi_json/commit/30a3f474e17dd86a697c3fab04f468d1a4fd69d7)
145
124
 
146
- 1.7.1
147
- -----
125
+ ## 1.7.1
148
126
  * [Fix capitalization of JrJackson class](https://github.com/sferik/multi_json/commit/5373a5e38c647f02427a0477cb8e0e0dafad1b8d)
149
127
 
150
- 1.7.0
151
- -----
128
+ ## 1.7.0
152
129
  * [Add load_options/dump_options to MultiJson](https://github.com/sferik/multi_json/commit/a153956be6b0df06ea1705ce3c1ff0b5b0e27ea5)
153
130
  * [MultiJson does not modify arguments](https://github.com/sferik/multi_json/commit/58525b01c4c2f6635ba2ac13d6fd987b79f3962f)
154
131
  * [Enable quirks_mode by default for json_gem/json_pure adapters](https://github.com/sferik/multi_json/commit/1fd4e6635c436515b7d7d5a0bee4548de8571520)
155
132
  * [Add JrJackson adapter](https://github.com/sferik/multi_json/commit/4dd86fa96300aaaf6d762578b9b31ea82adb056d)
156
133
  * [Raise ArgumentError on bad adapter input](https://github.com/sferik/multi_json/commit/911a3756bdff2cb5ac06497da3fa3e72199cb7ad)
157
134
 
158
- 1.6.1
159
- -----
135
+ ## 1.6.1
160
136
  * [Revert "Use JSON.generate instead of #to_json"](https://github.com/sferik/multi_json/issues/86)
161
137
 
162
- 1.6.0
163
- -----
164
- * [Add gson.rb support](https://github.com/sferik/multi_json/pull/71)
165
- * [Add MultiJson.default_options](https://github.com/sferik/multi_json/pull/70)
166
- * [Add MultiJson.with_adapter](https://github.com/sferik/multi_json/pull/67)
167
- * [Stringify all possible keys for ok_json](https://github.com/sferik/multi_json/pull/66)
138
+ ## 1.6.0
139
+ * [Add gson.rb support](https://github.com/intridea/multi_json/pull/71)
140
+ * [Add MultiJson.default_options](https://github.com/intridea/multi_json/pull/70)
141
+ * [Add MultiJson.with_adapter](https://github.com/intridea/multi_json/pull/67)
142
+ * [Stringify all possible keys for ok_json](https://github.com/intridea/multi_json/pull/66)
168
143
  * [Use JSON.generate instead of #to_json](https://github.com/sferik/multi_json/issues/73)
169
- * [Alias `MultiJson::DecodeError` to `MultiJson::LoadError`](https://github.com/sferik/multi_json/pull/79)
144
+ * [Alias MultiJson::DecodeError to MultiJson::LoadError](https://github.com/intridea/multi_json/pull/79)
170
145
 
171
- 1.5.1
172
- -----
146
+ ## 1.5.1
173
147
  * [Do not allow Oj or JSON to create symbols by searching for classes](https://github.com/sferik/multi_json/commit/193e28cf4dc61b6e7b7b7d80f06f74c76df65c41)
174
148
 
175
- 1.5.0
176
- -----
177
- * [Add `MultiJson.with_adapter` method](https://github.com/sferik/multi_json/commit/d14c5d28cae96557a0421298621b9499e1f28104)
178
- * [Stringify all possible keys for `ok_json`](https://github.com/sferik/multi_json/commit/73998074058e1e58c557ffa7b9541d486d6041fa)
149
+ ## 1.5.0
150
+ * [Add MultiJson.with\_adapter method](https://github.com/sferik/multi_json/commit/d14c5d28cae96557a0421298621b9499e1f28104)
151
+ * [Stringify all possible keys for ok\_json](https://github.com/sferik/multi_json/commit/73998074058e1e58c557ffa7b9541d486d6041fa)
179
152
 
180
- 1.4.0
181
- -----
182
- * [Allow `load`/`dump` of JSON fragments](https://github.com/sferik/multi_json/commit/707aae7d48d39c85b38febbd2c210ba87f6e4a36)
153
+ ## 1.4.0
154
+ * [Allow load/dump of JSON fragments](https://github.com/sferik/multi_json/commit/707aae7d48d39c85b38febbd2c210ba87f6e4a36)
183
155
 
184
- 1.3.7
185
- -----
156
+ ## 1.3.7
186
157
  * [Fix rescue clause for MagLev](https://github.com/sferik/multi_json/commit/39abdf50199828c50e85b2ce8f8ba31fcbbc9332)
187
158
  * [Remove unnecessary check for string version of options key](https://github.com/sferik/multi_json/commit/660101b70e962b3c007d0b90d45944fa47d13ec4)
188
- * [Explicitly set default adapter when adapter is set to `nil` or `false`](https://github.com/sferik/multi_json/commit/a9e587d5a63eafb4baee9fb211265e4dd96a26bc)
189
- * [Fix Oj `ParseError` mapping for Oj 1.4.0](https://github.com/sferik/multi_json/commit/7d9045338cc9029401c16f3c409d54ce97f275e2)
159
+ * [Explicitly set default adapter when adapter is set to nil or false](https://github.com/sferik/multi_json/commit/a9e587d5a63eafb4baee9fb211265e4dd96a26bc)
160
+ * [Fix Oj ParseError mapping for Oj 1.4.0](https://github.com/sferik/multi_json/commit/7d9045338cc9029401c16f3c409d54ce97f275e2)
190
161
 
191
- 1.3.6
192
- -----
162
+ ## 1.3.6
193
163
  * [Allow adapter-specific options to be passed through to Oj](https://github.com/sferik/multi_json/commit/d0e5feeebcba0bc69400dd203a295f5c30971223)
194
164
 
195
- 1.3.5
196
- -----
165
+ ## 1.3.5
197
166
  * [Add pretty support to Oj adapter](https://github.com/sferik/multi_json/commit/0c8f75f03020c53bcf4c6be258faf433d24b2c2b)
198
167
 
199
- 1.3.4
200
- -----
201
- * [Use `class << self` instead of `module_function` to create aliases](https://github.com/sferik/multi_json/commit/ba1451c4c48baa297e049889be241a424cb05980)
168
+ ## 1.3.4
169
+ * [Use class \<\< self instead of module\_function to create aliases](https://github.com/sferik/multi_json/commit/ba1451c4c48baa297e049889be241a424cb05980)
202
170
 
203
- 1.3.3
204
- -----
171
+ ## 1.3.3
205
172
  * [Remove deprecation warnings](https://github.com/sferik/multi_json/commit/36b524e71544eb0186826a891bcc03b2820a008f)
206
173
 
207
- 1.3.2
208
- -----
174
+ ## 1.3.2
209
175
  * [Add ability to use adapter per call](https://github.com/sferik/multi_json/commit/106bbec469d5d0a832bfa31fffcb8c0f0cdc9bd3)
210
- * [Add and deprecate `default_engine` method](https://github.com/sferik/multi_json/commit/fc3df0c7a3e2ab9ce0c2c7e7617a4da97dd13f6e)
176
+ * [Add and deprecate default\_engine method](https://github.com/sferik/multi_json/commit/fc3df0c7a3e2ab9ce0c2c7e7617a4da97dd13f6e)
211
177
 
212
- 1.3.1
213
- -----
178
+ ## 1.3.1
214
179
  * [Only warn once for each instance a deprecated method is called](https://github.com/sferik/multi_json/commit/e21d6eb7da74b3f283995c1d27d5880e75f0ae84)
215
180
 
216
- 1.3.0
217
- -----
218
- * [Implement `load`/`dump`; deprecate `decode`/`encode`](https://github.com/sferik/multi_json/commit/e90fd6cb1b0293eb0c73c2f4eb0f7a1764370216)
181
+ ## 1.3.0
182
+ * [Implement load/dump; deprecate decode/encode](https://github.com/sferik/multi_json/commit/e90fd6cb1b0293eb0c73c2f4eb0f7a1764370216)
219
183
  * [Rename engines to adapters](https://github.com/sferik/multi_json/commit/ae7fd144a7949a9c221dcaa446196ec23db908df)
220
184
 
221
- 1.2.0
222
- -----
185
+ ## 1.2.0
223
186
  * [Add support for Oj](https://github.com/sferik/multi_json/commit/acd06b233edabe6c44f226873db7b49dab560c60)
224
187
 
225
- 1.1.0
226
- -----
227
- * [`NSJSONSerialization` support for MacRuby](https://github.com/sferik/multi_json/commit/f862e2fc966cac8867fe7da3997fc76e8a6cf5d4)
188
+ ## 1.1.0
189
+ * [NSJSONSerialization support for MacRuby](https://github.com/sferik/multi_json/commit/f862e2fc966cac8867fe7da3997fc76e8a6cf5d4)
228
190
 
229
- 1.0.4
230
- -----
231
- * [Set data context to `DecodeError` exception](https://github.com/sferik/multi_json/commit/19ddafd44029c6681f66fae2a0f6eabfd0f85176)
232
- * [Allow `ok_json` to fallback to `to_json`](https://github.com/sferik/multi_json/commit/c157240b1193b283d06d1bd4d4b5b06bcf3761f8)
233
- * [Add warning when using `ok_json`](https://github.com/sferik/multi_json/commit/dd4b68810c84f826fb98f9713bfb29ab96888d57)
191
+ ## 1.0.4
192
+ * [Set data context to DecodeError exception](https://github.com/sferik/multi_json/commit/19ddafd44029c6681f66fae2a0f6eabfd0f85176)
193
+ * [Allow ok\_json to fallback to to\_json](https://github.com/sferik/multi_json/commit/c157240b1193b283d06d1bd4d4b5b06bcf3761f8)
194
+ * [Add warning when using ok\_json](https://github.com/sferik/multi_json/commit/dd4b68810c84f826fb98f9713bfb29ab96888d57)
234
195
  * [Options can be passed to an engine on encode](https://github.com/sferik/multi_json/commit/e0a7ff5d5ff621ffccc61617ed8aeec5816e81f7)
235
196
 
236
- 1.0.3
237
- -----
238
- * [`Array` support for `stringify_keys`](https://github.com/sferik/multi_json/commit/644d1c5c7c7f6a27663b11668527b346094e38b9)
239
- * [`Array` support for `symbolize_keys`](https://github.com/sferik/multi_json/commit/c885377d47a2aa39cb0d971fea78db2d2fa479a7)
240
-
241
- 1.0.2
242
- -----
243
- * [Allow encoding of rootless JSON when `ok_json` is used](https://github.com/sferik/multi_json/commit/d1cde7de97cb0f6152aef8daf14037521cdce8c6)
244
-
245
- 1.0.1
246
- -----
247
- * [Correct an issue with `ok_json` not being returned as the default engine](https://github.com/sferik/multi_json/commit/d33c141619c54cccd770199694da8fd1bd8f449d)
248
-
249
- 1.0.0
250
- -----
251
- * [Remove `ActiveSupport::JSON` support](https://github.com/sferik/multi_json/commit/c2f4140141d785a24b3f56e58811b0e561b37f6a)
252
- * [Fix `@engine` ivar warning](https://github.com/sferik/multi_json/commit/3b978a8995721a8dffedc3b75a7f49e5494ec553)
253
- * [Only `rescue` from parsing errors during decoding, not any `StandardError`](https://github.com/sferik/multi_json/commit/391d00b5e85294d42d41347605d8d46b4a7f66cc)
254
- * [Rename `okjson` engine and vendored lib to `ok_json`](https://github.com/sferik/multi_json/commit/5bd1afc977a8208ddb0443e1d57cb79665c019f1)
255
- * [Add `StringIO` support to `json` gem and `ok_json`](https://github.com/sferik/multi_json/commit/1706b11568db7f50af451fce5f4d679aeb3bbe8f)
256
-
257
- 0.0.5
258
- -----
259
- * [Trap all JSON decoding errors; raise `MultiJson::DecodeError`](https://github.com/sferik/multi_json/commit/dea9a1aef6dd1212aa1e5a37ab1669f9b045b732)
260
-
261
- 0.0.4
262
- -----
263
- * [Fix default_engine check for `json` gem](https://github.com/sferik/multi_json/commit/caced0c4e8c795922a109ebc00c3c4fa8635bed8)
264
- * [Make requirement mapper an `Array` to preserve order in Ruby versions < 1.9](https://github.com/sferik/multi_json/commit/526f5f29a42131574a088ad9bbb43d7f48439b2c)
265
-
266
- 0.0.3
267
- -----
197
+ ## 1.0.3
198
+ * [Array support for stringify\_keys](https://github.com/sferik/multi_json/commit/644d1c5c7c7f6a27663b11668527b346094e38b9)
199
+ * [Array support for symbolize\_keys](https://github.com/sferik/multi_json/commit/c885377d47a2aa39cb0d971fea78db2d2fa479a7)
200
+
201
+ ## 1.0.2
202
+ * [Allow encoding of rootless JSON when ok\_json is used](https://github.com/sferik/multi_json/commit/d1cde7de97cb0f6152aef8daf14037521cdce8c6)
203
+
204
+ ## 1.0.1
205
+ * [Correct an issue with ok\_json not being returned as the default engine](https://github.com/sferik/multi_json/commit/d33c141619c54cccd770199694da8fd1bd8f449d)
206
+
207
+ ## 1.0.0
208
+ * [Remove ActiveSupport::JSON support](https://github.com/sferik/multi_json/commit/c2f4140141d785a24b3f56e58811b0e561b37f6a)
209
+ * [Fix @engine ivar warning](https://github.com/sferik/multi_json/commit/3b978a8995721a8dffedc3b75a7f49e5494ec553)
210
+ * [Only rescue from parsing errors during decoding, not any StandardError](https://github.com/sferik/multi_json/commit/391d00b5e85294d42d41347605d8d46b4a7f66cc)
211
+ * [Rename okjson engine and vendored lib to ok\_json](https://github.com/sferik/multi_json/commit/5bd1afc977a8208ddb0443e1d57cb79665c019f1)
212
+ * [Add StringIO support to json gem and ok\_json](https://github.com/sferik/multi_json/commit/1706b11568db7f50af451fce5f4d679aeb3bbe8f)
213
+
214
+ ## 0.0.5
215
+ * [Trap all JSON decoding errors; raise MultiJson::DecodeError](https://github.com/sferik/multi_json/commit/dea9a1aef6dd1212aa1e5a37ab1669f9b045b732)
216
+
217
+ ## 0.0.4
218
+ * [Fix default\_engine check for json gem](https://github.com/sferik/multi_json/commit/caced0c4e8c795922a109ebc00c3c4fa8635bed8)
219
+ * [Make requirement mapper an Array to preserve order in Ruby versions \< 1.9](https://github.com/sferik/multi_json/commit/526f5f29a42131574a088ad9bbb43d7f48439b2c)
220
+
221
+ ## 0.0.3
268
222
  * [Improve defaulting and documentation](https://github.com/sferik/twitter/commit/3a0e41b9e4b0909201045fa47704b78c9d949b73)
269
223
 
270
- 0.0.2
271
- -----
272
- * [Rename to `multi_json`](https://github.com/sferik/twitter/commit/461ab89ce071c8c9fabfc183581e0ec523788b62)
224
+ ## 0.0.2
225
+ * [Rename to multi\_json](https://github.com/sferik/twitter/commit/461ab89ce071c8c9fabfc183581e0ec523788b62)
273
226
 
274
- 0.0.1
275
- -----
227
+ ## 0.0.1
276
228
  * [Initial commit](https://github.com/sferik/twitter/commit/518c21ab299c500527491e6c049ab2229e22a805)
data/CONTRIBUTING.md CHANGED
@@ -10,7 +10,7 @@ Here are some ways *you* can contribute:
10
10
  * by reporting bugs
11
11
  * by suggesting new features
12
12
  * by writing or editing documentation
13
- * by writing specifications
13
+ * by writing tests
14
14
  * by writing code (**no patch is too small**: fix typos, add comments, clean up
15
15
  inconsistent whitespace)
16
16
  * by refactoring code
@@ -22,24 +22,30 @@ Here are some ways *you* can contribute:
22
22
  ## Submitting an Issue
23
23
  We use the [GitHub issue tracker][issues] to track bugs and features. Before
24
24
  submitting a bug report or feature request, check to make sure it hasn't
25
- already been submitted. When submitting a bug report, please include a [Gist][]
26
- that includes a stack trace and any details that may be necessary to reproduce
27
- the bug, including your gem version, Ruby version, and operating system.
28
- Ideally, a bug report should include a pull request with failing specs.
25
+ already been submitted. When submitting a bug report, please include a
26
+ [Gist][gist] that includes a stack trace and any details that may be necessary
27
+ to reproduce the bug, including your gem version, Ruby version, and operating
28
+ system. Ideally, a bug report should include a pull request with failing tests.
29
29
 
30
30
  [gist]: https://gist.github.com/
31
31
 
32
32
  ## Submitting a Pull Request
33
- 1. [Fork the repository.][fork]
34
- 2. [Create a topic branch.][branch]
35
- 3. Add specs for your unimplemented feature or bug fix.
36
- 4. Run `bundle exec rake spec`. If your specs pass, return to step 3.
37
- 5. Implement your feature or bug fix.
38
- 6. Run `bundle exec rake spec`. If your specs fail, return to step 5.
39
- 7. Run `open coverage/index.html`. If your changes are not completely covered
40
- by your tests, return to step 3.
41
- 8. Add, commit, and push your changes.
42
- 9. [Submit a pull request.][pr]
33
+ 1. [Fork the repository.][fork]
34
+ 2. [Create a topic branch.][branch]
35
+ 3. Add tests for your unimplemented feature or bug fix.
36
+ 4. Run `bundle exec rake test`. If your tests pass, return to step 3.
37
+ 5. Implement your feature or bug fix.
38
+ 6. Run `bundle exec rake test`. If your tests fail, return to step 5.
39
+ 7. Run `open coverage/index.html`. If your changes are not completely covered
40
+ by your tests, return to step 3.
41
+ 8. Run `bundle exec rake mutant` and kill any surviving mutants.
42
+ 9. Run `bundle exec rake lint` and fix any offenses.
43
+ 10. Run `bundle exec rake yardstick` and add any missing documentation.
44
+ 11. Add, commit, and push your changes.
45
+ 12. [Submit a pull request][pr] that summarizes *what* changes you made and
46
+ *why* you made them. If you made any significant decisions along the way,
47
+ describe the options you considered and how you thought about the
48
+ tradeoffs.
43
49
 
44
50
  [fork]: http://help.github.com/fork-a-repo/
45
51
  [branch]: http://learn.github.com/p/branching.html
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # MultiJSON
2
2
 
3
3
  [![Gem Version](http://img.shields.io/gem/v/multi_json.svg)][gem]
4
- [![Build Status](https://github.com/sferik/multi_json/actions/workflows/ci.yml/badge.svg)][build]
4
+ [![Build Status](https://github.com/sferik/multi_json/actions/workflows/tests.yml/badge.svg)][build]
5
5
  [![Maintainability](https://qlty.sh/badges/fde3f4a8-c331-44be-b1e6-45842137def9/maintainability.svg)][qlty]
6
6
 
7
7
  Lots of Ruby libraries parse JSON and everyone has their favorite JSON coder.
@@ -41,12 +41,13 @@ which inherits from `ArgumentError`.
41
41
 
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
- load any. When loading, libraries are ordered by speed. First Oj, then Yajl,
45
- then the JSON gem. If no other JSON library is available,
44
+ load any. When loading, libraries are ordered by speed. First fast_jsonparser,
45
+ then Oj, then Yajl, 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
+ - [fast_jsonparser][fast_jsonparser] Fast JSON parser by Anil Maurya
50
51
  - [Oj][oj] Optimized JSON by Peter Ohler
51
52
  - [Yajl][yajl] Yet Another JSON Library by Brian Lopez
52
53
  - [JSON][json-gem] The default JSON gem with C-extensions (ships with Ruby 1.9+)
@@ -98,9 +99,9 @@ spec.add_dependency 'multi_json', '~> 1.0'
98
99
  ## Copyright
99
100
 
100
101
  Copyright (c) 2010-2025 Michael Bleigh, Josh Kalderimis, Erik Berlin,
101
- and Pavel Pravosud. See [LICENSE][] for details.
102
+ and Pavel Pravosud. See [LICENSE][license] for details.
102
103
 
103
- [build]: https://github.com/sferik/multi_json/actions/workflows/ci.yml
104
+ [build]: https://github.com/sferik/multi_json/actions/workflows/tests.yml
104
105
  [gem]: https://rubygems.org/gems/multi_json
105
106
  [gson]: https://github.com/avsej/gson.rb
106
107
  [jrjackson]: https://github.com/guyboertje/jrjackson
@@ -110,6 +111,7 @@ and Pavel Pravosud. See [LICENSE][] for details.
110
111
  [macruby]: http://www.macruby.org/
111
112
  [oj]: https://github.com/ohler55/oj
112
113
  [okjson]: https://github.com/kr/okjson
114
+ [fast_jsonparser]: https://github.com/anilmaurya/fast_jsonparser
113
115
  [pvc]: http://docs.rubygems.org/read/chapter/16#page74
114
116
  [qlty]: https://qlty.sh/gh/sferik/projects/multi_json
115
117
  [semver]: http://semver.org/
@@ -2,54 +2,115 @@ require "singleton"
2
2
  require_relative "options"
3
3
 
4
4
  module MultiJson
5
+ # Base class for JSON adapter implementations
6
+ #
7
+ # Each adapter wraps a specific JSON library (Oj, JSON gem, etc.) and
8
+ # provides a consistent interface. Uses Singleton pattern so each adapter
9
+ # class has exactly one instance.
10
+ #
11
+ # Subclasses must implement:
12
+ # - #load(string, options) -> parsed object
13
+ # - #dump(object, options) -> JSON string
14
+ #
15
+ # @api private
5
16
  class Adapter
6
17
  extend Options
7
18
  include Singleton
8
19
 
9
20
  class << self
10
- BLANK_RE = /\A\s*\z/
11
- private_constant :BLANK_RE
21
+ BLANK_PATTERN = /\A\s*\z/
22
+ private_constant :BLANK_PATTERN
12
23
 
24
+ # Hook called when a subclass is created
25
+ #
26
+ # @api private
27
+ # @param subclass [Class] the new subclass
28
+ # @return [void]
29
+ def inherited(subclass)
30
+ super
31
+ # Propagate default options to subclasses
32
+ subclass.instance_variable_set(:@default_load_options, @default_load_options) if defined?(@default_load_options)
33
+ subclass.instance_variable_set(:@default_dump_options, @default_dump_options) if defined?(@default_dump_options)
34
+ end
35
+
36
+ # DSL for setting adapter-specific default options
37
+ #
38
+ # @api private
39
+ # @param action [Symbol] :load or :dump
40
+ # @param value [Hash] default options for the action
41
+ # @return [Hash] the frozen options hash
13
42
  def defaults(action, value)
14
- value.freeze
15
- define_singleton_method("default_#{action}_options") { value }
43
+ instance_variable_set(:"@default_#{action}_options", value.freeze)
16
44
  end
17
45
 
46
+ # Parse a JSON string into a Ruby object
47
+ #
48
+ # @api private
49
+ # @param string [String, #read] JSON string or IO-like object
50
+ # @param options [Hash] parsing options
51
+ # @return [Object, nil] parsed object or nil for blank input
18
52
  def load(string, options = {})
19
53
  string = string.read if string.respond_to?(:read)
20
- raise self::ParseError if blank?(string)
54
+ return nil if blank?(string)
21
55
 
22
- instance.load(string, cached_load_options(options))
56
+ instance.load(string, merged_load_options(options))
23
57
  end
24
58
 
59
+ # Serialize a Ruby object to JSON
60
+ #
61
+ # @api private
62
+ # @param object [Object] object to serialize
63
+ # @param options [Hash] serialization options
64
+ # @return [String] JSON string
25
65
  def dump(object, options = {})
26
- instance.dump(object, cached_dump_options(options))
66
+ instance.dump(object, merged_dump_options(options))
27
67
  end
28
68
 
29
69
  private
30
70
 
71
+ # Checks if the input is blank (nil or whitespace-only)
72
+ #
73
+ # @api private
74
+ # @param input [String, nil] input to check
75
+ # @return [Boolean] true if input is blank
31
76
  def blank?(input)
32
- input.nil? || BLANK_RE.match?(input)
33
- rescue ArgumentError # invalid byte sequence in UTF-8
77
+ input.nil? || BLANK_PATTERN.match?(input)
78
+ rescue ArgumentError
79
+ # Invalid byte sequence in UTF-8 - treat as non-blank
34
80
  false
35
81
  end
36
82
 
37
- def cached_dump_options(options)
38
- opts = options_without_adapter(options)
39
- OptionsCache.dump.fetch(opts) do
40
- dump_options(opts).merge(MultiJson.dump_options(opts)).merge!(opts)
83
+ # Merges dump options from adapter, global, and call-site
84
+ #
85
+ # @api private
86
+ # @param options [Hash] call-site options
87
+ # @return [Hash] merged options hash
88
+ def merged_dump_options(options)
89
+ cache_key = strip_adapter_key(options)
90
+ OptionsCache.dump.fetch(cache_key) do
91
+ dump_options(cache_key).merge(MultiJson.dump_options(cache_key)).merge!(cache_key)
41
92
  end
42
93
  end
43
94
 
44
- def cached_load_options(options)
45
- opts = options_without_adapter(options)
46
- OptionsCache.load.fetch(opts) do
47
- load_options(opts).merge(MultiJson.load_options(opts)).merge!(opts)
95
+ # Merges load options from adapter, global, and call-site
96
+ #
97
+ # @api private
98
+ # @param options [Hash] call-site options
99
+ # @return [Hash] merged options hash
100
+ def merged_load_options(options)
101
+ cache_key = strip_adapter_key(options)
102
+ OptionsCache.load.fetch(cache_key) do
103
+ load_options(cache_key).merge(MultiJson.load_options(cache_key)).merge!(cache_key)
48
104
  end
49
105
  end
50
106
 
51
- def options_without_adapter(options)
52
- options[:adapter] ? options.except(:adapter) : options
107
+ # Removes the :adapter key from options for cache key
108
+ #
109
+ # @api private
110
+ # @param options [Hash] original options
111
+ # @return [Hash] frozen options without :adapter key
112
+ def strip_adapter_key(options)
113
+ options.except(:adapter).freeze
53
114
  end
54
115
  end
55
116
  end