yajl-ruby 0.6.7 → 0.6.8
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.
Potentially problematic release.
This version of yajl-ruby might be problematic. Click here for more details.
- data/CHANGELOG.md +4 -0
- data/VERSION.yml +1 -1
- data/examples/encoding/chunked_encoding.rb +1 -1
- data/examples/encoding/one_shot.rb +1 -1
- data/examples/encoding/to_an_io.rb +1 -1
- data/examples/http/twitter_search_api.rb +0 -1
- data/examples/http/twitter_stream_api.rb +0 -1
- data/examples/parsing/from_file.rb +1 -1
- data/examples/parsing/from_stdin.rb +1 -1
- data/examples/parsing/from_string.rb +2 -4
- data/ext/extconf.rb +1 -1
- data/ext/yajl_ext.c +30 -7
- data/lib/yajl.rb +1 -1
- data/lib/yajl/http_stream.rb +8 -1
- data/spec/http/http_delete_spec.rb +2 -5
- data/spec/http/http_get_spec.rb +4 -5
- data/spec/http/http_post_spec.rb +2 -5
- data/spec/http/http_put_spec.rb +2 -5
- data/yajl-ruby.gemspec +2 -2
- metadata +2 -2
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.6.8 (January 1st, 2010)
|
4
|
+
* A couple of small performance patches
|
5
|
+
* Allow passing a string to Yajl::HttpStream methods instead of only a URI
|
6
|
+
|
3
7
|
## 0.6.7 (December 4th, 2009)
|
4
8
|
* Bump internal version constant to the proper value (doh!)
|
5
9
|
* Bring over latest from Yajl upstream
|
data/VERSION.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../../lib')
|
2
3
|
|
3
|
-
require 'rubygems'
|
4
4
|
require 'yajl'
|
5
5
|
require 'stringio'
|
6
6
|
|
@@ -9,7 +9,5 @@ unless string = ARGV[0]
|
|
9
9
|
exit(0)
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
|
14
|
-
hash = Yajl::Parser.parse(json)
|
12
|
+
hash = Yajl::Parser.parse(string)
|
15
13
|
puts hash.inspect
|
data/ext/extconf.rb
CHANGED
data/ext/yajl_ext.c
CHANGED
@@ -23,6 +23,31 @@
|
|
23
23
|
|
24
24
|
#include "yajl_ext.h"
|
25
25
|
|
26
|
+
inline const char * strnchr(const char * s, size_t count, char c) {
|
27
|
+
for (; count-- && *s != '\0'; ++s) {
|
28
|
+
if (*s == c) {
|
29
|
+
return s;
|
30
|
+
}
|
31
|
+
}
|
32
|
+
return NULL;
|
33
|
+
}
|
34
|
+
|
35
|
+
inline double strntod(const char * s, size_t count) {
|
36
|
+
char buf[count+1];
|
37
|
+
memcpy(buf, s, count);
|
38
|
+
buf[count] = 0;
|
39
|
+
|
40
|
+
return strtod(buf, NULL);
|
41
|
+
}
|
42
|
+
|
43
|
+
inline VALUE rb_cstrn2inum(const char * s, size_t count) {
|
44
|
+
char buf[count+1];
|
45
|
+
memcpy(buf, s, count);
|
46
|
+
buf[count] = 0;
|
47
|
+
|
48
|
+
return rb_cstr2inum(buf, 10);
|
49
|
+
}
|
50
|
+
|
26
51
|
/* Helpers for building objects */
|
27
52
|
inline void yajl_check_and_fire_callback(void * ctx) {
|
28
53
|
yajl_parser_wrapper * wrapper;
|
@@ -226,15 +251,13 @@ static int yajl_found_boolean(void * ctx, int boolean) {
|
|
226
251
|
}
|
227
252
|
|
228
253
|
static int yajl_found_number(void * ctx, const char * numberVal, unsigned int numberLen) {
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
if (strchr(buf, '.') || strchr(buf, 'e') || strchr(buf, 'E')) {
|
234
|
-
yajl_set_static_value(ctx, rb_float_new(strtod(buf, NULL)));
|
254
|
+
if (strnchr(numberVal, numberLen, '.') ||
|
255
|
+
strnchr(numberVal, numberLen, 'e') ||
|
256
|
+
strnchr(numberVal, numberLen, 'E')) {
|
257
|
+
yajl_set_static_value(ctx, rb_float_new(strntod(numberVal, numberLen)));
|
235
258
|
}
|
236
259
|
else {
|
237
|
-
yajl_set_static_value(ctx,
|
260
|
+
yajl_set_static_value(ctx, rb_cstrn2inum(numberVal, numberLen));
|
238
261
|
}
|
239
262
|
return 1;
|
240
263
|
}
|
data/lib/yajl.rb
CHANGED
@@ -13,7 +13,7 @@ require 'yajl_ext'
|
|
13
13
|
#
|
14
14
|
# Ruby bindings to the excellent Yajl (Yet Another JSON Parser) ANSI C library.
|
15
15
|
module Yajl
|
16
|
-
VERSION = "0.6.
|
16
|
+
VERSION = "0.6.8"
|
17
17
|
|
18
18
|
# For compatibility, has the same signature of Yajl::Parser.parse
|
19
19
|
def self.load(str_or_io, options={}, read_bufsize=nil, &block)
|
data/lib/yajl/http_stream.rb
CHANGED
@@ -76,6 +76,10 @@ module Yajl
|
|
76
76
|
|
77
77
|
protected
|
78
78
|
def self.request(method, uri, opts = {}, &block)
|
79
|
+
if uri.is_a?(String)
|
80
|
+
uri = URI.parse(uri)
|
81
|
+
end
|
82
|
+
|
79
83
|
user_agent = opts.has_key?('User-Agent') ? opts.delete(['User-Agent']) : "Yajl::HttpStream #{Yajl::VERSION}"
|
80
84
|
if method == "POST" || method == "PUT"
|
81
85
|
content_type = opts.has_key?('Content-Type') ? opts.delete(['Content-Type']) : "application/x-www-form-urlencoded"
|
@@ -86,6 +90,9 @@ module Yajl
|
|
86
90
|
end
|
87
91
|
|
88
92
|
socket = opts.has_key?(:socket) ? opts.delete(:socket) : TCPSocket.new(uri.host, uri.port)
|
93
|
+
trap("INT") {
|
94
|
+
return
|
95
|
+
}
|
89
96
|
request = "#{method} #{uri.path}#{uri.query ? "?"+uri.query : nil} HTTP/1.1\r\n"
|
90
97
|
request << "Host: #{uri.host}\r\n"
|
91
98
|
request << "Authorization: Basic #{[uri.userinfo].pack('m').strip!}\r\n" unless uri.userinfo.nil?
|
@@ -162,7 +169,7 @@ module Yajl
|
|
162
169
|
end
|
163
170
|
end
|
164
171
|
ensure
|
165
|
-
socket.close
|
172
|
+
socket.close if !socket.nil? and !socket.closed?
|
166
173
|
end
|
167
174
|
|
168
175
|
private
|
@@ -40,11 +40,6 @@ describe "Yajl HTTP DELETE request" do
|
|
40
40
|
@uri = 'file://'+File.expand_path(File.dirname(__FILE__) + "/fixtures/http/http.#{format}.dump")
|
41
41
|
TCPSocket.should_receive(:new).and_return(@request)
|
42
42
|
@request.should_receive(:write)
|
43
|
-
@uri.should_receive(:host).at_least(2).times
|
44
|
-
@uri.should_receive(:port)
|
45
|
-
@uri.should_receive(:path)
|
46
|
-
@uri.should_receive(:query)
|
47
|
-
@uri.should_receive(:userinfo)
|
48
43
|
end
|
49
44
|
|
50
45
|
it "should parse a raw response" do
|
@@ -54,6 +49,8 @@ describe "Yajl HTTP DELETE request" do
|
|
54
49
|
|
55
50
|
it "should parse a raw response using instance method" do
|
56
51
|
prepare_mock_request_dump :raw
|
52
|
+
@uri.should_receive(:host)
|
53
|
+
@uri.should_receive(:port)
|
57
54
|
stream = Yajl::HttpStream.new
|
58
55
|
@template_hash.should == stream.delete(@uri)
|
59
56
|
end
|
data/spec/http/http_get_spec.rb
CHANGED
@@ -41,11 +41,6 @@ describe "Yajl HTTP GET request" do
|
|
41
41
|
@uri = 'file://'+File.expand_path(File.dirname(__FILE__) + "/fixtures/http/http.#{format}.dump")
|
42
42
|
TCPSocket.should_receive(:new).and_return(@request)
|
43
43
|
@request.should_receive(:write)
|
44
|
-
@uri.should_receive(:host).at_least(2).times
|
45
|
-
@uri.should_receive(:port)
|
46
|
-
@uri.should_receive(:path)
|
47
|
-
@uri.should_receive(:query)
|
48
|
-
@uri.should_receive(:userinfo)
|
49
44
|
end
|
50
45
|
|
51
46
|
it "should parse a raw response" do
|
@@ -60,12 +55,16 @@ describe "Yajl HTTP GET request" do
|
|
60
55
|
|
61
56
|
it "should parse a raw response using instance method" do
|
62
57
|
prepare_mock_request_dump :raw
|
58
|
+
@uri.should_receive(:host)
|
59
|
+
@uri.should_receive(:port)
|
63
60
|
stream = Yajl::HttpStream.new
|
64
61
|
@template_hash.should == stream.get(@uri)
|
65
62
|
end
|
66
63
|
|
67
64
|
it "should parse a chunked response using instance method" do
|
68
65
|
prepare_mock_request_dump :chunked
|
66
|
+
@uri.should_receive(:host)
|
67
|
+
@uri.should_receive(:port)
|
69
68
|
stream = Yajl::HttpStream.new
|
70
69
|
stream.get(@uri) do |obj|
|
71
70
|
obj.should eql(@chunked_body)
|
data/spec/http/http_post_spec.rb
CHANGED
@@ -43,11 +43,6 @@ describe "Yajl HTTP POST request" do
|
|
43
43
|
@uri = 'file://'+File.expand_path(File.dirname(__FILE__) + "/fixtures/http/http.#{format}.dump")
|
44
44
|
TCPSocket.should_receive(:new).and_return(@request)
|
45
45
|
@request.should_receive(:write)
|
46
|
-
@uri.should_receive(:host).at_least(2).times
|
47
|
-
@uri.should_receive(:port)
|
48
|
-
@uri.should_receive(:path)
|
49
|
-
@uri.should_receive(:query)
|
50
|
-
@uri.should_receive(:userinfo)
|
51
46
|
end
|
52
47
|
|
53
48
|
it "should parse a raw response" do
|
@@ -57,6 +52,8 @@ describe "Yajl HTTP POST request" do
|
|
57
52
|
|
58
53
|
it "should parse a raw response using instance method" do
|
59
54
|
prepare_mock_request_dump :raw
|
55
|
+
@uri.should_receive(:host)
|
56
|
+
@uri.should_receive(:port)
|
60
57
|
stream = Yajl::HttpStream.new
|
61
58
|
@template_hash.should == stream.post(@uri, @body)
|
62
59
|
end
|
data/spec/http/http_put_spec.rb
CHANGED
@@ -42,11 +42,6 @@ describe "Yajl HTTP PUT request" do
|
|
42
42
|
@uri = 'file://'+File.expand_path(File.dirname(__FILE__) + "/fixtures/http/http.#{format}.dump")
|
43
43
|
TCPSocket.should_receive(:new).and_return(@request)
|
44
44
|
@request.should_receive(:write)
|
45
|
-
@uri.should_receive(:host).at_least(2).times
|
46
|
-
@uri.should_receive(:port)
|
47
|
-
@uri.should_receive(:path)
|
48
|
-
@uri.should_receive(:query)
|
49
|
-
@uri.should_receive(:userinfo)
|
50
45
|
end
|
51
46
|
|
52
47
|
it "should parse a raw response" do
|
@@ -56,6 +51,8 @@ describe "Yajl HTTP PUT request" do
|
|
56
51
|
|
57
52
|
it "should parse a raw response using instance method" do
|
58
53
|
prepare_mock_request_dump :raw
|
54
|
+
@uri.should_receive(:host)
|
55
|
+
@uri.should_receive(:port)
|
59
56
|
stream = Yajl::HttpStream.new
|
60
57
|
@template_hash.should == stream.put(@uri, @body)
|
61
58
|
end
|
data/yajl-ruby.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{yajl-ruby}
|
8
|
-
s.version = "0.6.
|
8
|
+
s.version = "0.6.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Brian Lopez", "Lloyd Hilaiel"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-01-01}
|
13
13
|
s.email = %q{seniorlopez@gmail.com}
|
14
14
|
s.extensions = ["ext/extconf.rb"]
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yajl-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Lopez
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2010-01-01 00:00:00 -08:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|