engineyard-serverside 2.0.5 → 2.0.6

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.
Files changed (146) hide show
  1. data/lib/engineyard-serverside.rb +3 -3
  2. data/lib/engineyard-serverside/configuration.rb +6 -6
  3. data/lib/engineyard-serverside/deploy.rb +11 -7
  4. data/lib/engineyard-serverside/version.rb +1 -1
  5. data/lib/vendor/multi_json/CHANGELOG.md +121 -0
  6. data/lib/vendor/multi_json/CONTRIBUTING.md +46 -0
  7. data/lib/vendor/multi_json/Gemfile +31 -0
  8. data/lib/vendor/multi_json/LICENSE.md +20 -0
  9. data/lib/vendor/multi_json/README.md +105 -0
  10. data/lib/vendor/multi_json/Rakefile +12 -0
  11. data/lib/vendor/multi_json/lib/multi_json.rb +137 -0
  12. data/lib/vendor/multi_json/lib/multi_json/adapters/gson.rb +20 -0
  13. data/lib/vendor/multi_json/lib/multi_json/adapters/json_common.rb +35 -0
  14. data/lib/vendor/multi_json/lib/multi_json/adapters/json_gem.rb +12 -0
  15. data/lib/vendor/multi_json/lib/multi_json/adapters/json_pure.rb +12 -0
  16. data/lib/vendor/multi_json/lib/multi_json/adapters/nsjsonserialization.rb +35 -0
  17. data/lib/vendor/multi_json/lib/multi_json/adapters/oj.rb +29 -0
  18. data/lib/vendor/multi_json/lib/multi_json/adapters/ok_json.rb +58 -0
  19. data/lib/vendor/multi_json/lib/multi_json/adapters/yajl.rb +20 -0
  20. data/lib/vendor/multi_json/lib/multi_json/vendor/okjson.rb +602 -0
  21. data/lib/vendor/multi_json/lib/multi_json/version.rb +3 -0
  22. data/lib/vendor/multi_json/multi_json.gemspec +22 -0
  23. data/lib/vendor/multi_json/spec/adapter_shared_example.rb +162 -0
  24. data/lib/vendor/multi_json/spec/helper.rb +45 -0
  25. data/lib/vendor/multi_json/spec/json_common_shared_example.rb +36 -0
  26. data/lib/vendor/multi_json/spec/multi_json_spec.rb +151 -0
  27. data/spec/configuration_spec.rb +79 -1
  28. data/spec/deploy_hook_spec.rb +2 -2
  29. data/spec/spec_helper.rb +1 -1
  30. metadata +26 -120
  31. data/lib/vendor/json_pure/CHANGES +0 -166
  32. data/lib/vendor/json_pure/COPYING +0 -58
  33. data/lib/vendor/json_pure/GPL +0 -340
  34. data/lib/vendor/json_pure/README +0 -358
  35. data/lib/vendor/json_pure/Rakefile +0 -292
  36. data/lib/vendor/json_pure/TODO +0 -1
  37. data/lib/vendor/json_pure/VERSION +0 -1
  38. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkComparison.log +0 -52
  39. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast-autocorrelation.dat +0 -1000
  40. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_fast.dat +0 -1001
  41. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty-autocorrelation.dat +0 -900
  42. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_pretty.dat +0 -901
  43. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe-autocorrelation.dat +0 -1000
  44. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt#generator_safe.dat +0 -1001
  45. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkExt.log +0 -261
  46. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast-autocorrelation.dat +0 -1000
  47. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_fast.dat +0 -1001
  48. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty-autocorrelation.dat +0 -1000
  49. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_pretty.dat +0 -1001
  50. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe-autocorrelation.dat +0 -1000
  51. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure#generator_safe.dat +0 -1001
  52. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkPure.log +0 -262
  53. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator-autocorrelation.dat +0 -1000
  54. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails#generator.dat +0 -1001
  55. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/GeneratorBenchmarkRails.log +0 -82
  56. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkComparison.log +0 -34
  57. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser-autocorrelation.dat +0 -900
  58. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt#parser.dat +0 -901
  59. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkExt.log +0 -81
  60. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser-autocorrelation.dat +0 -1000
  61. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure#parser.dat +0 -1001
  62. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkPure.log +0 -82
  63. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser-autocorrelation.dat +0 -1000
  64. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails#parser.dat +0 -1001
  65. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkRails.log +0 -82
  66. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser-autocorrelation.dat +0 -1000
  67. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML#parser.dat +0 -1001
  68. data/lib/vendor/json_pure/benchmarks/data-p4-3GHz-ruby18/ParserBenchmarkYAML.log +0 -82
  69. data/lib/vendor/json_pure/benchmarks/generator2_benchmark.rb +0 -222
  70. data/lib/vendor/json_pure/benchmarks/generator_benchmark.rb +0 -224
  71. data/lib/vendor/json_pure/benchmarks/ohai.json +0 -1216
  72. data/lib/vendor/json_pure/benchmarks/ohai.ruby +0 -1
  73. data/lib/vendor/json_pure/benchmarks/parser2_benchmark.rb +0 -251
  74. data/lib/vendor/json_pure/benchmarks/parser_benchmark.rb +0 -259
  75. data/lib/vendor/json_pure/bin/edit_json.rb +0 -9
  76. data/lib/vendor/json_pure/bin/prettify_json.rb +0 -75
  77. data/lib/vendor/json_pure/data/example.json +0 -1
  78. data/lib/vendor/json_pure/data/index.html +0 -38
  79. data/lib/vendor/json_pure/data/prototype.js +0 -4184
  80. data/lib/vendor/json_pure/ext/json/ext/generator/extconf.rb +0 -16
  81. data/lib/vendor/json_pure/ext/json/ext/generator/generator.c +0 -1323
  82. data/lib/vendor/json_pure/ext/json/ext/generator/generator.h +0 -170
  83. data/lib/vendor/json_pure/ext/json/ext/parser/extconf.rb +0 -15
  84. data/lib/vendor/json_pure/ext/json/ext/parser/parser.c +0 -1935
  85. data/lib/vendor/json_pure/ext/json/ext/parser/parser.h +0 -71
  86. data/lib/vendor/json_pure/ext/json/ext/parser/parser.rl +0 -792
  87. data/lib/vendor/json_pure/install.rb +0 -26
  88. data/lib/vendor/json_pure/lib/json.rb +0 -10
  89. data/lib/vendor/json_pure/lib/json/Array.xpm +0 -21
  90. data/lib/vendor/json_pure/lib/json/FalseClass.xpm +0 -21
  91. data/lib/vendor/json_pure/lib/json/Hash.xpm +0 -21
  92. data/lib/vendor/json_pure/lib/json/Key.xpm +0 -73
  93. data/lib/vendor/json_pure/lib/json/NilClass.xpm +0 -21
  94. data/lib/vendor/json_pure/lib/json/Numeric.xpm +0 -28
  95. data/lib/vendor/json_pure/lib/json/String.xpm +0 -96
  96. data/lib/vendor/json_pure/lib/json/TrueClass.xpm +0 -21
  97. data/lib/vendor/json_pure/lib/json/add/core.rb +0 -148
  98. data/lib/vendor/json_pure/lib/json/add/rails.rb +0 -58
  99. data/lib/vendor/json_pure/lib/json/common.rb +0 -397
  100. data/lib/vendor/json_pure/lib/json/editor.rb +0 -1371
  101. data/lib/vendor/json_pure/lib/json/ext.rb +0 -15
  102. data/lib/vendor/json_pure/lib/json/json.xpm +0 -1499
  103. data/lib/vendor/json_pure/lib/json/pure.rb +0 -77
  104. data/lib/vendor/json_pure/lib/json/pure/generator.rb +0 -452
  105. data/lib/vendor/json_pure/lib/json/pure/parser.rb +0 -307
  106. data/lib/vendor/json_pure/lib/json/version.rb +0 -8
  107. data/lib/vendor/json_pure/tests/fixtures/fail1.json +0 -1
  108. data/lib/vendor/json_pure/tests/fixtures/fail10.json +0 -1
  109. data/lib/vendor/json_pure/tests/fixtures/fail11.json +0 -1
  110. data/lib/vendor/json_pure/tests/fixtures/fail12.json +0 -1
  111. data/lib/vendor/json_pure/tests/fixtures/fail13.json +0 -1
  112. data/lib/vendor/json_pure/tests/fixtures/fail14.json +0 -1
  113. data/lib/vendor/json_pure/tests/fixtures/fail18.json +0 -1
  114. data/lib/vendor/json_pure/tests/fixtures/fail19.json +0 -1
  115. data/lib/vendor/json_pure/tests/fixtures/fail2.json +0 -1
  116. data/lib/vendor/json_pure/tests/fixtures/fail20.json +0 -1
  117. data/lib/vendor/json_pure/tests/fixtures/fail21.json +0 -1
  118. data/lib/vendor/json_pure/tests/fixtures/fail22.json +0 -1
  119. data/lib/vendor/json_pure/tests/fixtures/fail23.json +0 -1
  120. data/lib/vendor/json_pure/tests/fixtures/fail24.json +0 -1
  121. data/lib/vendor/json_pure/tests/fixtures/fail25.json +0 -1
  122. data/lib/vendor/json_pure/tests/fixtures/fail27.json +0 -2
  123. data/lib/vendor/json_pure/tests/fixtures/fail28.json +0 -2
  124. data/lib/vendor/json_pure/tests/fixtures/fail3.json +0 -1
  125. data/lib/vendor/json_pure/tests/fixtures/fail4.json +0 -1
  126. data/lib/vendor/json_pure/tests/fixtures/fail5.json +0 -1
  127. data/lib/vendor/json_pure/tests/fixtures/fail6.json +0 -1
  128. data/lib/vendor/json_pure/tests/fixtures/fail7.json +0 -1
  129. data/lib/vendor/json_pure/tests/fixtures/fail8.json +0 -1
  130. data/lib/vendor/json_pure/tests/fixtures/fail9.json +0 -1
  131. data/lib/vendor/json_pure/tests/fixtures/pass1.json +0 -56
  132. data/lib/vendor/json_pure/tests/fixtures/pass15.json +0 -1
  133. data/lib/vendor/json_pure/tests/fixtures/pass16.json +0 -1
  134. data/lib/vendor/json_pure/tests/fixtures/pass17.json +0 -1
  135. data/lib/vendor/json_pure/tests/fixtures/pass2.json +0 -1
  136. data/lib/vendor/json_pure/tests/fixtures/pass26.json +0 -1
  137. data/lib/vendor/json_pure/tests/fixtures/pass3.json +0 -6
  138. data/lib/vendor/json_pure/tests/test_json.rb +0 -361
  139. data/lib/vendor/json_pure/tests/test_json_addition.rb +0 -162
  140. data/lib/vendor/json_pure/tests/test_json_encoding.rb +0 -68
  141. data/lib/vendor/json_pure/tests/test_json_fixtures.rb +0 -34
  142. data/lib/vendor/json_pure/tests/test_json_generate.rb +0 -122
  143. data/lib/vendor/json_pure/tests/test_json_rails.rb +0 -144
  144. data/lib/vendor/json_pure/tests/test_json_unicode.rb +0 -76
  145. data/lib/vendor/json_pure/tools/fuzz.rb +0 -139
  146. data/lib/vendor/json_pure/tools/server.rb +0 -61
