json-maglev- 1.5.4 → 1.6.1
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.
- data/CHANGES +11 -1
- data/Rakefile +14 -12
- data/VERSION +1 -1
- data/ext/json/ext/generator/extconf.rb +0 -7
- data/ext/json/ext/generator/generator.c +55 -10
- data/ext/json/ext/generator/generator.h +7 -5
- data/ext/json/ext/parser/extconf.rb +0 -3
- data/ext/json/ext/parser/parser.c +418 -207
- data/ext/json/ext/parser/parser.h +11 -10
- data/ext/json/ext/parser/parser.rl +178 -104
- data/install.rb +1 -8
- data/java/src/json/ext/Generator.java +3 -3
- data/java/src/json/ext/GeneratorMethods.java +2 -2
- data/java/src/json/ext/GeneratorService.java +1 -1
- data/java/src/json/ext/GeneratorState.java +41 -13
- data/java/src/json/ext/OptionsReader.java +1 -1
- data/java/src/json/ext/Parser.java +382 -107
- data/java/src/json/ext/Parser.rl +97 -28
- data/java/src/json/ext/ParserService.java +1 -1
- data/java/src/json/ext/Utils.java +1 -1
- data/json.gemspec +5 -6
- data/json_pure.gemspec +5 -9
- data/lib/json.rb +4 -4
- data/lib/json/add/complex.rb +22 -0
- data/lib/json/add/core.rb +9 -241
- 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/rational.rb +22 -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 +47 -35
- data/lib/json/ext.rb +2 -15
- data/lib/json/pure/generator.rb +17 -2
- data/lib/json/pure/parser.rb +89 -55
- data/lib/json/version.rb +1 -1
- data/tests/test_json.rb +36 -0
- data/tests/test_json_addition.rb +8 -1
- data/tests/test_json_generate.rb +34 -1
- data/tools/server.rb +1 -0
- metadata +20 -24
- 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/add/rails.rb +0 -8
- data/lib/json/editor.rb +0 -1369
- data/lib/json/json.xpm +0 -1499
data/java/src/json/ext/Parser.rl
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
|
3
|
-
*
|
3
|
+
*
|
4
4
|
* Distributed under the Ruby and GPLv2 licenses; see COPYING and GPL files
|
5
5
|
* for details.
|
6
6
|
*/
|
@@ -29,16 +29,16 @@ import org.jruby.util.ByteList;
|
|
29
29
|
|
30
30
|
/**
|
31
31
|
* The <code>JSON::Ext::Parser</code> class.
|
32
|
-
*
|
32
|
+
*
|
33
33
|
* <p>This is the JSON parser implemented as a Java class. To use it as the
|
34
34
|
* standard parser, set
|
35
35
|
* <pre>JSON.parser = JSON::Ext::Parser</pre>
|
36
36
|
* This is performed for you when you <code>include "json/ext"</code>.
|
37
|
-
*
|
37
|
+
*
|
38
38
|
* <p>This class does not perform the actual parsing, just acts as an interface
|
39
39
|
* to Ruby code. When the {@link #parse()} method is invoked, a
|
40
40
|
* Parser.ParserSession object is instantiated, which handles the process.
|
41
|
-
*
|
41
|
+
*
|
42
42
|
* @author mernen
|
43
43
|
*/
|
44
44
|
public class Parser extends RubyObject {
|
@@ -49,6 +49,7 @@ public class Parser extends RubyObject {
|
|
49
49
|
private int maxNesting;
|
50
50
|
private boolean allowNaN;
|
51
51
|
private boolean symbolizeNames;
|
52
|
+
private boolean quirksMode;
|
52
53
|
private RubyClass objectClass;
|
53
54
|
private RubyClass arrayClass;
|
54
55
|
private RubyHash match_string;
|
@@ -69,7 +70,7 @@ public class Parser extends RubyObject {
|
|
69
70
|
|
70
71
|
/**
|
71
72
|
* Multiple-value return for internal parser methods.
|
72
|
-
*
|
73
|
+
*
|
73
74
|
* <p>All the <code>parse<var>Stuff</var></code> methods return instances of
|
74
75
|
* <code>ParserResult</code> when successful, or <code>null</code> when
|
75
76
|
* there's a problem with the input data.
|
@@ -98,18 +99,18 @@ public class Parser extends RubyObject {
|
|
98
99
|
|
99
100
|
/**
|
100
101
|
* <code>Parser.new(source, opts = {})</code>
|
101
|
-
*
|
102
|
+
*
|
102
103
|
* <p>Creates a new <code>JSON::Ext::Parser</code> instance for the string
|
103
104
|
* <code>source</code>.
|
104
105
|
* It will be configured by the <code>opts</code> Hash.
|
105
106
|
* <code>opts</code> can have the following keys:
|
106
|
-
*
|
107
|
+
*
|
107
108
|
* <dl>
|
108
109
|
* <dt><code>:max_nesting</code>
|
109
110
|
* <dd>The maximum depth of nesting allowed in the parsed data
|
110
111
|
* structures. Disable depth checking with <code>:max_nesting => false|nil|0</code>,
|
111
112
|
* it defaults to 19.
|
112
|
-
*
|
113
|
+
*
|
113
114
|
* <dt><code>:allow_nan</code>
|
114
115
|
* <dd>If set to <code>true</code>, allow <code>NaN</code>,
|
115
116
|
* <code>Infinity</code> and <code>-Infinity</code> in defiance of RFC 4627
|
@@ -118,17 +119,25 @@ public class Parser extends RubyObject {
|
|
118
119
|
* <dt><code>:symbolize_names</code>
|
119
120
|
* <dd>If set to <code>true</code>, returns symbols for the names (keys) in
|
120
121
|
* a JSON object. Otherwise strings are returned, which is also the default.
|
122
|
+
*
|
123
|
+
* <dt><code>:quirks_mode?</code>
|
124
|
+
* <dd>If set to <code>true</code>, if the parse is in quirks_mode, false
|
125
|
+
* otherwise.
|
121
126
|
*
|
122
127
|
* <dt><code>:create_additions</code>
|
123
128
|
* <dd>If set to <code>false</code>, the Parser doesn't create additions
|
124
129
|
* even if a matchin class and <code>create_id</code> was found. This option
|
125
130
|
* defaults to <code>true</code>.
|
126
|
-
*
|
131
|
+
*
|
127
132
|
* <dt><code>:object_class</code>
|
128
133
|
* <dd>Defaults to Hash.
|
129
|
-
*
|
134
|
+
*
|
130
135
|
* <dt><code>:array_class</code>
|
131
136
|
* <dd>Defaults to Array.
|
137
|
+
*
|
138
|
+
* <dt><code>:quirks_mode</code>
|
139
|
+
* <dd>Enables quirks_mode for parser, that is for example parsing single
|
140
|
+
* JSON values instead of documents is possible.
|
132
141
|
* </dl>
|
133
142
|
*/
|
134
143
|
@JRubyMethod(name = "new", required = 1, optional = 1, meta = true)
|
@@ -146,19 +155,21 @@ public class Parser extends RubyObject {
|
|
146
155
|
if (this.vSource != null) {
|
147
156
|
throw runtime.newTypeError("already initialized instance");
|
148
157
|
}
|
149
|
-
RubyString source = convertEncoding(context, args[0].convertToString());
|
150
158
|
|
151
159
|
OptionsReader opts = new OptionsReader(context, args.length > 1 ? args[1] : null);
|
152
160
|
this.maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
|
153
161
|
this.allowNaN = opts.getBool("allow_nan", false);
|
154
162
|
this.symbolizeNames = opts.getBool("symbolize_names", false);
|
163
|
+
this.quirksMode = opts.getBool("quirks_mode", false);
|
155
164
|
this.createId = opts.getString("create_id", getCreateId(context));
|
156
165
|
this.createAdditions = opts.getBool("create_additions", true);
|
157
166
|
this.objectClass = opts.getClass("object_class", runtime.getHash());
|
158
167
|
this.arrayClass = opts.getClass("array_class", runtime.getArray());
|
159
168
|
this.match_string = opts.getHash("match_string");
|
160
169
|
|
161
|
-
this.vSource =
|
170
|
+
this.vSource = args[0].convertToString();
|
171
|
+
if (!quirksMode) this.vSource = convertEncoding(context, vSource);
|
172
|
+
|
162
173
|
return this;
|
163
174
|
}
|
164
175
|
|
@@ -227,7 +238,7 @@ public class Parser extends RubyObject {
|
|
227
238
|
|
228
239
|
/**
|
229
240
|
* <code>Parser#parse()</code>
|
230
|
-
*
|
241
|
+
*
|
231
242
|
* <p>Parses the current JSON text <code>source</code> and returns the
|
232
243
|
* complete data structure as a result.
|
233
244
|
*/
|
@@ -238,7 +249,7 @@ public class Parser extends RubyObject {
|
|
238
249
|
|
239
250
|
/**
|
240
251
|
* <code>Parser#source()</code>
|
241
|
-
*
|
252
|
+
*
|
242
253
|
* <p>Returns a copy of the current <code>source</code> string, that was
|
243
254
|
* used to construct this Parser.
|
244
255
|
*/
|
@@ -247,6 +258,17 @@ public class Parser extends RubyObject {
|
|
247
258
|
return checkAndGetSource().dup();
|
248
259
|
}
|
249
260
|
|
261
|
+
/**
|
262
|
+
* <code>Parser#quirks_mode?()</code>
|
263
|
+
*
|
264
|
+
* <p>If set to <code>true</code>, if the parse is in quirks_mode, false
|
265
|
+
* otherwise.
|
266
|
+
*/
|
267
|
+
@JRubyMethod(name = "quirks_mode?")
|
268
|
+
public IRubyObject quirks_mode_p(ThreadContext context) {
|
269
|
+
return context.getRuntime().newBoolean(quirksMode);
|
270
|
+
}
|
271
|
+
|
250
272
|
public RubyString checkAndGetSource() {
|
251
273
|
if (vSource != null) {
|
252
274
|
return vSource;
|
@@ -266,7 +288,7 @@ public class Parser extends RubyObject {
|
|
266
288
|
|
267
289
|
/**
|
268
290
|
* A string parsing session.
|
269
|
-
*
|
291
|
+
*
|
270
292
|
* <p>Once a ParserSession is instantiated, the source string should not
|
271
293
|
* change until the parsing is complete. The ParserSession object assumes
|
272
294
|
* the source {@link RubyString} is still associated to its original
|
@@ -364,7 +386,7 @@ public class Parser extends RubyObject {
|
|
364
386
|
}
|
365
387
|
}
|
366
388
|
action parse_number {
|
367
|
-
if (pe > fpc + 9 &&
|
389
|
+
if (pe > fpc + 9 - (parser.quirksMode ? 1 : 0) &&
|
368
390
|
absSubSequence(fpc, fpc + 9).toString().equals(JSON_MINUS_INFINITY)) {
|
369
391
|
|
370
392
|
if (parser.allowNaN) {
|
@@ -464,7 +486,7 @@ public class Parser extends RubyObject {
|
|
464
486
|
fbreak;
|
465
487
|
}
|
466
488
|
|
467
|
-
main := '-'? ( '0' | [1-9][0-9]* ) ( ^[0-9] @exit );
|
489
|
+
main := '-'? ( '0' | [1-9][0-9]* ) ( ^[0-9]? @exit );
|
468
490
|
}%%
|
469
491
|
|
470
492
|
ParserResult parseInteger(int p, int pe) {
|
@@ -500,7 +522,7 @@ public class Parser extends RubyObject {
|
|
500
522
|
main := '-'?
|
501
523
|
( ( ( '0' | [1-9][0-9]* ) '.' [0-9]+ ( [Ee] [+\-]?[0-9]+ )? )
|
502
524
|
| ( ( '0' | [1-9][0-9]* ) ( [Ee] [+\-]? [0-9]+ ) ) )
|
503
|
-
( ^[0-9Ee.\-] @exit );
|
525
|
+
( ^[0-9Ee.\-]? @exit );
|
504
526
|
}%%
|
505
527
|
|
506
528
|
ParserResult parseFloat(int p, int pe) {
|
@@ -578,7 +600,7 @@ public class Parser extends RubyObject {
|
|
578
600
|
}
|
579
601
|
});
|
580
602
|
} catch (JumpException e) { }
|
581
|
-
if (memoArray[1] != null) {
|
603
|
+
if (memoArray[1] != null) {
|
582
604
|
RubyClass klass = (RubyClass) memoArray[1];
|
583
605
|
if (klass.respondsTo("json_creatable?") &&
|
584
606
|
klass.callMethod(context, "json_creatable?").isTrue()) {
|
@@ -701,15 +723,14 @@ public class Parser extends RubyObject {
|
|
701
723
|
fhold;
|
702
724
|
fbreak;
|
703
725
|
}
|
726
|
+
|
727
|
+
pair = ignore* begin_name >parse_name ignore* name_separator
|
728
|
+
ignore* begin_value >parse_value;
|
729
|
+
next_pair = ignore* value_separator pair;
|
704
730
|
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
begin_value >parse_value;
|
709
|
-
|
710
|
-
main := begin_object
|
711
|
-
(a_pair (ignore* value_separator a_pair)*)?
|
712
|
-
ignore* end_object @exit;
|
731
|
+
main := (
|
732
|
+
begin_object (pair (next_pair)*)? ignore* end_object
|
733
|
+
) @exit;
|
713
734
|
}%%
|
714
735
|
|
715
736
|
ParserResult parseObject(int p, int pe) {
|
@@ -789,7 +810,7 @@ public class Parser extends RubyObject {
|
|
789
810
|
ignore*;
|
790
811
|
}%%
|
791
812
|
|
792
|
-
public IRubyObject
|
813
|
+
public IRubyObject parseStrict() {
|
793
814
|
int cs = EVIL;
|
794
815
|
int p, pe;
|
795
816
|
IRubyObject result = null;
|
@@ -806,6 +827,54 @@ public class Parser extends RubyObject {
|
|
806
827
|
}
|
807
828
|
}
|
808
829
|
|
830
|
+
%%{
|
831
|
+
machine JSON_quirks_mode;
|
832
|
+
include JSON_common;
|
833
|
+
|
834
|
+
write data;
|
835
|
+
|
836
|
+
action parse_value {
|
837
|
+
ParserResult res = parseValue(fpc, pe);
|
838
|
+
if (res == null) {
|
839
|
+
fhold;
|
840
|
+
fbreak;
|
841
|
+
} else {
|
842
|
+
result = res.result;
|
843
|
+
fexec res.p;
|
844
|
+
}
|
845
|
+
}
|
846
|
+
|
847
|
+
main := ignore*
|
848
|
+
( begin_value >parse_value)
|
849
|
+
ignore*;
|
850
|
+
}%%
|
851
|
+
|
852
|
+
public IRubyObject parseQuirksMode() {
|
853
|
+
int cs = EVIL;
|
854
|
+
int p, pe;
|
855
|
+
IRubyObject result = null;
|
856
|
+
|
857
|
+
%% write init;
|
858
|
+
p = byteList.begin();
|
859
|
+
pe = p + byteList.length();
|
860
|
+
%% write exec;
|
861
|
+
|
862
|
+
if (cs >= JSON_quirks_mode_first_final && p == pe) {
|
863
|
+
return result;
|
864
|
+
} else {
|
865
|
+
throw unexpectedToken(p, pe);
|
866
|
+
}
|
867
|
+
}
|
868
|
+
|
869
|
+
public IRubyObject parse() {
|
870
|
+
if (parser.quirksMode) {
|
871
|
+
return parseQuirksMode();
|
872
|
+
} else {
|
873
|
+
return parseStrict();
|
874
|
+
}
|
875
|
+
|
876
|
+
}
|
877
|
+
|
809
878
|
/**
|
810
879
|
* Returns a subsequence of the source ByteList, based on source
|
811
880
|
* array byte offsets (i.e., the ByteList's own begin offset is not
|
data/json.gemspec
CHANGED
@@ -2,27 +2,26 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{json-maglev-}
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.6.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = [%q{Florian Frank}]
|
9
|
-
s.date = %q{2011-
|
9
|
+
s.date = %q{2011-09-18}
|
10
10
|
s.description = %q{This is a JSON implementation as a Ruby extension in C.}
|
11
11
|
s.email = %q{flori@ping.de}
|
12
|
-
s.executables = [%q{edit_json.rb}, %q{prettify_json.rb}]
|
13
12
|
s.extensions = [%q{ext/json/ext/parser/extconf.rb}, %q{ext/json/ext/generator/extconf.rb}]
|
14
13
|
s.extra_rdoc_files = [%q{README.rdoc}]
|
15
|
-
s.files = [%q{tests}, %q{tests/test_json_string_matching.rb}, %q{tests/test_json_fixtures.rb}, %q{tests/setup_variant.rb}, %q{tests/fixtures}, %q{tests/fixtures/fail6.json}, %q{tests/fixtures/fail9.json}, %q{tests/fixtures/fail10.json}, %q{tests/fixtures/fail24.json}, %q{tests/fixtures/fail28.json}, %q{tests/fixtures/fail13.json}, %q{tests/fixtures/fail4.json}, %q{tests/fixtures/pass3.json}, %q{tests/fixtures/fail11.json}, %q{tests/fixtures/fail14.json}, %q{tests/fixtures/fail3.json}, %q{tests/fixtures/fail12.json}, %q{tests/fixtures/pass16.json}, %q{tests/fixtures/pass15.json}, %q{tests/fixtures/fail20.json}, %q{tests/fixtures/fail8.json}, %q{tests/fixtures/pass2.json}, %q{tests/fixtures/fail5.json}, %q{tests/fixtures/fail1.json}, %q{tests/fixtures/fail25.json}, %q{tests/fixtures/pass17.json}, %q{tests/fixtures/fail7.json}, %q{tests/fixtures/pass26.json}, %q{tests/fixtures/fail21.json}, %q{tests/fixtures/pass1.json}, %q{tests/fixtures/fail23.json}, %q{tests/fixtures/fail18.json}, %q{tests/fixtures/fail2.json}, %q{tests/fixtures/fail22.json}, %q{tests/fixtures/fail27.json}, %q{tests/fixtures/fail19.json}, %q{tests/test_json_unicode.rb}, %q{tests/test_json_addition.rb}, %q{tests/test_json_generate.rb}, %q{tests/test_json_encoding.rb}, %q{tests/test_json.rb}, %q{COPYING}, %q{TODO}, %q{Rakefile}, %q{benchmarks}, %q{benchmarks/data-p4-3GHz-ruby18}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat}, %q{benchmarks/parser2_benchmark.rb}, %q{benchmarks/parser_benchmark.rb}, %q{benchmarks/generator2_benchmark.rb}, %q{benchmarks/generator_benchmark.rb}, %q{benchmarks/ohai.ruby}, %q{benchmarks/data}, %q{benchmarks/ohai.json}, %q{lib}, %q{lib/json}, %q{lib/json/
|
14
|
+
s.files = [%q{tests}, %q{tests/test_json_string_matching.rb}, %q{tests/test_json_fixtures.rb}, %q{tests/setup_variant.rb}, %q{tests/fixtures}, %q{tests/fixtures/fail6.json}, %q{tests/fixtures/fail9.json}, %q{tests/fixtures/fail10.json}, %q{tests/fixtures/fail24.json}, %q{tests/fixtures/fail28.json}, %q{tests/fixtures/fail13.json}, %q{tests/fixtures/fail4.json}, %q{tests/fixtures/pass3.json}, %q{tests/fixtures/fail11.json}, %q{tests/fixtures/fail14.json}, %q{tests/fixtures/fail3.json}, %q{tests/fixtures/fail12.json}, %q{tests/fixtures/pass16.json}, %q{tests/fixtures/pass15.json}, %q{tests/fixtures/fail20.json}, %q{tests/fixtures/fail8.json}, %q{tests/fixtures/pass2.json}, %q{tests/fixtures/fail5.json}, %q{tests/fixtures/fail1.json}, %q{tests/fixtures/fail25.json}, %q{tests/fixtures/pass17.json}, %q{tests/fixtures/fail7.json}, %q{tests/fixtures/pass26.json}, %q{tests/fixtures/fail21.json}, %q{tests/fixtures/pass1.json}, %q{tests/fixtures/fail23.json}, %q{tests/fixtures/fail18.json}, %q{tests/fixtures/fail2.json}, %q{tests/fixtures/fail22.json}, %q{tests/fixtures/fail27.json}, %q{tests/fixtures/fail19.json}, %q{tests/test_json_unicode.rb}, %q{tests/test_json_addition.rb}, %q{tests/test_json_generate.rb}, %q{tests/test_json_encoding.rb}, %q{tests/test_json.rb}, %q{COPYING}, %q{TODO}, %q{Rakefile}, %q{benchmarks}, %q{benchmarks/data-p4-3GHz-ruby18}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat}, %q{benchmarks/parser2_benchmark.rb}, %q{benchmarks/parser_benchmark.rb}, %q{benchmarks/generator2_benchmark.rb}, %q{benchmarks/generator_benchmark.rb}, %q{benchmarks/ohai.ruby}, %q{benchmarks/data}, %q{benchmarks/ohai.json}, %q{lib}, %q{lib/json}, %q{lib/json/version.rb}, %q{lib/json/add}, %q{lib/json/add/symbol.rb}, %q{lib/json/add/struct.rb}, %q{lib/json/add/complex.rb}, %q{lib/json/add/rational.rb}, %q{lib/json/add/exception.rb}, %q{lib/json/add/time.rb}, %q{lib/json/add/date_time.rb}, %q{lib/json/add/core.rb}, %q{lib/json/add/range.rb}, %q{lib/json/add/date.rb}, %q{lib/json/add/regexp.rb}, %q{lib/json/common.rb}, %q{lib/json/pure}, %q{lib/json/pure/generator.rb}, %q{lib/json/pure/parser.rb}, %q{lib/json/ext.rb}, %q{lib/json/pure.rb}, %q{lib/json/ext}, %q{lib/json.rb}, %q{Gemfile}, %q{README.rdoc}, %q{json_pure.gemspec}, %q{GPL}, %q{CHANGES}, %q{COPYING-json-jruby}, %q{ext}, %q{ext/json}, %q{ext/json/ext}, %q{ext/json/ext/parser}, %q{ext/json/ext/parser/parser.h}, %q{ext/json/ext/parser/extconf.rb}, %q{ext/json/ext/parser/parser.rl}, %q{ext/json/ext/parser/parser.c}, %q{ext/json/ext/generator}, %q{ext/json/ext/generator/generator.c}, %q{ext/json/ext/generator/extconf.rb}, %q{ext/json/ext/generator/generator.h}, %q{VERSION}, %q{data}, %q{data/prototype.js}, %q{data/index.html}, %q{data/example.json}, %q{json.gemspec}, %q{java}, %q{java/src}, %q{java/src/json}, %q{java/src/json/ext}, %q{java/src/json/ext/Parser.java}, %q{java/src/json/ext/RuntimeInfo.java}, %q{java/src/json/ext/GeneratorState.java}, %q{java/src/json/ext/OptionsReader.java}, %q{java/src/json/ext/ParserService.java}, %q{java/src/json/ext/Parser.rl}, %q{java/src/json/ext/StringEncoder.java}, %q{java/src/json/ext/GeneratorService.java}, %q{java/src/json/ext/Utils.java}, %q{java/src/json/ext/StringDecoder.java}, %q{java/src/json/ext/Generator.java}, %q{java/src/json/ext/ByteListTranscoder.java}, %q{java/src/json/ext/GeneratorMethods.java}, %q{java/lib}, %q{java/lib/bytelist-1.0.6.jar}, %q{java/lib/jcodings.jar}, %q{diagrams}, %q{README-json-jruby.markdown}, %q{install.rb}, %q{json-java.gemspec}, %q{tools}, %q{tools/fuzz.rb}, %q{tools/server.rb}, %q{./tests/test_json_string_matching.rb}, %q{./tests/test_json_fixtures.rb}, %q{./tests/test_json_unicode.rb}, %q{./tests/test_json_addition.rb}, %q{./tests/test_json_generate.rb}, %q{./tests/test_json_encoding.rb}, %q{./tests/test_json.rb}]
|
16
15
|
s.homepage = %q{http://flori.github.com/json}
|
17
16
|
s.rdoc_options = [%q{--title}, %q{JSON implemention for Ruby}, %q{--main}, %q{README.rdoc}]
|
18
17
|
s.require_paths = [%q{ext/json/ext}, %q{ext}, %q{lib}]
|
19
18
|
s.rubyforge_project = %q{json}
|
20
|
-
s.rubygems_version = %q{1.8.
|
19
|
+
s.rubygems_version = %q{1.8.6}
|
21
20
|
s.summary = %q{JSON Implementation for Ruby}
|
22
21
|
s.test_files = [%q{./tests/test_json_string_matching.rb}, %q{./tests/test_json_fixtures.rb}, %q{./tests/test_json_unicode.rb}, %q{./tests/test_json_addition.rb}, %q{./tests/test_json_generate.rb}, %q{./tests/test_json_encoding.rb}, %q{./tests/test_json.rb}]
|
23
22
|
|
24
23
|
if s.respond_to? :specification_version then
|
25
|
-
s.specification_version =
|
24
|
+
s.specification_version = 3
|
26
25
|
|
27
26
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
28
27
|
s.add_development_dependency(%q<permutation>, [">= 0"])
|
data/json_pure.gemspec
CHANGED
@@ -2,45 +2,41 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{json_pure}
|
5
|
-
s.version = "1.
|
5
|
+
s.version = "1.6.1"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = [%q{Florian Frank}]
|
9
|
-
s.date = %q{2011-
|
9
|
+
s.date = %q{2011-09-18}
|
10
10
|
s.description = %q{This is a JSON implementation in pure Ruby.}
|
11
11
|
s.email = %q{flori@ping.de}
|
12
|
-
s.executables = [%q{edit_json.rb}, %q{prettify_json.rb}]
|
13
12
|
s.extra_rdoc_files = [%q{README.rdoc}]
|
14
|
-
s.files = [%q{tests}, %q{tests/test_json_string_matching.rb}, %q{tests/test_json_fixtures.rb}, %q{tests/setup_variant.rb}, %q{tests/fixtures}, %q{tests/fixtures/fail6.json}, %q{tests/fixtures/fail9.json}, %q{tests/fixtures/fail10.json}, %q{tests/fixtures/fail24.json}, %q{tests/fixtures/fail28.json}, %q{tests/fixtures/fail13.json}, %q{tests/fixtures/fail4.json}, %q{tests/fixtures/pass3.json}, %q{tests/fixtures/fail11.json}, %q{tests/fixtures/fail14.json}, %q{tests/fixtures/fail3.json}, %q{tests/fixtures/fail12.json}, %q{tests/fixtures/pass16.json}, %q{tests/fixtures/pass15.json}, %q{tests/fixtures/fail20.json}, %q{tests/fixtures/fail8.json}, %q{tests/fixtures/pass2.json}, %q{tests/fixtures/fail5.json}, %q{tests/fixtures/fail1.json}, %q{tests/fixtures/fail25.json}, %q{tests/fixtures/pass17.json}, %q{tests/fixtures/fail7.json}, %q{tests/fixtures/pass26.json}, %q{tests/fixtures/fail21.json}, %q{tests/fixtures/pass1.json}, %q{tests/fixtures/fail23.json}, %q{tests/fixtures/fail18.json}, %q{tests/fixtures/fail2.json}, %q{tests/fixtures/fail22.json}, %q{tests/fixtures/fail27.json}, %q{tests/fixtures/fail19.json}, %q{tests/test_json_unicode.rb}, %q{tests/test_json_addition.rb}, %q{tests/test_json_generate.rb}, %q{tests/test_json_encoding.rb}, %q{tests/test_json.rb}, %q{COPYING}, %q{TODO}, %q{Rakefile}, %q{benchmarks}, %q{benchmarks/data-p4-3GHz-ruby18}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat}, %q{benchmarks/parser2_benchmark.rb}, %q{benchmarks/parser_benchmark.rb}, %q{benchmarks/generator2_benchmark.rb}, %q{benchmarks/generator_benchmark.rb}, %q{benchmarks/ohai.ruby}, %q{benchmarks/data}, %q{benchmarks/ohai.json}, %q{lib}, %q{lib/json}, %q{lib/json/
|
13
|
+
s.files = [%q{tests}, %q{tests/test_json_string_matching.rb}, %q{tests/test_json_fixtures.rb}, %q{tests/setup_variant.rb}, %q{tests/fixtures}, %q{tests/fixtures/fail6.json}, %q{tests/fixtures/fail9.json}, %q{tests/fixtures/fail10.json}, %q{tests/fixtures/fail24.json}, %q{tests/fixtures/fail28.json}, %q{tests/fixtures/fail13.json}, %q{tests/fixtures/fail4.json}, %q{tests/fixtures/pass3.json}, %q{tests/fixtures/fail11.json}, %q{tests/fixtures/fail14.json}, %q{tests/fixtures/fail3.json}, %q{tests/fixtures/fail12.json}, %q{tests/fixtures/pass16.json}, %q{tests/fixtures/pass15.json}, %q{tests/fixtures/fail20.json}, %q{tests/fixtures/fail8.json}, %q{tests/fixtures/pass2.json}, %q{tests/fixtures/fail5.json}, %q{tests/fixtures/fail1.json}, %q{tests/fixtures/fail25.json}, %q{tests/fixtures/pass17.json}, %q{tests/fixtures/fail7.json}, %q{tests/fixtures/pass26.json}, %q{tests/fixtures/fail21.json}, %q{tests/fixtures/pass1.json}, %q{tests/fixtures/fail23.json}, %q{tests/fixtures/fail18.json}, %q{tests/fixtures/fail2.json}, %q{tests/fixtures/fail22.json}, %q{tests/fixtures/fail27.json}, %q{tests/fixtures/fail19.json}, %q{tests/test_json_unicode.rb}, %q{tests/test_json_addition.rb}, %q{tests/test_json_generate.rb}, %q{tests/test_json_encoding.rb}, %q{tests/test_json.rb}, %q{COPYING}, %q{TODO}, %q{Rakefile}, %q{benchmarks}, %q{benchmarks/data-p4-3GHz-ruby18}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat}, %q{benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat}, %q{benchmarks/parser2_benchmark.rb}, %q{benchmarks/parser_benchmark.rb}, %q{benchmarks/generator2_benchmark.rb}, %q{benchmarks/generator_benchmark.rb}, %q{benchmarks/ohai.ruby}, %q{benchmarks/data}, %q{benchmarks/ohai.json}, %q{lib}, %q{lib/json}, %q{lib/json/version.rb}, %q{lib/json/add}, %q{lib/json/add/symbol.rb}, %q{lib/json/add/struct.rb}, %q{lib/json/add/complex.rb}, %q{lib/json/add/rational.rb}, %q{lib/json/add/exception.rb}, %q{lib/json/add/time.rb}, %q{lib/json/add/date_time.rb}, %q{lib/json/add/core.rb}, %q{lib/json/add/range.rb}, %q{lib/json/add/date.rb}, %q{lib/json/add/regexp.rb}, %q{lib/json/common.rb}, %q{lib/json/pure}, %q{lib/json/pure/generator.rb}, %q{lib/json/pure/parser.rb}, %q{lib/json/ext.rb}, %q{lib/json/pure.rb}, %q{lib/json/ext}, %q{lib/json.rb}, %q{Gemfile}, %q{README.rdoc}, %q{json_pure.gemspec}, %q{GPL}, %q{CHANGES}, %q{COPYING-json-jruby}, %q{ext}, %q{ext/json}, %q{ext/json/ext}, %q{ext/json/ext/parser}, %q{ext/json/ext/parser/parser.h}, %q{ext/json/ext/parser/extconf.rb}, %q{ext/json/ext/parser/parser.rl}, %q{ext/json/ext/parser/parser.c}, %q{ext/json/ext/generator}, %q{ext/json/ext/generator/generator.c}, %q{ext/json/ext/generator/extconf.rb}, %q{ext/json/ext/generator/generator.h}, %q{VERSION}, %q{data}, %q{data/prototype.js}, %q{data/index.html}, %q{data/example.json}, %q{json.gemspec}, %q{java}, %q{java/src}, %q{java/src/json}, %q{java/src/json/ext}, %q{java/src/json/ext/Parser.java}, %q{java/src/json/ext/RuntimeInfo.java}, %q{java/src/json/ext/GeneratorState.java}, %q{java/src/json/ext/OptionsReader.java}, %q{java/src/json/ext/ParserService.java}, %q{java/src/json/ext/Parser.rl}, %q{java/src/json/ext/StringEncoder.java}, %q{java/src/json/ext/GeneratorService.java}, %q{java/src/json/ext/Utils.java}, %q{java/src/json/ext/StringDecoder.java}, %q{java/src/json/ext/Generator.java}, %q{java/src/json/ext/ByteListTranscoder.java}, %q{java/src/json/ext/GeneratorMethods.java}, %q{java/lib}, %q{java/lib/bytelist-1.0.6.jar}, %q{java/lib/jcodings.jar}, %q{diagrams}, %q{README-json-jruby.markdown}, %q{install.rb}, %q{json-java.gemspec}, %q{tools}, %q{tools/fuzz.rb}, %q{tools/server.rb}, %q{./tests/test_json_string_matching.rb}, %q{./tests/test_json_fixtures.rb}, %q{./tests/test_json_unicode.rb}, %q{./tests/test_json_addition.rb}, %q{./tests/test_json_generate.rb}, %q{./tests/test_json_encoding.rb}, %q{./tests/test_json.rb}]
|
15
14
|
s.homepage = %q{http://flori.github.com/json}
|
16
15
|
s.rdoc_options = [%q{--title}, %q{JSON implemention for ruby}, %q{--main}, %q{README.rdoc}]
|
17
16
|
s.require_paths = [%q{lib}]
|
18
17
|
s.rubyforge_project = %q{json}
|
19
|
-
s.rubygems_version = %q{1.8.
|
18
|
+
s.rubygems_version = %q{1.8.6}
|
20
19
|
s.summary = %q{JSON Implementation for Ruby}
|
21
20
|
s.test_files = [%q{./tests/test_json_string_matching.rb}, %q{./tests/test_json_fixtures.rb}, %q{./tests/test_json_unicode.rb}, %q{./tests/test_json_addition.rb}, %q{./tests/test_json_generate.rb}, %q{./tests/test_json_encoding.rb}, %q{./tests/test_json.rb}]
|
22
21
|
|
23
22
|
if s.respond_to? :specification_version then
|
24
|
-
s.specification_version =
|
23
|
+
s.specification_version = 3
|
25
24
|
|
26
25
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
26
|
s.add_development_dependency(%q<permutation>, [">= 0"])
|
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.rb
CHANGED
@@ -7,13 +7,13 @@
|
|
7
7
|
#
|
8
8
|
# Built on two universally available structures:
|
9
9
|
# 1. A collection of name/value pairs. Often referred to as an _object_, hash table, record, struct, keyed list, or associative array.
|
10
|
-
# 2. An
|
10
|
+
# 2. An ordered list of values. More commonly called an _array_, vector, sequence or list.
|
11
11
|
#
|
12
12
|
# To read more about JSON visit: http://json.org
|
13
13
|
#
|
14
14
|
# == Parsing JSON
|
15
15
|
#
|
16
|
-
# To parse a JSON string received by another application
|
16
|
+
# To parse a JSON string received by another application or generated within
|
17
17
|
# your existing application:
|
18
18
|
#
|
19
19
|
# require 'json'
|
@@ -42,8 +42,8 @@
|
|
42
42
|
# puts {:hello => "goodbye"}.to_json => "{\"hello\":\"goodbye\"}"
|
43
43
|
#
|
44
44
|
# <tt>JSON.generate</tt> only allows objects or arrays to be converted
|
45
|
-
# to JSON syntax.
|
46
|
-
# even though it only
|
45
|
+
# to JSON syntax. <tt>to_json</tt>, however, accepts many Ruby classes
|
46
|
+
# even though it acts only as a method for serialization:
|
47
47
|
#
|
48
48
|
# require 'json'
|
49
49
|
#
|
@@ -0,0 +1,22 @@
|
|
1
|
+
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
2
|
+
require 'json'
|
3
|
+
end
|
4
|
+
defined?(::Complex) or require 'complex'
|
5
|
+
|
6
|
+
class Complex
|
7
|
+
def self.json_create(object)
|
8
|
+
Complex(object['r'], object['i'])
|
9
|
+
end
|
10
|
+
|
11
|
+
def as_json(*)
|
12
|
+
{
|
13
|
+
JSON.create_id => self.class.name,
|
14
|
+
'r' => real,
|
15
|
+
'i' => imag,
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_json(*)
|
20
|
+
as_json.to_json
|
21
|
+
end
|
22
|
+
end
|
data/lib/json/add/core.rb
CHANGED
@@ -1,243 +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 respond_to?(:tv_nsec)
|
40
|
-
at(*object.values_at('s', 'n'))
|
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
|
-
{
|
50
|
-
JSON.create_id => self.class.name,
|
51
|
-
's' => tv_sec,
|
52
|
-
'n' => respond_to?(:tv_nsec) ? tv_nsec : tv_usec * 1000
|
53
|
-
}
|
54
|
-
end
|
55
|
-
|
56
|
-
# Stores class name (Time) with number of seconds since epoch and number of
|
57
|
-
# microseconds for Time as JSON string
|
58
|
-
def to_json(*args)
|
59
|
-
as_json.to_json(*args)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
# Date serialization/deserialization
|
64
|
-
class Date
|
65
|
-
|
66
|
-
# Deserializes JSON string by converting Julian year <tt>y</tt>, month
|
67
|
-
# <tt>m</tt>, day <tt>d</tt> and Day of Calendar Reform <tt>sg</tt> to Date.
|
68
|
-
def self.json_create(object)
|
69
|
-
civil(*object.values_at('y', 'm', 'd', 'sg'))
|
70
|
-
end
|
71
|
-
|
72
|
-
alias start sg unless method_defined?(:start)
|
73
|
-
|
74
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
75
|
-
# object.
|
76
|
-
def as_json(*)
|
77
|
-
{
|
78
|
-
JSON.create_id => self.class.name,
|
79
|
-
'y' => year,
|
80
|
-
'm' => month,
|
81
|
-
'd' => day,
|
82
|
-
'sg' => start,
|
83
|
-
}
|
84
|
-
end
|
85
|
-
|
86
|
-
# Stores class name (Date) with Julian year <tt>y</tt>, month <tt>m</tt>, day
|
87
|
-
# <tt>d</tt> and Day of Calendar Reform <tt>sg</tt> as JSON string
|
88
|
-
def to_json(*args)
|
89
|
-
as_json.to_json(*args)
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
# DateTime serialization/deserialization
|
94
|
-
class DateTime
|
95
|
-
|
96
|
-
# Deserializes JSON string by converting year <tt>y</tt>, month <tt>m</tt>,
|
97
|
-
# day <tt>d</tt>, hour <tt>H</tt>, minute <tt>M</tt>, second <tt>S</tt>,
|
98
|
-
# offset <tt>of</tt> and Day of Calendar Reform <tt>sg</tt> to DateTime.
|
99
|
-
def self.json_create(object)
|
100
|
-
args = object.values_at('y', 'm', 'd', 'H', 'M', 'S')
|
101
|
-
of_a, of_b = object['of'].split('/')
|
102
|
-
if of_b and of_b != '0'
|
103
|
-
args << Rational(of_a.to_i, of_b.to_i)
|
104
|
-
else
|
105
|
-
args << of_a
|
106
|
-
end
|
107
|
-
args << object['sg']
|
108
|
-
civil(*args)
|
109
|
-
end
|
110
|
-
|
111
|
-
alias start sg unless method_defined?(:start)
|
112
|
-
|
113
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
114
|
-
# object.
|
115
|
-
def as_json(*)
|
116
|
-
{
|
117
|
-
JSON.create_id => self.class.name,
|
118
|
-
'y' => year,
|
119
|
-
'm' => month,
|
120
|
-
'd' => day,
|
121
|
-
'H' => hour,
|
122
|
-
'M' => min,
|
123
|
-
'S' => sec,
|
124
|
-
'of' => offset.to_s,
|
125
|
-
'sg' => start,
|
126
|
-
}
|
127
|
-
end
|
128
|
-
|
129
|
-
# Stores class name (DateTime) with Julian year <tt>y</tt>, month <tt>m</tt>,
|
130
|
-
# day <tt>d</tt>, hour <tt>H</tt>, minute <tt>M</tt>, second <tt>S</tt>,
|
131
|
-
# offset <tt>of</tt> and Day of Calendar Reform <tt>sg</tt> as JSON string
|
132
|
-
def to_json(*args)
|
133
|
-
as_json.to_json(*args)
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
# Range serialization/deserialization
|
138
|
-
class Range
|
139
|
-
|
140
|
-
# Deserializes JSON string by constructing new Range object with arguments
|
141
|
-
# <tt>a</tt> serialized by <tt>to_json</tt>.
|
142
|
-
def self.json_create(object)
|
143
|
-
new(*object['a'])
|
144
|
-
end
|
145
|
-
|
146
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
147
|
-
# object.
|
148
|
-
def as_json(*)
|
149
|
-
{
|
150
|
-
JSON.create_id => self.class.name,
|
151
|
-
'a' => [ first, last, exclude_end? ]
|
152
|
-
}
|
153
|
-
end
|
154
|
-
|
155
|
-
# Stores class name (Range) with JSON array of arguments <tt>a</tt> which
|
156
|
-
# include <tt>first</tt> (integer), <tt>last</tt> (integer), and
|
157
|
-
# <tt>exclude_end?</tt> (boolean) as JSON string.
|
158
|
-
def to_json(*args)
|
159
|
-
as_json.to_json(*args)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
# Struct serialization/deserialization
|
164
|
-
class Struct
|
165
|
-
|
166
|
-
# Deserializes JSON string by constructing new Struct object with values
|
167
|
-
# <tt>v</tt> serialized by <tt>to_json</tt>.
|
168
|
-
def self.json_create(object)
|
169
|
-
new(*object['v'])
|
170
|
-
end
|
171
|
-
|
172
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
173
|
-
# object.
|
174
|
-
def as_json(*)
|
175
|
-
klass = self.class.name
|
176
|
-
klass.to_s.empty? and raise JSON::JSONError, "Only named structs are supported!"
|
177
|
-
{
|
178
|
-
JSON.create_id => klass,
|
179
|
-
'v' => values,
|
180
|
-
}
|
181
|
-
end
|
182
|
-
|
183
|
-
# Stores class name (Struct) with Struct values <tt>v</tt> as a JSON string.
|
184
|
-
# Only named structs are supported.
|
185
|
-
def to_json(*args)
|
186
|
-
as_json.to_json(*args)
|
187
|
-
end
|
188
|
-
end
|
189
|
-
|
190
|
-
# Exception serialization/deserialization
|
191
|
-
class Exception
|
192
|
-
|
193
|
-
# Deserializes JSON string by constructing new Exception object with message
|
194
|
-
# <tt>m</tt> and backtrace <tt>b</tt> serialized with <tt>to_json</tt>
|
195
|
-
def self.json_create(object)
|
196
|
-
result = new(object['m'])
|
197
|
-
result.set_backtrace object['b']
|
198
|
-
result
|
199
|
-
end
|
200
|
-
|
201
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
202
|
-
# object.
|
203
|
-
def as_json(*)
|
204
|
-
{
|
205
|
-
JSON.create_id => self.class.name,
|
206
|
-
'm' => message,
|
207
|
-
'b' => backtrace,
|
208
|
-
}
|
209
|
-
end
|
210
|
-
|
211
|
-
# Stores class name (Exception) with message <tt>m</tt> and backtrace array
|
212
|
-
# <tt>b</tt> as JSON string
|
213
|
-
def to_json(*args)
|
214
|
-
as_json.to_json(*args)
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
# Regexp serialization/deserialization
|
219
|
-
class Regexp
|
220
|
-
|
221
|
-
# Deserializes JSON string by constructing new Regexp object with source
|
222
|
-
# <tt>s</tt> (Regexp or String) and options <tt>o</tt> serialized by
|
223
|
-
# <tt>to_json</tt>
|
224
|
-
def self.json_create(object)
|
225
|
-
new(object['s'], object['o'])
|
226
|
-
end
|
227
|
-
|
228
|
-
# Returns a hash, that will be turned into a JSON object and represent this
|
229
|
-
# object.
|
230
|
-
def as_json(*)
|
231
|
-
{
|
232
|
-
JSON.create_id => self.class.name,
|
233
|
-
'o' => options,
|
234
|
-
's' => source,
|
235
|
-
}
|
236
|
-
end
|
237
|
-
|
238
|
-
# Stores class name (Regexp) with options <tt>o</tt> and source <tt>s</tt>
|
239
|
-
# (Regexp or String) as JSON string
|
240
|
-
def to_json(*)
|
241
|
-
as_json.to_json
|
242
|
-
end
|
243
|
-
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'
|