oj 3.10.2 → 3.10.5
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 +1 -1
- data/ext/oj/parse.c +13 -12
- data/ext/oj/rails.c +0 -1
- data/lib/oj/version.rb +1 -1
- data/pages/Rails.md +4 -3
- data/test/bar.rb +21 -8
- data/test/json_gem/json_common_interface_test.rb +2 -2
- 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: 3c5237f8fde35d255bce0e58bbb8de4cd74e6e1f8ea563ce6413eeec4605ec46
|
4
|
+
data.tar.gz: 97eeb9614491ed377ad2336bda388e0d3eeac843d61d4afea44e80bcf9e7782b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7fd89f9ca4e2ef290e4096d3d486f118ab5cf93b3b54f14b0873561f0ec486ab700ac04e3556db6bd7a82f53e81d10f00eb7ecb524a012266018b9b080c89726
|
7
|
+
data.tar.gz: 0436f2949fc7881f194c6f781f489a9a47dbacb630390308fc1b48c2e047cbbc160338ab51f94998c9a08f39e996c9db27a4dd341d7870299de78d41f2d8a659
|
data/ext/oj/dump.c
CHANGED
@@ -111,7 +111,7 @@ static char rails_friendly_chars[256] = "\
|
|
111
111
|
11111111111111111111111111111111\
|
112
112
|
11111111111111111111111111111111\
|
113
113
|
11111111111111111111111111111111\
|
114
|
-
|
114
|
+
11111111111111111111111111111111";
|
115
115
|
|
116
116
|
static void
|
117
117
|
raise_strict(VALUE obj) {
|
data/ext/oj/parse.c
CHANGED
@@ -795,13 +795,13 @@ oj_num_as_value(NumInfo ni) {
|
|
795
795
|
}
|
796
796
|
} else {
|
797
797
|
// All these machinations are to get rounding to work better.
|
798
|
-
long double
|
798
|
+
long double ld = (long double)ni->i * (long double)ni->div + (long double)ni->num;
|
799
799
|
int x = (int)((int64_t)ni->exp - ni->di);
|
800
800
|
|
801
801
|
// Rounding sometimes cuts off the last digit even if there are only
|
802
802
|
// 15 digits. This attempts to fix those few cases where this
|
803
803
|
// occurs.
|
804
|
-
if ((long double)INT64_MAX >
|
804
|
+
if ((long double)INT64_MAX > ld && (int64_t)ld != (ni->i * ni->div + ni->num)) {
|
805
805
|
volatile VALUE bd = rb_str_new(ni->str, ni->len);
|
806
806
|
|
807
807
|
rnum = rb_rescue2(parse_big_decimal, bd, rescue_big_decimal, bd, rb_eException, 0);
|
@@ -809,16 +809,23 @@ oj_num_as_value(NumInfo ni) {
|
|
809
809
|
rnum = rb_funcall(rnum, rb_intern("to_f"), 0);
|
810
810
|
}
|
811
811
|
} else {
|
812
|
-
d
|
812
|
+
double d;
|
813
|
+
|
814
|
+
ld = roundl(ld);
|
815
|
+
// You would expect that staying with a long double would be
|
816
|
+
// more accurate but it fails to match what Ruby generates so
|
817
|
+
// drop down to a double.
|
813
818
|
if (0 < x) {
|
814
|
-
d
|
819
|
+
d = (double)ld * pow(10.0, x);
|
815
820
|
} else if (0 > x) {
|
816
|
-
d
|
821
|
+
d = (double)ld / pow(10.0, -x);
|
822
|
+
} else {
|
823
|
+
d = (double)ld;
|
817
824
|
}
|
818
825
|
if (ni->neg) {
|
819
826
|
d = -d;
|
820
827
|
}
|
821
|
-
rnum = rb_float_new(
|
828
|
+
rnum = rb_float_new(d);
|
822
829
|
}
|
823
830
|
}
|
824
831
|
}
|
@@ -1041,12 +1048,6 @@ CLEANUP:
|
|
1041
1048
|
if (pi->str_rx.head != oj_default_options.str_rx.head) {
|
1042
1049
|
oj_rxclass_cleanup(&pi->str_rx);
|
1043
1050
|
}
|
1044
|
-
// TBD if validate only then (Qundef == result ??)
|
1045
|
-
// if pi->err or 0 != line
|
1046
|
-
// rb_get_errinfo();??
|
1047
|
-
// rb_set_errinfo(Qnil);
|
1048
|
-
// return nil or error
|
1049
|
-
|
1050
1051
|
if (err_has(&pi->err)) {
|
1051
1052
|
rb_set_errinfo(Qnil);
|
1052
1053
|
if (Qnil != pi->err_class) {
|
data/ext/oj/rails.c
CHANGED
data/lib/oj/version.rb
CHANGED
data/pages/Rails.md
CHANGED
@@ -89,10 +89,11 @@ require 'oj'
|
|
89
89
|
|
90
90
|
module OjJsonEncoder
|
91
91
|
def render(options = nil, extra_options = {}, &block)
|
92
|
-
if options && options[:json]
|
92
|
+
if options && options.is_a?(Hash) && options[:json]
|
93
93
|
obj = options.delete(:json)
|
94
|
-
|
95
|
-
options[:
|
94
|
+
obj = Oj.dump(obj, :mode => :rails) unless obj.is_a?(String)
|
95
|
+
options[:text] = obj
|
96
|
+
response.content_type ||= Mime::JSON
|
96
97
|
end
|
97
98
|
super
|
98
99
|
end
|
data/test/bar.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# encoding: UTF-8
|
3
2
|
|
4
3
|
$: << File.dirname(__FILE__)
|
5
4
|
$oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
|
@@ -7,16 +6,30 @@ $oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
|
|
7
6
|
$: << File.join($oj_dir, dir)
|
8
7
|
end
|
9
8
|
|
10
|
-
require 'rails'
|
11
9
|
require 'active_support'
|
12
|
-
require
|
10
|
+
require "active_support/json"
|
13
11
|
|
14
|
-
|
12
|
+
$s = "\u2014 & \n \u{1F618}"
|
13
|
+
|
14
|
+
=begin
|
15
|
+
def check(label)
|
16
|
+
puts "\n--- #{label} --------------------"
|
17
|
+
|
18
|
+
ActiveSupport::JSON::Encoding.use_standard_json_time_format = true
|
19
|
+
puts "with standard_json == true: t.to_json - #{$t.to_json}"
|
20
|
+
ActiveSupport::JSON::Encoding.use_standard_json_time_format = false
|
21
|
+
puts "with standard_json == false: t.to_json - #{$t.to_json}"
|
22
|
+
end
|
23
|
+
|
24
|
+
check('Before Oj')
|
25
|
+
=end
|
15
26
|
|
16
|
-
|
27
|
+
require 'oj'
|
17
28
|
|
18
|
-
|
29
|
+
ActiveSupport::JSON::Encoding.escape_html_entities_in_json = false
|
30
|
+
puts "ActiveSupport.encode(s) - #{ActiveSupport::JSON.encode($s)}"
|
19
31
|
|
20
|
-
|
32
|
+
Oj.optimize_rails
|
33
|
+
Oj.default_options = { mode: :rails }
|
21
34
|
|
22
|
-
puts Oj.dump(
|
35
|
+
puts "Oj.dump(s) - #{Oj.dump($s)}"
|
@@ -15,7 +15,7 @@ class JSONCommonInterfaceTest < Test::Unit::TestCase
|
|
15
15
|
def setup
|
16
16
|
@hash = {
|
17
17
|
'a' => 2,
|
18
|
-
'b' =>
|
18
|
+
'b' => 5.23683071,
|
19
19
|
'c' => 'c',
|
20
20
|
'd' => [ 1, "b", 3.14 ],
|
21
21
|
'e' => { 'foo' => 'bar' },
|
@@ -23,7 +23,7 @@ class JSONCommonInterfaceTest < Test::Unit::TestCase
|
|
23
23
|
'h' => 1000.0,
|
24
24
|
'i' => 0.001
|
25
25
|
}
|
26
|
-
@json = '{"a":2,"b":
|
26
|
+
@json = '{"a":2,"b":5.23683071,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},'\
|
27
27
|
'"g":"\\"\\u0000\\u001f","h":1000.0,"i":0.001}'
|
28
28
|
end
|
29
29
|
|
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.10.
|
4
|
+
version: 3.10.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|