padrino-core 0.12.9 → 0.13.0.beta1

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 (51) hide show
  1. checksums.yaml +5 -13
  2. data/bin/padrino +1 -2
  3. data/lib/padrino-core/application/application_setup.rb +10 -6
  4. data/lib/padrino-core/application/params_protection.rb +7 -1
  5. data/lib/padrino-core/application/routing.rb +88 -50
  6. data/lib/padrino-core/application/show_exceptions.rb +29 -0
  7. data/lib/padrino-core/application.rb +0 -19
  8. data/lib/padrino-core/caller.rb +1 -2
  9. data/lib/padrino-core/cli/base.rb +7 -11
  10. data/lib/padrino-core/cli/rake_tasks.rb +8 -21
  11. data/lib/padrino-core/loader.rb +13 -12
  12. data/lib/padrino-core/logger.rb +4 -32
  13. data/lib/padrino-core/mounter.rb +62 -21
  14. data/lib/padrino-core/path_router/compiler.rb +110 -0
  15. data/lib/padrino-core/path_router/error_handler.rb +8 -0
  16. data/lib/padrino-core/path_router/matcher.rb +123 -0
  17. data/lib/padrino-core/path_router/route.rb +169 -0
  18. data/lib/padrino-core/path_router.rb +119 -0
  19. data/lib/padrino-core/reloader/rack.rb +1 -4
  20. data/lib/padrino-core/reloader/storage.rb +3 -31
  21. data/lib/padrino-core/reloader.rb +12 -17
  22. data/lib/padrino-core/version.rb +1 -1
  23. data/lib/padrino-core.rb +0 -2
  24. data/padrino-core.gemspec +8 -2
  25. data/test/fixtures/apps/helpers/support.rb +1 -0
  26. data/test/fixtures/apps/{rack_apps.rb → mountable_apps/rack_apps.rb} +0 -4
  27. data/test/fixtures/apps/{static.html → mountable_apps/static.html} +0 -0
  28. data/test/fixtures/apps/precompiled_app.rb +19 -0
  29. data/test/fixtures/apps/system.rb +0 -2
  30. data/test/helper.rb +1 -1
  31. data/test/test_application.rb +18 -6
  32. data/test/test_csrf_protection.rb +6 -7
  33. data/test/test_filters.rb +18 -1
  34. data/test/test_logger.rb +1 -49
  35. data/test/test_mounter.rb +2 -4
  36. data/test/test_params_protection.rb +15 -15
  37. data/test/test_reloader_simple.rb +2 -2
  38. data/test/test_reloader_system.rb +0 -30
  39. data/test/test_restful_routing.rb +4 -4
  40. data/test/test_routing.rb +176 -54
  41. metadata +109 -49
  42. data/lib/padrino-core/cli/binstub.rb +0 -27
  43. data/lib/padrino-core/configuration.rb +0 -40
  44. data/lib/padrino-core/ext/http_router.rb +0 -201
  45. data/lib/padrino-core/mounter/application_extension.rb +0 -55
  46. data/test/fixtures/apps/custom_dependencies/custom_dependencies.rb +0 -11
  47. data/test/fixtures/apps/custom_dependencies/my_dependencies/my_dependency.rb +0 -0
  48. data/test/fixtures/apps/stealthy/app.rb +0 -7
  49. data/test/fixtures/apps/stealthy/helpers/stealthy_class_helpers.rb +0 -13
  50. data/test/test_configuration.rb +0 -29
  51. data/test/test_reloader_storage.rb +0 -51
@@ -73,9 +73,8 @@ module Padrino
73
73
  # We lock dependencies sets to prevent reloading of protected constants
74
74
  #
75
75
  def lock!
76
- klasses = Storage.send(:object_classes) do |klass|
77
- original_klass_name = klass._orig_klass_name
78
- original_klass_name.split('::').first if original_klass_name
76
+ klasses = ObjectSpace.classes do |klass|
77
+ klass._orig_klass_name.split('::').first
79
78
  end
