json 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of json might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +23 -0
- data/CHANGES.md +391 -0
- data/Gemfile +14 -0
- data/README-json-jruby.md +33 -0
- data/README.md +409 -0
- data/Rakefile +408 -0
- data/VERSION +1 -0
- data/diagrams/.keep +0 -0
- data/ext/json/ext/fbuffer/fbuffer.h +187 -0
- data/ext/json/ext/generator/depend +1 -0
- data/ext/json/ext/generator/extconf.rb +4 -0
- data/ext/json/ext/generator/generator.c +1444 -0
- data/ext/json/ext/generator/generator.h +171 -0
- data/ext/json/ext/parser/depend +1 -0
- data/ext/json/ext/parser/extconf.rb +6 -0
- data/ext/json/ext/parser/parser.c +2131 -0
- data/ext/json/ext/parser/parser.h +91 -0
- data/ext/json/ext/parser/parser.rl +891 -0
- data/ext/json/extconf.rb +2 -0
- data/install.rb +23 -0
- data/java/src/json/ext/ByteListTranscoder.java +166 -0
- data/java/src/json/ext/Generator.java +443 -0
- data/java/src/json/ext/GeneratorMethods.java +231 -0
- data/java/src/json/ext/GeneratorService.java +42 -0
- data/java/src/json/ext/GeneratorState.java +490 -0
- data/java/src/json/ext/OptionsReader.java +113 -0
- data/java/src/json/ext/Parser.java +2362 -0
- data/java/src/json/ext/Parser.rl +893 -0
- data/java/src/json/ext/ParserService.java +34 -0
- data/java/src/json/ext/RuntimeInfo.java +116 -0
- data/java/src/json/ext/StringDecoder.java +166 -0
- data/java/src/json/ext/StringEncoder.java +111 -0
- data/java/src/json/ext/Utils.java +88 -0
- data/json-java.gemspec +38 -0
- data/json.gemspec +0 -0
- data/json_pure.gemspec +38 -0
- data/lib/json.rb +63 -0
- data/lib/json/add/bigdecimal.rb +29 -0
- data/lib/json/add/complex.rb +29 -0
- data/lib/json/add/core.rb +12 -0
- data/lib/json/add/date.rb +34 -0
- data/lib/json/add/date_time.rb +50 -0
- data/lib/json/add/exception.rb +31 -0
- data/lib/json/add/ostruct.rb +31 -0
- data/lib/json/add/range.rb +29 -0
- data/lib/json/add/rational.rb +28 -0
- data/lib/json/add/regexp.rb +30 -0
- data/lib/json/add/set.rb +29 -0
- data/lib/json/add/struct.rb +30 -0
- data/lib/json/add/symbol.rb +25 -0
- data/lib/json/add/time.rb +38 -0
- data/lib/json/common.rb +456 -0
- data/lib/json/ext.rb +15 -0
- data/lib/json/ext/.keep +0 -0
- data/lib/json/generic_object.rb +71 -0
- data/lib/json/pure.rb +15 -0
- data/lib/json/pure/generator.rb +458 -0
- data/lib/json/pure/parser.rb +311 -0
- data/lib/json/version.rb +9 -0
- data/references/rfc7159.txt +899 -0
- data/tests/fixtures/fail10.json +1 -0
- data/tests/fixtures/fail11.json +1 -0
- data/tests/fixtures/fail12.json +1 -0
- data/tests/fixtures/fail13.json +1 -0
- data/tests/fixtures/fail14.json +1 -0
- data/tests/fixtures/fail18.json +1 -0
- data/tests/fixtures/fail19.json +1 -0
- data/tests/fixtures/fail2.json +1 -0
- data/tests/fixtures/fail20.json +1 -0
- data/tests/fixtures/fail21.json +1 -0
- data/tests/fixtures/fail22.json +1 -0
- data/tests/fixtures/fail23.json +1 -0
- data/tests/fixtures/fail24.json +1 -0
- data/tests/fixtures/fail25.json +1 -0
- data/tests/fixtures/fail27.json +2 -0
- data/tests/fixtures/fail28.json +2 -0
- data/tests/fixtures/fail3.json +1 -0
- data/tests/fixtures/fail4.json +1 -0
- data/tests/fixtures/fail5.json +1 -0
- data/tests/fixtures/fail6.json +1 -0
- data/tests/fixtures/fail7.json +1 -0
- data/tests/fixtures/fail8.json +1 -0
- data/tests/fixtures/fail9.json +1 -0
- data/tests/fixtures/obsolete_fail1.json +1 -0
- data/tests/fixtures/pass1.json +56 -0
- data/tests/fixtures/pass15.json +1 -0
- data/tests/fixtures/pass16.json +1 -0
- data/tests/fixtures/pass17.json +1 -0
- data/tests/fixtures/pass2.json +1 -0
- data/tests/fixtures/pass26.json +1 -0
- data/tests/fixtures/pass3.json +6 -0
- data/tests/json_addition_test.rb +203 -0
- data/tests/json_common_interface_test.rb +126 -0
- data/tests/json_encoding_test.rb +107 -0
- data/tests/json_ext_parser_test.rb +15 -0
- data/tests/json_fixtures_test.rb +32 -0
- data/tests/json_generator_test.rb +377 -0
- data/tests/json_generic_object_test.rb +82 -0
- data/tests/json_parser_test.rb +472 -0
- data/tests/json_string_matching_test.rb +38 -0
- data/tests/test_helper.rb +17 -0
- data/tools/diff.sh +18 -0
- data/tools/fuzz.rb +131 -0
- data/tools/server.rb +62 -0
- metadata +185 -0
data/json-java.gemspec
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env jruby
|
2
|
+
require "rubygems"
|
3
|
+
|
4
|
+
spec = Gem::Specification.new do |s|
|
5
|
+
s.name = "json"
|
6
|
+
s.version = File.read("VERSION").chomp
|
7
|
+
s.summary = "JSON implementation for JRuby"
|
8
|
+
s.description = "A JSON implementation as a JRuby extension."
|
9
|
+
s.author = "Daniel Luz"
|
10
|
+
s.email = "dev+ruby@mernen.com"
|
11
|
+
s.homepage = "http://json-jruby.rubyforge.org/"
|
12
|
+
s.platform = 'java'
|
13
|
+
s.rubyforge_project = "json-jruby"
|
14
|
+
s.licenses = ["Ruby"]
|
15
|
+
|
16
|
+
s.files = Dir["{docs,lib,tests}/**/*"]
|
17
|
+
|
18
|
+
if s.respond_to? :specification_version then
|
19
|
+
s.specification_version = 4
|
20
|
+
|
21
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
22
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
23
|
+
s.add_development_dependency(%q<test-unit>, ["~> 2.0"])
|
24
|
+
else
|
25
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
26
|
+
s.add_dependency(%q<test-unit>, ["~> 2.0"])
|
27
|
+
end
|
28
|
+
else
|
29
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
30
|
+
s.add_dependency(%q<test-unit>, ["~> 2.0"])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
if $0 == __FILE__
|
35
|
+
Gem::Builder.new(spec).build
|
36
|
+
else
|
37
|
+
spec
|
38
|
+
end
|
data/json.gemspec
ADDED
Binary file
|
data/json_pure.gemspec
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# stub: json_pure 2.2.0 ruby lib
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "json_pure".freeze
|
6
|
+
s.version = "2.2.0"
|
7
|
+
|
8
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
|
+
s.require_paths = ["lib".freeze]
|
10
|
+
s.authors = ["Florian Frank".freeze]
|
11
|
+
s.date = "2019-02-21"
|
12
|
+
s.description = "This is a JSON implementation in pure Ruby.".freeze
|
13
|
+
s.email = "flori@ping.de".freeze
|
14
|
+
s.extra_rdoc_files = ["README.md".freeze]
|
15
|
+
s.files = ["./tests/test_helper.rb".freeze, ".gitignore".freeze, ".travis.yml".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "README-json-jruby.md".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "data/example.json".freeze, "data/index.html".freeze, "data/prototype.js".freeze, "diagrams/.keep".freeze, "ext/json/ext/fbuffer/fbuffer.h".freeze, "ext/json/ext/generator/depend".freeze, "ext/json/ext/generator/extconf.rb".freeze, "ext/json/ext/generator/generator.c".freeze, "ext/json/ext/generator/generator.h".freeze, "ext/json/ext/parser/depend".freeze, "ext/json/ext/parser/extconf.rb".freeze, "ext/json/ext/parser/parser.c".freeze, "ext/json/ext/parser/parser.h".freeze, "ext/json/ext/parser/parser.rl".freeze, "ext/json/extconf.rb".freeze, "install.rb".freeze, "java/src/json/ext/ByteListTranscoder.java".freeze, "java/src/json/ext/Generator.java".freeze, "java/src/json/ext/GeneratorMethods.java".freeze, "java/src/json/ext/GeneratorService.java".freeze, "java/src/json/ext/GeneratorState.java".freeze, "java/src/json/ext/OptionsReader.java".freeze, "java/src/json/ext/Parser.java".freeze, "java/src/json/ext/Parser.rl".freeze, "java/src/json/ext/ParserService.java".freeze, "java/src/json/ext/RuntimeInfo.java".freeze, "java/src/json/ext/StringDecoder.java".freeze, "java/src/json/ext/StringEncoder.java".freeze, "java/src/json/ext/Utils.java".freeze, "json-java.gemspec".freeze, "json.gemspec".freeze, "json_pure.gemspec".freeze, "lib/json.rb".freeze, "lib/json/add/bigdecimal.rb".freeze, "lib/json/add/complex.rb".freeze, "lib/json/add/core.rb".freeze, "lib/json/add/date.rb".freeze, "lib/json/add/date_time.rb".freeze, "lib/json/add/exception.rb".freeze, "lib/json/add/ostruct.rb".freeze, "lib/json/add/range.rb".freeze, "lib/json/add/rational.rb".freeze, "lib/json/add/regexp.rb".freeze, "lib/json/add/set.rb".freeze, "lib/json/add/struct.rb".freeze, "lib/json/add/symbol.rb".freeze, "lib/json/add/time.rb".freeze, "lib/json/common.rb".freeze, "lib/json/ext.rb".freeze, "lib/json/ext/.keep".freeze, "lib/json/generic_object.rb".freeze, "lib/json/pure.rb".freeze, "lib/json/pure/generator.rb".freeze, "lib/json/pure/parser.rb".freeze, "lib/json/version.rb".freeze, "references/rfc7159.txt".freeze, "tests/fixtures/fail10.json".freeze, "tests/fixtures/fail11.json".freeze, "tests/fixtures/fail12.json".freeze, "tests/fixtures/fail13.json".freeze, "tests/fixtures/fail14.json".freeze, "tests/fixtures/fail18.json".freeze, "tests/fixtures/fail19.json".freeze, "tests/fixtures/fail2.json".freeze, "tests/fixtures/fail20.json".freeze, "tests/fixtures/fail21.json".freeze, "tests/fixtures/fail22.json".freeze, "tests/fixtures/fail23.json".freeze, "tests/fixtures/fail24.json".freeze, "tests/fixtures/fail25.json".freeze, "tests/fixtures/fail27.json".freeze, "tests/fixtures/fail28.json".freeze, "tests/fixtures/fail3.json".freeze, "tests/fixtures/fail4.json".freeze, "tests/fixtures/fail5.json".freeze, "tests/fixtures/fail6.json".freeze, "tests/fixtures/fail7.json".freeze, "tests/fixtures/fail8.json".freeze, "tests/fixtures/fail9.json".freeze, "tests/fixtures/obsolete_fail1.json".freeze, "tests/fixtures/pass1.json".freeze, "tests/fixtures/pass15.json".freeze, "tests/fixtures/pass16.json".freeze, "tests/fixtures/pass17.json".freeze, "tests/fixtures/pass2.json".freeze, "tests/fixtures/pass26.json".freeze, "tests/fixtures/pass3.json".freeze, "tests/json_addition_test.rb".freeze, "tests/json_common_interface_test.rb".freeze, "tests/json_encoding_test.rb".freeze, "tests/json_ext_parser_test.rb".freeze, "tests/json_fixtures_test.rb".freeze, "tests/json_generator_test.rb".freeze, "tests/json_generic_object_test.rb".freeze, "tests/json_parser_test.rb".freeze, "tests/json_string_matching_test.rb".freeze, "tests/test_helper.rb".freeze, "tools/diff.sh".freeze, "tools/fuzz.rb".freeze, "tools/server.rb".freeze]
|
16
|
+
s.homepage = "http://flori.github.com/json".freeze
|
17
|
+
s.licenses = ["Ruby".freeze]
|
18
|
+
s.rdoc_options = ["--title".freeze, "JSON implemention for ruby".freeze, "--main".freeze, "README.md".freeze]
|
19
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.9".freeze)
|
20
|
+
s.rubygems_version = "2.7.6".freeze
|
21
|
+
s.summary = "JSON Implementation for Ruby".freeze
|
22
|
+
s.test_files = ["./tests/test_helper.rb".freeze]
|
23
|
+
|
24
|
+
if s.respond_to? :specification_version then
|
25
|
+
s.specification_version = 4
|
26
|
+
|
27
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
28
|
+
s.add_development_dependency(%q<rake>.freeze, [">= 0"])
|
29
|
+
s.add_development_dependency(%q<test-unit>.freeze, ["~> 2.0"])
|
30
|
+
else
|
31
|
+
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
32
|
+
s.add_dependency(%q<test-unit>.freeze, ["~> 2.0"])
|
33
|
+
end
|
34
|
+
else
|
35
|
+
s.add_dependency(%q<rake>.freeze, [">= 0"])
|
36
|
+
s.add_dependency(%q<test-unit>.freeze, ["~> 2.0"])
|
37
|
+
end
|
38
|
+
end
|
data/lib/json.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
require 'json/common'
|
3
|
+
|
4
|
+
##
|
5
|
+
# = JavaScript Object Notation (JSON)
|
6
|
+
#
|
7
|
+
# JSON is a lightweight data-interchange format. It is easy for us
|
8
|
+
# humans to read and write. Plus, equally simple for machines to generate or parse.
|
9
|
+
# JSON is completely language agnostic, making it the ideal interchange format.
|
10
|
+
#
|
11
|
+
# Built on two universally available structures:
|
12
|
+
# 1. A collection of name/value pairs. Often referred to as an _object_, hash table, record, struct, keyed list, or associative array.
|
13
|
+
# 2. An ordered list of values. More commonly called an _array_, vector, sequence or list.
|
14
|
+
#
|
15
|
+
# To read more about JSON visit: http://json.org
|
16
|
+
#
|
17
|
+
# == Parsing JSON
|
18
|
+
#
|
19
|
+
# To parse a JSON string received by another application or generated within
|
20
|
+
# your existing application:
|
21
|
+
#
|
22
|
+
# require 'json'
|
23
|
+
#
|
24
|
+
# my_hash = JSON.parse('{"hello": "goodbye"}')
|
25
|
+
# puts my_hash["hello"] => "goodbye"
|
26
|
+
#
|
27
|
+
# Notice the extra quotes <tt>''</tt> around the hash notation. Ruby expects
|
28
|
+
# the argument to be a string and can't convert objects like a hash or array.
|
29
|
+
#
|
30
|
+
# Ruby converts your string into a hash
|
31
|
+
#
|
32
|
+
# == Generating JSON
|
33
|
+
#
|
34
|
+
# Creating a JSON string for communication or serialization is
|
35
|
+
# just as simple.
|
36
|
+
#
|
37
|
+
# require 'json'
|
38
|
+
#
|
39
|
+
# my_hash = {:hello => "goodbye"}
|
40
|
+
# puts JSON.generate(my_hash) => "{\"hello\":\"goodbye\"}"
|
41
|
+
#
|
42
|
+
# Or an alternative way:
|
43
|
+
#
|
44
|
+
# require 'json'
|
45
|
+
# puts {:hello => "goodbye"}.to_json => "{\"hello\":\"goodbye\"}"
|
46
|
+
#
|
47
|
+
# <tt>JSON.generate</tt> only allows objects or arrays to be converted
|
48
|
+
# to JSON syntax. <tt>to_json</tt>, however, accepts many Ruby classes
|
49
|
+
# even though it acts only as a method for serialization:
|
50
|
+
#
|
51
|
+
# require 'json'
|
52
|
+
#
|
53
|
+
# 1.to_json => "1"
|
54
|
+
#
|
55
|
+
module JSON
|
56
|
+
require 'json/version'
|
57
|
+
|
58
|
+
begin
|
59
|
+
require 'json/ext'
|
60
|
+
rescue LoadError
|
61
|
+
require 'json/pure'
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
3
|
+
require 'json'
|
4
|
+
end
|
5
|
+
defined?(::BigDecimal) or require 'bigdecimal'
|
6
|
+
|
7
|
+
class BigDecimal
|
8
|
+
# Import a JSON Marshalled object.
|
9
|
+
#
|
10
|
+
# method used for JSON marshalling support.
|
11
|
+
def self.json_create(object)
|
12
|
+
BigDecimal._load object['b']
|
13
|
+
end
|
14
|
+
|
15
|
+
# Marshal the object to JSON.
|
16
|
+
#
|
17
|
+
# method used for JSON marshalling support.
|
18
|
+
def as_json(*)
|
19
|
+
{
|
20
|
+
JSON.create_id => self.class.name,
|
21
|
+
'b' => _dump,
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
# return the JSON value
|
26
|
+
def to_json(*)
|
27
|
+
as_json.to_json
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
3
|
+
require 'json'
|
4
|
+
end
|
5
|
+
defined?(::Complex) or require 'complex'
|
6
|
+
|
7
|
+
class Complex
|
8
|
+
|
9
|
+
# Deserializes JSON string by converting Real value <tt>r</tt>, imaginary
|
10
|
+
# value <tt>i</tt>, to a Complex object.
|
11
|
+
def self.json_create(object)
|
12
|
+
Complex(object['r'], object['i'])
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns a hash, that will be turned into a JSON object and represent this
|
16
|
+
# object.
|
17
|
+
def as_json(*)
|
18
|
+
{
|
19
|
+
JSON.create_id => self.class.name,
|
20
|
+
'r' => real,
|
21
|
+
'i' => imag,
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
# Stores class name (Complex) along with real value <tt>r</tt> and imaginary value <tt>i</tt> as JSON string
|
26
|
+
def to_json(*)
|
27
|
+
as_json.to_json
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
# This file requires the implementations of ruby core's custom objects for
|
3
|
+
# serialisation/deserialisation.
|
4
|
+
|
5
|
+
require 'json/add/date'
|
6
|
+
require 'json/add/date_time'
|
7
|
+
require 'json/add/exception'
|
8
|
+
require 'json/add/range'
|
9
|
+
require 'json/add/regexp'
|
10
|
+
require 'json/add/struct'
|
11
|
+
require 'json/add/symbol'
|
12
|
+
require 'json/add/time'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
3
|
+
require 'json'
|
4
|
+
end
|
5
|
+
require 'date'
|
6
|
+
|
7
|
+
class Date
|
8
|
+
|
9
|
+
# Deserializes JSON string by converting Julian year <tt>y</tt>, month
|
10
|
+
# <tt>m</tt>, day <tt>d</tt> and Day of Calendar Reform <tt>sg</tt> to Date.
|
11
|
+
def self.json_create(object)
|
12
|
+
civil(*object.values_at('y', 'm', 'd', 'sg'))
|
13
|
+
end
|
14
|
+
|
15
|
+
alias start sg unless method_defined?(:start)
|
16
|
+
|
17
|
+
# Returns a hash, that will be turned into a JSON object and represent this
|
18
|
+
# object.
|
19
|
+
def as_json(*)
|
20
|
+
{
|
21
|
+
JSON.create_id => self.class.name,
|
22
|
+
'y' => year,
|
23
|
+
'm' => month,
|
24
|
+
'd' => day,
|
25
|
+
'sg' => start,
|
26
|
+
}
|
27
|
+
end
|
28
|
+
|
29
|
+
# Stores class name (Date) with Julian year <tt>y</tt>, month <tt>m</tt>, day
|
30
|
+
# <tt>d</tt> and Day of Calendar Reform <tt>sg</tt> as JSON string
|
31
|
+
def to_json(*args)
|
32
|
+
as_json.to_json(*args)
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
3
|
+
require 'json'
|
4
|
+
end
|
5
|
+
require 'date'
|
6
|
+
|
7
|
+
class DateTime
|
8
|
+
|
9
|
+
# Deserializes JSON string by converting year <tt>y</tt>, month <tt>m</tt>,
|
10
|
+
# day <tt>d</tt>, hour <tt>H</tt>, minute <tt>M</tt>, second <tt>S</tt>,
|
11
|
+
# offset <tt>of</tt> and Day of Calendar Reform <tt>sg</tt> to DateTime.
|
12
|
+
def self.json_create(object)
|
13
|
+
args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
|
14
|
+
of_a, of_b = object['of'].split('/')
|
15
|
+
if of_b and of_b != '0'
|
16
|
+
args << Rational(of_a.to_i, of_b.to_i)
|
17
|
+
else
|
18
|
+
args << of_a
|
19
|
+
end
|
20
|
+
args << object['sg']
|
21
|
+
civil(*args)
|
22
|
+
end
|
23
|
+
|
24
|
+
alias start sg unless method_defined?(:start)
|
25
|
+
|
26
|
+
# Returns a hash, that will be turned into a JSON object and represent this
|
27
|
+
# object.
|
28
|
+
def as_json(*)
|
29
|
+
{
|
30
|
+
JSON.create_id => self.class.name,
|
31
|
+
'y' => year,
|
32
|
+
'm' => month,
|
33
|
+
'd' => day,
|
34
|
+
'H' => hour,
|
35
|
+
'M' => min,
|
36
|
+
'S' => sec,
|
37
|
+
'of' => offset.to_s,
|
38
|
+
'sg' => start,
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
# Stores class name (DateTime) with Julian year <tt>y</tt>, month <tt>m</tt>,
|
43
|
+
# day <tt>d</tt>, hour <tt>H</tt>, minute <tt>M</tt>, second <tt>S</tt>,
|
44
|
+
# offset <tt>of</tt> and Day of Calendar Reform <tt>sg</tt> as JSON string
|
45
|
+
def to_json(*args)
|
46
|
+
as_json.to_json(*args)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
3
|
+
require 'json'
|
4
|
+
end
|
5
|
+
|
6
|
+
class Exception
|
7
|
+
|
8
|
+
# Deserializes JSON string by constructing new Exception object with message
|
9
|
+
# <tt>m</tt> and backtrace <tt>b</tt> serialized with <tt>to_json</tt>
|
10
|
+
def self.json_create(object)
|
11
|
+
result = new(object['m'])
|
12
|
+
result.set_backtrace object['b']
|
13
|
+
result
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns a hash, that will be turned into a JSON object and represent this
|
17
|
+
# object.
|
18
|
+
def as_json(*)
|
19
|
+
{
|
20
|
+
JSON.create_id => self.class.name,
|
21
|
+
'm' => message,
|
22
|
+
'b' => backtrace,
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
# Stores class name (Exception) with message <tt>m</tt> and backtrace array
|
27
|
+
# <tt>b</tt> as JSON string
|
28
|
+
def to_json(*args)
|
29
|
+
as_json.to_json(*args)
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
3
|
+
require 'json'
|
4
|
+
end
|
5
|
+
require 'ostruct'
|
6
|
+
|
7
|
+
class OpenStruct
|
8
|
+
|
9
|
+
# Deserializes JSON string by constructing new Struct object with values
|
10
|
+
# <tt>t</tt> serialized by <tt>to_json</tt>.
|
11
|
+
def self.json_create(object)
|
12
|
+
new(object['t'] || object[:t])
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns a hash, that will be turned into a JSON object and represent this
|
16
|
+
# object.
|
17
|
+
def as_json(*)
|
18
|
+
klass = self.class.name
|
19
|
+
klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
|
20
|
+
{
|
21
|
+
JSON.create_id => klass,
|
22
|
+
't' => table,
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
# Stores class name (OpenStruct) with this struct's values <tt>t</tt> as a
|
27
|
+
# JSON string.
|
28
|
+
def to_json(*args)
|
29
|
+
as_json.to_json(*args)
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
3
|
+
require 'json'
|
4
|
+
end
|
5
|
+
|
6
|
+
class Range
|
7
|
+
|
8
|
+
# Deserializes JSON string by constructing new Range object with arguments
|
9
|
+
# <tt>a</tt> serialized by <tt>to_json</tt>.
|
10
|
+
def self.json_create(object)
|
11
|
+
new(*object['a'])
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns a hash, that will be turned into a JSON object and represent this
|
15
|
+
# object.
|
16
|
+
def as_json(*)
|
17
|
+
{
|
18
|
+
JSON.create_id => self.class.name,
|
19
|
+
'a' => [ first, last, exclude_end? ]
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
# Stores class name (Range) with JSON array of arguments <tt>a</tt> which
|
24
|
+
# include <tt>first</tt> (integer), <tt>last</tt> (integer), and
|
25
|
+
# <tt>exclude_end?</tt> (boolean) as JSON string.
|
26
|
+
def to_json(*args)
|
27
|
+
as_json.to_json(*args)
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
3
|
+
require 'json'
|
4
|
+
end
|
5
|
+
defined?(::Rational) or require 'rational'
|
6
|
+
|
7
|
+
class Rational
|
8
|
+
# Deserializes JSON string by converting numerator value <tt>n</tt>,
|
9
|
+
# denominator value <tt>d</tt>, to a Rational object.
|
10
|
+
def self.json_create(object)
|
11
|
+
Rational(object['n'], object['d'])
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns a hash, that will be turned into a JSON object and represent this
|
15
|
+
# object.
|
16
|
+
def as_json(*)
|
17
|
+
{
|
18
|
+
JSON.create_id => self.class.name,
|
19
|
+
'n' => numerator,
|
20
|
+
'd' => denominator,
|
21
|
+
}
|
22
|
+
end
|
23
|
+
|
24
|
+
# Stores class name (Rational) along with numerator value <tt>n</tt> and denominator value <tt>d</tt> as JSON string
|
25
|
+
def to_json(*)
|
26
|
+
as_json.to_json
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
#frozen_string_literal: false
|
2
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
3
|
+
require 'json'
|
4
|
+
end
|
5
|
+
|
6
|
+
class Regexp
|
7
|
+
|
8
|
+
# Deserializes JSON string by constructing new Regexp object with source
|
9
|
+
# <tt>s</tt> (Regexp or String) and options <tt>o</tt> serialized by
|
10
|
+
# <tt>to_json</tt>
|
11
|
+
def self.json_create(object)
|
12
|
+
new(object['s'], object['o'])
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns a hash, that will be turned into a JSON object and represent this
|
16
|
+
# object.
|
17
|
+
def as_json(*)
|
18
|
+
{
|
19
|
+
JSON.create_id => self.class.name,
|
20
|
+
'o' => options,
|
21
|
+
's' => source,
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
# Stores class name (Regexp) with options <tt>o</tt> and source <tt>s</tt>
|
26
|
+
# (Regexp or String) as JSON string
|
27
|
+
def to_json(*)
|
28
|
+
as_json.to_json
|
29
|
+
end
|
30
|
+
end
|