json 2.11.1 → 2.11.3
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/CHANGES.md +9 -0
- data/ext/json/ext/generator/generator.c +90 -89
- data/lib/json/common.rb +18 -0
- data/lib/json/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1919e2040a180b81eba1f475c511ace075b32015997b7d58098f93103941f8b2
|
4
|
+
data.tar.gz: d958784bea1136d935835d3e602fae96f97d25208cafec8a68db03619e6d34d0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 742da3e909b2b6d8c1c9de5833b11be0f80e3b50f5296973b57f03cd45ae584162ac33bcbeb5b99fa767714b8531fef71b6d7ff559da40c3b04e75026ba3158f
|
7
|
+
data.tar.gz: e55ae407cc5b0da66922a41119b000da925391b58ea9da154a058b15f034334fae9e9c813cda12f4db75936c50e281df00acf8a4053808923d89d5efaa6927af
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Changes
|
2
2
|
|
3
|
+
### 2025-04-25 (2.11.3)
|
4
|
+
|
5
|
+
* Fix a regression in `JSON.pretty_generate` that could cause indentation to be off once some `#to_json` has been called.
|
6
|
+
|
7
|
+
### 2025-04-24 (2.11.2)
|
8
|
+
|
9
|
+
* Add back `JSON::PRETTY_STATE_PROTOTYPE`. This constant was private API but is used by popular gems like `multi_json`.
|
10
|
+
It now emits a deprecation warning.
|
11
|
+
|
3
12
|
### 2025-04-24 (2.11.1)
|
4
13
|
|
5
14
|
* Add back `JSON.restore`, `JSON.unparse`, `JSON.fast_unparse` and `JSON.pretty_unparse`.
|
@@ -45,7 +45,7 @@ static VALUE sym_indent, sym_space, sym_space_before, sym_object_nl, sym_array_n
|
|
45
45
|
|
46
46
|
struct generate_json_data;
|
47
47
|
|
48
|
-
typedef void (*generator_func)(FBuffer *buffer, struct generate_json_data *data,
|
48
|
+
typedef void (*generator_func)(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
49
49
|
|
50
50
|
struct generate_json_data {
|
51
51
|
FBuffer *buffer;
|
@@ -57,20 +57,20 @@ struct generate_json_data {
|
|
57
57
|
|
58
58
|
static VALUE cState_from_state_s(VALUE self, VALUE opts);
|
59
59
|
static VALUE cState_partial_generate(VALUE self, VALUE obj, generator_func, VALUE io);
|
60
|
-
static void generate_json(FBuffer *buffer, struct generate_json_data *data,
|
61
|
-
static void generate_json_object(FBuffer *buffer, struct generate_json_data *data,
|
62
|
-
static void generate_json_array(FBuffer *buffer, struct generate_json_data *data,
|
63
|
-
static void generate_json_string(FBuffer *buffer, struct generate_json_data *data,
|
64
|
-
static void generate_json_null(FBuffer *buffer, struct generate_json_data *data,
|
65
|
-
static void generate_json_false(FBuffer *buffer, struct generate_json_data *data,
|
66
|
-
static void generate_json_true(FBuffer *buffer, struct generate_json_data *data,
|
60
|
+
static void generate_json(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
61
|
+
static void generate_json_object(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
62
|
+
static void generate_json_array(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
63
|
+
static void generate_json_string(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
64
|
+
static void generate_json_null(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
65
|
+
static void generate_json_false(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
66
|
+
static void generate_json_true(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
67
67
|
#ifdef RUBY_INTEGER_UNIFICATION
|
68
|
-
static void generate_json_integer(FBuffer *buffer, struct generate_json_data *data,
|
68
|
+
static void generate_json_integer(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
69
69
|
#endif
|
70
|
-
static void generate_json_fixnum(FBuffer *buffer, struct generate_json_data *data,
|
71
|
-
static void generate_json_bignum(FBuffer *buffer, struct generate_json_data *data,
|
72
|
-
static void generate_json_float(FBuffer *buffer, struct generate_json_data *data,
|
73
|
-
static void generate_json_fragment(FBuffer *buffer, struct generate_json_data *data,
|
70
|
+
static void generate_json_fixnum(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
71
|
+
static void generate_json_bignum(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
72
|
+
static void generate_json_float(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
73
|
+
static void generate_json_fragment(FBuffer *buffer, struct generate_json_data *data, VALUE obj);
|
74
74
|
|
75
75
|
static int usascii_encindex, utf8_encindex, binary_encindex;
|
76
76
|
|
@@ -802,12 +802,12 @@ json_object_i(VALUE key, VALUE val, VALUE _arg)
|
|
802
802
|
int j;
|
803
803
|
|
804
804
|
if (arg->iter > 0) fbuffer_append_char(buffer, ',');
|
805
|
-
if (RB_UNLIKELY(state->object_nl)) {
|
806
|
-
fbuffer_append_str(buffer, state->object_nl);
|
805
|
+
if (RB_UNLIKELY(data->state->object_nl)) {
|
806
|
+
fbuffer_append_str(buffer, data->state->object_nl);
|
807
807
|
}
|
808
|
-
if (RB_UNLIKELY(state->indent)) {
|
808
|
+
if (RB_UNLIKELY(data->state->indent)) {
|
809
809
|
for (j = 0; j < depth; j++) {
|
810
|
-
fbuffer_append_str(buffer, state->indent);
|
810
|
+
fbuffer_append_str(buffer, data->state->indent);
|
811
811
|
}
|
812
812
|
}
|
813
813
|
|
@@ -829,21 +829,22 @@ json_object_i(VALUE key, VALUE val, VALUE _arg)
|
|
829
829
|
}
|
830
830
|
|
831
831
|
if (RB_LIKELY(RBASIC_CLASS(key_to_s) == rb_cString)) {
|
832
|
-
generate_json_string(buffer, data,
|
832
|
+
generate_json_string(buffer, data, key_to_s);
|
833
833
|
} else {
|
834
|
-
generate_json(buffer, data,
|
834
|
+
generate_json(buffer, data, key_to_s);
|
835
835
|
}
|
836
|
-
if (RB_UNLIKELY(state->space_before)) fbuffer_append_str(buffer, state->space_before);
|
836
|
+
if (RB_UNLIKELY(state->space_before)) fbuffer_append_str(buffer, data->state->space_before);
|
837
837
|
fbuffer_append_char(buffer, ':');
|
838
|
-
if (RB_UNLIKELY(state->space)) fbuffer_append_str(buffer, state->space);
|
839
|
-
generate_json(buffer, data,
|
838
|
+
if (RB_UNLIKELY(state->space)) fbuffer_append_str(buffer, data->state->space);
|
839
|
+
generate_json(buffer, data, val);
|
840
840
|
|
841
841
|
arg->iter++;
|
842
842
|
return ST_CONTINUE;
|
843
843
|
}
|
844
844
|
|
845
|
-
static inline long increase_depth(
|
845
|
+
static inline long increase_depth(struct generate_json_data *data)
|
846
846
|
{
|
847
|
+
JSON_Generator_State *state = data->state;
|
847
848
|
long depth = ++state->depth;
|
848
849
|
if (RB_UNLIKELY(depth > state->max_nesting && state->max_nesting)) {
|
849
850
|
rb_raise(eNestingError, "nesting of %ld is too deep", --state->depth);
|
@@ -851,14 +852,14 @@ static inline long increase_depth(JSON_Generator_State *state)
|
|
851
852
|
return depth;
|
852
853
|
}
|
853
854
|
|
854
|
-
static void generate_json_object(FBuffer *buffer, struct generate_json_data *data,
|
855
|
+
static void generate_json_object(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
855
856
|
{
|
856
857
|
int j;
|
857
|
-
long depth = increase_depth(
|
858
|
+
long depth = increase_depth(data);
|
858
859
|
|
859
860
|
if (RHASH_SIZE(obj) == 0) {
|
860
861
|
fbuffer_append(buffer, "{}", 2);
|
861
|
-
--state->depth;
|
862
|
+
--data->state->depth;
|
862
863
|
return;
|
863
864
|
}
|
864
865
|
|
@@ -870,49 +871,49 @@ static void generate_json_object(FBuffer *buffer, struct generate_json_data *dat
|
|
870
871
|
};
|
871
872
|
rb_hash_foreach(obj, json_object_i, (VALUE)&arg);
|
872
873
|
|
873
|
-
depth = --state->depth;
|
874
|
-
if (RB_UNLIKELY(state->object_nl)) {
|
875
|
-
fbuffer_append_str(buffer, state->object_nl);
|
876
|
-
if (RB_UNLIKELY(state->indent)) {
|
874
|
+
depth = --data->state->depth;
|
875
|
+
if (RB_UNLIKELY(data->state->object_nl)) {
|
876
|
+
fbuffer_append_str(buffer, data->state->object_nl);
|
877
|
+
if (RB_UNLIKELY(data->state->indent)) {
|
877
878
|
for (j = 0; j < depth; j++) {
|
878
|
-
fbuffer_append_str(buffer, state->indent);
|
879
|
+
fbuffer_append_str(buffer, data->state->indent);
|
879
880
|
}
|
880
881
|
}
|
881
882
|
}
|
882
883
|
fbuffer_append_char(buffer, '}');
|
883
884
|
}
|
884
885
|
|
885
|
-
static void generate_json_array(FBuffer *buffer, struct generate_json_data *data,
|
886
|
+
static void generate_json_array(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
886
887
|
{
|
887
888
|
int i, j;
|
888
|
-
long depth = increase_depth(
|
889
|
+
long depth = increase_depth(data);
|
889
890
|
|
890
891
|
if (RARRAY_LEN(obj) == 0) {
|
891
892
|
fbuffer_append(buffer, "[]", 2);
|
892
|
-
--state->depth;
|
893
|
+
--data->state->depth;
|
893
894
|
return;
|
894
895
|
}
|
895
896
|
|
896
897
|
fbuffer_append_char(buffer, '[');
|
897
|
-
if (RB_UNLIKELY(state->array_nl)) fbuffer_append_str(buffer, state->array_nl);
|
898
|
+
if (RB_UNLIKELY(data->state->array_nl)) fbuffer_append_str(buffer, data->state->array_nl);
|
898
899
|
for(i = 0; i < RARRAY_LEN(obj); i++) {
|
899
900
|
if (i > 0) {
|
900
901
|
fbuffer_append_char(buffer, ',');
|
901
|
-
if (RB_UNLIKELY(state->array_nl)) fbuffer_append_str(buffer, state->array_nl);
|
902
|
+
if (RB_UNLIKELY(data->state->array_nl)) fbuffer_append_str(buffer, data->state->array_nl);
|
902
903
|
}
|
903
|
-
if (RB_UNLIKELY(state->indent)) {
|
904
|
+
if (RB_UNLIKELY(data->state->indent)) {
|
904
905
|
for (j = 0; j < depth; j++) {
|
905
|
-
fbuffer_append_str(buffer, state->indent);
|
906
|
+
fbuffer_append_str(buffer, data->state->indent);
|
906
907
|
}
|
907
908
|
}
|
908
|
-
generate_json(buffer, data,
|
909
|
+
generate_json(buffer, data, RARRAY_AREF(obj, i));
|
909
910
|
}
|
910
|
-
state->depth = --depth;
|
911
|
-
if (RB_UNLIKELY(state->array_nl)) {
|
912
|
-
fbuffer_append_str(buffer, state->array_nl);
|
913
|
-
if (RB_UNLIKELY(state->indent)) {
|
911
|
+
data->state->depth = --depth;
|
912
|
+
if (RB_UNLIKELY(data->state->array_nl)) {
|
913
|
+
fbuffer_append_str(buffer, data->state->array_nl);
|
914
|
+
if (RB_UNLIKELY(data->state->indent)) {
|
914
915
|
for (j = 0; j < depth; j++) {
|
915
|
-
fbuffer_append_str(buffer, state->indent);
|
916
|
+
fbuffer_append_str(buffer, data->state->indent);
|
916
917
|
}
|
917
918
|
}
|
918
919
|
}
|
@@ -961,7 +962,7 @@ static inline VALUE ensure_valid_encoding(VALUE str)
|
|
961
962
|
return str;
|
962
963
|
}
|
963
964
|
|
964
|
-
static void generate_json_string(FBuffer *buffer, struct generate_json_data *data,
|
965
|
+
static void generate_json_string(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
965
966
|
{
|
966
967
|
obj = ensure_valid_encoding(obj);
|
967
968
|
|
@@ -977,9 +978,9 @@ static void generate_json_string(FBuffer *buffer, struct generate_json_data *dat
|
|
977
978
|
switch(rb_enc_str_coderange(obj)) {
|
978
979
|
case ENC_CODERANGE_7BIT:
|
979
980
|
case ENC_CODERANGE_VALID:
|
980
|
-
if (RB_UNLIKELY(state->ascii_only)) {
|
981
|
-
convert_UTF8_to_ASCII_only_JSON(&search, state->script_safe ? script_safe_escape_table : ascii_only_escape_table);
|
982
|
-
} else if (RB_UNLIKELY(state->script_safe)) {
|
981
|
+
if (RB_UNLIKELY(data->state->ascii_only)) {
|
982
|
+
convert_UTF8_to_ASCII_only_JSON(&search, data->state->script_safe ? script_safe_escape_table : ascii_only_escape_table);
|
983
|
+
} else if (RB_UNLIKELY(data->state->script_safe)) {
|
983
984
|
convert_UTF8_to_script_safe_JSON(&search);
|
984
985
|
} else {
|
985
986
|
convert_UTF8_to_JSON(&search);
|
@@ -992,7 +993,7 @@ static void generate_json_string(FBuffer *buffer, struct generate_json_data *dat
|
|
992
993
|
fbuffer_append_char(buffer, '"');
|
993
994
|
}
|
994
995
|
|
995
|
-
static void generate_json_fallback(FBuffer *buffer, struct generate_json_data *data,
|
996
|
+
static void generate_json_fallback(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
996
997
|
{
|
997
998
|
VALUE tmp;
|
998
999
|
if (rb_respond_to(obj, i_to_json)) {
|
@@ -1002,68 +1003,68 @@ static void generate_json_fallback(FBuffer *buffer, struct generate_json_data *d
|
|
1002
1003
|
} else {
|
1003
1004
|
tmp = rb_funcall(obj, i_to_s, 0);
|
1004
1005
|
Check_Type(tmp, T_STRING);
|
1005
|
-
generate_json_string(buffer, data,
|
1006
|
+
generate_json_string(buffer, data, tmp);
|
1006
1007
|
}
|
1007
1008
|
}
|
1008
1009
|
|
1009
|
-
static inline void generate_json_symbol(FBuffer *buffer, struct generate_json_data *data,
|
1010
|
+
static inline void generate_json_symbol(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
1010
1011
|
{
|
1011
|
-
if (state->strict) {
|
1012
|
-
generate_json_string(buffer, data,
|
1012
|
+
if (data->state->strict) {
|
1013
|
+
generate_json_string(buffer, data, rb_sym2str(obj));
|
1013
1014
|
} else {
|
1014
|
-
generate_json_fallback(buffer, data,
|
1015
|
+
generate_json_fallback(buffer, data, obj);
|
1015
1016
|
}
|
1016
1017
|
}
|
1017
1018
|
|
1018
|
-
static void generate_json_null(FBuffer *buffer, struct generate_json_data *data,
|
1019
|
+
static void generate_json_null(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
1019
1020
|
{
|
1020
1021
|
fbuffer_append(buffer, "null", 4);
|
1021
1022
|
}
|
1022
1023
|
|
1023
|
-
static void generate_json_false(FBuffer *buffer, struct generate_json_data *data,
|
1024
|
+
static void generate_json_false(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
1024
1025
|
{
|
1025
1026
|
fbuffer_append(buffer, "false", 5);
|
1026
1027
|
}
|
1027
1028
|
|
1028
|
-
static void generate_json_true(FBuffer *buffer, struct generate_json_data *data,
|
1029
|
+
static void generate_json_true(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
1029
1030
|
{
|
1030
1031
|
fbuffer_append(buffer, "true", 4);
|
1031
1032
|
}
|
1032
1033
|
|
1033
|
-
static void generate_json_fixnum(FBuffer *buffer, struct generate_json_data *data,
|
1034
|
+
static void generate_json_fixnum(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
1034
1035
|
{
|
1035
1036
|
fbuffer_append_long(buffer, FIX2LONG(obj));
|
1036
1037
|
}
|
1037
1038
|
|
1038
|
-
static void generate_json_bignum(FBuffer *buffer, struct generate_json_data *data,
|
1039
|
+
static void generate_json_bignum(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
1039
1040
|
{
|
1040
1041
|
VALUE tmp = rb_funcall(obj, i_to_s, 0);
|
1041
1042
|
fbuffer_append_str(buffer, tmp);
|
1042
1043
|
}
|
1043
1044
|
|
1044
1045
|
#ifdef RUBY_INTEGER_UNIFICATION
|
1045
|
-
static void generate_json_integer(FBuffer *buffer, struct generate_json_data *data,
|
1046
|
+
static void generate_json_integer(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
1046
1047
|
{
|
1047
1048
|
if (FIXNUM_P(obj))
|
1048
|
-
generate_json_fixnum(buffer, data,
|
1049
|
+
generate_json_fixnum(buffer, data, obj);
|
1049
1050
|
else
|
1050
|
-
generate_json_bignum(buffer, data,
|
1051
|
+
generate_json_bignum(buffer, data, obj);
|
1051
1052
|
}
|
1052
1053
|
#endif
|
1053
1054
|
|
1054
|
-
static void generate_json_float(FBuffer *buffer, struct generate_json_data *data,
|
1055
|
+
static void generate_json_float(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
1055
1056
|
{
|
1056
1057
|
double value = RFLOAT_VALUE(obj);
|
1057
|
-
char allow_nan = state->allow_nan;
|
1058
|
+
char allow_nan = data->state->allow_nan;
|
1058
1059
|
if (isinf(value) || isnan(value)) {
|
1059
1060
|
/* for NaN and Infinity values we either raise an error or rely on Float#to_s. */
|
1060
1061
|
if (!allow_nan) {
|
1061
|
-
if (state->strict && state->as_json) {
|
1062
|
-
VALUE casted_obj = rb_proc_call_with_block(state->as_json, 1, &obj, Qnil);
|
1062
|
+
if (data->state->strict && data->state->as_json) {
|
1063
|
+
VALUE casted_obj = rb_proc_call_with_block(data->state->as_json, 1, &obj, Qnil);
|
1063
1064
|
if (casted_obj != obj) {
|
1064
|
-
increase_depth(
|
1065
|
-
generate_json(buffer, data,
|
1066
|
-
state->depth--;
|
1065
|
+
increase_depth(data);
|
1066
|
+
generate_json(buffer, data, casted_obj);
|
1067
|
+
data->state->depth--;
|
1067
1068
|
return;
|
1068
1069
|
}
|
1069
1070
|
}
|
@@ -1089,30 +1090,30 @@ static void generate_json_float(FBuffer *buffer, struct generate_json_data *data
|
|
1089
1090
|
buffer->len += len;
|
1090
1091
|
}
|
1091
1092
|
|
1092
|
-
static void generate_json_fragment(FBuffer *buffer, struct generate_json_data *data,
|
1093
|
+
static void generate_json_fragment(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
1093
1094
|
{
|
1094
1095
|
VALUE fragment = RSTRUCT_GET(obj, 0);
|
1095
1096
|
Check_Type(fragment, T_STRING);
|
1096
1097
|
fbuffer_append_str(buffer, fragment);
|
1097
1098
|
}
|
1098
1099
|
|
1099
|
-
static void generate_json(FBuffer *buffer, struct generate_json_data *data,
|
1100
|
+
static void generate_json(FBuffer *buffer, struct generate_json_data *data, VALUE obj)
|
1100
1101
|
{
|
1101
1102
|
bool as_json_called = false;
|
1102
1103
|
start:
|
1103
1104
|
if (obj == Qnil) {
|
1104
|
-
generate_json_null(buffer, data,
|
1105
|
+
generate_json_null(buffer, data, obj);
|
1105
1106
|
} else if (obj == Qfalse) {
|
1106
|
-
generate_json_false(buffer, data,
|
1107
|
+
generate_json_false(buffer, data, obj);
|
1107
1108
|
} else if (obj == Qtrue) {
|
1108
|
-
generate_json_true(buffer, data,
|
1109
|
+
generate_json_true(buffer, data, obj);
|
1109
1110
|
} else if (RB_SPECIAL_CONST_P(obj)) {
|
1110
1111
|
if (RB_FIXNUM_P(obj)) {
|
1111
|
-
generate_json_fixnum(buffer, data,
|
1112
|
+
generate_json_fixnum(buffer, data, obj);
|
1112
1113
|
} else if (RB_FLONUM_P(obj)) {
|
1113
|
-
generate_json_float(buffer, data,
|
1114
|
+
generate_json_float(buffer, data, obj);
|
1114
1115
|
} else if (RB_STATIC_SYM_P(obj)) {
|
1115
|
-
generate_json_symbol(buffer, data,
|
1116
|
+
generate_json_symbol(buffer, data, obj);
|
1116
1117
|
} else {
|
1117
1118
|
goto general;
|
1118
1119
|
}
|
@@ -1120,43 +1121,43 @@ start:
|
|
1120
1121
|
VALUE klass = RBASIC_CLASS(obj);
|
1121
1122
|
switch (RB_BUILTIN_TYPE(obj)) {
|
1122
1123
|
case T_BIGNUM:
|
1123
|
-
generate_json_bignum(buffer, data,
|
1124
|
+
generate_json_bignum(buffer, data, obj);
|
1124
1125
|
break;
|
1125
1126
|
case T_HASH:
|
1126
1127
|
if (klass != rb_cHash) goto general;
|
1127
|
-
generate_json_object(buffer, data,
|
1128
|
+
generate_json_object(buffer, data, obj);
|
1128
1129
|
break;
|
1129
1130
|
case T_ARRAY:
|
1130
1131
|
if (klass != rb_cArray) goto general;
|
1131
|
-
generate_json_array(buffer, data,
|
1132
|
+
generate_json_array(buffer, data, obj);
|
1132
1133
|
break;
|
1133
1134
|
case T_STRING:
|
1134
1135
|
if (klass != rb_cString) goto general;
|
1135
|
-
generate_json_string(buffer, data,
|
1136
|
+
generate_json_string(buffer, data, obj);
|
1136
1137
|
break;
|
1137
1138
|
case T_SYMBOL:
|
1138
|
-
generate_json_symbol(buffer, data,
|
1139
|
+
generate_json_symbol(buffer, data, obj);
|
1139
1140
|
break;
|
1140
1141
|
case T_FLOAT:
|
1141
1142
|
if (klass != rb_cFloat) goto general;
|
1142
|
-
generate_json_float(buffer, data,
|
1143
|
+
generate_json_float(buffer, data, obj);
|
1143
1144
|
break;
|
1144
1145
|
case T_STRUCT:
|
1145
1146
|
if (klass != cFragment) goto general;
|
1146
|
-
generate_json_fragment(buffer, data,
|
1147
|
+
generate_json_fragment(buffer, data, obj);
|
1147
1148
|
break;
|
1148
1149
|
default:
|
1149
1150
|
general:
|
1150
|
-
if (state->strict) {
|
1151
|
-
if (RTEST(state->as_json) && !as_json_called) {
|
1152
|
-
obj = rb_proc_call_with_block(state->as_json, 1, &obj, Qnil);
|
1151
|
+
if (data->state->strict) {
|
1152
|
+
if (RTEST(data->state->as_json) && !as_json_called) {
|
1153
|
+
obj = rb_proc_call_with_block(data->state->as_json, 1, &obj, Qnil);
|
1153
1154
|
as_json_called = true;
|
1154
1155
|
goto start;
|
1155
1156
|
} else {
|
1156
1157
|
raise_generator_error(obj, "%"PRIsVALUE" not allowed in JSON", CLASS_OF(obj));
|
1157
1158
|
}
|
1158
1159
|
} else {
|
1159
|
-
generate_json_fallback(buffer, data,
|
1160
|
+
generate_json_fallback(buffer, data, obj);
|
1160
1161
|
}
|
1161
1162
|
}
|
1162
1163
|
}
|
@@ -1166,7 +1167,7 @@ static VALUE generate_json_try(VALUE d)
|
|
1166
1167
|
{
|
1167
1168
|
struct generate_json_data *data = (struct generate_json_data *)d;
|
1168
1169
|
|
1169
|
-
data->func(data->buffer, data, data->
|
1170
|
+
data->func(data->buffer, data, data->obj);
|
1170
1171
|
|
1171
1172
|
return Qnil;
|
1172
1173
|
}
|
data/lib/json/common.rb
CHANGED
@@ -961,6 +961,24 @@ module JSON
|
|
961
961
|
load(...)
|
962
962
|
end
|
963
963
|
module_function :restore
|
964
|
+
|
965
|
+
class << self
|
966
|
+
private
|
967
|
+
|
968
|
+
def const_missing(const_name)
|
969
|
+
case const_name
|
970
|
+
when :PRETTY_STATE_PROTOTYPE
|
971
|
+
if RUBY_VERSION >= "3.0"
|
972
|
+
warn "JSON::PRETTY_STATE_PROTOTYPE is deprecated and will be removed in json 3.0.0, just use JSON.pretty_generate", uplevel: 1, category: :deprecated
|
973
|
+
else
|
974
|
+
warn "JSON::PRETTY_STATE_PROTOTYPE is deprecated and will be removed in json 3.0.0, just use JSON.pretty_generate", uplevel: 1
|
975
|
+
end
|
976
|
+
state.new(PRETTY_GENERATE_OPTIONS)
|
977
|
+
else
|
978
|
+
super
|
979
|
+
end
|
980
|
+
end
|
981
|
+
end
|
964
982
|
# :startdoc:
|
965
983
|
|
966
984
|
# JSON::Coder holds a parser and generator configuration.
|
data/lib/json/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.11.
|
4
|
+
version: 2.11.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
bindir: bin
|
9
9
|
cert_chain: []
|
10
|
-
date: 2025-04-
|
10
|
+
date: 2025-04-25 00:00:00.000000000 Z
|
11
11
|
dependencies: []
|
12
12
|
description: This is a JSON implementation as a Ruby extension in C.
|
13
13
|
email: flori@ping.de
|