json-maglev- 1.5.4 → 1.6.1
Sign up to get free protection for your applications and to get access to all the features.
- 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'
|