80
79
  klasses |= Padrino.mounted_apps.map(&:app_class)
81
80
  exclude_constants.merge(klasses)
@@ -222,9 +221,7 @@ module Padrino
222
221
  #
223
222
  def files_for_rotation
224
223
  files = Set.new
225
- Padrino.dependency_paths.each do |path|
226
- files += Dir.glob(path)
227
- end
224
+ files += Dir.glob("#{Padrino.root}/{lib,models,shared}/**/*.rb")
228
225
  reloadable_apps.each do |app|
229
226
  files << app.app_file
230
227
  files += Dir.glob(app.app_obj.prerequisites)
@@ -254,13 +251,18 @@ module Padrino
254
251
  #
255
252
  def external_constant?(const)
256
253
  sources = object_sources(const)
257
- # consider methodless constants not external
258
- return false if sources.empty?
254
+ begin
255
+ if sample = ObjectSpace.each_object(const).first
256
+ sources += object_sources(sample)
257
+ end
258
+ rescue RuntimeError => error # JRuby 1.7.12 fails to ObjectSpace.each_object
259
+ raise unless RUBY_PLATFORM =='java' && error.message.start_with?("ObjectSpace is disabled")
260
+ end
259
261
  !sources.any?{ |source| source.start_with?(Padrino.root) }
260
262
  end
261
263
 
262
264
  ##
263
- # Gets all the sources in which target class is defined.
265
+ # Gets all the sources in which target's class or instance methods are defined.
264
266
  #
265
267
  # Note: Method#source_location is for Ruby 1.9.3+ only.
266
268
  #
@@ -269,14 +271,7 @@ module Padrino
269
271
  target.methods.each do |method_name|
270
272
  next unless method_name.kind_of?(Symbol)
271
273
  method_object = target.method(method_name)
272
- if method_object.owner == target.singleton_class
273
- sources << method_object.source_location.first
274
- end
275
- end
276
- target.instance_methods.each do |method_name|
277
- next unless method_name.kind_of?(Symbol)
278
- method_object = target.instance_method(method_name)
279
- if method_object.owner == target
274
+ if method_object.owner == (target.class == Class ? target.singleton_class : target.class)
280
275
  sources << method_object.source_location.first
281
276
  end
282
277
  end
@@ -6,7 +6,7 @@
6
6
  #
7
7
  module Padrino
8
8
  # The version constant for the current version of Padrino.
9
- VERSION = '0.12.9' unless defined?(Padrino::VERSION)
9
+ VERSION = '0.13.0.beta1' unless defined?(Padrino::VERSION)
10
10
 
11
11
  #
12
12
  # The current Padrino version.
data/lib/padrino-core.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'sinatra/base'
2
2
  require 'padrino-core/version'
3
3
  require 'padrino-support'
4
- require 'padrino-core/configuration'
5
4
  require 'padrino-core/application'
6
5
 
7
6
  require 'padrino-core/caller'
@@ -26,7 +25,6 @@ module Padrino
26
25
  class ApplicationLoadError < RuntimeError # @private
27
26
  end
28
27
 
29
- extend Configuration
30
28
  extend Loader
31
29
 
32
30
  class << self
data/padrino-core.gemspec CHANGED
@@ -24,8 +24,14 @@ Gem::Specification.new do |s|
24
24
  s.rdoc_options = ["--charset=UTF-8"]
25
25
 
26
26
  s.add_dependency("padrino-support", Padrino.version)
27
- s.add_dependency("sinatra", ">= 1.4.6")
28
- s.add_dependency("http_router", "~> 0.11.0")
27
+ if ENV["SINATRA_EDGE"]
28
+ s.add_dependency("sinatra")
29
+ else
30
+ # remove this rack dependency after Sinatra > 1.4.5
31
+ s.add_dependency("rack", "< 1.6.0")
32
+ s.add_dependency("sinatra", "~> 1.4.2")
33
+ end
34
+ s.add_dependency("mustermann19")
29
35
  s.add_dependency("thor", "~> 0.18")
