gson 0.5.0-java
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/.gitignore +5 -0
- data/.rbenv-version +1 -0
- data/Gemfile +4 -0
- data/LICENSE +201 -0
- data/README.md +104 -0
- data/Rakefile +22 -0
- data/benchmark/README.markdown +28 -0
- data/benchmark/benchmark.rb +97 -0
- data/benchmark/profile.rb +46 -0
- data/benchmark/subjects/item.json +1 -0
- data/benchmark/subjects/ohai.json +1216 -0
- data/benchmark/subjects/twitter_search.json +1 -0
- data/benchmark/subjects/twitter_stream.json +430 -0
- data/benchmark/subjects/unicode.json +1 -0
- data/ext/gson_ext/Decoder.java +222 -0
- data/ext/gson_ext/Encoder.java +181 -0
- data/ext/gson_ext/GsonExtService.java +50 -0
- data/gson.gemspec +38 -0
- data/lib/gson-2.2.2.jar +0 -0
- data/lib/gson.rb +33 -0
- data/lib/gson/version.rb +20 -0
- data/tasks/compile.rake +33 -0
- data/tasks/test.rake +25 -0
- data/tasks/util.rake +21 -0
- data/test/okjson/README.markdown +18 -0
- data/test/okjson/t/decode-bignum-e.json +1 -0
- data/test/okjson/t/decode-bignum-e.json.exp +1 -0
- data/test/okjson/t/decode-bignum.json +1 -0
- data/test/okjson/t/decode-bignum.json.exp +1 -0
- data/test/okjson/t/decode-invalid15.json +1 -0
- data/test/okjson/t/decode-invalid15.json.exp +1 -0
- data/test/okjson/t/decode-invalid16.json +1 -0
- data/test/okjson/t/decode-invalid16.json.exp +1 -0
- data/test/okjson/t/decode-invalid17.json +1 -0
- data/test/okjson/t/decode-invalid17.json.exp +1 -0
- data/test/okjson/t/decode-invalid25.json +1 -0
- data/test/okjson/t/decode-invalid25.json.exp +1 -0
- data/test/okjson/t/decode-invalid26.json +1 -0
- data/test/okjson/t/decode-invalid26.json.exp +1 -0
- data/test/okjson/t/decode-invalid27.json +2 -0
- data/test/okjson/t/decode-invalid27.json.exp +1 -0
- data/test/okjson/t/decode-invalid28.json +2 -0
- data/test/okjson/t/decode-invalid28.json.exp +1 -0
- data/test/okjson/t/encode-badutf8.rb +1 -0
- data/test/okjson/t/encode-badutf8.rb.exp +1 -0
- data/test/okjson/t/encode-bignum.json +1 -0
- data/test/okjson/t/encode-bignum.json.exp +1 -0
- data/test/okjson/t/encode-int.rb +1 -0
- data/test/okjson/t/encode-int.rb.exp +1 -0
- data/test/okjson/t/encode-obj.rb +1 -0
- data/test/okjson/t/encode-obj.rb.exp +1 -0
- data/test/okjson/t/encode-utf8.rb +1 -0
- data/test/okjson/t/encode-utf8.rb.exp +1 -0
- data/test/okjson/t/err-key.rb +1 -0
- data/test/okjson/t/err-naninf.rb +1 -0
- data/test/okjson/t/err-other.rb +1 -0
- data/test/okjson/t/err-root.rb +1 -0
- data/test/okjson/t/err-symbol.rb +1 -0
- data/test/okjson/t/invalid-key.json +1 -0
- data/test/okjson/t/invalid-uescape.json +1 -0
- data/test/okjson/t/invalid1.json +1 -0
- data/test/okjson/t/invalid10.json +1 -0
- data/test/okjson/t/invalid11.json +1 -0
- data/test/okjson/t/invalid12.json +1 -0
- data/test/okjson/t/invalid13.json +1 -0
- data/test/okjson/t/invalid14.json +1 -0
- data/test/okjson/t/invalid19.json +1 -0
- data/test/okjson/t/invalid2.json +1 -0
- data/test/okjson/t/invalid20.json +1 -0
- data/test/okjson/t/invalid21.json +1 -0
- data/test/okjson/t/invalid22.json +1 -0
- data/test/okjson/t/invalid23.json +1 -0
- data/test/okjson/t/invalid24.json +1 -0
- data/test/okjson/t/invalid3.json +1 -0
- data/test/okjson/t/invalid4.json +1 -0
- data/test/okjson/t/invalid5.json +1 -0
- data/test/okjson/t/invalid6.json +1 -0
- data/test/okjson/t/invalid7.json +1 -0
- data/test/okjson/t/invalid8.json +1 -0
- data/test/okjson/t/invalid9.json +1 -0
- data/test/okjson/t/valid-0.json +1 -0
- data/test/okjson/t/valid-0.json.exp +1 -0
- data/test/okjson/t/valid-1.json +1 -0
- data/test/okjson/t/valid-1.json.exp +1 -0
- data/test/okjson/t/valid-alnum.json +1 -0
- data/test/okjson/t/valid-alnum.json.exp +1 -0
- data/test/okjson/t/valid-array-deep.json +1 -0
- data/test/okjson/t/valid-array-deep.json.exp +1 -0
- data/test/okjson/t/valid-array-empty.json +1 -0
- data/test/okjson/t/valid-array-empty.json.exp +1 -0
- data/test/okjson/t/valid-array-single.json +1 -0
- data/test/okjson/t/valid-array-single.json.exp +1 -0
- data/test/okjson/t/valid-backslash.json +1 -0
- data/test/okjson/t/valid-backslash.json.exp +1 -0
- data/test/okjson/t/valid-comment.json +1 -0
- data/test/okjson/t/valid-comment.json.exp +1 -0
- data/test/okjson/t/valid-comment2.json +1 -0
- data/test/okjson/t/valid-comment2.json.exp +1 -0
- data/test/okjson/t/valid-compact.json +1 -0
- data/test/okjson/t/valid-compact.json.exp +1 -0
- data/test/okjson/t/valid-escape.json +1 -0
- data/test/okjson/t/valid-escape.json.exp +1 -0
- data/test/okjson/t/valid-false.json +1 -0
- data/test/okjson/t/valid-false.json.exp +1 -0
- data/test/okjson/t/valid-frac-E-minus.json +1 -0
- data/test/okjson/t/valid-frac-E-minus.json.exp +1 -0
- data/test/okjson/t/valid-frac-E-plus.json +1 -0
- data/test/okjson/t/valid-frac-E-plus.json.exp +1 -0
- data/test/okjson/t/valid-frac.json +1 -0
- data/test/okjson/t/valid-frac.json.exp +1 -0
- data/test/okjson/t/valid-hex.json +1 -0
- data/test/okjson/t/valid-hex.json.exp +1 -0
- data/test/okjson/t/valid-integer.json +1 -0
- data/test/okjson/t/valid-integer.json.exp +1 -0
- data/test/okjson/t/valid-json.json +1 -0
- data/test/okjson/t/valid-json.json.exp +1 -0
- data/test/okjson/t/valid-key.json +1 -0
- data/test/okjson/t/valid-key.json.exp +1 -0
- data/test/okjson/t/valid-null.json +1 -0
- data/test/okjson/t/valid-null.json.exp +1 -0
- data/test/okjson/t/valid-object-empty.json +1 -0
- data/test/okjson/t/valid-object-empty.json.exp +1 -0
- data/test/okjson/t/valid-object-single.json +1 -0
- data/test/okjson/t/valid-object-single.json.exp +1 -0
- data/test/okjson/t/valid-punc.json +1 -0
- data/test/okjson/t/valid-punc.json.exp +1 -0
- data/test/okjson/t/valid-quote.json +1 -0
- data/test/okjson/t/valid-quote.json.exp +1 -0
- data/test/okjson/t/valid-quotes.json +1 -0
- data/test/okjson/t/valid-quotes.json.exp +1 -0
- data/test/okjson/t/valid-slash.json +1 -0
- data/test/okjson/t/valid-slash.json.exp +1 -0
- data/test/okjson/t/valid-space.json +1 -0
- data/test/okjson/t/valid-space.json.exp +1 -0
- data/test/okjson/t/valid-spaced.json +5 -0
- data/test/okjson/t/valid-spaced.json.exp +1 -0
- data/test/okjson/t/valid-spaced2.json +13 -0
- data/test/okjson/t/valid-spaced2.json.exp +1 -0
- data/test/okjson/t/valid-true.json +1 -0
- data/test/okjson/t/valid-true.json.exp +1 -0
- data/test/okjson/t/valid-url.json +1 -0
- data/test/okjson/t/valid-url.json.exp +1 -0
- data/test/test_decoder.rb +88 -0
- data/test/test_encoder.rb +102 -0
- data/test/test_okjson.rb +57 -0
- metadata +329 -0
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2012 Couchbase, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
package gson_ext;
|
|
18
|
+
|
|
19
|
+
import com.google.gson.stream.JsonWriter;
|
|
20
|
+
import java.io.StringWriter;
|
|
21
|
+
import java.io.Writer;
|
|
22
|
+
import java.io.IOException;
|
|
23
|
+
import org.jruby.Ruby;
|
|
24
|
+
import org.jruby.RubyArray;
|
|
25
|
+
import org.jruby.RubyBoolean;
|
|
26
|
+
import org.jruby.RubyClass;
|
|
27
|
+
import org.jruby.RubyException;
|
|
28
|
+
import org.jruby.RubyHash;
|
|
29
|
+
import org.jruby.RubyNumeric;
|
|
30
|
+
import org.jruby.RubyFloat;
|
|
31
|
+
import org.jruby.RubyInteger;
|
|
32
|
+
import org.jruby.RubyObject;
|
|
33
|
+
import org.jruby.RubyString;
|
|
34
|
+
import org.jruby.RubySymbol;
|
|
35
|
+
import org.jruby.anno.JRubyClass;
|
|
36
|
+
import org.jruby.anno.JRubyMethod;
|
|
37
|
+
import org.jruby.exceptions.RaiseException;
|
|
38
|
+
import org.jruby.runtime.ThreadContext;
|
|
39
|
+
import org.jruby.runtime.builtin.IRubyObject;
|
|
40
|
+
|
|
41
|
+
@JRubyClass(name = "Gson::Encoder")
|
|
42
|
+
public class Encoder extends RubyObject {
|
|
43
|
+
|
|
44
|
+
static final long serialVersionUID = 5035506147333315973L;
|
|
45
|
+
private boolean htmlSafe = false;
|
|
46
|
+
private boolean lenient = true;
|
|
47
|
+
private boolean serializeNulls = true;
|
|
48
|
+
private String indent = "";
|
|
49
|
+
private IRubyObject options;
|
|
50
|
+
|
|
51
|
+
public Encoder(final Ruby ruby, RubyClass rubyClass) {
|
|
52
|
+
super(ruby, rubyClass);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@JRubyMethod(name = "lenient?")
|
|
56
|
+
public IRubyObject isLenient(ThreadContext context) {
|
|
57
|
+
return RubyBoolean.newBoolean(context.getRuntime(), this.lenient);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@JRubyMethod(name = "html_safe?")
|
|
61
|
+
public IRubyObject isHtmlSafe(ThreadContext context) {
|
|
62
|
+
return RubyBoolean.newBoolean(context.getRuntime(), this.htmlSafe);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
@JRubyMethod(name = "serialize_nils?")
|
|
66
|
+
public IRubyObject isSerializeNulls(ThreadContext context) {
|
|
67
|
+
return RubyBoolean.newBoolean(context.getRuntime(), this.serializeNulls);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
@JRubyMethod(name = "indent")
|
|
71
|
+
public IRubyObject getIndent(ThreadContext context) {
|
|
72
|
+
return RubyString.newString(context.getRuntime(), this.indent);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
@JRubyMethod(optional = 1)
|
|
76
|
+
public IRubyObject initialize(ThreadContext context, IRubyObject[] args) {
|
|
77
|
+
Ruby ruby = context.getRuntime();
|
|
78
|
+
this.options = context.nil;
|
|
79
|
+
if (args.length < 1) {
|
|
80
|
+
return context.nil;
|
|
81
|
+
}
|
|
82
|
+
if (!(args[0] instanceof RubyHash)) {
|
|
83
|
+
throw ruby.newArgumentError("expected Hash for options argument");
|
|
84
|
+
}
|
|
85
|
+
this.options = args[0];
|
|
86
|
+
RubyHash options = (RubyHash)this.options;
|
|
87
|
+
RubySymbol name = ruby.newSymbol("lenient");
|
|
88
|
+
if (options.containsKey(name)) {
|
|
89
|
+
this.lenient = options.op_aref(context, name).isTrue();
|
|
90
|
+
}
|
|
91
|
+
name = ruby.newSymbol("serialize_nils");
|
|
92
|
+
if (options.containsKey(name)) {
|
|
93
|
+
this.serializeNulls = options.op_aref(context, name).isTrue();
|
|
94
|
+
}
|
|
95
|
+
name = ruby.newSymbol("html_safe");
|
|
96
|
+
if (options.containsKey(name)) {
|
|
97
|
+
this.htmlSafe = options.op_aref(context, name).isTrue();
|
|
98
|
+
}
|
|
99
|
+
name = ruby.newSymbol("indent");
|
|
100
|
+
if (options.containsKey(name)) {
|
|
101
|
+
IRubyObject val = options.op_aref(context, name);
|
|
102
|
+
if (val.isNil()) {
|
|
103
|
+
this.indent = "";
|
|
104
|
+
} else {
|
|
105
|
+
this.indent = val.checkStringType().asJavaString();
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return context.nil;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
@JRubyClass(name="Gson::EncodeError", parent="StandardError")
|
|
112
|
+
public static class EncodeError {
|
|
113
|
+
|
|
114
|
+
public static RaiseException newEncodeError(Ruby ruby, String message) {
|
|
115
|
+
RubyClass errorClass = ruby.getModule("Gson").getClass("EncodeError");
|
|
116
|
+
return new RaiseException(RubyException.newException(ruby, errorClass, message), true);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
@JRubyMethod
|
|
123
|
+
public IRubyObject encode(ThreadContext context, IRubyObject arg) {
|
|
124
|
+
Ruby ruby = context.getRuntime();
|
|
125
|
+
|
|
126
|
+
StringWriter out = new StringWriter();
|
|
127
|
+
JsonWriter writer = new JsonWriter(out);
|
|
128
|
+
writer.setLenient(this.lenient);
|
|
129
|
+
writer.setHtmlSafe(this.htmlSafe);
|
|
130
|
+
writer.setIndent(this.indent);
|
|
131
|
+
writer.setSerializeNulls(this.serializeNulls);
|
|
132
|
+
try {
|
|
133
|
+
encodeValue(writer, context, arg);
|
|
134
|
+
} catch (Exception ex) {
|
|
135
|
+
throw EncodeError.newEncodeError(ruby, ex.getMessage());
|
|
136
|
+
}
|
|
137
|
+
return ruby.newString(out.toString());
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private void encodeValue(JsonWriter writer, ThreadContext context, IRubyObject val)
|
|
141
|
+
throws IOException {
|
|
142
|
+
Ruby ruby = context.getRuntime();
|
|
143
|
+
|
|
144
|
+
if (val.isNil()) {
|
|
145
|
+
writer.nullValue();
|
|
146
|
+
} else if (val instanceof RubyHash) {
|
|
147
|
+
writer.beginObject();
|
|
148
|
+
for (Object obj : ((RubyHash)val).directEntrySet()) {
|
|
149
|
+
RubyHash.RubyHashEntry item = (RubyHash.RubyHashEntry)obj;
|
|
150
|
+
writer.name(item.getKey().toString());
|
|
151
|
+
encodeValue(writer, context, (IRubyObject)item.getValue());
|
|
152
|
+
}
|
|
153
|
+
writer.endObject();
|
|
154
|
+
} else if (val instanceof RubyArray) {
|
|
155
|
+
writer.beginArray();
|
|
156
|
+
for (IRubyObject item : ((RubyArray)val).toJavaArray()) {
|
|
157
|
+
encodeValue(writer, context, item);
|
|
158
|
+
}
|
|
159
|
+
writer.endArray();
|
|
160
|
+
} else if (val instanceof RubyString || val instanceof RubySymbol) {
|
|
161
|
+
writer.value(val.toString());
|
|
162
|
+
} else if (val instanceof RubyInteger) {
|
|
163
|
+
try {
|
|
164
|
+
writer.value(((RubyInteger)val).getLongValue());
|
|
165
|
+
} catch (RaiseException ex) {
|
|
166
|
+
if ("RangeError".equals(ex.getException().getType().getName())) {
|
|
167
|
+
writer.value(((RubyInteger)val).getBigIntegerValue());
|
|
168
|
+
} else {
|
|
169
|
+
throw ex;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
} else if (val instanceof RubyFloat) {
|
|
173
|
+
writer.value((Double)((RubyFloat)val).getDoubleValue());
|
|
174
|
+
} else if (val instanceof RubyBoolean) {
|
|
175
|
+
writer.value(val.isTrue());
|
|
176
|
+
} else if (val.respondsTo("to_json")) {
|
|
177
|
+
encodeValue(writer, context, val.callMethod(context, "to_json", this.options));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2012 Couchbase, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import gson_ext.Decoder;
|
|
18
|
+
import gson_ext.Encoder;
|
|
19
|
+
import java.io.IOException;
|
|
20
|
+
import org.jruby.Ruby;
|
|
21
|
+
import org.jruby.RubyClass;
|
|
22
|
+
import org.jruby.RubyModule;
|
|
23
|
+
import org.jruby.runtime.ObjectAllocator;
|
|
24
|
+
import org.jruby.runtime.builtin.IRubyObject;
|
|
25
|
+
import org.jruby.runtime.load.BasicLibraryService;
|
|
26
|
+
|
|
27
|
+
public class GsonExtService implements BasicLibraryService {
|
|
28
|
+
|
|
29
|
+
public boolean basicLoad(final Ruby ruby) throws IOException {
|
|
30
|
+
RubyModule gson = ruby.defineModule("Gson");
|
|
31
|
+
|
|
32
|
+
gson.defineClassUnder("Encoder", ruby.getObject(), new ObjectAllocator() {
|
|
33
|
+
public IRubyObject allocate(Ruby ruby, RubyClass rubyClass) {
|
|
34
|
+
return new Encoder(ruby, rubyClass);
|
|
35
|
+
}
|
|
36
|
+
}).defineAnnotatedMethods(Encoder.class);
|
|
37
|
+
|
|
38
|
+
gson.defineClassUnder("Decoder", ruby.getObject(), new ObjectAllocator() {
|
|
39
|
+
public IRubyObject allocate(Ruby ruby, RubyClass rubyClass) {
|
|
40
|
+
return new Decoder(ruby, rubyClass);
|
|
41
|
+
}
|
|
42
|
+
}).defineAnnotatedMethods(Decoder.class);
|
|
43
|
+
|
|
44
|
+
RubyClass standardError = ruby.getStandardError();
|
|
45
|
+
gson.defineClassUnder("DecodeError", standardError, standardError.getAllocator());
|
|
46
|
+
gson.defineClassUnder("EncodeError", standardError, standardError.getAllocator());
|
|
47
|
+
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
}
|
data/gson.gemspec
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
# Author:: Couchbase <info@couchbase.com>
|
|
3
|
+
# Copyright:: 2012 Couchbase, Inc.
|
|
4
|
+
# License:: Apache License, Version 2.0
|
|
5
|
+
#
|
|
6
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
# See the License for the specific language governing permissions and
|
|
16
|
+
# limitations under the License.
|
|
17
|
+
#
|
|
18
|
+
|
|
19
|
+
lib = File.expand_path('../lib', __FILE__)
|
|
20
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
21
|
+
require 'gson/version'
|
|
22
|
+
|
|
23
|
+
Gem::Specification.new do |gem|
|
|
24
|
+
gem.name = "gson"
|
|
25
|
+
gem.version = Gson::VERSION
|
|
26
|
+
gem.author = "Sergey Avseyev"
|
|
27
|
+
gem.email = "sergey.avseyev@gmail.com"
|
|
28
|
+
gem.description = %q{Ruby wrapper for GSON. https://code.google.com/p/google-gson/}
|
|
29
|
+
gem.summary = %q{Ruby wrapper for GSON}
|
|
30
|
+
gem.homepage = "https://github.com/avsej/gson.rb"
|
|
31
|
+
|
|
32
|
+
gem.files = `git ls-files`.split($/)
|
|
33
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
|
34
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
|
35
|
+
gem.require_paths = ["lib"]
|
|
36
|
+
|
|
37
|
+
gem.add_development_dependency 'rake-compiler', '>= 0.7.5'
|
|
38
|
+
end
|
data/lib/gson-2.2.2.jar
ADDED
|
Binary file
|
data/lib/gson.rb
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Author:: Couchbase <info@couchbase.com>
|
|
2
|
+
# Copyright:: 2012 Couchbase, Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
require 'java'
|
|
19
|
+
require "gson/version"
|
|
20
|
+
require "gson-2.2.2.jar"
|
|
21
|
+
require "gson_ext.jar"
|
|
22
|
+
|
|
23
|
+
module Gson
|
|
24
|
+
|
|
25
|
+
def self.load(object, options = {})
|
|
26
|
+
Decoder.new(options).decode(string)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.dump(string, options = {})
|
|
30
|
+
Encoder.new(options).encode(object)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
data/lib/gson/version.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Author:: Couchbase <info@couchbase.com>
|
|
2
|
+
# Copyright:: 2012 Couchbase, Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
module Gson
|
|
19
|
+
VERSION = "0.5.0"
|
|
20
|
+
end
|
data/tasks/compile.rake
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Author:: Couchbase <info@couchbase.com>
|
|
2
|
+
# Copyright:: 2012 Couchbase, Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
gem 'rake-compiler', '>= 0.7.5'
|
|
19
|
+
require "rake/javaextensiontask"
|
|
20
|
+
|
|
21
|
+
def gemspec
|
|
22
|
+
@clean_gemspec ||= eval(File.read(File.expand_path('../../gson.gemspec', __FILE__)))
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Rake::JavaExtensionTask.new('gson_ext', gemspec) do |ext|
|
|
26
|
+
ext.classpath = File.expand_path("../../lib/gson-2.2.2.jar", __FILE__)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
require 'rubygems/package_task'
|
|
30
|
+
Gem::PackageTask.new(gemspec) do |pkg|
|
|
31
|
+
pkg.need_tar = true
|
|
32
|
+
end
|
|
33
|
+
|
data/tasks/test.rake
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Author:: Couchbase <info@couchbase.com>
|
|
2
|
+
# Copyright:: 2012 Couchbase, Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
require 'rake/testtask'
|
|
19
|
+
Rake::TestTask.new do |test|
|
|
20
|
+
test.libs << "test" << "."
|
|
21
|
+
test.pattern = 'test/test_*.rb'
|
|
22
|
+
test.options = '--verbose'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
Rake::Task['test'].prerequisites.unshift(:compile)
|
data/tasks/util.rake
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Author:: Couchbase <info@couchbase.com>
|
|
2
|
+
# Copyright:: 2012 Couchbase, Inc.
|
|
3
|
+
# License:: Apache License, Version 2.0
|
|
4
|
+
#
|
|
5
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
# you may not use this file except in compliance with the License.
|
|
7
|
+
# You may obtain a copy of the License at
|
|
8
|
+
#
|
|
9
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
#
|
|
11
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
# See the License for the specific language governing permissions and
|
|
15
|
+
# limitations under the License.
|
|
16
|
+
#
|
|
17
|
+
|
|
18
|
+
desc 'Start an irb session and load the library.'
|
|
19
|
+
task :console => :compile do
|
|
20
|
+
exec "irb -I. -Ilib -rgson"
|
|
21
|
+
end
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
These tests originated at https://github.com/kr/okjson
|
|
2
|
+
|
|
3
|
+
Except following changes:
|
|
4
|
+
|
|
5
|
+
* GSON generates floats with uppercase 'E'
|
|
6
|
+
* It doesn't renders Bignum's as numbers, it renders Infinity. See
|
|
7
|
+
`*bignum*.json` tests
|
|
8
|
+
* GSON understands escaping illegal characters like single quote and
|
|
9
|
+
silently skip the backslash. Therefore these tests were renamed:
|
|
10
|
+
* `invalid15.json` to `decode-invalid15.json{,.exp}`
|
|
11
|
+
* `invalid16.json` to `decode-invalid16.json{,.exp}`
|
|
12
|
+
* `invalid17.json` to `decode-invalid17.json{,.exp}`
|
|
13
|
+
* GSON understands verbatim tabs and line breaks in the JSON string.
|
|
14
|
+
Therefore these tests were renamed:
|
|
15
|
+
* `invalid25.json` to `decode-invalid25.json{,.exp}`
|
|
16
|
+
* `invalid26.json` to `decode-invalid26.json{,.exp}`
|
|
17
|
+
* `invalid27.json` to `decode-invalid27.json{,.exp}`
|
|
18
|
+
* `invalid28.json` to `decode-invalid28.json{,.exp}`
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[23456789012E666]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[Infinity]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[23456789012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[23456789012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
["Illegal backslash escape: \x15"]
|