yaji 0.0.9 → 0.0.10
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/.travis.yml +4 -0
- data/HISTORY.markdown +4 -0
- data/README.markdown +1 -0
- data/Rakefile +1 -0
- data/ext/yaji/parser_ext.c +6 -2
- data/lib/yaji/version.rb +1 -1
- data/test/test_parser.rb +53 -0
- data/yaji.gemspec +1 -0
- metadata +23 -11
data/.travis.yml
ADDED
data/HISTORY.markdown
CHANGED
data/README.markdown
CHANGED
data/Rakefile
CHANGED
data/ext/yaji/parser_ext.c
CHANGED
@@ -160,10 +160,14 @@ static VALUE rb_yaji_parser_parse_chunk(VALUE chunk, VALUE self)
|
|
160
160
|
{
|
161
161
|
yajl_status rc;
|
162
162
|
yaji_parser* p = (yaji_parser*) DATA_PTR(self);
|
163
|
-
const char* buf
|
164
|
-
unsigned int len
|
163
|
+
const char* buf;
|
164
|
+
unsigned int len;
|
165
165
|
int i;
|
166
166
|
|
167
|
+
if (NIL_P(chunk) || (len = RSTRING_LEN(chunk)) == 0) {
|
168
|
+
return INT2FIX(0);
|
169
|
+
}
|
170
|
+
buf = RSTRING_PTR(chunk);
|
167
171
|
p->events = rb_ary_new();
|
168
172
|
p->chunk = chunk;
|
169
173
|
rc = yajl_parse(p->handle, (const unsigned char*)buf, len);
|
data/lib/yaji/version.rb
CHANGED
data/test/test_parser.rb
CHANGED
@@ -4,6 +4,37 @@ require 'curb'
|
|
4
4
|
|
5
5
|
class TestParser < MiniTest::Unit::TestCase
|
6
6
|
|
7
|
+
class Generator
|
8
|
+
def initialize(data, options = {})
|
9
|
+
@callback = nil
|
10
|
+
@options = {:chunk_size => 10}.merge(options)
|
11
|
+
@chunks = case data
|
12
|
+
when Array
|
13
|
+
data
|
14
|
+
when String
|
15
|
+
count = (data.bytesize / @options[:chunk_size].to_f).ceil
|
16
|
+
data.unpack("a#{@options[:chunk_size]}" * count)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def on_body
|
21
|
+
old = @callback
|
22
|
+
if block_given?
|
23
|
+
@callback = Proc.new
|
24
|
+
end
|
25
|
+
old
|
26
|
+
end
|
27
|
+
|
28
|
+
def perform
|
29
|
+
size = @options[:chunk_size]
|
30
|
+
if @callback
|
31
|
+
@chunks.each do |chunk|
|
32
|
+
@callback.call(chunk)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
7
38
|
def test_it_generates_events
|
8
39
|
events = []
|
9
40
|
parser = YAJI::Parser.new(toys_json_str)
|
@@ -192,6 +223,28 @@ class TestParser < MiniTest::Unit::TestCase
|
|
192
223
|
YAJI::Parser.new(" \n\n ").parse
|
193
224
|
end
|
194
225
|
|
226
|
+
def test_it_parses_chunked_data
|
227
|
+
generator = Generator.new(['{"total_rows":', '0,"offset":0,"rows":[]', '}'])
|
228
|
+
iter = YAJI::Parser.new(generator).each(["total_rows", "rows/", "errors/"], :with_path => true)
|
229
|
+
begin
|
230
|
+
loop do
|
231
|
+
iter.next
|
232
|
+
end
|
233
|
+
rescue StopIteration
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
def test_it_skips_empty_chunks
|
238
|
+
generator = Generator.new(['{"total_rows":', '0,"offset":0,"rows":[]', '}', '', nil])
|
239
|
+
iter = YAJI::Parser.new(generator).each(["total_rows", "rows/", "errors/"], :with_path => true)
|
240
|
+
begin
|
241
|
+
loop do
|
242
|
+
iter.next
|
243
|
+
end
|
244
|
+
rescue StopIteration
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
195
248
|
protected
|
196
249
|
|
197
250
|
def toys_json_str
|
data/yaji.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.extensions = `git ls-files -- ext/**/extconf.rb`.split("\n")
|
21
21
|
s.require_paths = ["lib"]
|
22
22
|
|
23
|
+
s.add_development_dependency 'rake', '0.8.7'
|
23
24
|
s.add_development_dependency 'rake-compiler'
|
24
25
|
s.add_development_dependency 'minitest'
|
25
26
|
s.add_development_dependency 'curb'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaji
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-
|
12
|
+
date: 2011-12-12 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
requirement: &15274560 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - =
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 0.8.7
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *15274560
|
14
25
|
- !ruby/object:Gem::Dependency
|
15
26
|
name: rake-compiler
|
16
|
-
requirement: &
|
27
|
+
requirement: &15274160 !ruby/object:Gem::Requirement
|
17
28
|
none: false
|
18
29
|
requirements:
|
19
30
|
- - ! '>='
|
@@ -21,10 +32,10 @@ dependencies:
|
|
21
32
|
version: '0'
|
22
33
|
type: :development
|
23
34
|
prerelease: false
|
24
|
-
version_requirements: *
|
35
|
+
version_requirements: *15274160
|
25
36
|
- !ruby/object:Gem::Dependency
|
26
37
|
name: minitest
|
27
|
-
requirement: &
|
38
|
+
requirement: &15273700 !ruby/object:Gem::Requirement
|
28
39
|
none: false
|
29
40
|
requirements:
|
30
41
|
- - ! '>='
|
@@ -32,10 +43,10 @@ dependencies:
|
|
32
43
|
version: '0'
|
33
44
|
type: :development
|
34
45
|
prerelease: false
|
35
|
-
version_requirements: *
|
46
|
+
version_requirements: *15273700
|
36
47
|
- !ruby/object:Gem::Dependency
|
37
48
|
name: curb
|
38
|
-
requirement: &
|
49
|
+
requirement: &15273280 !ruby/object:Gem::Requirement
|
39
50
|
none: false
|
40
51
|
requirements:
|
41
52
|
- - ! '>='
|
@@ -43,10 +54,10 @@ dependencies:
|
|
43
54
|
version: '0'
|
44
55
|
type: :development
|
45
56
|
prerelease: false
|
46
|
-
version_requirements: *
|
57
|
+
version_requirements: *15273280
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: ruby-debug19
|
49
|
-
requirement: &
|
60
|
+
requirement: &15272820 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,7 +65,7 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *15272820
|
58
69
|
description: YAJI is a ruby wrapper to YAJL providing iterator interface to streaming
|
59
70
|
JSON parser
|
60
71
|
email: info@couchbase.com
|
@@ -64,6 +75,7 @@ extensions:
|
|
64
75
|
extra_rdoc_files: []
|
65
76
|
files:
|
66
77
|
- .gitignore
|
78
|
+
- .travis.yml
|
67
79
|
- Gemfile
|
68
80
|
- HISTORY.markdown
|
69
81
|
- LICENSE
|
@@ -119,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
131
|
version: '0'
|
120
132
|
requirements: []
|
121
133
|
rubyforge_project: yaji
|
122
|
-
rubygems_version: 1.8.
|
134
|
+
rubygems_version: 1.8.10
|
123
135
|
signing_key:
|
124
136
|
specification_version: 3
|
125
137
|
summary: Yet another JSON iterator
|