wankel 0.1.0 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 16c5766bc7c52d73c0ab261c2b2557ce5c70a8a4
4
- data.tar.gz: 88451d7b6edb81df276df3612507dd78158332ca
3
+ metadata.gz: c6c72e99e43dc80c261cb7de98acfe8a2722eaeb
4
+ data.tar.gz: 9c1ca0c3bed80cd83815309d8bd8f98743c67a4c
5
5
  SHA512:
6
- metadata.gz: 1e6e09d98f7bfe3684b7d47648c21c762529362ceaa02d390483b6a0c1824e28f5606169e72f7749b1a7ec2d4ed55eb82a03c87f08a8c66043df871ef17384ba
7
- data.tar.gz: a9cdb73774d316c51a43d1550cc7ddcce2706c044eb0ec51c652e83e7f60c4257054bb8e849d096e3d3aeeabab473c2d5534a39a2b952a54c78b6a1f64cc3ce1
6
+ metadata.gz: 955623a08d6970492669a8fe10d15e1417bf1d42e097742ce2807b9110dc51bd185e86ad9b46dba49bb5d19008cb96b90567fa396d93c11645356f289b7caea0
7
+ data.tar.gz: 6e66f495681a0501fc9fd56efaf117687c7ce8c3e3940e184f7db184b89f72e6b1153cfd12bd3c79ad76df1dcbd374689993f68ee50780cb4f6ea43675a2006d
data/README.md CHANGED
@@ -1,10 +1,11 @@
1
- <a href="vikingjs.org">![Wankel](/logo.png)</a>
1
+ <a href="http://wanklerb.com">![Wankel](/logo.png)</a>
2
2
 
