multi_json 1.0.0.rc2 → 1.0.0.rc3

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/lib/multi_json.rb CHANGED
@@ -15,7 +15,7 @@ module MultiJson
15
15
  ["yajl", :yajl],
16
16
  ["json", :json_gem],
17
17
  ["json/pure", :json_pure],
18
- ["okjson", :okjson]
18
+ ["ok_json", :ok_json]
19
19
  ]
20
20
 
21
21
  # The default engine based on what you currently
@@ -41,7 +41,7 @@ module MultiJson
41
41
  #
42
42
  # * <tt>:json_gem</tt>
43
43
  # * <tt>:json_pure</tt>
44
- # * <tt>:okjson</tt>
44
+ # * <tt>:ok_json</tt>
45
45
  # * <tt>:yajl</tt>
46
46
  def engine=(new_engine)
47
47
  case new_engine
@@ -61,11 +61,9 @@ module MultiJson
61
61
  #
62
62
  # <tt>:symbolize_keys</tt> :: If true, will use symbols instead of strings for the keys.
63
63
  def decode(string, options = {})
64
- begin
65
- engine.decode(string, options)
66
- rescue StandardError => exception
67
- raise DecodeError, exception.inspect
68
- end
64
+ engine.decode(string, options)
65
+ rescue engine::ParseError => exception
66
+ raise DecodeError, exception.message, exception.backtrace
69
67
  end
70
68
 
71
69
  # Encodes a Ruby object as JSON.
@@ -4,9 +4,12 @@ module MultiJson
4
4
  module Engines
5
5
  # Use the JSON gem to encode/decode.
6
6
  class JsonGem
7
+ ParseError = ::JSON::ParserError
8
+
7
9
  def self.decode(string, options = {}) #:nodoc:
8
10
  opts = {}
9
11
  opts[:symbolize_names] = options[:symbolize_keys]
12
+ string = string.read if string.respond_to?(:read)
10
13
  ::JSON.parse(string, opts)
11
14
  end
12
15
 
@@ -4,9 +4,12 @@ module MultiJson
4
4
  module Engines
5
5
  # Use JSON pure to encode/decode.
6
6
  class JsonPure
7
+ ParseError = ::JSON::ParserError
8
+
7
9
  def self.decode(string, options = {}) #:nodoc:
8
10
  opts = {}
9
11
  opts[:symbolize_names] = options[:symbolize_keys]
12
+ string = string.read if string.respond_to?(:read)
10
13
  ::JSON.parse(string, opts)
11
14
  end
12
15
 
@@ -1,15 +1,18 @@
1
- require "multi_json/vendor/okjson" unless defined?(::OkJson)
1
+ require "multi_json/vendor/ok_json" unless defined?(::OkJson)
2
2
 
3
3
  module MultiJson
4
4
  module Engines
5
- class Okjson
5
+ class OkJson
6
+ ParseError = ::OkJson::Error
7
+
6
8
  def self.decode(string, options = {}) #:nodoc:
7
- result = OkJson.decode(string)
9
+ string = string.read if string.respond_to?(:read)
10
+ result = ::OkJson.decode(string)
8
11
  options[:symbolize_keys] ? symbolize_keys(result) : result
9
12
  end
10
13
 
11
14
  def self.encode(object) #:nodoc:
12
- OkJson.encode(stringify_keys(object))
15
+ ::OkJson.encode(stringify_keys(object))
13
16
  end
14
17
 
15
18
  def self.symbolize_keys(object) #:nodoc:
@@ -4,6 +4,8 @@ module MultiJson
4
4
  module Engines
5
5
  # Use the Yajl-Ruby library to encode/decode.
6
6
  class Yajl
7
+ ParseError = ::Yajl::ParseError
8
+
7
9
  def self.decode(string, options = {}) #:nodoc:
8
10
  ::Yajl::Parser.new(:symbolize_keys => options[:symbolize_keys]).parse(string)
9
11
  end
File without changes
@@ -1,3 +1,3 @@
1
1
  module MultiJson
2
- VERSION = "1.0.0.rc2"
2
+ VERSION = "1.0.0.rc3"
3
3
  end
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
-
2
+ require 'stringio'
3
+
3
4
  class MockDecoder
4
5
  def self.decode(string, options = {})
5
6
  { 'abc' => 'def' }
@@ -12,7 +13,7 @@ end
12
13
 
13
14
  describe "MultiJson" do
14
15
  context 'engines' do
15
- it 'should default to the best available gem' do
16
+ it 'defaults to the best available gem' do
16
17
  # the yajl-ruby gem does not work on jruby, so the best engine is the JsonGem engine