30
36
  s.add_dependency("activesupport", ">= 3.1")
31
37
  s.add_dependency("rack-protection", ">= 1.5.0")
@@ -0,0 +1 @@
1
+ require 'active_support/logger_silence'
@@ -3,10 +3,6 @@ class RackApp
3
3
  def self.call(_)
4
4
  [200, {}, ["hello rack app"]]
5
5
  end
6
-
7
- def self.prerequisites
8
- super
9
- end
10
6
  end
11
7
 
12
8
  RackApp2 = lambda{|_| [200, {}, ["hello rack app2"]] }
@@ -0,0 +1,19 @@
1
+ PADRINO_ROOT = File.dirname(__FILE__) unless defined? PADRINO_ROOT
2
+
3
+ Padrino.configure_apps do
4
+ set :precompile_routes, true
5
+ end
6
+
7
+ module PrecompiledApp
8
+ class App < Padrino::Application
9
+ 10.times{|n| get("/#{n}"){} }
10
+ end
11
+ class SubApp < Padrino::Application
12
+ 10.times{|n| get("/#{n}"){} }
13
+ end
14
+ end
15
+
16
+ Padrino.mount("PrecompiledApp::SubApp").to("/subapp")
17
+ Padrino.mount("PrecompiledApp::App").to("/")
18
+
19
+ Padrino.load!
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  PADRINO_ROOT = File.dirname(__FILE__) unless defined? PADRINO_ROOT
4
2
 
5
3
  class SystemDemo < Padrino::Application
data/test/helper.rb CHANGED
@@ -9,10 +9,10 @@ require 'builder'
9
9
  require 'rack/test'
10
10
  require 'yaml'
11
11
  require 'padrino-core'
12
- require 'tilt/haml'
13
12
 
14
13
  require 'ext/minitest-spec'
15
14
  require 'ext/rack-test-methods'
15
+ require 'ext/rack-test-utils'
16
16
 
17
17
  class MiniTest::Spec
18
18
  include Rack::Test::Methods
@@ -86,16 +86,16 @@ describe "Application" do
86
86
  end
87
87
 
88
88
  it 'should have different session values in different session management' do
89
- class PadrinoTestApp3 < Padrino::Application
89
+ class PadrinoTestApp4 < Padrino::Application
90
90
  enable :sessions
91
91
  end
92
- class PadrinoTestApp4 < Padrino::Application
92
+ class PadrinoTestApp5 < Padrino::Application
93
93
  set :sessions, :use => Rack::Session::Pool
94
94
  end
95
- Padrino.mount("PadrinoTestApp3").to("/write")
96
- Padrino.mount("PadrinoTestApp4").to("/read")
97
- PadrinoTestApp3.get('/') { session[:foo] = "cookie" }
98
- PadrinoTestApp4.get('/') { session[:foo] }
95
+ Padrino.mount("PadrinoTestApp4").to("/write")
96
+ Padrino.mount("PadrinoTestApp5").to("/read")
97
+ PadrinoTestApp4.get('/') { session[:foo] = "cookie" }
98
+ PadrinoTestApp5.get('/') { session[:foo] }
99
99
  @app = Padrino.application
100
100
  get '/write'
101
101
  get '/read'
@@ -158,6 +158,18 @@ describe "Application" do
158
158
  end
159
159
  end
160
160
 
161
+ describe "pre-compile routes" do
162
+ it "should compile routes before first request if enabled the :precompile_routes option" do
163
+ require File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/precompiled_app')
164
+ assert_instance_of Padrino::PathRouter::Compiler, PrecompiledApp::App.compiled_router.engine
165
+ assert_instance_of Padrino::PathRouter::Compiler, PrecompiledApp::SubApp.compiled_router.engine
166
+ assert_equal true, PrecompiledApp::App.compiled_router.engine.compiled?
167
+ assert_equal true, PrecompiledApp::SubApp.compiled_router.engine.compiled?
168
+ assert_equal 20, PrecompiledApp::App.compiled_router.engine.regexps.length
169
+ assert_equal 20, PrecompiledApp::SubApp.compiled_router.engine.regexps.length
170
+ end
171
+ end
172
+
161
173
  describe 'global prerequisites' do
162
174
  after do
163
175
  Padrino::Application.prerequisites.clear
@@ -6,7 +6,6 @@ describe "Application" do
6
6
  describe 'CSRF protection' do
7
7
  describe "with CSRF protection on" do
8
8
  before do
9
- @token = Rack::Protection::AuthenticityToken.random_token rescue "a_token"
10
9
  mock_app do
11
10
  enable :sessions
12
11
  enable :protect_from_csrf
@@ -20,24 +19,25 @@ describe "Application" do
20
19
  end
21
20
 
22
21
  it 'should allow requests with correct tokens' do
23
- post "/", {"authenticity_token" => @token}, 'rack.session' => {:csrf => @token}
22
+ post "/", {"authenticity_token" => "a"}, 'rack.session' => {:csrf => "a"}
24
23
  assert_equal 200, status
25
24
  end
26
25
 
27
26
  it 'should not allow requests with incorrect tokens' do
28
- post "/", {"authenticity_token" => "b"}, 'rack.session' => {:csrf => @token}
27
+ post "/", {"authenticity_token" => "a"}, 'rack.session' => {:csrf => "b"}
29
28
  assert_equal 403, status
30
29
  end
31
30
 
32
31
  it 'should allow requests with correct X-CSRF-TOKEN' do
33
- post "/", {}, 'rack.session' => {:csrf => @token}, 'HTTP_X_CSRF_TOKEN' => @token
32
+ post "/", {}, 'rack.session' => {:csrf => "a"}, 'HTTP_X_CSRF_TOKEN' => "a"
34
33
  assert_equal 200, status
35
34
  end
36
35
 
37
36
  it 'should not allow requests with incorrect X-CSRF-TOKEN' do
38
- post "/", {}, 'rack.session' => {:csrf => @token}, 'HTTP_X_CSRF_TOKEN' => "b"
37
+ post "/", {}, 'rack.session' => {:csrf => "a"}, 'HTTP_X_CSRF_TOKEN' => "b"
39
38
  assert_equal 403, status
40
39
  end
40
+
41
41
  end
42
42
 
43
43
  describe "without CSRF protection on" do
@@ -142,7 +142,6 @@ describe "Application" do
142
142
 
143
143
  describe "with custom protection options" do
144
144
  before do
145
- @token = Rack::Protection::AuthenticityToken.random_token rescue "a_token"
146
145
  mock_app do
147
146
  enable :sessions
148
147
  set :protect_from_csrf, :authenticity_param => 'foobar', :message => 'sucker!'
@@ -151,7 +150,7 @@ describe "Application" do
151
150
  end
152
151
 
153
152
  it 'should allow configuring protection options' do
154
- post "/a", {"foobar" => @token}, 'rack.session' => {:csrf => @token}
153
+ post "/a", {"foobar" => "a"}, 'rack.session' => {:csrf => "a"}
155
154
  assert_equal 200, status
156
155
  end
157
156
 
data/test/test_filters.rb CHANGED
@@ -300,6 +300,24 @@ describe "Filters" do
300
300
  assert_equal 'before', test
301
301
  end
302
302
 
303
+ it 'should ensure the call of before_filter at the first time' do
304
+ once = ''
305
+ mock_app do
306
+ before do
307
+ once += 'before'
308
+ end
309
+ get :index do
310
+ raise Exception, 'Oops'
311
+ end
312
+ post :index do
313
+ raise Exception, 'Oops'
314
+ end
315
+ end
316
+
317
+ post '/'
318
+ assert_equal 'before', once
319
+ end
320
+
303
321
  it 'should call before filters only once' do
304
322
  once = ''
305
323
  mock_app do
@@ -368,5 +386,4 @@ describe "Filters" do
368
386
  assert_equal 'We broke after', body
369
387
  assert_equal 'Been now and after', doodle
370
388
  end
371
-
372
389
  end
data/test/test_logger.rb CHANGED
@@ -1,7 +1,5 @@
1
- #coding:utf-8
2
1
  require File.expand_path(File.dirname(__FILE__) + '/helper')
3
2
  require 'logger'
4
- require 'tempfile'
5
3
 
6
4
  describe "PadrinoLogger" do
7
5
  before do
@@ -38,28 +36,6 @@ describe "PadrinoLogger" do
38
36
  Padrino::Logger.setup!
39
37
  assert_equal my_stream, Padrino.logger.log
40
38
  end
41
-
42
- it 'should use a custom file path' do
43
- tempfile = Tempfile.new('app.txt')
44
- path = tempfile.path
45
- tempfile.unlink
46
- Padrino::Logger::Config[:test][:stream] = :to_file
47
- Padrino::Logger::Config[:test][:log_path] = path
48
- Padrino::Logger.setup!
49
- assert_file_exists path
50
- File.unlink(path)
51
- end
52
-
53
- it 'should use a custom log directory' do
54
- tmpdir = Dir.mktmpdir
55
- Padrino::Logger::Config[:test][:stream] = :to_file
56
- Padrino::Logger::Config[:test][:log_path] = tmpdir
57
- Padrino::Logger.setup!
58
- log_path = File.join(tmpdir, 'test.log')
59
- assert_file_exists log_path
60
- File.unlink(log_path)
61
- Dir.rmdir(tmpdir)
62
- end
63
39
  end
64
40
 
65
41
  it 'should log something' do
@@ -82,30 +58,6 @@ describe "PadrinoLogger" do
82
58
  assert_match /log via alias/, @log.string
83
59
  end
84
60
 
85
- it 'should not blow up on mixed or broken encodings' do
86
- setup_logger(:log_level => :error, :auto_flush => false)
87
- binary_data = "\xD0".force_encoding('BINARY')
88
- utf8_data = 'фыв'
89
- @logger.error binary_data
90
- @logger.error utf8_data
91
- @logger.flush
92
- assert @log.string.include?(utf8_data)
93
- assert @log.string.force_encoding('BINARY').include?(binary_data)
94
- end
95
-
96
- it 'should sanitize mixed or broken encodings if said so' do
97
- encoding = 'windows-1251'
98
- setup_logger(:log_level => :error, :auto_flush => false, :sanitize_encoding => encoding)
99
- @log.string.encode! encoding
100
- binary_data = "\xD0".force_encoding('BINARY')
101
- utf8_data = 'фыв'
102
- @logger.error binary_data
103
- @logger.error utf8_data
104
- @logger.flush
105
- assert @log.string.force_encoding(encoding).include?("?\n".encode(encoding))
106
- assert @log.string.force_encoding(encoding).include?(utf8_data.encode(encoding))
107
- end
108
-
109
61
  it 'should log an application' do
110
62
  mock_app do
111
63
  enable :logging
@@ -310,7 +262,7 @@ describe "options :source_location" do
310
262
 
311
263
  it 'should output source_location if :source_location is set to true' do
312
264
  stub_root { Padrino.logger.debug("hello world") }
