gson 0.6.0-java → 0.6.1-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/README.md +8 -0
- data/ext/gson_ext/Decoder.java +3 -3
- data/ext/gson_ext/Encoder.java +31 -9
- data/lib/gson/version.rb +1 -1
- data/test/test_encoder.rb +7 -0
- metadata +2 -2
data/README.md
CHANGED
@@ -23,6 +23,14 @@ Or install it yourself as:
|
|
23
23
|
Gson::Encoder.new.encode({"abc" => [123, -456.789]})
|
24
24
|
=> "{\"abc\":[123,-456.789]}"
|
25
25
|
|
26
|
+
`Gson::Decoder#decode` also accept optional IO or StringIO object:
|
27
|
+
|
28
|
+
File.open("/tmp/gson.json", "w+") do |io|
|
29
|
+
Gson::Encoder.new.encode({"foo" => "bar"}, io)
|
30
|
+
end
|
31
|
+
File.read("/tmp/gson.json")
|
32
|
+
=> "{\"foo\":\"bar\"}"
|
33
|
+
|
26
34
|
Additional encoder options:
|
27
35
|
|
28
36
|
* `:html_safe`, default `false`, force encoder to wrte JSON that is
|
data/ext/gson_ext/Decoder.java
CHANGED
@@ -19,8 +19,8 @@ package gson_ext;
|
|
19
19
|
import com.google.gson.stream.JsonReader;
|
20
20
|
import com.google.gson.stream.JsonToken;
|
21
21
|
import java.io.IOException;
|
22
|
-
import java.io.InputStreamReader;
|
23
22
|
import java.io.InputStream;
|
23
|
+
import java.io.InputStreamReader;
|
24
24
|
import java.io.Reader;
|
25
25
|
import java.io.StringReader;
|
26
26
|
import java.util.LinkedList;
|
@@ -32,7 +32,6 @@ import org.jruby.RubyClass;
|
|
32
32
|
import org.jruby.RubyException;
|
33
33
|
import org.jruby.RubyHash;
|
34
34
|
import org.jruby.RubyIO;
|
35
|
-
import org.jruby.ext.stringio.RubyStringIO;
|
36
35
|
import org.jruby.RubyNumeric;
|
37
36
|
import org.jruby.RubyObject;
|
38
37
|
import org.jruby.RubyString;
|
@@ -40,9 +39,10 @@ import org.jruby.RubySymbol;
|
|
40
39
|
import org.jruby.anno.JRubyClass;
|
41
40
|
import org.jruby.anno.JRubyMethod;
|
42
41
|
import org.jruby.exceptions.RaiseException;
|
42
|
+
import org.jruby.ext.stringio.RubyStringIO;
|
43
|
+
import org.jruby.java.addons.IOJavaAddons;
|
43
44
|
import org.jruby.runtime.ThreadContext;
|
44
45
|
import org.jruby.runtime.builtin.IRubyObject;
|
45
|
-
import org.jruby.java.addons.IOJavaAddons;
|
46
46
|
|
47
47
|
@JRubyClass(name = "Gson::Decoder")
|
48
48
|
public class Decoder extends RubyObject {
|
data/ext/gson_ext/Encoder.java
CHANGED
@@ -17,26 +17,32 @@
|
|
17
17
|
package gson_ext;
|
18
18
|
|
19
19
|
import com.google.gson.stream.JsonWriter;
|
20
|
+
import java.io.IOException;
|
21
|
+
import java.io.OutputStream;
|
22
|
+
import java.io.OutputStreamWriter;
|
20
23
|
import java.io.StringWriter;
|
21
24
|
import java.io.Writer;
|
22
|
-
import java.io.IOException;
|
23
25
|
import org.jruby.Ruby;
|
24
26
|
import org.jruby.RubyArray;
|
25
27
|
import org.jruby.RubyBoolean;
|
26
28
|
import org.jruby.RubyClass;
|
27
29
|
import org.jruby.RubyException;
|
28
|
-
import org.jruby.RubyHash;
|
29
|
-
import org.jruby.RubyNumeric;
|
30
30
|
import org.jruby.RubyFloat;
|
31
|
+
import org.jruby.RubyHash;
|
32
|
+
import org.jruby.RubyIO;
|
31
33
|
import org.jruby.RubyInteger;
|
34
|
+
import org.jruby.RubyNumeric;
|
32
35
|
import org.jruby.RubyObject;
|
33
36
|
import org.jruby.RubyString;
|
34
37
|
import org.jruby.RubySymbol;
|
35
38
|
import org.jruby.anno.JRubyClass;
|
36
39
|
import org.jruby.anno.JRubyMethod;
|
37
40
|
import org.jruby.exceptions.RaiseException;
|
41
|
+
import org.jruby.ext.stringio.RubyStringIO;
|
42
|
+
import org.jruby.java.addons.IOJavaAddons;
|
38
43
|
import org.jruby.runtime.ThreadContext;
|
39
44
|
import org.jruby.runtime.builtin.IRubyObject;
|
45
|
+
import org.jruby.util.IOOutputStream;
|
40
46
|
|
41
47
|
@JRubyClass(name = "Gson::Encoder")
|
42
48
|
public class Encoder extends RubyObject {
|
@@ -118,23 +124,38 @@ public class Encoder extends RubyObject {
|
|
118
124
|
|
119
125
|
}
|
120
126
|
|
121
|
-
|
122
|
-
|
123
|
-
public IRubyObject encode(ThreadContext context, IRubyObject arg) {
|
127
|
+
@JRubyMethod(required = 1, optional = 1)
|
128
|
+
public IRubyObject encode(ThreadContext context, IRubyObject[] args) {
|
124
129
|
Ruby ruby = context.getRuntime();
|
130
|
+
Writer out = null;
|
131
|
+
|
132
|
+
if (args.length < 2 || args[1].isNil()) {
|
133
|
+
out = new StringWriter();
|
134
|
+
} else {
|
135
|
+
IRubyObject io = args[1];
|
136
|
+
if ((io instanceof RubyIO) || (io instanceof RubyStringIO)) {
|
137
|
+
IRubyObject stream = IOJavaAddons.AnyIO.any_to_outputstream(context, io);
|
138
|
+
out = new OutputStreamWriter((OutputStream)stream.toJava(OutputStream.class));
|
139
|
+
} else {
|
140
|
+
throw ruby.newArgumentError("Unsupported source. This method accepts IO");
|
141
|
+
}
|
142
|
+
}
|
125
143
|
|
126
|
-
StringWriter out = new StringWriter();
|
127
144
|
JsonWriter writer = new JsonWriter(out);
|
128
145
|
writer.setLenient(this.lenient);
|
129
146
|
writer.setHtmlSafe(this.htmlSafe);
|
130
147
|
writer.setIndent(this.indent);
|
131
148
|
writer.setSerializeNulls(this.serializeNulls);
|
132
149
|
try {
|
133
|
-
encodeValue(writer, context,
|
150
|
+
encodeValue(writer, context, args[0]);
|
134
151
|
} catch (Exception ex) {
|
135
152
|
throw EncodeError.newEncodeError(ruby, ex.getMessage());
|
136
153
|
}
|
137
|
-
|
154
|
+
if (out instanceof StringWriter) {
|
155
|
+
return ruby.newString(out.toString());
|
156
|
+
} else {
|
157
|
+
return context.nil;
|
158
|
+
}
|
138
159
|
}
|
139
160
|
|
140
161
|
private void encodeValue(JsonWriter writer, ThreadContext context, IRubyObject val)
|
@@ -180,6 +201,7 @@ public class Encoder extends RubyObject {
|
|
180
201
|
} else {
|
181
202
|
writer.value(val.anyToString().toString());
|
182
203
|
}
|
204
|
+
writer.flush();
|
183
205
|
}
|
184
206
|
|
185
207
|
}
|
data/lib/gson/version.rb
CHANGED
data/test/test_encoder.rb
CHANGED
@@ -139,4 +139,11 @@ EOJ
|
|
139
139
|
assert_equal(expected, decoder.decode(dumped_json))
|
140
140
|
end
|
141
141
|
|
142
|
+
def test_it_supports_output_streams
|
143
|
+
encoder = Gson::Encoder.new
|
144
|
+
expected = '{"foo":1,"bar":2}'
|
145
|
+
output = StringIO.new
|
146
|
+
encoder.encode({:foo => 1, :bar => 2}, output)
|
147
|
+
assert_equal expected, output.string
|
148
|
+
end
|
142
149
|
end
|
metadata
CHANGED
@@ -2,14 +2,14 @@
|
|
2
2
|
name: gson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.6.
|
5
|
+
version: 0.6.1
|
6
6
|
platform: java
|
7
7
|
authors:
|
8
8
|
- Sergey Avseyev
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake-compiler
|