3
- Wankel is a Ruby gem that provides C bindings to the [YAJL 2](http://lloyd.github.io/yajl/)
4
- C Library.
3
+ **Wankel** is a Ruby gem that provides C bindings to the
4
+ [YAJL 2](http://lloyd.github.io/yajl/) C Library.
5
5
 
6
- Wankel provides a gerneral parsing and encoding, but also a SAX style parser for
7
- stream parsing and generation.
6
+ Wankel provides gerneral parsing and encoding to and from
7
+ [JSON](http://json.org/), but also a SAX style parser and encoder for streaming
8
+ parsing and generation.
8
9
 
9
10
  Features
10
11
  --------
@@ -20,7 +21,7 @@ Features
20
21
  Dependencies
21
22
  ------------
22
23
 
23
- Wankel only dependency is (YAJL)[http://lloyd.github.io/yajl/] version 2.
24
+ Wankel only dependency is [YAJL](http://lloyd.github.io/yajl/) version 2.
24
25
 
25
26
  You can install it with homebrew via:
26
27
 
@@ -40,4 +41,198 @@ gem install wankel
40
41
  Examples
41
42
  --------
42
43
 
43
- TODO
44
+ #### Simple Usage
45
+
46
+ ```ruby
47
+ Wankel.parse('{"key": "value"}')
48
+ # => {"key" => "value"}
49
+
50
+ Wankel.encode({"key" => "value"})
51
+ # => '{"key":"value"}'
52
+ ```
53
+
54
+ #### Sax Parser Example
55
+
56
+ ```ruby
57
+ class SimpleParser < Wankel::SaxParser
58
+ def on_array_start
59
+ puts "Array start"
60
+ end
61
+ def on_string(string)
62
+ puts string
63
+ end
64
+ end
65
+
66
+ parser = SimpleParser.new
67
+ parser.parse('["string1", null, "string2"]')
68
+ # => "Array start"
69
+ # => "string1"
70
+ # => "string2"
71
+ ```
72
+
73
+ #### Sax Encoder Example
74
+
75
+ ```ruby
76
+ output = StringIO.new
77
+ encoder = Wankel::SaxEncoder.new(output)
78
+ encoder.map_open
79
+ encoder.string("key")
80
+ encoder.number(123)
81
+ encoder.map_close
82
+ encoder.complete
83
+ output.rewind
84
+ output.read
85
+ # => '{"key":123}'
86
+ ```
87
+
88
+ Parsing Options
89
+ ---------------
90
+
91
+ * `:symbolize_keys` (Default: `false`)
92
+
93
+ make Hash keys into Ruby symbols
94
+
95
+ ``` ruby
96
+ Wankel.parse('{"key": "value"}', :symbolize_keys => true)
97
+ # => {:key => "value"}
98
+ ```
99
+
100
+ * `:allow_comments` (Default: `false`)
101
+
102
+ Ignore javascript style comments in JSON input.
103
+
104
+ ``` ruby
105
+ Wankel.parse('{"key": /*comment*/ "value"}', :allow_comments => false)
106
+ # => Wankel::ParseError
107
+
108
+ Wankel.parse('{"key": /*comment*/ "value"}', :allow_comments => true)
109
+ # => {"key" => "value"}
110
+ ```
111
+
112
+ * `:validate_utf8` (Default: `false`)
113
+
114
+ Verify that all strings in JSON input are valid UTF8 emit a parse error if
115
+ this is not so. This option makes parsing slightly more expensive.
116
+
117
+ ``` ruby
118
+ Wankel.parse("[\"\x81\x83\"]", :validate_utf8 => false)
119
+ # => ["\x81\x83"]
120
+
121
+ Wankel.parse("[\"\x81\x83\"]", :validate_utf8 => true)
122
+ # => Wankel::ParseError
123
+ ```
124
+
125
+ * `:allow_trailing_garbage` (Default: `false`)
126
+
127
+ Ensure the entire input text was consumed and raise an error otherwise
128
+
129
+ ``` ruby
130
+ Wankel.parse('{"key": "value"}gar', :allow_trailing_garbage => false)
131
+ # => Wankel::ParseError
132
+
133
+ Wankel.parse('{"key": "value"}gar', :allow_trailing_garbage => true)
134
+ # => {"key" => "value"}
135
+ ```
136
+
137
+ * `:multiple_values` (Default: `false`)
138
+
139
+ Allow multiple values to be parsed by a single parser.
140
+ The entire text must be valid JSON, and values can be seperated
141
+ by any kind of whitespace
142
+
143
+ ``` ruby
144
+ Wankel.parse('{"abc": 123}{"def": 456}')
145
+ # => Wankel::ParseError
146
+
147
+ Wankel.parse('{"abc": 123}{"def": 456}', :multiple_values => true)
148
+ # => [{"abc"=>123}, {"def"=>456}]
149
+
150
+ Wankel.parse('{"abc": 123}{"def": 456}', :multiple_values => true) do |obj|
151
+ puts obj
152
+ end
153
+ # => {"abc"=>123}
154
+ # => {"def"=>456}
155
+ ```
156
+
157
+ * `:allow_partial_values` (Default: `false`)
158
+
159
+ TODO
160
+
161
+ * `:read_buffer_size` (Default: `8092`)
162
+
163
+ The read buffer size in bytes when reading from an `IO` Object.
164
+
165
+
166
+ Encoding Options
167
+ ----------------
168
+
169
+ * `:beautify` (Default: `false`)
170
+
171
+ Generate indented (beautiful) output.
172
+
173
+ ``` ruby
174
+ Wankel.encode({"key" => "value"}, :beautify => true)
175
+ # => "{\n \"key\": \"value\"\n}\n"
176
+ ```
177
+
178
+ * `:indent_string` (Default: `" "`, four spaces)
179
+
180
+ The indent string which is used when `:beautify` is enabled
181
+
182
+ ``` ruby
183
+ Wankel.encode({"key" => "value"}, :beautify => true, :indent_string => "\t")
184
+ # => "{\n\t\"key\": \"value\"\n}\n"
185
+ ```
186
+
187
+ * `:validate_utf8` (Default: `false`)
188
+
189
+ Validate that the strings are valid UTF8.
190
+
191
+ ``` ruby
192
+ Wankel.encode(["#{"\201\203"}"], :validate_utf8 => false)
193
+ # => "[\"#{"\201\203"}\"]"
194
+
195
+ Wankel.encode(["#{"\201\203"}"], :validate_utf8 => true)
196
+ # => Wankel::EncodeError
197
+ ```
198
+
199
+ * `:escape_solidus` (Default: `false`)
200
+
201
+ The forward solidus (slash or '/' in human) is not required to be escaped in
202
+ json text. By default, YAJL will not escape it in the iterest of saving bytes.
203
+ Setting this flag will cause YAJL to always escape '/' in generated JSON
204
+ strings.
205
+
206
+ ``` ruby
207
+ Wankel.encode("/", :escape_solidus => false)
208
+ # => '"/"'
209
+
210
+ Wankel.encode("/", :escape_solidus => true)
211
+ # => '"\/"'
212
+ ```
213
+
214
+ * `:write_buffer_size`
215
+
216
+ The write buffer size in bytes before writing to the `IO` object or `String`.
217
+
218
+ Performance Comparisons
219
+ -----------------------
220
+
221
+ TODO:
222
+
223
+ #### General Encoder
224
+
225
+ The test description (ie. Small: 100,000 parses of a 255 byte JSON):
226
+
227
+ | Gem | Parse Time | Rate | Ratio |
228
+ |:------------- |:----------- |:--------------- |:----- |
229
+ | Wankel | N seconds | N.NK parses/sec | N.N |
230
+ | OJ | N seconds | N.NK parses/sec | N.N |
231
+ | Yajl | N seconds | N.NK parses/sec | N.N |
232
+ | JSON::Ext | N seconds | N.NK parses/sec | N.N |
233
+
234
+ #### General Decoder
235
+
236
+ #### Streaming Encoder
237
+
238
+ #### Streaming Decoder
@@ -1,8 +1,6 @@
1
1
  require 'mkmf'
2
2
  require 'rbconfig'
3
3
 
4
- $CFLAGS << '-Wall'
5
-
6
4
  if ARGV.include?('--coverage')
7
5
  $CFLAGS << " -fprofile-arcs -ftest-coverage"
8
6
  $DLDFLAGS << ' --coverage'
@@ -45,26 +45,25 @@ static VALUE c_wankel, c_wankelParser, e_parseError, e_encodeError;
45
45
  * call-seq: new([options])
46
46
  *
47
47
  * +:symbolize_keys+ will turn hash keys into Ruby symbols, defaults to false.
48
- * Default `false`.
48
+ * Default `false`.
49
49
  *
50
50
  * +:allow_comments+ will ignore javascript style comments in JSON input.
51
- * Default `false`.
51
+ * Default `false`.
52
52
  *
53
- * +:validate_strings+ will verify that all strings in JSON input are valid UTF8
54
- * and will emit a parse error if this is not so. This option
55
- * makes parsing slightly more expensive (~7% depending on
56
- * processor and compiler in use). Default `false`.
53
+ * +:validate_utf8+ will verify that all strings in JSON input are valid UTF8
54
+ * and will emit a parse error if this is not so. This option
55
+ * makes parsing slightly more expensive (~7% depending on
56
+ * processor and compiler in use). Default `false`.
57
57
  *
58
58
  * +:allow_trailing_garbage+ will ensure the entire input text was consumed and
59
- * will raise an error otherwise. Default `false`.
59
+ * will raise an error otherwise. Default `false`.
60
60
  *
61
61
  * +:multiple_values+ allow multiple values to be parsed by a single parser. The
62
- * entire text must be valid JSON, and values can be seperated
63
- * by any kind of whitespace. Default `false`.
64
- *
65
- * +:allow_partial_values+ check that the top level value was completely consumed/
66
- * Default `false`.
62
+ * entire text must be valid JSON, and values can be seperated
63
+ * by any kind of whitespace. Default `false`.
67
64
  *
65
+ * +:allow_partial_values+ check that the top level value was completely consumed
66
+ * Default `false`.
68
67
  *
69
68
  * +:read_buffer_size+ is the size of chunk that will be parsed off the input
70
69
  * (if it's an IO) for each loop of the parsing process.
@@ -2,10 +2,10 @@
2
2
  #include "yajl_helpers.h"
3
3
 
4
4
  static VALUE sym_allow_comments;
5
- static VALUE sym_validate_strings;
6
- static VALUE sym_trailing_garbage;
5
+ static VALUE sym_validate_utf8;
6
+ static VALUE sym_allow_trailing_garbage;
7
7
  static VALUE sym_multiple_values;
8
- static VALUE sym_partial_values;
8
+ static VALUE sym_allow_partial_values;
9
9
  static VALUE sym_beautify;
10
10
  static VALUE sym_indent_string;
11
11
  static VALUE sym_validate_utf8;
@@ -13,10 +13,10 @@ static VALUE sym_escape_solidus;
13
13
 
14
14
  void Init_yajl_helpers() {
15
15
  sym_allow_comments = ID2SYM(rb_intern("allow_comments")); rb_gc_register_address(&sym_allow_comments);
16
- sym_validate_strings = ID2SYM(rb_intern("validate_strings")); rb_gc_register_address(&sym_validate_strings);
17
- sym_trailing_garbage = ID2SYM(rb_intern("trailing_garbage")); rb_gc_register_address(&sym_trailing_garbage);
16
+ sym_validate_utf8 = ID2SYM(rb_intern("validate_utf8")); rb_gc_register_address(&sym_validate_utf8);
17
+ sym_allow_trailing_garbage = ID2SYM(rb_intern("allow_trailing_garbage")); rb_gc_register_address(&sym_allow_trailing_garbage);
18
18
  sym_multiple_values = ID2SYM(rb_intern("multiple_values")); rb_gc_register_address(&sym_multiple_values);
19
- sym_partial_values = ID2SYM(rb_intern("partial_values")); rb_gc_register_address(&sym_partial_values);
19
+ sym_allow_partial_values = ID2SYM(rb_intern("allow_partial_values")); rb_gc_register_address(&sym_allow_partial_values);
20
20
  sym_beautify = ID2SYM(rb_intern("beautify")); rb_gc_register_address(&sym_beautify);
21
21
  sym_indent_string = ID2SYM(rb_intern("indent_string")); rb_gc_register_address(&sym_indent_string);
22
22
  sym_validate_utf8 = ID2SYM(rb_intern("validate_utf8")); rb_gc_register_address(&sym_validate_utf8);
@@ -76,13 +76,13 @@ void yajl_configure(yajl_handle handle, VALUE options) {
76
76
  yajl_config(handle, yajl_allow_comments, 0);
77
77
  }
78
78
 
79
- if(rb_hash_aref(options, sym_validate_strings) == Qtrue) {
79
+ if(rb_hash_aref(options, sym_validate_utf8) == Qtrue) {
80
80
  yajl_config(handle, yajl_dont_validate_strings, 0);
81
81
  } else {
82
82
  yajl_config(handle, yajl_dont_validate_strings, 1);
83
83
  }
84
84
 
85
- if(rb_hash_aref(options, sym_trailing_garbage) == Qtrue) {
85
+ if(rb_hash_aref(options, sym_allow_trailing_garbage) == Qtrue) {
86
86
  yajl_config(handle, yajl_allow_trailing_garbage, 1);
87
87
  } else {
88
88
  yajl_config(handle, yajl_allow_trailing_garbage, 0);
@@ -94,7 +94,7 @@ void yajl_configure(yajl_handle handle, VALUE options) {
94
94
  yajl_config(handle, yajl_allow_multiple_values, 0);
95
95
  }
96
96
 
97
- if(rb_hash_aref(options, sym_partial_values) == Qtrue) {
97
+ if(rb_hash_aref(options, sym_allow_partial_values) == Qtrue) {
98
98
  yajl_config(handle, yajl_allow_partial_values, 1);
99
99
  } else {
100
100
  yajl_config(handle, yajl_allow_partial_values, 0);
data/lib/wankel.rb CHANGED
@@ -5,7 +5,7 @@ class Wankel
5
5
  :read_buffer_size => 8092,
6
6
  :symbolize_keys => false,
7
7
  :allow_comments => false,
8
- :validate_strings => false,
8
+ :validate_utf8 => false,
9
9
  :allow_trailing_garbage => false,
10
10
  :multiple_values => false,
11
11
  :allow_partial_values => false,
data/logo.png CHANGED
Binary file
@@ -20,7 +20,7 @@ class TheMindKillerDuce
20
20
  end
21
21
  end
22
22
 
23
- class Wankel::EncoderTest < ::Test::Unit::TestCase
23
+ class Wankel::EncoderTest < Minitest::Test
24
24
  FILES = Dir[File.dirname(__FILE__)+'/../../benchmark/subjects/*.json']
25
25
 
26
26
  FILES.each do |file|
@@ -128,6 +128,24 @@ class Wankel::EncoderTest < ::Test::Unit::TestCase
128
128
  assert_equal(output, result)
129
129
  end
130
130
 
131
+ test "should encoder not should validate UTF8 strings when :validate_utf8 set to false" do
132
+ assert_equal("[\"#{"\201\203"}\"]", Wankel.encode(["#{"\201\203"}"], :validate_utf8 => false))
133
+ end
134
+
135
+ test "should encoder should validate UTF8 strings when :validate_utf8 set to true" do
136
+ assert_raises Wankel::EncodeError do
137
+ Wankel.encode(["#{"\201\203"}"], :validate_utf8 => true)
138
+ end
139
+ end
140
+
141
+ test "should encoder should not escape solidus when :escape_solidus set to false" do
142
+ assert_equal('"/"', Wankel.encode("/", :escape_solidus => false))
143
+ end
144
+
145
+ test "should encoder should escape solidus when :escape_solidus set to true" do
146
+ assert_equal('"\/"', Wankel.encode("/", :escape_solidus => true))
147
+ end
148
+
131
149
  test "should encode multiple objects into a single stream, to an IO" do
132
150
  io = StringIO.new
133
151
  obj = {:foo => 1234}
@@ -1,6 +1,6 @@
1
1
  require 'stringio'
2
2
 
3
- class Wankel::SaxEncoderTest < ::Test::Unit::TestCase
3
+ class Wankel::SaxEncoderTest < Minitest::Test
4
4
 
5
5
  test 'default inherited from Wankel' do
6
6
  encoder = Wankel::SaxEncoder.new(StringIO.new)
@@ -68,7 +68,7 @@ class Wankel::SaxEncoderTest < ::Test::Unit::TestCase
68
68
  encoder.complete
69
69
  assert_equal("{}", output.string)
70
70
  end
71
-
71
+
72
72
  test "array_open" do
73
73
  output = StringIO.new
74
74
  encoder = Wankel::SaxEncoder.new(output)
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  require 'test_helper'
3
3
 
4
- class Wankel::ActiveSupportTest < ::Test::Unit::TestCase
4
+ class Wankel::ActiveSupportTest < Minitest::Test
5
5
 
6
6
  TESTS = {
7
7
  %q({"returnTo":{"\/categories":"\/"}}) => {"returnTo" => {"/categories" => "/"}},
@@ -37,28 +37,24 @@ class Wankel::ActiveSupportTest < ::Test::Unit::TestCase
37
37
 
38
38
  TESTS.each do |json, expected|
39
39
  test "should be able to parse #{json} as an IO" do
40
- assert_nothing_raised Wankel::ParseError do
41
- Wankel.parse(StringIO.new(json))
42
- end
40
+ Wankel.parse(StringIO.new(json))
43
41
  end
44
42
  end
45
43
 
46
44
  TESTS.each do |json, expected|
47
45
  test "should be able to parse #{json} as a string" do
48
- assert_nothing_raised Wankel::ParseError do
49
- Wankel.parse(json)
50
- end
46
+ Wankel.parse(json)
51
47
  end
52
48
  end
53
49
 
54
50
  test "should fail parsing {: 1} as an IO" do
55
- assert_raise Wankel::ParseError do
51
+ assert_raises Wankel::ParseError do
56
52
  Wankel.parse(StringIO.new("{: 1}"))
57
53
  end
58
54
  end
59
55
 
60
56
  test "should fail parsing {: 1} as a string" do
61
- assert_raise Wankel::ParseError do
57
+ assert_raises Wankel::ParseError do
62
58
  Wankel.parse("{: 1}")
63
59
  end
64
60
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  require 'test_helper'
3
3
 
4
- class Wankel::ParsingJSONFixturesTest < ::Test::Unit::TestCase
4
+ class Wankel::ParsingJSONFixturesTest < Minitest::Test
5
5
 
6
6
  fixtures = File.join(File.dirname(__FILE__), 'fixtures/*.json')
7
7
  passed, failed = Dir[fixtures].partition { |f| f['pass'] }
@@ -10,7 +10,7 @@ class Wankel::ParsingJSONFixturesTest < ::Test::Unit::TestCase
10
10
 
11
11
  FAILED.each do |name, source|
12
12
  test "should not be able to parse #{File.basename(name)} as an IO" do
13
- assert_raise Wankel::ParseError do
13
+ assert_raises Wankel::ParseError do
14
14
  Wankel.parse(StringIO.new(source))
15
15
  end
16
16
  end
@@ -18,7 +18,7 @@ class Wankel::ParsingJSONFixturesTest < ::Test::Unit::TestCase
18
18
 
19
19
  FAILED.each do |name, source|
20
20
  test "should not be able to parse #{File.basename(name)} as a string" do
21
- assert_raise Wankel::ParseError do
21
+ assert_raises Wankel::ParseError do
22
22
  Wankel.parse(source)
23
23
  end
24
24
  end
@@ -26,17 +26,13 @@ class Wankel::ParsingJSONFixturesTest < ::Test::Unit::TestCase
26
26
 
27
27
  PASSED.each do |name, source|
28
28
  test "should be able to parse #{File.basename(name)} as an IO" do
29
- assert_nothing_raised Wankel::ParseError do
30
- Wankel.parse(StringIO.new(source), :allow_comments => true)
31
- end
29
+ Wankel.parse(StringIO.new(source), :allow_comments => true)
32
30
  end
33
31
  end
34
32
 
35
33
  PASSED.each do |name, source|
36
34
  test "should be able to parse #{File.basename(name)} as a string" do
37
- assert_nothing_raised Wankel::ParseError do
38
- Wankel.parse(source, :allow_comments => true)
39
- end
35
+ Wankel.parse(source, :allow_comments => true)
40
36
  end
41
37
  end
42
38
 
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  require 'test_helper'
3
3
 
4
- class Wankel::MultipleValuesTest < ::Test::Unit::TestCase
4
+ class Wankel::MultipleValuesTest < Minitest::Test
5
5
 
6
6
  test "parsing with :multiple_values returns an array of values" do
7
7
  assert_equal([true], Wankel.parse('true', :multiple_values => true))
@@ -14,7 +14,7 @@ class Wankel::MultipleValuesTest < ::Test::Unit::TestCase
14
14
  end
15
15
 
16
16
  test "parsing with should raise a Wankel::ParseError error if multiple JSON strings were found when :multiple_values => false" do
17
- assert_raise Wankel::ParseError do
17
+ assert_raises Wankel::ParseError do
18
18
  result = Wankel.parse('[{"abc": 123}][{"def": 456}]', :multiple_values => false)
19
19
  end
20
20
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: UTF-8
2
2
  require 'test_helper'
3
3
 
4
- class Wankel::OneOffParseTest < ::Test::Unit::TestCase
4
+ class Wankel::OneOffParseTest < Minitest::Test
5
5
 
6
6
  test "should parse 23456789012E666 as Infinity" do
7
7
  infinity = (1.0/0)
@@ -9,19 +9,32 @@ class Wankel::OneOffParseTest < ::Test::Unit::TestCase
9
9
  end
10
10
 
11
11
  test "should not parse JSON with a comment, with :allow_comments set to false" do
12
- assert_raise Wankel::ParseError do
12
+ assert_raises Wankel::ParseError do
13
13
  Wankel.parse('{"key": /* this is a comment */ "value"}', :allow_comments => false)
14
14
  end
15
15
  end
16
16
 
17
- test "should not parse invalid UTF8 with :check_utf8 set to true" do
18
- assert_raise Wankel::ParseError do
19
- Wankel.parse("[\"#{"\201\203"}\"]", :validate_strings => true)
17
+ test "should not parse invalid UTF8 with :validate_utf8 set to true" do
18
+ assert_raises Wankel::ParseError do
19
+ Wankel.parse("[\"#{"\201\203"}\"]", :validate_utf8 => true)
20
20
  end
21
21
  end
22
22
 
23
- test "should parse invalid UTF8 with :check_utf8 set to false" do
24
- Wankel.parse("[\"#{"\201\203"}\"]", :check_utf8 => false)
23
+ test "should parse invalid UTF8 with :validate_utf8 set to false" do
24
+ Wankel.parse("[\"#{"\201\203"}\"]", :validate_utf8 => false)
25
+ end
26
+
27
+ test "should not allow trailing garbage with :allow_trailing_garbage set to false" do
28
+ assert_raises Wankel::ParseError do
29
+ Wankel.parse('{"key": "value"}gar', :allow_trailing_garbage => false)
30
+ end
31
+ end
32
+
33
+ test "should allow trailing garbage with :allow_trailing_garbage set to true" do
34
+ assert_equal(
35
+ {"key" => "value"},
36
+ Wankel.parse('{"key": "value"}gar', :allow_trailing_garbage => true)
37
+ )
25
38
  end
26
39
 
27
40
  test "should parse using it's class method, from an IO" do
@@ -24,7 +24,7 @@ class TestParser < Wankel::SaxParser
24
24
  end
25
25
  end
26
26
 
27
- class Wankel::SaxParserTest < ::Test::Unit::TestCase
27
+ class Wankel::SaxParserTest < Minitest::Test
28
28
 
29
29
  test 'default inherited from Wankel' do
30
30
  parser = TestParser.new
data/test/performance.rb CHANGED
@@ -130,6 +130,6 @@ perf = Perf.new()
130
130
  perf.add('JSON::Ext', 'parse') { JSON::Ext::Parser.new(@json).parse }
131
131
  perf.add('Yajl', 'parse') { Yajl::Parser.parse(@json) }
132
132
  perf.add('Oj::Doc', 'parse') { Oj.load(@json) }
133
- parser = Wankel::Parser.new()
133
+ parser = Wankel::Parser.new
134
134
  perf.add('Wankel', 'parse') { parser.parse(@json) }
135
135
  perf.run(1000)
data/test/test_helper.rb CHANGED
@@ -13,14 +13,16 @@ lib = File.expand_path(File.join(root, 'lib'))
13
13
 
14
14
  $LOAD_PATH << lib
15
15
 
16
- require 'turn'
17
- require 'test/unit'
16
+ require "minitest/autorun"
17
+ require 'minitest/unit'
18
+ require 'minitest/reporters'
18
19
  require "mocha/setup"
19
20
  require 'wankel'
20
21
 
22
+ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
21
23
 
22
24
  # File 'lib/active_support/testing/declarative.rb', somewhere in rails....
23
- class ::Test::Unit::TestCase
25
+ class Minitest::Test
24
26
  def self.test(name, &block)
25
27
  test_name = "test_#{name.gsub(/\s+/,'_')}".to_sym
26
28
  defined = instance_method(test_name) rescue false
data/test/wankel_test.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'test_helper'
2
2
 
3
- class WankelTest < ::Test::Unit::TestCase
3
+ class WankelTest < Minitest::Test
4
4
 
5
5
  test "dump should exist as a class-method" do
6
6
  assert(Wankel.respond_to?(:dump))
data/wankel.gemspec CHANGED
@@ -1,14 +1,13 @@
1
1
  Gem::Specification.new do |s|
2
- s.name = 'wankel'
3
- s.version = '0.1.0'
4
- s.authors = ['Jon Bracy']
5
- s.email = ['jonbracy@gmail.com']
6
- s.homepage = 'http://wankelrb.com'
7
- s.summary = 'SAX based JSON parser and encoder'
8
- s.description = 'SAX based JSON parser and encoder'
2
+ s.name = 'wankel'
3
+ s.version = '0.1.1'
4
+ s.licenses = ['MIT']
5
+ s.authors = ['Jon Bracy']
6
+ s.email = ['jonbracy@gmail.com']
7
+ s.homepage = 'http://wankelrb.com'
8
+ s.summary = 'SAX based JSON parser and encoder'
9
+ s.description = 'A JSON parser that enables streaming parsing and encoding of JSON'
9
10
 
10
- s.rubyforge_project = "wankel"
11
-
12
11
  s.files = `git ls-files`.split("\n")
13
12
  s.extensions = ['ext/wankel/extconf.rb']
14
13
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
@@ -16,8 +15,8 @@ Gem::Specification.new do |s|
16
15
 
17
16
  s.required_ruby_version = '>= 2.0.0'
18
17
 
19
- s.add_development_dependency 'rake-compiler'
20
- s.add_development_dependency 'minitest'
21
- s.add_development_dependency 'turn'
22
- s.add_development_dependency 'mocha'
23
- end
18
+ s.add_development_dependency 'rake-compiler', '~> 0.9'
19
+ s.add_development_dependency 'minitest', '~> 5.3'
20
+ s.add_development_dependency 'minitest-reporters', '~> 1.0'
21
+ s.add_development_dependency 'mocha', '~> 1.1'
22
+ end
metadata CHANGED
@@ -1,72 +1,72 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wankel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Bracy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-11 00:00:00.000000000 Z
11
+ date: 2014-06-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '0.9'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: '0.9'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: '5.3'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: '5.3'
41
41
  - !ruby/object:Gem::Dependency
42
- name: turn
42
+ name: minitest-reporters
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '1.0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '1.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: mocha
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - '>='
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1.1'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
69
- description: SAX based JSON parser and encoder
68
+ version: '1.1'
69
+ description: A JSON parser that enables streaming parsing and encoding of JSON
70
70
  email:
71
71
  - jonbracy@gmail.com
72
72
  executables: []
@@ -74,7 +74,7 @@ extensions:
74
74
  - ext/wankel/extconf.rb
75
75
  extra_rdoc_files: []
76
76
  files:
77
- - .gitignore
77
+ - ".gitignore"
78
78
  - LICENSE
79
79
  - README.md
80
80
  - Rakefile
@@ -167,7 +167,8 @@ files:
167
167
  - test/wankel_test.rb
168
168
  - wankel.gemspec
169
169
  homepage: http://wankelrb.com
170
- licenses: []
170
+ licenses:
171
+ - MIT
171
172
  metadata: {}
172
173
  post_install_message:
173
174
  rdoc_options: []
@@ -175,17 +176,17 @@ require_paths:
175
176
  - lib
176
177
  required_ruby_version: !ruby/object:Gem::Requirement
177
178
  requirements:
178
- - - '>='
179
+ - - ">="
179
180
  - !ruby/object:Gem::Version
180
181
  version: 2.0.0
181
182
  required_rubygems_version: !ruby/object:Gem::Requirement
182
183
  requirements:
183
- - - '>='
184
+ - - ">="
184
185
  - !ruby/object:Gem::Version
185
186
  version: '0'
186
187
  requirements: []
187
- rubyforge_project: wankel
188
- rubygems_version: 2.0.7
188
+ rubyforge_project:
189
+ rubygems_version: 2.2.2
189
190
  signing_key:
190
191
  specification_version: 4
191
192
  summary: SAX based JSON parser and encoder
@@ -257,3 +258,4 @@ test_files:
257
258
  - test/performance.rb
258
259
  - test/test_helper.rb
259
260
  - test/wankel_test.rb
261
+ has_rdoc: