json_pure 1.5.5 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +3 -7
- data/Gemfile +0 -4
- data/Rakefile +0 -7
- data/VERSION +1 -1
- data/ext/json/ext/parser/parser.c +18 -18
- data/ext/json/ext/parser/parser.rl +1 -4
- data/install.rb +1 -8
- data/java/src/json/ext/Parser.java +85 -81
- data/java/src/json/ext/Parser.rl +1 -1
- data/json.gemspec +5 -6
- data/json_pure.gemspec +4 -8
- data/lib/json/add/core.rb +9 -244
- 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/range.rb +29 -0
- data/lib/json/add/regexp.rb +30 -0
- data/lib/json/add/struct.rb +30 -0
- data/lib/json/add/symbol.rb +25 -0
- data/lib/json/add/time.rb +35 -0
- data/lib/json/common.rb +5 -12
- data/lib/json/pure/parser.rb +4 -4
- data/lib/json/version.rb +1 -1
- data/tests/test_json.rb +2 -22
- data/tests/test_json_addition.rb +21 -29
- data/tests/test_json_string_matching.rb +6 -5
- data/tools/server.rb +1 -0
- metadata +125 -174
- data/0001-Security-fix-create_additons-JSON-GenericObject.patch +0 -448
- data/0001-Security-fix-create_additons-problem-1.5.5.patch +0 -630
- data/0001-Security-fix-for-create_additions-problem-1.6.8.patch +0 -685
- data/Gemfile.lock +0 -60
- data/bin/edit_json.rb +0 -9
- data/bin/prettify_json.rb +0 -48
- data/lib/json/Array.xpm +0 -21
- data/lib/json/FalseClass.xpm +0 -21
- data/lib/json/Hash.xpm +0 -21
- data/lib/json/Key.xpm +0 -73
- data/lib/json/NilClass.xpm +0 -21
- data/lib/json/Numeric.xpm +0 -28
- data/lib/json/String.xpm +0 -96
- data/lib/json/TrueClass.xpm +0 -21
- data/lib/json/editor.rb +0 -1369
- data/lib/json/json.xpm +0 -1499
data/java/src/json/ext/Parser.rl
CHANGED
@@ -162,7 +162,7 @@ public class Parser extends RubyObject {
|
|
162
162
|
this.symbolizeNames = opts.getBool("symbolize_names", false);
|
163
163
|
this.quirksMode = opts.getBool("quirks_mode", false);
|
164
164
|
this.createId = opts.getString("create_id", getCreateId(context));
|
165
|
-
this.createAdditions = opts.getBool("create_additions",
|
165
|
+
this.createAdditions = opts.getBool("create_additions", true);
|
166
166
|
this.objectClass = opts.getClass("object_class", runtime.getHash());
|
167
167
|
this.arrayClass = opts.getClass("array_class", runtime.getArray());
|
168
168
|
this.match_string = opts.getHash("match_string");
|
data/json.gemspec
CHANGED
@@ -2,22 +2,21 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "json"
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.6.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Florian Frank"]
|
9
|
-
s.date = "
|
9
|
+
s.date = "2011-09-12"
|
10
10
|
s.description = "This is a JSON implementation as a Ruby extension in C."
|
11
11
|
s.email = "flori@ping.de"
|
12
|
-
s.
|
13
|
-
s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb"]
|
12
|
+
s.extensions = ["ext/json/ext/parser/extconf.rb", "ext/json/ext/generator/extconf.rb"]
|
14
13
|
s.extra_rdoc_files = ["README.rdoc"]
|
15
|
-
s.files = ["
|
14
|
+
s.files = ["tests", "tests/test_json_string_matching.rb", "tests/test_json_fixtures.rb", "tests/setup_variant.rb", "tests/fixtures", "tests/fixtures/fail6.json", "tests/fixtures/fail9.json", "tests/fixtures/fail10.json", "tests/fixtures/fail24.json", "tests/fixtures/fail28.json", "tests/fixtures/fail13.json", "tests/fixtures/fail4.json", "tests/fixtures/pass3.json", "tests/fixtures/fail11.json", "tests/fixtures/fail14.json", "tests/fixtures/fail3.json", "tests/fixtures/fail12.json", "tests/fixtures/pass16.json", "tests/fixtures/pass15.json", "tests/fixtures/fail20.json", "tests/fixtures/fail8.json", "tests/fixtures/pass2.json", "tests/fixtures/fail5.json", "tests/fixtures/fail1.json", "tests/fixtures/fail25.json", "tests/fixtures/pass17.json", "tests/fixtures/fail7.json", "tests/fixtures/pass26.json", "tests/fixtures/fail21.json", "tests/fixtures/pass1.json", "tests/fixtures/fail23.json", "tests/fixtures/fail18.json", "tests/fixtures/fail2.json", "tests/fixtures/fail22.json", "tests/fixtures/fail27.json", "tests/fixtures/fail19.json", "tests/test_json_unicode.rb", "tests/test_json_addition.rb", "tests/test_json_generate.rb", "tests/test_json_encoding.rb", "tests/test_json.rb", "COPYING", "TODO", "Rakefile", "benchmarks", "benchmarks/data-p4-3GHz-ruby18", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat", "benchmarks/parser2_benchmark.rb", "benchmarks/parser_benchmark.rb", "benchmarks/generator2_benchmark.rb", "benchmarks/generator_benchmark.rb", "benchmarks/ohai.ruby", "benchmarks/data", "benchmarks/ohai.json", "lib", "lib/json", "lib/json/version.rb", "lib/json/add", "lib/json/add/symbol.rb", "lib/json/add/struct.rb", "lib/json/add/complex.rb", "lib/json/add/rational.rb", "lib/json/add/exception.rb", "lib/json/add/time.rb", "lib/json/add/date_time.rb", "lib/json/add/core.rb", "lib/json/add/range.rb", "lib/json/add/date.rb", "lib/json/add/regexp.rb", "lib/json/common.rb", "lib/json/pure", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/ext.rb", "lib/json/pure.rb", "lib/json/ext", "lib/json.rb", "Gemfile", "README.rdoc", "json_pure.gemspec", "GPL", "CHANGES", "COPYING-json-jruby", "ext", "ext/json", "ext/json/ext", "ext/json/ext/parser", "ext/json/ext/parser/parser.h", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/parser.rl", "ext/json/ext/parser/parser.c", "ext/json/ext/generator", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.h", "VERSION", "data", "data/prototype.js", "data/index.html", "data/example.json", "json.gemspec", "java", "java/src", "java/src/json", "java/src/json/ext", "java/src/json/ext/Parser.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/ParserService.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/Utils.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/GeneratorMethods.java", "java/lib", "java/lib/bytelist-1.0.6.jar", "java/lib/jcodings.jar", "diagrams", "README-json-jruby.markdown", "install.rb", "json-java.gemspec", "tools", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json.rb"]
|
16
15
|
s.homepage = "http://flori.github.com/json"
|
17
16
|
s.rdoc_options = ["--title", "JSON implemention for Ruby", "--main", "README.rdoc"]
|
18
17
|
s.require_paths = ["ext/json/ext", "ext", "lib"]
|
19
18
|
s.rubyforge_project = "json"
|
20
|
-
s.rubygems_version = "1.8.
|
19
|
+
s.rubygems_version = "1.8.10"
|
21
20
|
s.summary = "JSON Implementation for Ruby"
|
22
21
|
s.test_files = ["./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json.rb"]
|
23
22
|
|
data/json_pure.gemspec
CHANGED
@@ -2,21 +2,20 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "json_pure"
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.6.0"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Florian Frank"]
|
9
|
-
s.date = "
|
9
|
+
s.date = "2011-09-12"
|
10
10
|
s.description = "This is a JSON implementation in pure Ruby."
|
11
11
|
s.email = "flori@ping.de"
|
12
|
-
s.executables = ["edit_json.rb", "prettify_json.rb"]
|
13
12
|
s.extra_rdoc_files = ["README.rdoc"]
|
14
|
-
s.files = ["
|
13
|
+
s.files = ["tests", "tests/test_json_string_matching.rb", "tests/test_json_fixtures.rb", "tests/setup_variant.rb", "tests/fixtures", "tests/fixtures/fail6.json", "tests/fixtures/fail9.json", "tests/fixtures/fail10.json", "tests/fixtures/fail24.json", "tests/fixtures/fail28.json", "tests/fixtures/fail13.json", "tests/fixtures/fail4.json", "tests/fixtures/pass3.json", "tests/fixtures/fail11.json", "tests/fixtures/fail14.json", "tests/fixtures/fail3.json", "tests/fixtures/fail12.json", "tests/fixtures/pass16.json", "tests/fixtures/pass15.json", "tests/fixtures/fail20.json", "tests/fixtures/fail8.json", "tests/fixtures/pass2.json", "tests/fixtures/fail5.json", "tests/fixtures/fail1.json", "tests/fixtures/fail25.json", "tests/fixtures/pass17.json", "tests/fixtures/fail7.json", "tests/fixtures/pass26.json", "tests/fixtures/fail21.json", "tests/fixtures/pass1.json", "tests/fixtures/fail23.json", "tests/fixtures/fail18.json", "tests/fixtures/fail2.json", "tests/fixtures/fail22.json", "tests/fixtures/fail27.json", "tests/fixtures/fail19.json", "tests/test_json_unicode.rb", "tests/test_json_addition.rb", "tests/test_json_generate.rb", "tests/test_json_encoding.rb", "tests/test_json.rb", "COPYING", "TODO", "Rakefile", "benchmarks", "benchmarks/data-p4-3GHz-ruby18", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat", "benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat", "benchmarks/parser2_benchmark.rb", "benchmarks/parser_benchmark.rb", "benchmarks/generator2_benchmark.rb", "benchmarks/generator_benchmark.rb", "benchmarks/ohai.ruby", "benchmarks/data", "benchmarks/ohai.json", "lib", "lib/json", "lib/json/version.rb", "lib/json/add", "lib/json/add/symbol.rb", "lib/json/add/struct.rb", "lib/json/add/complex.rb", "lib/json/add/rational.rb", "lib/json/add/exception.rb", "lib/json/add/time.rb", "lib/json/add/date_time.rb", "lib/json/add/core.rb", "lib/json/add/range.rb", "lib/json/add/date.rb", "lib/json/add/regexp.rb", "lib/json/common.rb", "lib/json/pure", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/ext.rb", "lib/json/pure.rb", "lib/json/ext", "lib/json.rb", "Gemfile", "README.rdoc", "json_pure.gemspec", "GPL", "CHANGES", "COPYING-json-jruby", "ext", "ext/json", "ext/json/ext", "ext/json/ext/parser", "ext/json/ext/parser/parser.h", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/parser.rl", "ext/json/ext/parser/parser.c", "ext/json/ext/generator", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.h", "VERSION", "data", "data/prototype.js", "data/index.html", "data/example.json", "json.gemspec", "java", "java/src", "java/src/json", "java/src/json/ext", "java/src/json/ext/Parser.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/ParserService.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/Utils.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/GeneratorMethods.java", "java/lib", "java/lib/bytelist-1.0.6.jar", "java/lib/jcodings.jar", "diagrams", "README-json-jruby.markdown", "install.rb", "json-java.gemspec", "tools", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json.rb"]
|
15
14
|
s.homepage = "http://flori.github.com/json"
|
16
15
|
s.rdoc_options = ["--title", "JSON implemention for ruby", "--main", "README.rdoc"]
|
17
16
|
s.require_paths = ["lib"]
|
18
17
|
s.rubyforge_project = "json"
|
19
|
-
s.rubygems_version = "1.8.
|
18
|
+
s.rubygems_version = "1.8.10"
|
20
19
|
s.summary = "JSON Implementation for Ruby"
|
21
20
|
s.test_files = ["./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json.rb"]
|
22
21
|
|
@@ -28,19 +27,16 @@ Gem::Specification.new do |s|
|
|
28
27
|
s.add_development_dependency(%q<bullshit>, [">= 0"])
|
29
28
|
s.add_development_dependency(%q<sdoc>, [">= 0"])
|
30
29
|
s.add_development_dependency(%q<rake>, ["~> 0.9.2"])
|
31
|
-
s.add_runtime_dependency(%q<spruz>, ["~> 0.2.8"])
|
32
30
|
else
|
33
31
|
s.add_dependency(%q<permutation>, [">= 0"])
|
34
32
|
s.add_dependency(%q<bullshit>, [">= 0"])
|
35
33
|
s.add_dependency(%q<sdoc>, [">= 0"])
|
36
34
|
s.add_dependency(%q<rake>, ["~> 0.9.2"])
|
37
|
-
s.add_dependency(%q<spruz>, ["~> 0.2.8"])
|
38
35
|
end
|
39
36
|
else
|
40
37
|
s.add_dependency(%q<permutation>, [">= 0"])
|
41
38
|
s.add_dependency(%q<bullshit>, [">= 0"])
|
42
39
|
s.add_dependency(%q<sdoc>, [">= 0"])
|
43
40
|
s.add_dependency(%q<rake>, ["~> 0.9.2"])
|
44
|
-
s.add_dependency(%q<spruz>, ["~> 0.2.8"])
|
45
41
|
end
|
46
42
|
end
|
data/lib/json/add/core.rb
CHANGED
@@ -1,246 +1,11 @@
|
|
1
|
-
# This file
|
1
|
+
# This file requires the implementations of ruby core's custom objects for
|
2
2
|
# serialisation/deserialisation.
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
require '
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
# object.
|
13
|
-
def as_json(*)
|
14
|
-
{
|
15
|
-
JSON.create_id => self.class.name,
|
16
|
-
's' => to_s,
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
# Stores class name (Symbol) with String representation of Symbol as a JSON string.
|
21
|
-
def to_json(*a)
|
22
|
-
as_json.to_json(*a)
|
23
|
-
end
|
24
|
-
|
25
|
-
# Deserializes JSON string by converting the <tt>string</tt> value stored in the object to a Symbol
|
26
|
-
def self.json_create(o)
|
27
|
-
o['s'].to_sym
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
# Time serialization/deserialization
|
32
|
-
class Time
|
33
|
-
|
34
|
-
# Deserializes JSON string by converting time since epoch to Time
|
35
|
-
def self.json_create(object)
|
36
|
-
if usec = object.delete('u') # used to be tv_usec -> tv_nsec
|
37
|
-
object['n'] = usec * 1000
|
38
|
-
end
|
39
|
-
if instance_methods.include?(:tv_nsec)
|
40
|
-
at(object['s'], Rational(object['n'], 1000))
|
41
|
-
else
|
42
|
-
at(object['s'], object['n'] / 1000)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
47
|
-
# object.
|
48
|
-
def as_json(*)
|
49
|
-
nanoseconds = [ tv_usec * 1000 ]
|
50
|
-
respond_to?(:tv_nsec) and nanoseconds << tv_nsec
|
51
|
-
nanoseconds = nanoseconds.max
|
52
|
-
{
|
53
|
-
JSON.create_id => self.class.name,
|
54
|
-
's' => tv_sec,
|
55
|
-
'n' => nanoseconds,
|
56
|
-
}
|
57
|
-
end
|
58
|
-
|
59
|
-
# Stores class name (Time) with number of seconds since epoch and number of
|
60
|
-
# microseconds for Time as JSON string
|
61
|
-
def to_json(*args)
|
62
|
-
as_json.to_json(*args)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
# Date serialization/deserialization
|
67
|
-
class Date
|
68
|
-
|
69
|
-
# Deserializes JSON string by converting Julian year <tt>y</tt>, month
|
70
|
-
# <tt>m</tt>, day <tt>d</tt> and Day of Calendar Reform <tt>sg</tt> to Date.
|
71
|
-
def self.json_create(object)
|
72
|
-
civil(*object.values_at('y', 'm', 'd', 'sg'))
|
73
|
-
end
|
74
|
-
|
75
|
-
alias start sg unless method_defined?(:start)
|
76
|
-
|
77
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
78
|
-
# object.
|
79
|
-
def as_json(*)
|
80
|
-
{
|
81
|
-
JSON.create_id => self.class.name,
|
82
|
-
'y' => year,
|
83
|
-
'm' => month,
|
84
|
-
'd' => day,
|
85
|
-
'sg' => start,
|
86
|
-
}
|
87
|
-
end
|
88
|
-
|
89
|
-
# Stores class name (Date) with Julian year <tt>y</tt>, month <tt>m</tt>, day
|
90
|
-
# <tt>d</tt> and Day of Calendar Reform <tt>sg</tt> as JSON string
|
91
|
-
def to_json(*args)
|
92
|
-
as_json.to_json(*args)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
# DateTime serialization/deserialization
|
97
|
-
class DateTime
|
98
|
-
|
99
|
-
# Deserializes JSON string by converting year <tt>y</tt>, month <tt>m</tt>,
|
100
|
-
# day <tt>d</tt>, hour <tt>H</tt>, minute <tt>M</tt>, second <tt>S</tt>,
|
101
|
-
# offset <tt>of</tt> and Day of Calendar Reform <tt>sg</tt> to DateTime.
|
102
|
-
def self.json_create(object)
|
103
|
-
args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
|
104
|
-
of_a, of_b = object['of'].split('/')
|
105
|
-
if of_b and of_b != '0'
|
106
|
-
args << Rational(of_a.to_i, of_b.to_i)
|
107
|
-
else
|
108
|
-
args << of_a
|
109
|
-
end
|
110
|
-
args << object['sg']
|
111
|
-
civil(*args)
|
112
|
-
end
|
113
|
-
|
114
|
-
alias start sg unless method_defined?(:start)
|
115
|
-
|
116
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
117
|
-
# object.
|
118
|
-
def as_json(*)
|
119
|
-
{
|
120
|
-
JSON.create_id => self.class.name,
|
121
|
-
'y' => year,
|
122
|
-
'm' => month,
|
123
|
-
'd' => day,
|
124
|
-
'H' => hour,
|
125
|
-
'M' => min,
|
126
|
-
'S' => sec,
|
127
|
-
'of' => offset.to_s,
|
128
|
-
'sg' => start,
|
129
|
-
}
|
130
|
-
end
|
131
|
-
|
132
|
-
# Stores class name (DateTime) with Julian year <tt>y</tt>, month <tt>m</tt>,
|
133
|
-
# day <tt>d</tt>, hour <tt>H</tt>, minute <tt>M</tt>, second <tt>S</tt>,
|
134
|
-
# offset <tt>of</tt> and Day of Calendar Reform <tt>sg</tt> as JSON string
|
135
|
-
def to_json(*args)
|
136
|
-
as_json.to_json(*args)
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
# Range serialization/deserialization
|
141
|
-
class Range
|
142
|
-
|
143
|
-
# Deserializes JSON string by constructing new Range object with arguments
|
144
|
-
# <tt>a</tt> serialized by <tt>to_json</tt>.
|
145
|
-
def self.json_create(object)
|
146
|
-
new(*object['a'])
|
147
|
-
end
|
148
|
-
|
149
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
150
|
-
# object.
|
151
|
-
def as_json(*)
|
152
|
-
{
|
153
|
-
JSON.create_id => self.class.name,
|
154
|
-
'a' => [ first, last, exclude_end? ]
|
155
|
-
}
|
156
|
-
end
|
157
|
-
|
158
|
-
# Stores class name (Range) with JSON array of arguments <tt>a</tt> which
|
159
|
-
# include <tt>first</tt> (integer), <tt>last</tt> (integer), and
|
160
|
-
# <tt>exclude_end?</tt> (boolean) as JSON string.
|
161
|
-
def to_json(*args)
|
162
|
-
as_json.to_json(*args)
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
166
|
-
# Struct serialization/deserialization
|
167
|
-
class Struct
|
168
|
-
|
169
|
-
# Deserializes JSON string by constructing new Struct object with values
|
170
|
-
# <tt>v</tt> serialized by <tt>to_json</tt>.
|
171
|
-
def self.json_create(object)
|
172
|
-
new(*object['v'])
|
173
|
-
end
|
174
|
-
|
175
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
176
|
-
# object.
|
177
|
-
def as_json(*)
|
178
|
-
klass = self.class.name
|
179
|
-
klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
|
180
|
-
{
|
181
|
-
JSON.create_id => klass,
|
182
|
-
'v' => values,
|
183
|
-
}
|
184
|
-
end
|
185
|
-
|
186
|
-
# Stores class name (Struct) with Struct values <tt>v</tt> as a JSON string.
|
187
|
-
# Only named structs are supported.
|
188
|
-
def to_json(*args)
|
189
|
-
as_json.to_json(*args)
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
# Exception serialization/deserialization
|
194
|
-
class Exception
|
195
|
-
|
196
|
-
# Deserializes JSON string by constructing new Exception object with message
|
197
|
-
# <tt>m</tt> and backtrace <tt>b</tt> serialized with <tt>to_json</tt>
|
198
|
-
def self.json_create(object)
|
199
|
-
result = new(object['m'])
|
200
|
-
result.set_backtrace object['b']
|
201
|
-
result
|
202
|
-
end
|
203
|
-
|
204
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
205
|
-
# object.
|
206
|
-
def as_json(*)
|
207
|
-
{
|
208
|
-
JSON.create_id => self.class.name,
|
209
|
-
'm' => message,
|
210
|
-
'b' => backtrace,
|
211
|
-
}
|
212
|
-
end
|
213
|
-
|
214
|
-
# Stores class name (Exception) with message <tt>m</tt> and backtrace array
|
215
|
-
# <tt>b</tt> as JSON string
|
216
|
-
def to_json(*args)
|
217
|
-
as_json.to_json(*args)
|
218
|
-
end
|
219
|
-
end
|
220
|
-
|
221
|
-
# Regexp serialization/deserialization
|
222
|
-
class Regexp
|
223
|
-
|
224
|
-
# Deserializes JSON string by constructing new Regexp object with source
|
225
|
-
# <tt>s</tt> (Regexp or String) and options <tt>o</tt> serialized by
|
226
|
-
# <tt>to_json</tt>
|
227
|
-
def self.json_create(object)
|
228
|
-
new(object['s'], object['o'])
|
229
|
-
end
|
230
|
-
|
231
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
232
|
-
# object.
|
233
|
-
def as_json(*)
|
234
|
-
{
|
235
|
-
JSON.create_id => self.class.name,
|
236
|
-
'o' => options,
|
237
|
-
's' => source,
|
238
|
-
}
|
239
|
-
end
|
240
|
-
|
241
|
-
# Stores class name (Regexp) with options <tt>o</tt> and source <tt>s</tt>
|
242
|
-
# (Regexp or String) as JSON string
|
243
|
-
def to_json(*)
|
244
|
-
as_json.to_json
|
245
|
-
end
|
246
|
-
end
|
4
|
+
require 'json/add/date'
|
5
|
+
require 'json/add/date_time'
|
6
|
+
require 'json/add/exception'
|
7
|
+
require 'json/add/range'
|
8
|
+
require 'json/add/regexp'
|
9
|
+
require 'json/add/struct'
|
10
|
+
require 'json/add/symbol'
|
11
|
+
require 'json/add/time'
|
@@ -0,0 +1,34 @@
|
|
1
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
2
|
+
require 'json'
|
3
|
+
end
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
# Date serialization/deserialization
|
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
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
2
|
+
require 'json'
|
3
|
+
end
|
4
|
+
require 'date'
|
5
|
+
|
6
|
+
# DateTime serialization/deserialization
|
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
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
2
|
+
require 'json'
|
3
|
+
end
|
4
|
+
|
5
|
+
# Exception serialization/deserialization
|
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
|