json 1.8.0 → 2.6.2
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 +5 -5
- data/{CHANGES → CHANGES.md} +262 -87
- data/{COPYING-json-jruby → LICENSE} +5 -6
- data/README.md +425 -0
- data/VERSION +1 -1
- data/ext/json/ext/fbuffer/fbuffer.h +10 -4
- data/ext/json/ext/generator/extconf.rb +0 -10
- data/ext/json/ext/generator/generator.c +308 -135
- data/ext/json/ext/generator/generator.h +35 -9
- data/ext/json/ext/parser/extconf.rb +25 -6
- data/ext/json/ext/parser/parser.c +3044 -1901
- data/ext/json/ext/parser/parser.h +29 -10
- data/ext/json/ext/parser/parser.rl +270 -211
- data/ext/json/extconf.rb +3 -0
- data/json.gemspec +57 -27
- data/lib/json/add/bigdecimal.rb +3 -2
- data/lib/json/add/complex.rb +9 -3
- data/lib/json/add/core.rb +1 -0
- data/lib/json/add/date.rb +1 -1
- data/lib/json/add/date_time.rb +1 -1
- data/lib/json/add/exception.rb +1 -1
- data/lib/json/add/ostruct.rb +3 -3
- data/lib/json/add/range.rb +1 -1
- data/lib/json/add/rational.rb +8 -3
- data/lib/json/add/regexp.rb +3 -3
- data/lib/json/add/set.rb +29 -0
- data/lib/json/add/struct.rb +1 -1
- data/lib/json/add/symbol.rb +1 -1
- data/lib/json/add/time.rb +2 -2
- data/lib/json/common.rb +383 -167
- data/lib/json/ext.rb +0 -6
- data/lib/json/generic_object.rb +5 -4
- data/lib/json/pure/generator.rb +83 -126
- data/lib/json/pure/parser.rb +63 -85
- data/lib/json/pure.rb +2 -8
- data/lib/json/version.rb +2 -1
- data/lib/json.rb +550 -29
- metadata +29 -136
- data/.gitignore +0 -12
- data/.travis.yml +0 -20
- data/COPYING +0 -58
- data/GPL +0 -340
- data/Gemfile +0 -11
- data/README-json-jruby.markdown +0 -33
- data/README.rdoc +0 -358
- data/Rakefile +0 -412
- data/TODO +0 -1
- data/data/example.json +0 -1
- data/data/index.html +0 -38
- data/data/prototype.js +0 -4184
- data/diagrams/.keep +0 -0
- data/install.rb +0 -23
- data/java/src/json/ext/ByteListTranscoder.java +0 -167
- data/java/src/json/ext/Generator.java +0 -444
- data/java/src/json/ext/GeneratorMethods.java +0 -232
- data/java/src/json/ext/GeneratorService.java +0 -43
- data/java/src/json/ext/GeneratorState.java +0 -543
- data/java/src/json/ext/OptionsReader.java +0 -114
- data/java/src/json/ext/Parser.java +0 -2644
- data/java/src/json/ext/Parser.rl +0 -968
- data/java/src/json/ext/ParserService.java +0 -35
- data/java/src/json/ext/RuntimeInfo.java +0 -121
- data/java/src/json/ext/StringDecoder.java +0 -167
- data/java/src/json/ext/StringEncoder.java +0 -106
- data/java/src/json/ext/Utils.java +0 -89
- data/json-java.gemspec +0 -23
- data/json_pure.gemspec +0 -39
- data/lib/json/ext/.keep +0 -0
- data/tests/fixtures/fail1.json +0 -1
- data/tests/fixtures/fail10.json +0 -1
- data/tests/fixtures/fail11.json +0 -1
- data/tests/fixtures/fail12.json +0 -1
- data/tests/fixtures/fail13.json +0 -1
- data/tests/fixtures/fail14.json +0 -1
- data/tests/fixtures/fail18.json +0 -1
- data/tests/fixtures/fail19.json +0 -1
- data/tests/fixtures/fail2.json +0 -1
- data/tests/fixtures/fail20.json +0 -1
- data/tests/fixtures/fail21.json +0 -1
- data/tests/fixtures/fail22.json +0 -1
- data/tests/fixtures/fail23.json +0 -1
- data/tests/fixtures/fail24.json +0 -1
- data/tests/fixtures/fail25.json +0 -1
- data/tests/fixtures/fail27.json +0 -2
- data/tests/fixtures/fail28.json +0 -2
- data/tests/fixtures/fail3.json +0 -1
- data/tests/fixtures/fail4.json +0 -1
- data/tests/fixtures/fail5.json +0 -1
- data/tests/fixtures/fail6.json +0 -1
- data/tests/fixtures/fail7.json +0 -1
- data/tests/fixtures/fail8.json +0 -1
- data/tests/fixtures/fail9.json +0 -1
- data/tests/fixtures/pass1.json +0 -56
- data/tests/fixtures/pass15.json +0 -1
- data/tests/fixtures/pass16.json +0 -1
- data/tests/fixtures/pass17.json +0 -1
- data/tests/fixtures/pass2.json +0 -1
- data/tests/fixtures/pass26.json +0 -1
- data/tests/fixtures/pass3.json +0 -6
- data/tests/setup_variant.rb +0 -11
- data/tests/test_json.rb +0 -545
- data/tests/test_json_addition.rb +0 -196
- data/tests/test_json_encoding.rb +0 -65
- data/tests/test_json_fixtures.rb +0 -35
- data/tests/test_json_generate.rb +0 -322
- data/tests/test_json_generic_object.rb +0 -75
- data/tests/test_json_string_matching.rb +0 -39
- data/tests/test_json_unicode.rb +0 -72
- data/tools/fuzz.rb +0 -139
- data/tools/server.rb +0 -62
data/ext/json/extconf.rb
ADDED
data/json.gemspec
CHANGED
|
@@ -2,36 +2,66 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = "json"
|
|
5
|
-
s.version =
|
|
5
|
+
s.version = File.read(File.expand_path('../VERSION', __FILE__)).chomp
|
|
6
6
|
|
|
7
|
-
s.
|
|
8
|
-
s.authors = ["Florian Frank"]
|
|
9
|
-
s.date = "2013-05-13"
|
|
7
|
+
s.summary = "JSON Implementation for Ruby"
|
|
10
8
|
s.description = "This is a JSON implementation as a Ruby extension in C."
|
|
11
|
-
s.email = "flori@ping.de"
|
|
12
|
-
s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb"]
|
|
13
|
-
s.extra_rdoc_files = ["README.rdoc"]
|
|
14
|
-
s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "data/example.json", "data/index.html", "data/prototype.js", "diagrams/.keep", "ext/json/ext/fbuffer/fbuffer.h", "ext/json/ext/generator/depend", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "ext/json/ext/parser/depend", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/parser.c", "ext/json/ext/parser/parser.h", "ext/json/ext/parser/parser.rl", "install.rb", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/GeneratorMethods.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/Parser.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/ParserService.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/Utils.java", "json-java.gemspec", "json.gemspec", "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/date.rb", "lib/json/add/date_time.rb", "lib/json/add/exception.rb", "lib/json/add/ostruct.rb", "lib/json/add/range.rb", "lib/json/add/rational.rb", "lib/json/add/regexp.rb", "lib/json/add/struct.rb", "lib/json/add/symbol.rb", "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", "lib/json/ext/.keep", "lib/json/generic_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests/fixtures/fail1.json", "tests/fixtures/fail10.json", "tests/fixtures/fail11.json", "tests/fixtures/fail12.json", "tests/fixtures/fail13.json", "tests/fixtures/fail14.json", "tests/fixtures/fail18.json", "tests/fixtures/fail19.json", "tests/fixtures/fail2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail21.json", "tests/fixtures/fail22.json", "tests/fixtures/fail23.json", "tests/fixtures/fail24.json", "tests/fixtures/fail25.json", "tests/fixtures/fail27.json", "tests/fixtures/fail28.json", "tests/fixtures/fail3.json", "tests/fixtures/fail4.json", "tests/fixtures/fail5.json", "tests/fixtures/fail6.json", "tests/fixtures/fail7.json", "tests/fixtures/fail8.json", "tests/fixtures/fail9.json", "tests/fixtures/pass1.json", "tests/fixtures/pass15.json", "tests/fixtures/pass16.json", "tests/fixtures/pass17.json", "tests/fixtures/pass2.json", "tests/fixtures/pass26.json", "tests/fixtures/pass3.json", "tests/setup_variant.rb", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/test_json_encoding.rb", "tests/test_json_fixtures.rb", "tests/test_json_generate.rb", "tests/test_json_generic_object.rb", "tests/test_json_string_matching.rb", "tests/test_json_unicode.rb", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json.rb", "./tests/test_json_addition.rb", "./tests/test_json_encoding.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_generate.rb", "./tests/test_json_generic_object.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_unicode.rb"]
|
|
15
|
-
s.homepage = "http://flori.github.com/json"
|
|
16
9
|
s.licenses = ["Ruby"]
|
|
17
|
-
s.
|
|
18
|
-
s.
|
|
19
|
-
s.rubygems_version = "2.0.3"
|
|
20
|
-
s.summary = "JSON Implementation for Ruby"
|
|
21
|
-
s.test_files = ["./tests/test_json.rb", "./tests/test_json_addition.rb", "./tests/test_json_encoding.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_generate.rb", "./tests/test_json_generic_object.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_unicode.rb"]
|
|
10
|
+
s.authors = ["Florian Frank"]
|
|
11
|
+
s.email = "flori@ping.de"
|
|
22
12
|
|
|
23
|
-
|
|
24
|
-
|
|
13
|
+
s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb", "ext/json/extconf.rb"]
|
|
14
|
+
s.extra_rdoc_files = ["README.md"]
|
|
15
|
+
s.rdoc_options = ["--title", "JSON implementation for Ruby", "--main", "README.md"]
|
|
16
|
+
s.files = [
|
|
17
|
+
"CHANGES.md",
|
|
18
|
+
"LICENSE",
|
|
19
|
+
"README.md",
|
|
20
|
+
"VERSION",
|
|
21
|
+
"ext/json/ext/fbuffer/fbuffer.h",
|
|
22
|
+
"ext/json/ext/generator/depend",
|
|
23
|
+
"ext/json/ext/generator/extconf.rb",
|
|
24
|
+
"ext/json/ext/generator/generator.c",
|
|
25
|
+
"ext/json/ext/generator/generator.h",
|
|
26
|
+
"ext/json/ext/parser/depend",
|
|
27
|
+
"ext/json/ext/parser/extconf.rb",
|
|
28
|
+
"ext/json/ext/parser/parser.c",
|
|
29
|
+
"ext/json/ext/parser/parser.h",
|
|
30
|
+
"ext/json/ext/parser/parser.rl",
|
|
31
|
+
"ext/json/extconf.rb",
|
|
32
|
+
"json.gemspec",
|
|
33
|
+
"lib/json.rb",
|
|
34
|
+
"lib/json/add/bigdecimal.rb",
|
|
35
|
+
"lib/json/add/complex.rb",
|
|
36
|
+
"lib/json/add/core.rb",
|
|
37
|
+
"lib/json/add/date.rb",
|
|
38
|
+
"lib/json/add/date_time.rb",
|
|
39
|
+
"lib/json/add/exception.rb",
|
|
40
|
+
"lib/json/add/ostruct.rb",
|
|
41
|
+
"lib/json/add/range.rb",
|
|
42
|
+
"lib/json/add/rational.rb",
|
|
43
|
+
"lib/json/add/regexp.rb",
|
|
44
|
+
"lib/json/add/set.rb",
|
|
45
|
+
"lib/json/add/struct.rb",
|
|
46
|
+
"lib/json/add/symbol.rb",
|
|
47
|
+
"lib/json/add/time.rb",
|
|
48
|
+
"lib/json/common.rb",
|
|
49
|
+
"lib/json/ext.rb",
|
|
50
|
+
"lib/json/generic_object.rb",
|
|
51
|
+
"lib/json/pure.rb",
|
|
52
|
+
"lib/json/pure/generator.rb",
|
|
53
|
+
"lib/json/pure/parser.rb",
|
|
54
|
+
"lib/json/version.rb",
|
|
55
|
+
]
|
|
56
|
+
s.homepage = "http://flori.github.com/json"
|
|
57
|
+
s.metadata = {
|
|
58
|
+
'bug_tracker_uri' => 'https://github.com/flori/json/issues',
|
|
59
|
+
'changelog_uri' => 'https://github.com/flori/json/blob/master/CHANGES.md',
|
|
60
|
+
'documentation_uri' => 'http://flori.github.io/json/doc/index.html',
|
|
61
|
+
'homepage_uri' => 'http://flori.github.io/json/',
|
|
62
|
+
'source_code_uri' => 'https://github.com/flori/json',
|
|
63
|
+
'wiki_uri' => 'https://github.com/flori/json/wiki'
|
|
64
|
+
}
|
|
25
65
|
|
|
26
|
-
|
|
27
|
-
s.add_development_dependency(%q<permutation>, [">= 0"])
|
|
28
|
-
s.add_development_dependency(%q<sdoc>, ["~> 0.3.16"]) if RUBY_VERSION > "1.8.6"
|
|
29
|
-
else
|
|
30
|
-
s.add_dependency(%q<permutation>, [">= 0"])
|
|
31
|
-
s.add_dependency(%q<sdoc>, ["~> 0.3.16"]) if RUBY_VERSION > "1.8.6"
|
|
32
|
-
end
|
|
33
|
-
else
|
|
34
|
-
s.add_dependency(%q<permutation>, [">= 0"])
|
|
35
|
-
s.add_dependency(%q<sdoc>, ["~> 0.3.16"]) if RUBY_VERSION > "1.8.6"
|
|
36
|
-
end
|
|
66
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.3")
|
|
37
67
|
end
|
data/lib/json/add/bigdecimal.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
#frozen_string_literal: false
|
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
|
2
3
|
require 'json'
|
|
3
4
|
end
|
|
@@ -22,7 +23,7 @@ class BigDecimal
|
|
|
22
23
|
end
|
|
23
24
|
|
|
24
25
|
# return the JSON value
|
|
25
|
-
def to_json(*)
|
|
26
|
-
as_json.to_json
|
|
26
|
+
def to_json(*args)
|
|
27
|
+
as_json.to_json(*args)
|
|
27
28
|
end
|
|
28
29
|
end
|
data/lib/json/add/complex.rb
CHANGED
|
@@ -1,13 +1,18 @@
|
|
|
1
|
+
#frozen_string_literal: false
|
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
|
2
3
|
require 'json'
|
|
3
4
|
end
|
|
4
|
-
defined?(::Complex) or require 'complex'
|
|
5
5
|
|
|
6
6
|
class Complex
|
|
7
|
+
|
|
8
|
+
# Deserializes JSON string by converting Real value <tt>r</tt>, imaginary
|
|
9
|
+
# value <tt>i</tt>, to a Complex object.
|
|
7
10
|
def self.json_create(object)
|
|
8
11
|
Complex(object['r'], object['i'])
|
|
9
12
|
end
|
|
10
13
|
|
|
14
|
+
# Returns a hash, that will be turned into a JSON object and represent this
|
|
15
|
+
# object.
|
|
11
16
|
def as_json(*)
|
|
12
17
|
{
|
|
13
18
|
JSON.create_id => self.class.name,
|
|
@@ -16,7 +21,8 @@ class Complex
|
|
|
16
21
|
}
|
|
17
22
|
end
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
|
|
24
|
+
# Stores class name (Complex) along with real value <tt>r</tt> and imaginary value <tt>i</tt> as JSON string
|
|
25
|
+
def to_json(*args)
|
|
26
|
+
as_json.to_json(*args)
|
|
21
27
|
end
|
|
22
28
|
end
|
data/lib/json/add/core.rb
CHANGED
data/lib/json/add/date.rb
CHANGED
data/lib/json/add/date_time.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
#frozen_string_literal: false
|
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
|
2
3
|
require 'json'
|
|
3
4
|
end
|
|
4
5
|
require 'date'
|
|
5
6
|
|
|
6
|
-
# DateTime serialization/deserialization
|
|
7
7
|
class DateTime
|
|
8
8
|
|
|
9
9
|
# Deserializes JSON string by converting year <tt>y</tt>, month <tt>m</tt>,
|
data/lib/json/add/exception.rb
CHANGED
data/lib/json/add/ostruct.rb
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
#frozen_string_literal: false
|
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
|
2
3
|
require 'json'
|
|
3
4
|
end
|
|
4
5
|
require 'ostruct'
|
|
5
6
|
|
|
6
|
-
# OpenStruct serialization/deserialization
|
|
7
7
|
class OpenStruct
|
|
8
8
|
|
|
9
9
|
# Deserializes JSON string by constructing new Struct object with values
|
|
10
|
-
# <tt>
|
|
10
|
+
# <tt>t</tt> serialized by <tt>to_json</tt>.
|
|
11
11
|
def self.json_create(object)
|
|
12
12
|
new(object['t'] || object[:t])
|
|
13
13
|
end
|
|
@@ -23,7 +23,7 @@ class OpenStruct
|
|
|
23
23
|
}
|
|
24
24
|
end
|
|
25
25
|
|
|
26
|
-
# Stores class name (OpenStruct) with this struct's values <tt>
|
|
26
|
+
# Stores class name (OpenStruct) with this struct's values <tt>t</tt> as a
|
|
27
27
|
# JSON string.
|
|
28
28
|
def to_json(*args)
|
|
29
29
|
as_json.to_json(*args)
|
data/lib/json/add/range.rb
CHANGED
data/lib/json/add/rational.rb
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
+
#frozen_string_literal: false
|
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
|
2
3
|
require 'json'
|
|
3
4
|
end
|
|
4
|
-
defined?(::Rational) or require 'rational'
|
|
5
5
|
|
|
6
6
|
class Rational
|
|
7
|
+
# Deserializes JSON string by converting numerator value <tt>n</tt>,
|
|
8
|
+
# denominator value <tt>d</tt>, to a Rational object.
|
|
7
9
|
def self.json_create(object)
|
|
8
10
|
Rational(object['n'], object['d'])
|
|
9
11
|
end
|
|
10
12
|
|
|
13
|
+
# Returns a hash, that will be turned into a JSON object and represent this
|
|
14
|
+
# object.
|
|
11
15
|
def as_json(*)
|
|
12
16
|
{
|
|
13
17
|
JSON.create_id => self.class.name,
|
|
@@ -16,7 +20,8 @@ class Rational
|
|
|
16
20
|
}
|
|
17
21
|
end
|
|
18
22
|
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
# Stores class name (Rational) along with numerator value <tt>n</tt> and denominator value <tt>d</tt> as JSON string
|
|
24
|
+
def to_json(*args)
|
|
25
|
+
as_json.to_json(*args)
|
|
21
26
|
end
|
|
22
27
|
end
|
data/lib/json/add/regexp.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
#frozen_string_literal: false
|
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
|
2
3
|
require 'json'
|
|
3
4
|
end
|
|
4
5
|
|
|
5
|
-
# Regexp serialization/deserialization
|
|
6
6
|
class Regexp
|
|
7
7
|
|
|
8
8
|
# Deserializes JSON string by constructing new Regexp object with source
|
|
@@ -24,7 +24,7 @@ class Regexp
|
|
|
24
24
|
|
|
25
25
|
# Stores class name (Regexp) with options <tt>o</tt> and source <tt>s</tt>
|
|
26
26
|
# (Regexp or String) as JSON string
|
|
27
|
-
def to_json(*)
|
|
28
|
-
as_json.to_json
|
|
27
|
+
def to_json(*args)
|
|
28
|
+
as_json.to_json(*args)
|
|
29
29
|
end
|
|
30
30
|
end
|
data/lib/json/add/set.rb
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
|
2
|
+
require 'json'
|
|
3
|
+
end
|
|
4
|
+
defined?(::Set) or require 'set'
|
|
5
|
+
|
|
6
|
+
class Set
|
|
7
|
+
# Import a JSON Marshalled object.
|
|
8
|
+
#
|
|
9
|
+
# method used for JSON marshalling support.
|
|
10
|
+
def self.json_create(object)
|
|
11
|
+
new object['a']
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# Marshal the object to JSON.
|
|
15
|
+
#
|
|
16
|
+
# method used for JSON marshalling support.
|
|
17
|
+
def as_json(*)
|
|
18
|
+
{
|
|
19
|
+
JSON.create_id => self.class.name,
|
|
20
|
+
'a' => to_a,
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# return the JSON value
|
|
25
|
+
def to_json(*args)
|
|
26
|
+
as_json.to_json(*args)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
data/lib/json/add/struct.rb
CHANGED
data/lib/json/add/symbol.rb
CHANGED
data/lib/json/add/time.rb
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
#frozen_string_literal: false
|
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
|
2
3
|
require 'json'
|
|
3
4
|
end
|
|
4
5
|
|
|
5
|
-
# Time serialization/deserialization
|
|
6
6
|
class Time
|
|
7
7
|
|
|
8
8
|
# Deserializes JSON string by converting time since epoch to Time
|
|
@@ -10,7 +10,7 @@ class Time
|
|
|
10
10
|
if usec = object.delete('u') # used to be tv_usec -> tv_nsec
|
|
11
11
|
object['n'] = usec * 1000
|
|
12
12
|
end
|
|
13
|
-
if
|
|
13
|
+
if method_defined?(:tv_nsec)
|
|
14
14
|
at(object['s'], Rational(object['n'], 1000))
|
|
15
15
|
else
|
|
16
16
|
at(object['s'], object['n'] / 1000)
|