@@ -0,0 +1,3 @@
1
+ module MultiJson
2
+ VERSION = "1.6.1" unless defined?(MultiJson::VERSION)
3
+ end
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'multi_json/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.add_development_dependency 'bundler', '~> 1.0'
8
+ spec.authors = ["Michael Bleigh", "Josh Kalderimis", "Erik Michaels-Ober", "Pavel Pravosud"]
9
+ spec.cert_chain = %w(certs/sferik.pem)
10
+ spec.description = %q{A gem to provide easy switching between different JSON backends, including Oj, Yajl, the JSON gem (with C-extensions), the pure-Ruby JSON gem, and OkJson.}
11
+ spec.email = ['michael@intridea.com', 'josh.kalderimis@gmail.com', 'sferik@gmail.com']
12
+ spec.files = Dir['.yardopts', 'CHANGELOG.md', 'CONTRIBUTING.md', 'LICENSE.md', 'README.md', 'Rakefile', 'multi_json.gemspec', 'Gemfile', '.document', '.rspec', '.travis.yml' ,'spec/**/*', 'lib/**/*']
13
+ spec.homepage = 'http://github.com/intridea/multi_json'
14
+ spec.licenses = ['MIT']
15
+ spec.name = 'multi_json'
16
+ spec.require_paths = ['lib']
17
+ spec.required_rubygems_version = '>= 1.3.6'
18
+ spec.signing_key = File.expand_path("~/.gem/private_key.pem") if $0 =~ /gem\z/
19
+ spec.summary = %q{A gem to provide swappable JSON backends.}
20
+ spec.test_files = Dir['spec/**/*']
21
+ spec.version = MultiJson::VERSION
22
+ end
@@ -0,0 +1,162 @@
1
+ # encoding: UTF-8
2
+
3
+ shared_examples_for 'an adapter' do |adapter|
4
+
5
+ before do
6
+ begin
7
+ MultiJson.use adapter
8
+ rescue LoadError
9
+ pending "Adapter #{adapter} couldn't be loaded (not installed?)"
10
+ end
11
+ end
12
+
13
+ describe '.dump' do
14
+ it 'writes decodable JSON' do
15
+ [
16
+ {'abc' => 'def'},
17
+ [1, 2, 3, '4', true, false, nil]
18
+ ].each do |example|
19
+ expect(MultiJson.load(MultiJson.dump(example))).to eq example
20
+ end
21
+ end
22
+
23
+ unless 'json_pure' == adapter || 'json_gem' == adapter
24
+ it 'dumps time in correct format' do
25
+ time = Time.at(1355218745).utc
26
+
27
+ # time does not respond to to_json method
28
+ class << time
29
+ undef_method :to_json
30
+ end
31
+
32
+ dumped_json = MultiJson.dump(time)
33
+ expected = if RUBY_VERSION > '1.9'
34
+ '2012-12-11 09:39:05 UTC'
35
+ else
36
+ 'Tue Dec 11 09:39:05 UTC 2012'
37
+ end
38
+ expect(MultiJson.load(dumped_json)).to eq expected
39
+ end
40
+ end
41
+
42
+ it 'dumps symbol and fixnum keys as strings' do
43
+ [
44
+ [
45
+ {:foo => {:bar => 'baz'}},
46
+ {'foo' => {'bar' => 'baz'}},
47
+ ],
48
+ [
49
+ [{:foo => {:bar => 'baz'}}],
50
+ [{'foo' => {'bar' => 'baz'}}],
51
+ ],
52
+ [
53
+ {:foo => [{:bar => 'baz'}]},
54
+ {'foo' => [{'bar' => 'baz'}]},
55
+ ],
56
+ [
57
+ {1 => {2 => {3 => 'bar'}}},
58
+ {'1' => {'2' => {'3' => 'bar'}}}
59
+ ]
60
+ ].each do |example, expected|
61
+ dumped_json = MultiJson.dump(example)
62
+ expect(MultiJson.load(dumped_json)).to eq expected
63
+ end
64
+ end
65
+
66
+ it 'dumps rootless JSON' do
67
+ expect(MultiJson.dump('random rootless string')).to eq '"random rootless string"'
68
+ expect(MultiJson.dump(123)).to eq '123'
69
+ end
70
+
71
+ it 'passes options to the adapter' do
72
+ MultiJson.adapter.should_receive(:dump).with('foo', {:bar => :baz})
73
+ MultiJson.dump('foo', :bar => :baz)
74
+ end
75
+
76
+ # This behavior is currently not supported by gson.rb
77
+ # See discussion at https://github.com/intridea/multi_json/pull/71
78
+ unless adapter == 'gson'
79
+ it 'dumps custom objects that implement to_json' do
80
+ klass = Class.new do
81
+ def to_json(*)
82
+ '"foobar"'
83
+ end
84
+ end
85
+ expect(MultiJson.dump(klass.new)).to eq '"foobar"'
86
+ end
87
+ end
88
+
89
+ it 'allows to dump JSON values' do
90
+ expect(MultiJson.dump(42)).to eq '42'
91
+ end
92
+
93
+ it 'allows to dump JSON with UTF-8 characters' do
94
+ expect(MultiJson.dump({'color' => 'żółć'})).to eq('{"color":"żółć"}')
95
+ end
96
+ end
97
+
98
+ describe '.load' do
99
+ it 'properly loads valid JSON' do
100
+ expect(MultiJson.load('{"abc":"def"}')).to eq({'abc' => 'def'})
101
+ end
102
+
103
+ it 'raises MultiJson::LoadError on invalid JSON' do
104
+ expect{MultiJson.load('{"abc"}')}.to raise_error(MultiJson::LoadError)
105
+ end
106
+
107
+ it 'raises MultiJson::LoadError with data on invalid JSON' do
108
+ data = '{invalid}'
109
+ begin
110
+ MultiJson.load(data)
111
+ rescue MultiJson::LoadError => le
112
+ expect(le.data).to eq data
113
+ end
114
+ end
115
+
116
+ it 'catches MultiJson::DecodeError for legacy support' do
117
+ data = '{invalid}'
118
+ begin
119
+ MultiJson.load(data)
120
+ rescue MultiJson::DecodeError => de
121
+ expect(de.data).to eq data
122
+ end
123
+ end
124
+
125
+ it 'stringifys symbol keys when encoding' do
126
+ dumped_json = MultiJson.dump(:a => 1, :b => {:c => 2})
127
+ expect(MultiJson.load(dumped_json)).to eq({'a' => 1, 'b' => {'c' => 2}})
128
+ end
129
+
130
+ it 'properly loads valid JSON in StringIOs' do
131
+ json = StringIO.new('{"abc":"def"}')
132
+ expect(MultiJson.load(json)).to eq({'abc' => 'def'})
133
+ end
134
+
135
+ it 'allows for symbolization of keys' do
136
+ [
137
+ [
138
+ '{"abc":{"def":"hgi"}}',
139
+ {:abc => {:def => 'hgi'}},
140
+ ],
141
+ [
142
+ '[{"abc":{"def":"hgi"}}]',
143
+ [{:abc => {:def => 'hgi'}}],
144
+ ],
145
+ [
146
+ '{"abc":[{"def":"hgi"}]}',
147
+ {:abc => [{:def => 'hgi'}]},
148
+ ],
149
+ ].each do |example, expected|
150
+ expect(MultiJson.load(example, :symbolize_keys => true)).to eq expected
151
+ end
152
+ end
153
+
154
+ it 'allows to load JSON values' do
155
+ expect(MultiJson.load('42')).to eq 42
156
+ end
157
+
158
+ it 'allows to load JSON with UTF-8 characters' do
159
+ expect(MultiJson.load('{"color":"żółć"}')).to eq({'color' => 'żółć'})
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,45 @@
1
+ if !ENV['CI'] && defined?(RUBY_ENGINE) && RUBY_ENGINE == 'ruby'
2
+ require 'simplecov'
3
+ SimpleCov.start do
4
+ add_filter 'vendor'
5
+ end
6
+ end
7
+
8
+ require 'multi_json'
9
+ require 'rspec'
10
+
11
+ RSpec.configure do |config|
12
+ config.expect_with :rspec do |c|
13
+ c.syntax = :expect
14
+ end
15
+ end
16
+
17
+ def macruby?
18
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == 'macruby'
19
+ end
20
+
21
+ def jruby?
22
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
23
+ end
24
+
25
+ class MockDecoder
26
+ def self.load(string, options={})
27
+ {'abc' => 'def'}
28
+ end
29
+
30
+ def self.dump(string)
31
+ '{"abc":"def"}'
32
+ end
33
+ end
34
+
35
+ module MockModuleDecoder
36
+ extend self
37
+
38
+ def load(string, options={})
39
+ {'abc' => 'def'}
40
+ end
41
+
42
+ def dump(string)
43
+ '{"abc":"def"}'
44
+ end
45
+ end
@@ -0,0 +1,36 @@
1
+ shared_examples_for 'JSON-like adapter' do |adapter|
2
+ before do
3
+ begin
4
+ MultiJson.use adapter
5
+ rescue LoadError
6
+ pending "Adapter #{adapter} couldn't be loaded (not installed?)"
7
+ end
8
+ end
9
+
10
+ describe '.dump' do
11
+ describe 'with :pretty option set to true' do
12
+ it 'passes default pretty options' do
13
+ object = 'foo'
14
+ object.should_receive(:to_json).with(JSON::PRETTY_STATE_PROTOTYPE.to_h).and_return('["foo"]')
15
+ MultiJson.dump(object, :pretty => true)
16
+ end
17
+ end
18
+
19
+ describe 'with :indent option' do
20
+ it 'passes it on dump' do
21
+ object = 'foo'
22
+ object.should_receive(:to_json).with(:indent => "\t").and_return('["foo"]')
23
+ MultiJson.dump(object, :indent => "\t")
24
+ end
25
+ end
26
+ end
27
+
28
+ describe '.load' do
29
+ describe 'with :quirks_mode option' do
30
+ it 'passes it on load' do
31
+ ::JSON.should_receive(:parse).with('["foo"]', {:quirks_mode => true, :create_additions => false}).and_return(['foo'])
32
+ MultiJson.load('"foo"', :quirks_mode => true)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,151 @@
1
+ require 'helper'
2
+ require 'adapter_shared_example'
3
+ require 'json_common_shared_example'
4
+ require 'stringio'
5
+
6
+ describe 'MultiJson' do
7
+ context 'adapters' do
8
+ before{ MultiJson.use nil }
9
+
10
+ context 'when no other json implementations are available' do
11
+ before do
12
+ @old_map = MultiJson::REQUIREMENT_MAP
13
+ @old_json = Object.const_get :JSON if Object.const_defined?(:JSON)
14
+ @old_oj = Object.const_get :Oj if Object.const_defined?(:Oj)
15
+ @old_yajl = Object.const_get :Yajl if Object.const_defined?(:Yajl)
16
+ @old_gson = Object.const_get :Gson if Object.const_defined?(:Gson)
17
+ MultiJson::REQUIREMENT_MAP.each_with_index do |(library, adapter), index|
18
+ MultiJson::REQUIREMENT_MAP[index] = ["foo/#{library}", adapter]
19
+ end
20
+ Object.send :remove_const, :JSON if @old_json
21
+ Object.send :remove_const, :Oj if @old_oj
22
+ Object.send :remove_const, :Yajl if @old_yajl
23
+ Object.send :remove_const, :Gson if @old_gson
24
+ end
25
+
26
+ after do
27
+ @old_map.each_with_index do |(library, adapter), index|
28
+ MultiJson::REQUIREMENT_MAP[index] = [library, adapter]
29
+ end
30
+ Object.const_set :JSON, @old_json if @old_json
31
+ Object.const_set :Oj, @old_oj if @old_oj
32
+ Object.const_set :Yajl, @old_yajl if @old_yajl
33
+ Object.const_set :Gson, @old_gson if @old_gson
34
+ end
35
+
36
+ it 'defaults to ok_json if no other json implementions are available' do
37
+ Kernel.stub(:warn)
38
+ expect(MultiJson.default_adapter).to eq :ok_json
39
+ end
40
+
41
+ it 'prints a warning' do
42
+ Kernel.should_receive(:warn).with(/warning/i)
43
+ MultiJson.default_adapter
44
+ end
45
+ end
46
+
47
+ it 'defaults to the best available gem' do
48
+ # Clear cache variable already set by previous tests
49
+ MultiJson.send(:remove_instance_variable, :@adapter)
50
+ unless jruby?
51
+ require 'oj'
52
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::Oj'
53
+ else
54
+ require 'json'
55
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::JsonGem'
56
+ end
57
+ end
58
+
59
+ it 'looks for adapter even if @adapter variable is nil' do
60
+ MultiJson.send(:instance_variable_set, :@adapter, nil)
61
+ MultiJson.should_receive(:default_adapter).and_return(:ok_json)
62
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::OkJson'
63
+ end
64
+
65
+ it 'is settable via a symbol' do
66
+ MultiJson.use :json_gem
67
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::JsonGem'
68
+ end
69
+
70
+ it 'is settable via a class' do
71
+ MultiJson.use MockDecoder
72
+ expect(MultiJson.adapter.name).to eq 'MockDecoder'
73
+ end
74
+
75
+ it 'is settable via a module' do
76
+ MultiJson.use MockModuleDecoder
77
+ expect(MultiJson.adapter.name).to eq 'MockModuleDecoder'
78
+ end
79
+
80
+ context 'using one-shot parser' do
81
+ before do
82
+ require 'multi_json/adapters/json_pure'
83
+ MultiJson::Adapters::JsonPure.should_receive(:dump).exactly(1).times.and_return('dump_something')
84
+ MultiJson::Adapters::JsonPure.should_receive(:load).exactly(1).times.and_return('load_something')
85
+ end
86
+
87
+ it 'should use the defined parser just for the call' do
88
+ MultiJson.use :json_gem
89
+ expect(MultiJson.dump('', :adapter => :json_pure)).to eq 'dump_something'
90
+ expect(MultiJson.load('', :adapter => :json_pure)).to eq 'load_something'
91
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::JsonGem'
92
+ end
93
+ end
94
+ end
95
+
96
+ it 'can set adapter for a block' do
97
+ MultiJson.use :ok_json
98
+ MultiJson.with_adapter(:json_pure) do
99
+ MultiJson.with_engine(:json_gem) do
100
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::JsonGem'
101
+ end
102
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::JsonPure'
103
+ end
104
+ expect(MultiJson.adapter.name).to eq 'MultiJson::Adapters::OkJson'
105
+ end
106
+
107
+ it 'JSON gem does not create symbols on parse' do
108
+ MultiJson.with_engine(:json_gem) do
109
+ MultiJson.load('{"json_class":"ZOMG"}') rescue nil
110
+
111
+ expect{
112
+ MultiJson.load('{"json_class":"OMG"}') rescue nil
113
+ }.to_not change{Symbol.all_symbols.count}
114
+ end
115
+ end
116
+
117
+ unless jruby?
118
+ it 'Oj does not create symbols on parse' do
119
+ MultiJson.with_engine(:oj) do
120
+ MultiJson.load('{"json_class":"ZOMG"}') rescue nil
121
+
122
+ expect{
123
+ MultiJson.load('{"json_class":"OMG"}') rescue nil
124
+ }.to_not change{Symbol.all_symbols.count}
125
+ end
126
+ end
127
+ end
128
+
129
+ it 'has default_options setter' do
130
+ MultiJson.use MockDecoder
131
+ MockDecoder.should_receive(:dump).with('123', :foo => 'lol', :bar => 'bar', :fizz => 'buzz')
132
+ MultiJson.default_options = { :foo => 'foo', :bar => 'bar' }
133
+ MultiJson.dump('123', :fizz => 'buzz', :foo => 'lol')
134
+ MultiJson.default_options = {}
135
+ end
136
+
137
+ %w(gson json_gem json_pure nsjsonserialization oj ok_json yajl).each do |adapter|
138
+ next if adapter == 'gson' && !jruby?
139
+ next if adapter == 'nsjsonserialization' && !macruby?
140
+ next if jruby? && (adapter == 'oj' || adapter == 'yajl')
141
+ context adapter do
142
+ it_behaves_like 'an adapter', adapter
143
+ end
144
+ end
145
+
146
+ %w(json_gem json_pure).each do |adapter|
147
+ context adapter do
148
+ it_behaves_like 'JSON-like adapter', adapter
149
+ end
150
+ end
151
+ end
@@ -1,6 +1,84 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe EY::Serverside::Deploy::Configuration do
4
+ describe "default options" do
5
+ it "has defaults" do
6
+ @config = EY::Serverside::Deploy::Configuration.new({
7
+ 'app' => 'app_name',
8
+ 'environment_name' => 'env_name',
9
+ 'account_name' => 'acc',
10
+ 'framework_env' => 'production',
11
+ })
12
+ @config.app_name.should == "app_name"
13
+ @config.environment_name.should == "env_name"
14
+ @config.account_name.should == "acc"
15
+ @config.migrate.should == nil
16
+ @config.migrate?.should == false
17
+ @config.branch.should == "master"
18
+ @config.strategy_class.should == EY::Serverside::Strategies::Git
19
+ @config.maintenance_on_migrate.should == true
20
+ @config.maintenance_on_restart.should == true
21
+ @config.required_downtime_stack?.should == true
22
+ @config.enable_maintenance_page?.should == true
23
+ @config.disable_maintenance_page?.should == true
24
+ @config.framework_env.should == "production"
25
+ @config.precompile_assets.should == nil
26
+ @config.precompile_assets_inferred?.should == true
27
+ @config.skip_precompile_assets?.should == false
28
+ @config.precompile_assets?.should == false
29
+ @config.asset_roles.should == [:app_master, :app, :solo]
30
+ @config.user.should == ENV['USER']
31
+ @config.group.should == ENV['USER']
32
+ @config.verbose.should == false
33
+ @config.copy_exclude.should == []
34
+ @config.ignore_database_adapter_warning.should == false
35
+ @config.bundle_without.should == "test development"
36
+ end
37
+
38
+ it "raises when required options are not given" do
39
+ @config = EY::Serverside::Deploy::Configuration.new({})
40
+ expect { @config.app_name }.to raise_error
41
+ expect { @config.environment_name }.to raise_error
42
+ expect { @config.account_name }.to raise_error
43
+ expect { @config.framework_env }.to raise_error
44
+ end
45
+ end
46
+
47
+ context "command line options" do
48
+ before do
49
+ @config = EY::Serverside::Deploy::Configuration.new({
50
+ 'repository_cache' => @tempdir,
51
+ 'app' => 'app_name',
52
+ 'stack' => 'nginx_passenger',
53
+ 'framework_env' => 'development',
54
+ 'environment_name' => 'env_name',
55
+ 'account_name' => 'acc',
56
+ 'branch' => 'branch_from_command_line',
57
+ 'config' => MultiJson.dump({'custom' => 'custom_from_extra_config', 'maintenance_on_migrate' => 'false', 'precompile_assets' => 'false'})
58
+ })
59
+ end
60
+
61
+ it "underrides options with config (directly supplied options take precedence over 'config' options)" do
62
+ @config.maintenance_on_migrate.should == false
63
+ @config.branch.should == "branch_from_command_line"
64
+ end
65
+
66
+ it "corrects command line supplied precompile_assets string (which relies on having a special not-set value of nil, so can't be a boolean)" do
67
+ @config.skip_precompile_assets?.should == true
68
+ @config.precompile_assets?.should == false
69
+ @config.precompile_assets_inferred?.should == false
70
+ end
71
+
72
+ it "doesn't require downtime on restart for nginx_passenger" do
73
+ @config.maintenance_on_migrate.should == false
74
+ @config.maintenance_on_restart.should == false
75
+ end
76
+
77
+ it "doesn't exclude the framework_env from bundle if it would match" do
78
+ @config.bundle_without.should == "test"
79
+ end
80
+ end
81
+
4
82
  describe "ey.yml loading" do
5
83
  before(:each) do
6
84
  @tempdir = `mktemp -d -t ey_yml_spec.XXXXX`.strip
@@ -11,7 +89,7 @@ describe EY::Serverside::Deploy::Configuration do
11
89
  'account_name' => 'acc',
12
90
  'migrate' => nil,
13
91
  'branch' => 'branch_from_command_line',
14
- 'config' => {'custom' => 'custom_from_extra_config', 'maintenance_on_migrate' => 'false'}.to_json
92
+ 'config' => MultiJson.dump({'custom' => 'custom_from_extra_config', 'maintenance_on_migrate' => 'false'})
15
93
  })
16
94
 
17
95
  @deploy = FullTestDeploy.new(test_servers, @config, test_shell)