multi_json 1.0.3 → 1.0.4

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.
@@ -1,3 +1,3 @@
1
1
  module MultiJson
2
- VERSION = "1.0.3"
2
+ VERSION = "1.0.4"
3
3
  end
@@ -1,23 +1,22 @@
1
- # -*- encoding: utf-8 -*-
1
+ # encoding: utf-8
2
2
  require File.expand_path("../lib/multi_json/version", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |gem|
5
5
  gem.add_development_dependency 'rake', '~> 0.9'
6
- gem.add_development_dependency 'rdoc', '3.5.1'
6
+ gem.add_development_dependency 'rdoc', '~> 3.9'
7
7
  gem.add_development_dependency 'rspec', '~> 2.6'
8
8
  gem.add_development_dependency 'simplecov', '~> 0.4'
9
9
  gem.authors = ["Michael Bleigh", "Josh Kalderimis", "Erik Michaels-Ober"]
10
10
  gem.description = %q{A gem to provide swappable JSON backends utilizing Yajl::Ruby, the JSON gem, JSON pure, or a vendored version of okjson.}
11
11
  gem.email = ['michael@intridea.com', 'josh.kalderimis@gmail.com', 'sferik@gmail.com']
12
- gem.executables = `git ls-files -- bin/*`.split("\n").map{|f| File.basename(f)}
13
12
  gem.extra_rdoc_files = ['LICENSE.md', 'README.md']
14
- gem.files = `git ls-files`.split("\n")
13
+ gem.files = Dir['LICENSE.md', 'README.md', 'Rakefile', 'multi_json.gemspec', 'Gemfile', '.document', '.rspec', '.travis.yml' ,'spec/**/*', 'lib/**/*']
15
14
  gem.homepage = 'http://github.com/intridea/multi_json'
16
15
  gem.name = 'multi_json'
17
16
  gem.rdoc_options = ["--charset=UTF-8"]
18
17
  gem.require_paths = ['lib']
19
18
  gem.required_rubygems_version = Gem::Requirement.new(">= 1.3.6")
20
19
  gem.summary = %q{A gem to provide swappable JSON backends.}
21
- gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
20
+ gem.test_files = Dir['spec/**/*']
22
21
  gem.version = MultiJson::VERSION
23
22
  end
@@ -1,11 +1,35 @@
1
- begin
2
- require 'bundler'
3
- Bundler.setup
4
- rescue LoadError
5
- warn "[WARNING]: It is recommended that you use bundler during development: gem install bundler"
1
+ ['..', '../../lib'].each do |path|
2
+ $:.unshift dir if dir = File.expand_path(path, __FILE__) and not $:.include?(dir)
6
3
  end
7
4
 
8
5
  require 'simplecov'
9
6
  SimpleCov.start
10
- require 'rspec'
7
+
11
8
  require 'multi_json'
9
+ require 'rspec'
10
+
11
+
12
+ class MockDecoder
13
+ def self.decode(string, options = {})
14
+ {'abc' => 'def'}
15
+ end
16
+
17
+ def self.encode(string)
18
+ '{"abc":"def"}'
19
+ end
20
+ end
21
+
22
+ class TimeWithZone
23
+ def to_json(options = {})
24
+ "\"2005-02-01T15:15:10Z\""
25
+ end
26
+ end
27
+
28
+
29
+ def yajl_on_travis(engine)
30
+ ENV['TRAVIS'] && engine == 'yajl' && jruby?
31
+ end
32
+
33
+ def jruby?
34
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
35
+ end
@@ -1,35 +1,46 @@
1
1
  require 'helper'
2
2
  require 'stringio'
3
3
 
4
- class MockDecoder
5
- def self.decode(string, options = {})
6
- {'abc' => 'def'}
7
- end
8
-
9
- def self.encode(string)
10
- '{"abc":"def"}'
11
- end
12
- end
13
-
14
4
  describe "MultiJson" do
15
5
  context 'engines' do
16
- it 'defaults to ok_json if no other json implementions are available' do
17
- old_map = MultiJson::REQUIREMENT_MAP
18
- begin
6
+ context 'when no other json implementations are available' do
7
+ before(:each) do
8
+ @old_map = MultiJson::REQUIREMENT_MAP
9
+ @old_yajl = Object.const_get :Yajl if Object.const_defined?(:Yajl)
10
+ @old_json = Object.const_get :JSON if Object.const_defined?(:JSON)
19
11
  MultiJson::REQUIREMENT_MAP.each_with_index do |(library, engine), index|
20
12
  MultiJson::REQUIREMENT_MAP[index] = ["foo/#{library}", engine]
21
13
  end
22
- MultiJson.default_engine.should == :ok_json
23
- ensure
24
- old_map.each_with_index do |(library, engine), index|
14
+ Object.send :remove_const, :Yajl if @old_yajl
15
+ Object.send :remove_const, :JSON if @old_json
16
+ end
17
+
18
+ after(:each) do
19
+ @old_map.each_with_index do |(library, engine), index|
25
20
  MultiJson::REQUIREMENT_MAP[index] = [library, engine]
26
21
  end
22
+ Object.const_set :Yajl, @old_yajl if @old_yajl
23
+ Object.const_set :JSON, @old_json if @old_json
24
+ end
25
+
26
+ it 'defaults to ok_json if no other json implementions are available' do
27
+ MultiJson.default_engine.should == :ok_json
28
+ end
29
+
30
+ it 'prints a warning' do
31
+ Kernel.should_receive(:warn).with(/warning/i)
32
+ MultiJson.default_engine
27
33
  end
28
34
  end
29
35
 
30
36
  it 'defaults to the best available gem' do
31
- require 'yajl'
32
- MultiJson.engine.name.should == 'MultiJson::Engines::Yajl'
37
+ unless jruby?
38
+ require 'yajl'
39
+ MultiJson.engine.name.should == 'MultiJson::Engines::Yajl'
40
+ else
41
+ require 'json'
42
+ MultiJson.engine.name.should == 'MultiJson::Engines::JsonGem'
43
+ end
33
44
  end
34
45
 
35
46
  it 'is settable via a symbol' do
@@ -44,6 +55,11 @@ describe "MultiJson" do
44
55
  end
45
56
 
46
57
  %w(json_gem json_pure ok_json yajl).each do |engine|
58
+ if yajl_on_travis(engine)
59
+ puts "Yajl with JRuby is not tested on Travis as C-exts are turned off due to there experimental nature"
60
+ next
61
+ end
62
+
47
63
  context engine do
48
64
  before do
49
65
  begin
@@ -87,6 +103,25 @@ describe "MultiJson" do
87
103
  MultiJson.encode("random rootless string").should == "\"random rootless string\""
88
104
  MultiJson.encode(123).should == "123"
89
105
  end
106
+
107
+ it 'passes options to the engine' do
108
+ MultiJson.engine.should_receive(:encode).with('foo', {:bar => :baz})
109
+ MultiJson.encode('foo', :bar => :baz)
110
+ end
111
+
112
+ if engine == 'json_gem' || engine == 'json_pure'
113
+ describe 'with :pretty option set to true' do
114
+ it 'passes default pretty options' do
115
+ object = 'foo'
116
+ object.should_receive(:to_json).with(JSON::PRETTY_STATE_PROTOTYPE.to_h)
117
+ MultiJson.encode(object,:pretty => true)
118
+ end
119
+ end
120
+ end
121
+
122
+ it "encodes custom objects which implement as_json" do
123
+ MultiJson.encode(TimeWithZone.new).should == "\"2005-02-01T15:15:10Z\""
124
+ end
90
125
  end
91
126
 
92
127
  describe '.decode' do
@@ -100,6 +135,15 @@ describe "MultiJson" do
100
135
  end.should raise_error(MultiJson::DecodeError)
101
136
  end
102
137
 
138
+ it 'raises MultiJson::DecodeError with data on invalid JSON' do
139
+ data = '{invalid}'
140
+ begin
141
+ MultiJson.decode(data)
142
+ rescue MultiJson::DecodeError => de
143
+ de.data.should == data
144
+ end
145
+ end
146
+
103
147
  it 'stringifys symbol keys when encoding' do
104
148
  encoded_json = MultiJson.encode(:a => 1, :b => {:c => 2})
105
149
  MultiJson.decode(encoded_json).should == { "a" => 1, "b" => { "c" => 2 } }
metadata CHANGED
@@ -1,122 +1,118 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: multi_json
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.4
4
5
  prerelease:
5
- version: 1.0.3
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Michael Bleigh
9
9
  - Josh Kalderimis
10
10
  - Erik Michaels-Ober
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
-
15
- date: 2011-05-23 00:00:00 Z
16
- dependencies:
17
- - !ruby/object:Gem::Dependency
14
+ date: 2011-11-28 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
18
17
  name: rake
19
- prerelease: false
20
- requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirement: &70345404971980 !ruby/object:Gem::Requirement
21
19
  none: false
22
- requirements:
20
+ requirements:
23
21
  - - ~>
24
- - !ruby/object:Gem::Version
25
- version: "0.9"
22
+ - !ruby/object:Gem::Version
23
+ version: '0.9'
26
24
  type: :development
27
- version_requirements: *id001
28
- - !ruby/object:Gem::Dependency
29
- name: rdoc
30
25
  prerelease: false
31
- requirement: &id002 !ruby/object:Gem::Requirement
26
+ version_requirements: *70345404971980
27
+ - !ruby/object:Gem::Dependency
28
+ name: rdoc
29
+ requirement: &70345404970940 !ruby/object:Gem::Requirement
32
30
  none: false
33
- requirements:
34
- - - "="
35
- - !ruby/object:Gem::Version
36
- version: 3.5.1
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: '3.9'
37
35
  type: :development
38
- version_requirements: *id002
39
- - !ruby/object:Gem::Dependency
40
- name: rspec
41
36
  prerelease: false
42
- requirement: &id003 !ruby/object:Gem::Requirement
37
+ version_requirements: *70345404970940
38
+ - !ruby/object:Gem::Dependency
39
+ name: rspec
40
+ requirement: &70345404968560 !ruby/object:Gem::Requirement
43
41
  none: false
44
- requirements:
42
+ requirements:
45
43
  - - ~>
46
- - !ruby/object:Gem::Version
47
- version: "2.6"
44
+ - !ruby/object:Gem::Version
45
+ version: '2.6'
48
46
  type: :development
49
- version_requirements: *id003
50
- - !ruby/object:Gem::Dependency
51
- name: simplecov
52
47
  prerelease: false
53
- requirement: &id004 !ruby/object:Gem::Requirement
48
+ version_requirements: *70345404968560
49
+ - !ruby/object:Gem::Dependency
50
+ name: simplecov
51
+ requirement: &70345404967560 !ruby/object:Gem::Requirement
54
52
  none: false
55
- requirements:
53
+ requirements:
56
54
  - - ~>
57
- - !ruby/object:Gem::Version
58
- version: "0.4"
55
+ - !ruby/object:Gem::Version
56
+ version: '0.4'
59
57
  type: :development
60
- version_requirements: *id004
61
- description: A gem to provide swappable JSON backends utilizing Yajl::Ruby, the JSON gem, JSON pure, or a vendored version of okjson.
62
- email:
58
+ prerelease: false
59
+ version_requirements: *70345404967560
60
+ description: A gem to provide swappable JSON backends utilizing Yajl::Ruby, the JSON
61
+ gem, JSON pure, or a vendored version of okjson.
62
+ email:
63
63
  - michael@intridea.com
64
64
  - josh.kalderimis@gmail.com
65
65
  - sferik@gmail.com
66
66
  executables: []
67
-
68
67
  extensions: []
69
-
70
- extra_rdoc_files:
68
+ extra_rdoc_files:
71
69
  - LICENSE.md
72
70
  - README.md
73
- files:
74
- - .document
75
- - .gemtest
76
- - .gitignore
77
- - .rspec
78
- - .travis.yml
79
- - Gemfile
71
+ files:
80
72
  - LICENSE.md
81
73
  - README.md
82
74
  - Rakefile
83
- - lib/multi_json.rb
75
+ - multi_json.gemspec
76
+ - Gemfile
77
+ - .document
78
+ - .rspec
79
+ - .travis.yml
80
+ - spec/helper.rb
81
+ - spec/multi_json_spec.rb
82
+ - lib/multi_json/engines/json_common.rb
84
83
  - lib/multi_json/engines/json_gem.rb
85
84
  - lib/multi_json/engines/json_pure.rb
86
85
  - lib/multi_json/engines/ok_json.rb
87
86
  - lib/multi_json/engines/yajl.rb
88
87
  - lib/multi_json/vendor/ok_json.rb
89
88
  - lib/multi_json/version.rb
90
- - multi_json.gemspec
91
- - spec/helper.rb
92
- - spec/multi_json_spec.rb
89
+ - lib/multi_json.rb
93
90
  homepage: http://github.com/intridea/multi_json
94
91
  licenses: []
95
-
96
92
  post_install_message:
97
- rdoc_options:
93
+ rdoc_options:
98
94
  - --charset=UTF-8
99
- require_paths:
95
+ require_paths:
100
96
  - lib
101
- required_ruby_version: !ruby/object:Gem::Requirement
97
+ required_ruby_version: !ruby/object:Gem::Requirement
102
98
  none: false
103
- requirements:
104
- - - ">="
105
- - !ruby/object:Gem::Version
106
- version: "0"
107
- required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ required_rubygems_version: !ruby/object:Gem::Requirement
108
104
  none: false
109
- requirements:
110
- - - ">="
111
- - !ruby/object:Gem::Version
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
112
108
  version: 1.3.6
113
109
  requirements: []
114
-
115
110
  rubyforge_project:
116
- rubygems_version: 1.8.3
111
+ rubygems_version: 1.8.11
117
112
  signing_key:
118
113
  specification_version: 3
119
114
  summary: A gem to provide swappable JSON backends.
120
- test_files:
115
+ test_files:
121
116
  - spec/helper.rb
122
117
  - spec/multi_json_spec.rb
118
+ has_rdoc:
data/.gemtest DELETED
File without changes
data/.gitignore DELETED
@@ -1,34 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- doc
19
- rdoc
20
- log
21
-
22
- ## BUNDLER
23
- *.gem
24
- .bundle
25
- pkg
26
- Gemfile.lock
27
-
28
- ## RCOV
29
- coverage.data
30
-
31
- ## RUBINIUS
32
- *.rbc
33
-
34
- ## PROJECT::SPECIFIC