yajl-ruby 0.6.8 → 0.6.9
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/MIT-LICENSE +1 -1
- data/Rakefile +1 -1
- data/VERSION.yml +2 -1
- data/ext/yajl_ext.c +1 -1
- data/lib/yajl.rb +1 -1
- data/lib/yajl/http_stream.rb +16 -1
- data/spec/http/fixtures/http.error.dump +12 -0
- data/spec/http/fixtures/http.html.dump +1 -1
- data/spec/http/http_delete_spec.rb +5 -0
- data/spec/http/http_error_spec.rb +33 -0
- data/spec/http/http_get_spec.rb +6 -1
- data/spec/http/http_post_spec.rb +5 -0
- data/spec/http/http_put_spec.rb +5 -0
- data/spec/spec_helper.rb +1 -1
- data/yajl-ruby.gemspec +8 -4
- metadata +5 -2
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## 0.6.9 (January 26th, 2010)
|
4
|
+
* HttpStream patches merged in from Luke Redpath <contact@lukeredpath.co.uk>
|
5
|
+
* Changed how Yajl::Parser was calling IO#read to better conform to the Rack spec and thus can be used to directly parse a rack.input stream
|
6
|
+
|
3
7
|
## 0.6.8 (January 1st, 2010)
|
4
8
|
* A couple of small performance patches
|
5
9
|
* Allow passing a string to Yajl::HttpStream methods instead of only a URI
|
data/MIT-LICENSE
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
Copyright (c) 2008-
|
1
|
+
Copyright (c) 2008-2010 Brian Lopez - http://github.com/brianmario
|
2
2
|
|
3
3
|
Permission is hereby granted, free of charge, to any person obtaining
|
4
4
|
a copy of this software and associated documentation files (the
|
data/Rakefile
CHANGED
@@ -15,7 +15,7 @@ begin
|
|
15
15
|
gem.rubyforge_project = "yajl-ruby"
|
16
16
|
end
|
17
17
|
rescue LoadError
|
18
|
-
puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install
|
18
|
+
puts "Jeweler, or one of its dependencies, is not available. Install it with: sudo gem install jeweler -s http://gems.github.com"
|
19
19
|
end
|
20
20
|
|
21
21
|
require 'rake'
|
data/VERSION.yml
CHANGED
data/ext/yajl_ext.c
CHANGED
@@ -441,7 +441,7 @@ static VALUE rb_yajl_parser_parse(int argc, VALUE * argv, VALUE self) {
|
|
441
441
|
} else if (rb_respond_to(input, intern_eof)) {
|
442
442
|
VALUE parsed = rb_str_new2("");
|
443
443
|
while (rb_funcall(input, intern_eof, 0) != Qtrue) {
|
444
|
-
rb_funcall(input, intern_io_read,
|
444
|
+
parsed = rb_funcall(input, intern_io_read, 1, rbufsize);
|
445
445
|
cptr = RSTRING_PTR(parsed);
|
446
446
|
yajl_parse_chunk((const unsigned char*)cptr, (unsigned int)strlen(cptr), wrapper->parser);
|
447
447
|
}
|
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.9"
|
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
@@ -11,6 +11,15 @@ module Yajl
|
|
11
11
|
# This Exception is thrown when an HTTP response isn't in ALLOWED_MIME_TYPES
|
12
12
|
# and therefore cannot be parsed.
|
13
13
|
class InvalidContentType < Exception; end
|
14
|
+
class HttpError < StandardError
|
15
|
+
|
16
|
+
attr_reader :message, :headers
|
17
|
+
|
18
|
+
def initialize(message, headers)
|
19
|
+
@message = message
|
20
|
+
@headers = headers
|
21
|
+
end
|
22
|
+
end
|
14
23
|
|
15
24
|
# The mime-type we expect the response to be. If it's anything else, we can't parse it
|
16
25
|
# and an InvalidContentType is raised.
|
@@ -90,7 +99,7 @@ module Yajl
|
|
90
99
|
end
|
91
100
|
|
92
101
|
socket = opts.has_key?(:socket) ? opts.delete(:socket) : TCPSocket.new(uri.host, uri.port)
|
93
|
-
trap("INT") {
|
102
|
+
original_trap = trap("INT") {
|
94
103
|
return
|
95
104
|
}
|
96
105
|
request = "#{method} #{uri.path}#{uri.query ? "?"+uri.query : nil} HTTP/1.1\r\n"
|
@@ -131,6 +140,11 @@ module Yajl
|
|
131
140
|
end
|
132
141
|
end
|
133
142
|
end
|
143
|
+
|
144
|
+
if (response_head[:code] != 200)
|
145
|
+
raise HttpError.new("Code 200 expected got #{response_head[:code]}", response_head[:headers])
|
146
|
+
end
|
147
|
+
|
134
148
|
parser = Yajl::Parser.new(opts)
|
135
149
|
parser.on_parse_complete = block if block_given?
|
136
150
|
if response_head[:headers]["Transfer-Encoding"] == 'chunked'
|
@@ -169,6 +183,7 @@ module Yajl
|
|
169
183
|
end
|
170
184
|
end
|
171
185
|
ensure
|
186
|
+
trap("INT", original_trap) if original_trap
|
172
187
|
socket.close if !socket.nil? and !socket.closed?
|
173
188
|
end
|
174
189
|
|
@@ -0,0 +1,12 @@
|
|
1
|
+
HTTP/1.1 404 NOT FOUND
|
2
|
+
Vary: Accept-Encoding
|
3
|
+
Content-Type: text/html
|
4
|
+
Accept-Ranges: bytes
|
5
|
+
ETag: "-1274243775"
|
6
|
+
Last-Modified: Thu, 30 Apr 2009 04:36:11 GMT
|
7
|
+
Content-Length: 32444
|
8
|
+
Date: Wed, 24 Jun 2009 06:02:18 GMT
|
9
|
+
Server: lighttpd/1.4.22
|
10
|
+
Transfer-Encoding: chunked
|
11
|
+
|
12
|
+
<html>THIS PAGE COULD NOT BE FOUND!</html>
|
@@ -91,4 +91,9 @@ describe "Yajl HTTP DELETE request" do
|
|
91
91
|
prepare_mock_request_dump :gzip
|
92
92
|
@template_hash_symbolized.should == Yajl::HttpStream.delete(@uri, :symbolize_keys => true)
|
93
93
|
end
|
94
|
+
|
95
|
+
it "should raise when an HTTP code that isn't 200 is returned" do
|
96
|
+
prepare_mock_request_dump :error
|
97
|
+
lambda { Yajl::HttpStream.delete(@uri) }.should raise_exception(Yajl::HttpStream::HttpError)
|
98
|
+
end
|
94
99
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper.rb')
|
3
|
+
begin
|
4
|
+
require 'yajl/bzip2'
|
5
|
+
rescue
|
6
|
+
warn "Couldn't load yajl/bzip2, maybe you don't have bzip2-ruby installed? Continuing without running bzip2 specs."
|
7
|
+
end
|
8
|
+
require 'yajl/gzip'
|
9
|
+
require 'yajl/deflate'
|
10
|
+
require 'yajl/http_stream'
|
11
|
+
|
12
|
+
describe "Yajl HTTP error" do
|
13
|
+
before(:all) do
|
14
|
+
@request = File.new(File.expand_path(File.dirname(__FILE__) + "/fixtures/http.error.dump"), 'r')
|
15
|
+
@uri = 'file://'+File.expand_path(File.dirname(__FILE__) + "/fixtures/http/http.error.dump")
|
16
|
+
TCPSocket.should_receive(:new).and_return(@request)
|
17
|
+
@request.should_receive(:write)
|
18
|
+
|
19
|
+
begin
|
20
|
+
Yajl::HttpStream.get(@uri)
|
21
|
+
rescue Yajl::HttpStream::HttpError => e
|
22
|
+
@error = e
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should contain the error code in the message" do
|
27
|
+
@error.message.should match(/404/)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should provide the HTTP response headers" do
|
31
|
+
@error.headers.keys.should include('ETag', 'Content-Length', 'Server')
|
32
|
+
end
|
33
|
+
end
|
data/spec/http/http_get_spec.rb
CHANGED
@@ -102,4 +102,9 @@ describe "Yajl HTTP GET request" do
|
|
102
102
|
prepare_mock_request_dump :gzip
|
103
103
|
@template_hash_symbolized.should == Yajl::HttpStream.get(@uri, :symbolize_keys => true)
|
104
104
|
end
|
105
|
-
|
105
|
+
|
106
|
+
it "should raise when an HTTP code that isn't 200 is returned" do
|
107
|
+
prepare_mock_request_dump :error
|
108
|
+
lambda { Yajl::HttpStream.get(@uri) }.should raise_exception(Yajl::HttpStream::HttpError)
|
109
|
+
end
|
110
|
+
end
|
data/spec/http/http_post_spec.rb
CHANGED
@@ -116,4 +116,9 @@ describe "Yajl HTTP POST request" do
|
|
116
116
|
prepare_mock_request_dump :html
|
117
117
|
lambda {Yajl::HttpStream.post(@uri, @body)}.should raise_error(Yajl::HttpStream::InvalidContentType)
|
118
118
|
end
|
119
|
+
|
120
|
+
it "should raise when an HTTP code that isn't 200 is returned" do
|
121
|
+
prepare_mock_request_dump :error
|
122
|
+
lambda { Yajl::HttpStream.post(@uri, @body) }.should raise_exception(Yajl::HttpStream::HttpError)
|
123
|
+
end
|
119
124
|
end
|
data/spec/http/http_put_spec.rb
CHANGED
@@ -98,4 +98,9 @@ describe "Yajl HTTP PUT request" do
|
|
98
98
|
prepare_mock_request_dump :gzip
|
99
99
|
@template_hash_symbolized.should == Yajl::HttpStream.put(@uri, @body, :symbolize_keys => true)
|
100
100
|
end
|
101
|
+
|
102
|
+
it "should raise when an HTTP code that isn't 200 is returned" do
|
103
|
+
prepare_mock_request_dump :error
|
104
|
+
lambda { Yajl::HttpStream.put(@uri, @body) }.should raise_exception(Yajl::HttpStream::HttpError)
|
105
|
+
end
|
101
106
|
end
|
data/spec/spec_helper.rb
CHANGED
data/yajl-ruby.gemspec
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
4
|
# -*- encoding: utf-8 -*-
|
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.9"
|
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{2010-01-
|
12
|
+
s.date = %q{2010-01-26}
|
13
13
|
s.email = %q{seniorlopez@gmail.com}
|
14
14
|
s.extensions = ["ext/extconf.rb"]
|
15
15
|
s.extra_rdoc_files = [
|
@@ -83,10 +83,12 @@ Gem::Specification.new do |s|
|
|
83
83
|
"spec/http/fixtures/http.bzip2.dump",
|
84
84
|
"spec/http/fixtures/http.chunked.dump",
|
85
85
|
"spec/http/fixtures/http.deflate.dump",
|
86
|
+
"spec/http/fixtures/http.error.dump",
|
86
87
|
"spec/http/fixtures/http.gzip.dump",
|
87
88
|
"spec/http/fixtures/http.html.dump",
|
88
89
|
"spec/http/fixtures/http.raw.dump",
|
89
90
|
"spec/http/http_delete_spec.rb",
|
91
|
+
"spec/http/http_error_spec.rb",
|
90
92
|
"spec/http/http_get_spec.rb",
|
91
93
|
"spec/http/http_post_spec.rb",
|
92
94
|
"spec/http/http_put_spec.rb",
|
@@ -167,6 +169,7 @@ Gem::Specification.new do |s|
|
|
167
169
|
"spec/encoding/encoding_spec.rb",
|
168
170
|
"spec/global/global_spec.rb",
|
169
171
|
"spec/http/http_delete_spec.rb",
|
172
|
+
"spec/http/http_error_spec.rb",
|
170
173
|
"spec/http/http_get_spec.rb",
|
171
174
|
"spec/http/http_post_spec.rb",
|
172
175
|
"spec/http/http_put_spec.rb",
|
@@ -196,3 +199,4 @@ Gem::Specification.new do |s|
|
|
196
199
|
else
|
197
200
|
end
|
198
201
|
end
|
202
|
+
|
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.9
|
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: 2010-01-
|
13
|
+
date: 2010-01-26 00:00:00 -08:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|
@@ -90,10 +90,12 @@ files:
|
|
90
90
|
- spec/http/fixtures/http.bzip2.dump
|
91
91
|
- spec/http/fixtures/http.chunked.dump
|
92
92
|
- spec/http/fixtures/http.deflate.dump
|
93
|
+
- spec/http/fixtures/http.error.dump
|
93
94
|
- spec/http/fixtures/http.gzip.dump
|
94
95
|
- spec/http/fixtures/http.html.dump
|
95
96
|
- spec/http/fixtures/http.raw.dump
|
96
97
|
- spec/http/http_delete_spec.rb
|
98
|
+
- spec/http/http_error_spec.rb
|
97
99
|
- spec/http/http_get_spec.rb
|
98
100
|
- spec/http/http_post_spec.rb
|
99
101
|
- spec/http/http_put_spec.rb
|
@@ -196,6 +198,7 @@ test_files:
|
|
196
198
|
- spec/encoding/encoding_spec.rb
|
197
199
|
- spec/global/global_spec.rb
|
198
200
|
- spec/http/http_delete_spec.rb
|
201
|
+
- spec/http/http_error_spec.rb
|
199
202
|
- spec/http/http_get_spec.rb
|
200
203
|
- spec/http/http_post_spec.rb
|
201
204
|
- spec/http/http_put_spec.rb
|