17
18
  if jruby?
18
19
  require 'json'
@@ -23,18 +24,18 @@ describe "MultiJson" do
23
24
  end
24
25
  end
25
26
 
26
- it 'should be settable via a symbol' do
27
+ it 'is settable via a symbol' do
27
28
  MultiJson.engine = :json_gem
28
29
  MultiJson.engine.name.should == 'MultiJson::Engines::JsonGem'
29
30
  end
30
31
 
31
- it 'should be settable via a class' do
32
+ it 'is settable via a class' do
32
33
  MultiJson.engine = MockDecoder
33
34
  MultiJson.engine.name.should == 'MockDecoder'
34
35
  end
35
36
  end
36
37
 
37
- %w(json_gem json_pure okjson yajl).each do |engine|
38
+ %w(json_gem json_pure ok_json yajl).each do |engine|
38
39
  context engine do
39
40
  before do
40
41
  begin
@@ -45,7 +46,7 @@ describe "MultiJson" do
45
46
  end
46
47
 
47
48
  describe '.encode' do
48
- it 'should write decodable JSON' do
49
+ it 'writes decodable JSON' do
49
50
  [
50
51
  { 'abc' => 'def' },
51
52
  [1, 2, 3, "4"]
@@ -54,29 +55,34 @@ describe "MultiJson" do
54
55
  end
55
56
  end
56
57
 
57
- it 'should encode symbol keys as strings' do
58
+ it 'encodes symbol keys as strings' do
58
59
  encoded_json = MultiJson.encode({ :foo => { :bar => 'baz' } })
59
60
  MultiJson.decode(encoded_json).should == { 'foo' => { 'bar' => 'baz' } }
60
61
  end
61
62
  end
62
63
 
63
64
  describe '.decode' do
64
- it 'should properly decode valid JSON' do
65
+ it 'properly decodes valid JSON' do
65
66
  MultiJson.decode('{"abc":"def"}').should == { 'abc' => 'def' }
66
67
  end
67
68
 
68
- it 'should raise MultiJson::DecodeError on invalid JSON' do
69
+ it 'raises MultiJson::DecodeError on invalid JSON' do
69
70
  lambda do
70
71
  MultiJson.decode('{"abc"}')
71
72
  end.should raise_error(MultiJson::DecodeError)
72
73
  end
73
74
 
74
- it 'should stringify symbol keys when encoding' do
75
+ it 'stringifys symbol keys when encoding' do
75
76
  encoded_json = MultiJson.encode(:a => 1, :b => {:c => 2})
76
77
  MultiJson.decode(encoded_json).should == { "a" => 1, "b" => { "c" => 2 } }
77
78
  end
79
+
80
+ it "properly decodes valid JSON in StringIOs" do
81
+ json = StringIO.new('{"abc":"def"}')
82
+ MultiJson.decode(json).should == { 'abc' => 'def' }
83
+ end
78
84
 
79
- it 'should allow for symbolization of keys' do
85
+ it 'allows for symbolization of keys' do
80
86
  MultiJson.decode('{"abc":{"def":"hgi"}}', :symbolize_keys => true).should == { :abc => { :def => 'hgi' } }
81
87
  end
82
88
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: multi_json
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15424049
4
+ hash: 15424051
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 1
8
8
  - 0
9
9
  - 0
10
10
  - rc
11
- - 2
12
- version: 1.0.0.rc2
11
+ - 3
12
+ version: 1.0.0.rc3
13
13
  platform: ruby
14
14
  authors:
15
15
  - Michael Bleigh
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2011-04-18 00:00:00 Z
20
+ date: 2011-04-19 00:00:00 Z
21
21
  dependencies: []
22
22
 
23
23
  description: A gem to provide swappable JSON backends utilizing Yajl::Ruby, the JSON gem, ActiveSupport, or JSON pure.
@@ -42,9 +42,9 @@ files:
42
42
  - lib/multi_json.rb
43
43
  - lib/multi_json/engines/json_gem.rb
44
44
  - lib/multi_json/engines/json_pure.rb
45
- - lib/multi_json/engines/okjson.rb
45
+ - lib/multi_json/engines/ok_json.rb
46
46
  - lib/multi_json/engines/yajl.rb
47
- - lib/multi_json/vendor/okjson.rb
47
+ - lib/multi_json/vendor/ok_json.rb
48
48
  - lib/multi_json/version.rb
49
49
  - multi_json.gemspec
50
50
  - spec/multi_json_spec.rb