oj 3.3.7 → 3.3.8
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/ext/oj/dump.c +16 -1
- data/ext/oj/dump.h +2 -0
- data/ext/oj/dump_compat.c +1 -2
- data/ext/oj/dump_strict.c +1 -1
- data/ext/oj/mimic_json.c +0 -1
- data/ext/oj/rails.c +1 -1
- data/lib/oj/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28fc69ea25c02c80fd4d5d1622f05350e0fd6d5e
|
4
|
+
data.tar.gz: 143ef4198b371f30dbdd12d8e4f1ecd4b43cdb08
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b0478c6f09d46f53827b981ed947002c8b723884c83276384b1316f2d85db9dd29dba0095d4d6a8d618062c313954d5883e05b08e8ba016bb949aae43b797dad
|
7
|
+
data.tar.gz: 826fdefe54a411b7b92cc5563caeacccced2a7c0a25f869e1995fca3309cef7e4692e0ddb6e219317e788cc40daf3ddd4c0eb1c45bc932b4ab0e44a7c9d44bae
|
data/ext/oj/dump.c
CHANGED
@@ -1110,7 +1110,7 @@ oj_dump_float(VALUE obj, int depth, Out out, bool as_ok) {
|
|
1110
1110
|
strncpy(buf, rb_string_value_ptr((VALUE*)&rstr), cnt);
|
1111
1111
|
buf[cnt] = '\0';
|
1112
1112
|
} else {
|
1113
|
-
cnt =
|
1113
|
+
cnt = oj_dump_float_printf(buf, sizeof(buf), obj, d, out->opts->float_fmt);
|
1114
1114
|
}
|
1115
1115
|
assure_size(out, cnt);
|
1116
1116
|
for (b = buf; '\0' != *b; b++) {
|
@@ -1118,3 +1118,18 @@ oj_dump_float(VALUE obj, int depth, Out out, bool as_ok) {
|
|
1118
1118
|
}
|
1119
1119
|
*out->cur = '\0';
|
1120
1120
|
}
|
1121
|
+
|
1122
|
+
int
|
1123
|
+
oj_dump_float_printf(char *buf, size_t blen, VALUE obj, double d, const char *format) {
|
1124
|
+
int cnt = snprintf(buf, blen, format, d);
|
1125
|
+
|
1126
|
+
// Round off issues at 16 significant digits so check for obvious ones of
|
1127
|
+
// 0001 and 9999.
|
1128
|
+
if (17 <= cnt && (0 == strcmp("0001", buf + cnt - 4) || 0 == strcmp("9999", buf + cnt - 4))) {
|
1129
|
+
volatile VALUE rstr = rb_funcall(obj, oj_to_s_id, 0);
|
1130
|
+
|
1131
|
+
strcpy(buf, rb_string_value_ptr((VALUE*)&rstr));
|
1132
|
+
cnt = (int)RSTRING_LEN(rstr);
|
1133
|
+
}
|
1134
|
+
return cnt;
|
1135
|
+
}
|
data/ext/oj/dump.h
CHANGED
@@ -48,6 +48,8 @@ extern void oj_dump_wab_val(VALUE obj, int depth, Out out);
|
|
48
48
|
extern VALUE oj_add_to_json(int argc, VALUE *argv, VALUE self);
|
49
49
|
extern VALUE oj_remove_to_json(int argc, VALUE *argv, VALUE self);
|
50
50
|
|
51
|
+
extern int oj_dump_float_printf(char *buf, size_t blen, VALUE obj, double d, const char *format);
|
52
|
+
|
51
53
|
inline static void
|
52
54
|
assure_size(Out out, size_t len) {
|
53
55
|
if (out->end - out->cur <= (long)len) {
|
data/ext/oj/dump_compat.c
CHANGED
@@ -611,10 +611,9 @@ dump_float(VALUE obj, int depth, Out out, bool as_ok) {
|
|
611
611
|
raise_json_err("NaN not allowed in JSON.", "GeneratorError");
|
612
612
|
}
|
613
613
|
} else if (d == (double)(long long int)d) {
|
614
|
-
//cnt = snprintf(buf, sizeof(buf), "%.1Lf", (long double)d);
|
615
614
|
cnt = snprintf(buf, sizeof(buf), "%.1f", d);
|
616
615
|
} else if (oj_rails_float_opt) {
|
617
|
-
cnt =
|
616
|
+
cnt = oj_dump_float_printf(buf, sizeof(buf), obj, d, "%0.16g");
|
618
617
|
} else {
|
619
618
|
volatile VALUE rstr = rb_funcall(obj, oj_to_s_id, 0);
|
620
619
|
|
data/ext/oj/dump_strict.c
CHANGED
@@ -115,7 +115,7 @@ dump_float(VALUE obj, int depth, Out out, bool as_ok) {
|
|
115
115
|
strncpy(buf, rb_string_value_ptr((VALUE*)&rstr), cnt);
|
116
116
|
buf[cnt] = '\0';
|
117
117
|
} else {
|
118
|
-
cnt =
|
118
|
+
cnt = oj_dump_float_printf(buf, sizeof(buf), obj, d, out->opts->float_fmt);
|
119
119
|
}
|
120
120
|
}
|
121
121
|
assure_size(out, cnt);
|
data/ext/oj/mimic_json.c
CHANGED
@@ -795,7 +795,6 @@ oj_mimic_json_methods(VALUE json) {
|
|
795
795
|
} else {
|
796
796
|
oj_json_parser_error_class = rb_define_class_under(json, "ParserError", json_error);
|
797
797
|
}
|
798
|
-
printf("*** setting parse error to %lx %s\n", oj_json_parser_error_class, rb_class2name(oj_json_parser_error_class));
|
799
798
|
if (rb_const_defined_at(json, rb_intern("GeneratorError"))) {
|
800
799
|
oj_json_generator_error_class = rb_const_get(json, rb_intern("GeneratorError"));
|
801
800
|
} else {
|
data/ext/oj/rails.c
CHANGED
@@ -972,7 +972,7 @@ dump_float(VALUE obj, int depth, Out out, bool as_ok) {
|
|
972
972
|
} else if (d == (double)(long long int)d) {
|
973
973
|
cnt = snprintf(buf, sizeof(buf), "%.1f", d);
|
974
974
|
} else if (oj_rails_float_opt) {
|
975
|
-
cnt =
|
975
|
+
cnt = oj_dump_float_printf(buf, sizeof(buf), obj, d, "%0.16g");
|
976
976
|
} else {
|
977
977
|
volatile VALUE rstr = rb_funcall(obj, oj_to_s_id, 0);
|
978
978
|
|
data/lib/oj/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.
|
4
|
+
version: 3.3.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-10-
|
11
|
+
date: 2017-10-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|