yajl-ruby 0.7.5 → 0.7.6

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of yajl-ruby might be problematic. Click here for more details.

data/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.7.6 (May 1st, 2010)
4
+ * use memcmp instead of strcmp for invalid Fixnum check
5
+ * add a spec to verify unicode chars can be used as keys
6
+ * twitter examples updated
7
+ * only use -Wextra if ENV['DEBUG'] is set as gcc 3 doesn't know about it
8
+ * fix chunked http encoding parse logic to further comply with the spec (thanks to Sebastian Cohnen <sebastian.cohnen@gmx.net>)
9
+ * removed as_json checks and usage in encoder to prevent infinite loops
10
+ ** In Rails a lot of objects return self from the as_json method - which is wrong IMO - and needs to be fixed before this feature will work properly
11
+
3
12
  ## 0.7.5 (March 23rd, 2010)
4
13
  * check for existence of and use as_json method on custom objects
5
14
  * bugfix with read buffer when parsing from an IO (thanks to Pavel Valodzka <pavel@valodzka.name>)
data/README.rdoc CHANGED
@@ -62,7 +62,7 @@ only had access to chunks of it at a time. No problem!
62
62
  (Assume we're in an EventMachine::Connection instance)
63
63
 
64
64
  def post_init
65
- @parser = Yajl::Parser.new
65
+ @parser = Yajl::Parser.new(:symbolize_keys => true)
66
66
  end
67
67
 
68
68
  def object_parsed(obj)
@@ -165,7 +165,7 @@ Using EventMachine and you want to encode and send in chunks?
165
165
  def post_init
166
166
  # Passing a :terminator character will let us determine when the encoder
167
167
  # is done encoding the current object
168
- @encoder = Yajl::Encoder.new(:terminator => nil)
168
+ @encoder = Yajl::Encoder.new
169
169
  motd_contents = File.read("/path/to/motd.txt")
170
170
  status = File.read("/path/to/huge/status_file.txt")
171
171
  @motd = {:motd => motd_contents, :system_status => status}
@@ -216,15 +216,14 @@ Once the compatibility API is enabled, your existing or new project should work
216
216
 
217
217
  There are a lot more possibilities that I'd love to see other gems/plugins for someday.
218
218
 
219
- Some ideas are:
219
+ Some ideas:
220
220
  * parsing logs in JSON format
221
221
  * a Rails plugin - DONE! (http://github.com/technoweenie/yajl-rails)
222
- * builtin support in Rails 3?
222
+ * official support in Rails 3 - DONE (http://github.com/rails/rails/commit/a96bf4ab5e73fccdafb78b99e8a122cc2172b505)
223
+ ** and is the default (if installed) - http://github.com/rails/rails/commit/63bb955a99eb46e257655c93dd64e86ebbf05651
223
224
  * Rack middleware (ideally the JSON body could be handed to the parser while it's still being received, this is apparently possible with Unicorn)
224
- * use with ohai - DONE! (http://github.com/opscode/ohai/commit/f89baccc3b9ab587d23e0b6257f6fedffe223c02)
225
- * JSON API clients (http://github.com/brianmario/crack, http://github.com/brianmario/freckle-api)
226
- * Patch Marshal#load and Marshal#dump to use JSON? ;)
227
- * etc...
225
+ * JSON API clients (http://github.com/brianmario/freckle-api)
226
+ * ???
228
227
 
229
228
  == Benchmarks
230
229
 
@@ -299,7 +298,7 @@ NOTE: I converted the 2.4MB JSON file to a Hash and a dump file from Marshal.dum
299
298
 
300
299
  This project includes code from the BSD licensed yajl project, copyright 2007-2009 Lloyd Hilaiel
301
300
 
302
- == Special Thanks
301
+ == Special Thanks & Contributors
303
302
 
304
303
  For those of you using yajl-ruby out in the wild, please hit me up on Twitter (brianmario) or send me a message here on the Githubs describing the site and how you're using it. I'd love to get a list going!
305
304
 
@@ -309,7 +308,13 @@ I've had a lot of inspiration, and a lot of help. Thanks to everyone who's been
309
308
  * Josh Ferguson - http://github.com/besquared - for peer-pressuring me into getting back into C; it worked ;) Also tons of support over IM
310
309
  * Jonathan Novak - http://github.com/cypriss - pointer-hacking help
311
310
  * Tom Smith - http://github.com/rtomsmith - pointer-hacking help
312
- * Rick http://github.com/technoweenie - for making an ActiveSupport patch with support for this library and teasing me that it might go into Rails 3. You sure lit a fire under my ass and I got a ton of work done because of it! :)
311
+ * Rick Olson - http://github.com/technoweenie - for making an ActiveSupport patch with support for this library and teasing me that it might go into Rails 3. You sure lit a fire under my ass and I got a ton of work done because of it! :)
313
312
  * The entire Github Crew - http://github.com/ - my inspiration, time spent writing this, finding Yajl, So many-MANY other things wouldn't have been possible without this awesome service. I owe you guys some whiskey at Kilowatt.
314
- * benburkert - http://github.com/benburkert
313
+ * Ben Burkert - http://github.com/benburkert
315
314
  * Aman Gupta - http://github.com/tmm1 - tons of suggestions and inspiration for the most recent features, and hopefully more to come ;)
315
+ * Filipe Giusti
316
+ * Jonathan George
317
+ * Luke Redpath
318
+ * Neil Berkman
319
+ * Pavel Valodzka
320
+ * Rob Sharp
data/VERSION.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :minor: 7
3
- :patch: 5
3
+ :patch: 6
4
4
  :build:
5
5
  :major: 0
data/benchmark/parse.rb CHANGED
@@ -7,7 +7,7 @@ begin
7
7
  rescue LoadError
8
8
  end
9
9
  begin
10
- require 'active_support/json'
10
+ require 'active_support/all'
11
11
  rescue LoadError
12
12
  begin
13
13
  require 'active_support'
@@ -8,7 +8,5 @@ unless keywords = ARGV[0]
8
8
  puts "\nUsage: ruby examples/http/twitter_search_api.rb keyword\n\n"
9
9
  exit(0)
10
10
  end
11
- captured = 0
12
- uri = URI.parse("http://search.twitter.com/search.json?q=#{keywords}")
13
11
 
14
- puts Yajl::HttpStream.get(uri).inspect
12
+ puts Yajl::HttpStream.get("http://search.twitter.com/search.json?q=#{keywords}").inspect
@@ -11,7 +11,7 @@ unless (username = ARGV[0]) && (password = ARGV[1])
11
11
  exit(0)
12
12
  end
13
13
  captured = 0
14
- uri = URI.parse("http://#{username}:#{password}@stream.twitter.com/spritzer.json")
14
+ uri = URI.parse("http://#{username}:#{password}@stream.twitter.com/1/statuses/sample.json")
15
15
 
16
16
  trap('INT') {
17
17
  puts "\n\nCaptured #{captured} objects from the stream"
data/ext/extconf.rb CHANGED
@@ -2,7 +2,8 @@
2
2
  require 'mkmf'
3
3
  require 'rbconfig'
4
4
 
5
- $CFLAGS << ' -Wall -Wextra -funroll-loops'
5
+ $CFLAGS << ' -Wall -funroll-loops'
6
+ $CFLAGS << ' -Wextra' if ENV['DEBUG']
6
7
  # $CFLAGS << ' -O0 -ggdb'
7
8
 
8
9
  create_makefile("yajl_ext")
data/ext/yajl_ext.c CHANGED
@@ -162,7 +162,7 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) {
162
162
  str = rb_funcall(obj, intern_to_s, 0);
163
163
  cptr = RSTRING_PTR(str);
164
164
  len = RSTRING_LEN(str);
165
- if (strcmp(cptr, "NaN") == 0 || strcmp(cptr, "Infinity") == 0 || strcmp(cptr, "-Infinity") == 0) {
165
+ if (memcmp(cptr, "NaN", 3) == 0 || memcmp(cptr, "Infinity", 8) == 0 || memcmp(cptr, "-Infinity", 9) == 0) {
166
166
  rb_raise(cEncodeError, "'%s' is an invalid number", cptr);
167
167
  }
168
168
  status = yajl_gen_number(w->encoder, cptr, len);
@@ -173,10 +173,7 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) {
173
173
  status = yajl_gen_string(w->encoder, (const unsigned char *)cptr, len);
174
174
  break;
175
175
  default:
176
- if (rb_respond_to(obj, intern_as_json)) {
177
- obj = rb_funcall(obj, intern_as_json, 0);
178
- yajl_encode_part(w, obj, io);
179
- } else if (rb_respond_to(obj, intern_to_json)) {
176
+ if (rb_respond_to(obj, intern_to_json)) {
180
177
  str = rb_funcall(obj, intern_to_json, 0);
181
178
  cptr = RSTRING_PTR(str);
182
179
  len = RSTRING_LEN(str);
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.7.5"
16
+ VERSION = "0.7.6"
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)
@@ -147,9 +147,12 @@ module Yajl
147
147
  if response_head[:headers]["Transfer-Encoding"] == 'chunked'
148
148
  if block_given?
149
149
  chunkLeft = 0
150
- while !socket.eof? && (size = socket.gets.hex)
151
- next if size == 0
150
+ while !socket.eof? && (line = socket.gets)
151
+ break if line.match /0.*?\r\n/
152
+ next if line == "\r\n"
153
+ size = line.hex
152
154
  json = socket.read(size)
155
+ next if json.nil?
153
156
  chunkLeft = size-json.size
154
157
  if chunkLeft == 0
155
158
  parser << json
@@ -7,12 +7,6 @@ class Dummy2
7
7
  end
8
8
  end
9
9
 
10
- class Dummy3
11
- def as_json
12
- {:hawtness => true}
13
- end
14
- end
15
-
16
10
  describe "Yajl JSON encoder" do
17
11
  FILES = Dir[File.dirname(__FILE__)+'/../../benchmark/subjects/*.json']
18
12
 
@@ -161,11 +155,6 @@ describe "Yajl JSON encoder" do
161
155
  Yajl::Encoder.encode({:foo => d}).should eql('{"foo":{"hawtness":true}}')
162
156
  end
163
157
 
164
- it "should check for and call #as_json if it exists on custom objects" do
165
- d = Dummy3.new
166
- Yajl::Encoder.encode(d).should eql('{"hawtness":true}')
167
- end
168
-
169
158
  it "should encode a hash where the key and value can be symbols" do
170
159
  Yajl::Encoder.encode({:foo => :bar}).should eql('{"foo":"bar"}')
171
160
  end
@@ -220,4 +209,9 @@ describe "Yajl JSON encoder" do
220
209
  Yajl::Encoder.encode(-1.0/0.0)
221
210
  }.should raise_error(Yajl::EncodeError)
222
211
  end
212
+
213
+ it "should encode with unicode chars in the key" do
214
+ hash = {"浅草" => "<- those are unicode"}
215
+ Yajl::Encoder.encode(hash).should eql("{\"浅草\":\"<- those are unicode\"}")
216
+ end
223
217
  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.7.5"
8
+ s.version = "0.7.6"
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-03-23}
12
+ s.date = %q{2010-05-01}
13
13
  s.email = %q{seniorlopez@gmail.com}
14
14
  s.extensions = ["ext/extconf.rb"]
15
15
  s.extra_rdoc_files = [
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 7
8
- - 5
9
- version: 0.7.5
8
+ - 6
9
+ version: 0.7.6
10
10
  platform: ruby
11
11
  authors:
12
12
  - Brian Lopez
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-03-23 00:00:00 -07:00
18
+ date: 2010-05-01 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies: []
21
21