313
- assert_match /\[test\/test_logger\.rb:#{__LINE__-1}\] hello world/, Padrino.logger.log.string
265
+ assert_match /\[test\/test_logger\.rb:264\] hello world/, Padrino.logger.log.string
314
266
  end
315
267
 
316
268
  it 'should output source_location if file path is relative' do
data/test/test_mounter.rb CHANGED
@@ -181,7 +181,7 @@ describe "Mounter" do
181
181
  assert_equal "posts show", first_route.identifier.to_s
182
182
  assert_equal "(:posts, :show)", first_route.name
183
183
  assert_equal "GET", first_route.verb
184
- assert_equal "/posts/show/:id(.:format)", first_route.path
184
+ assert_equal "/posts/show/:id(.:format)?", first_route.path
185
185
  another_route = Padrino.mounted_apps[1].named_routes[2]
186
186
  assert_equal "users create", another_route.identifier.to_s
187
187
  assert_equal "(:users, :create)", another_route.name
@@ -255,7 +255,7 @@ describe "Mounter" do
255
255
  end
256
256
 
257
257
  it 'should support the Rack Application' do
258
- path = File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/rack_apps')
258
+ path = File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/mountable_apps/rack_apps')
259
259
  require path
260
260
  Padrino.mount('rack_app', :app_class => 'RackApp', :app_file => path).to('/rack_app')
261
261
  Padrino.mount('rack_app2', :app_class => 'RackApp2', :app_file => path).to('/rack_app2')
@@ -269,7 +269,6 @@ describe "Mounter" do
269
269
  assert_equal "hello sinatra app", res.body
270
270
  res = Rack::MockRequest.new(app).get("/sinatra_app/static.html")
271
271
  assert_equal "hello static file\n", res.body
272
- assert_equal [], RackApp.prerequisites
273
272
  end
274
273
 
275
274
  it 'should support the Rack Application inside padrino project' do
@@ -288,7 +287,6 @@ describe "Mounter" do
288
287
  end
289
288
 
290
289
  it "should not load dependency files if app's root isn't started with Padrino.root" do
291
- Object.send(:remove_const, :FakeLib) if defined?(FakeLib)
292
290
  path = File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/demo_project/app')
293
291
  fake_path = File.expand_path(File.dirname(__FILE__) + "/fixtures/apps/external_apps/fake_root")
294
292
  require path
@@ -1,4 +1,5 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+ require 'active_support/core_ext/hash/conversions'
2
3
 
3
4
  describe "Padrino::ParamsProtection" do
4
5
  before do
@@ -6,7 +7,6 @@ describe "Padrino::ParamsProtection" do
6
7
  @kim = { 'name' => 'Kim Bauer', 'position' => 'daughter', 'child' => @teri }
7
8
  @jack = { 'name' => 'Jack Bauer', 'position' => 'terrorist', 'child' => @kim }
8
9
  @family = { 'name' => 'Bauer', 'persons' => { 1 => @teri, 2 => @kim, 3 => @jack } }
9
- @jack_query = Padrino::Utils.build_uri_query(@jack)
10
10
  end
11
11
 
12
12
  it 'should drop all parameters except allowed ones' do
@@ -17,7 +17,7 @@ describe "Padrino::ParamsProtection" do
17
17
  ''
18
18
  end
19
19
  end
20
- post '/basic?' + @jack_query
20
+ post '/basic?' + @jack.to_query
21
21
  assert_equal({ 'name' => @jack['name'] }, result)
22
22
  end
23
23
 
@@ -29,7 +29,7 @@ describe "Padrino::ParamsProtection" do
29
29
  ''
30
30
  end
31
31
  end
32
- post '/basic?' + @jack_query
32
+ post '/basic?' + @jack.to_query
33
33
  assert_equal(@jack, result)
34
34
  end
35
35
 
@@ -41,7 +41,7 @@ describe "Padrino::ParamsProtection" do
41
41
  ''
42
42
  end
43
43
  end
44
- post '/basic?' + @jack_query
44
+ post '/basic?' + @jack.to_query
45
45
  assert_equal(
46
46
  [
47
47
  { 'name' => @jack['name'], 'child' => { 'name' => @kim['name'], 'child' => { 'name' => @teri['name'] } } },
@@ -59,7 +59,7 @@ describe "Padrino::ParamsProtection" do
59
59
  ''
60
60
  end
61
61
  end
62
- post '/basic?' + @jack_query
62
+ post '/basic?' + @jack.to_query
63
63
  assert_equal({ 'name' => @jack['name'], 'position' => 'anti-terrorist' }, result)
64
64
  end
65
65
 
@@ -71,7 +71,7 @@ describe "Padrino::ParamsProtection" do
71
71
  ''
72
72
  end
73
73
  end
74
- post '/basic/24/42?' + @jack_query
74
+ post '/basic/24/42?' + @jack.to_query
75
75
  assert_equal({ 'name' => @jack['name'], 'id' => '24', 'tag' => '42' }, result)
76
76
  end
77
77
 
@@ -83,7 +83,7 @@ describe "Padrino::ParamsProtection" do
83
83
  ''
84
84
  end
85
85
  end
86
- post '/basic/24?' + @jack_query
86
+ post '/basic/24?' + @jack.to_query
87
87
  assert_equal({ 'id' => '24' }, result)
88
88
  end
89
89
 
@@ -99,9 +99,9 @@ describe "Padrino::ParamsProtection" do
99
99
  ''
100
100
  end
101
101
  end
102
- get '/hide/1?' + @jack_query
102
+ get '/hide/1?' + @jack.to_query
103
103
  assert_equal({"id"=>"1"}, result)
104
- get '/show/1?' + @jack_query
104
+ get '/show/1?' + @jack.to_query
105
105
  assert_equal({"id"=>"1"}.merge(@jack), result)
106
106
  end
107
107
 
@@ -133,13 +133,13 @@ describe "Padrino::ParamsProtection" do
133
133
  end
134
134
  end
135
135
  end
136
- post '/persons/create?' + @jack_query
136
+ post '/persons/create?' + @jack.to_query
137
137
  assert_equal({ 'name' => @jack['name'], 'position' => 'terrorist' }, result)
138
138
  post '/persons/update/1?name=Chloe+O\'Brian&position=hacker'
139
139
  assert_equal({ 'id' => '1', 'name' => 'Chloe O\'Brian' }, result)
140
- post '/persons/delete?' + @jack_query
140
+ post '/persons/delete?' + @jack.to_query
141
141
  assert_equal(@jack, result)
142
- post '/persons/destroy/1?' + @jack_query
142
+ post '/persons/destroy/1?' + @jack.to_query
143
143
  assert_equal({"id"=>"1"}, result)
144
144
  get '/noparam?a=1;b=2'
145
145
  assert_equal({}, result)
@@ -153,7 +153,7 @@ describe "Padrino::ParamsProtection" do
153
153
  ''
154
154
  end
155
155
  end
156
- post '/family?' + Padrino::Utils.build_uri_query(@family)
156
+ post '/family?' + @family.to_query
157
157
  assert_equal({"persons" => {"3" => {"name" => @jack["name"]}, "2" => {"name" => @kim["name"]}, "1" => {"name" => @teri["name"]}}}, result)
158
158
  end
159
159
 
@@ -165,7 +165,7 @@ describe "Padrino::ParamsProtection" do
165
165
  ''
166
166
  end
167
167
  end
168
- post '/family?' + Padrino::Utils.build_uri_query(:names => %w{Jack Kim Teri})
168
+ post '/family?' + { :names => %w{Jack Kim Teri} }.to_query
169
169
  assert_equal({"names" => %w[Jack Kim Teri]}, result)
170
170
  end
171
171
 
@@ -177,7 +177,7 @@ describe "Padrino::ParamsProtection" do
177
177
  ''
178
178
  end
179
179
  end
180
- post '/i?' + Padrino::Utils.build_uri_query(:gotta => { :what => 'go', :who => 'self' })
180
+ post '/i?' + { :gotta => { :what => 'go', :who => 'self' } }.to_query
181
181
  assert_equal({"gotta" => {"what" => "go"}}, result)
182
182
  end
183
183