padrino-core 0.13.2 → 0.13.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 851c38a957c7a3b50110244d3b5eb5691091f845
4
- data.tar.gz: 131c5ba7f4a596a9079aab6d0571b7cc09eb408c
3
+ metadata.gz: 3a7babb0beba45716e2ff3af2f78dbc0f6a3e842
4
+ data.tar.gz: 1a047b4858de0f5c60d42a18289d824cc43b519d
5
5
  SHA512:
6
- metadata.gz: ae1ff61464492c25cbb92ee965631a3ed05430f51df3a5431cbd6763c39c4d262c5a9ca0ec92bb8661fe5c9194a8f912414771773b47d02f322a2a0e9fd46437
7
- data.tar.gz: 4b37b25021834707ed9b6c267345538b3a2073e428175fe4b0620e3825d167eb0c973ea058e58590e4f223272defb1ec4b254caca66a541d15ae8e0840b36e1d
6
+ metadata.gz: ea91c7f77ca7a01beefd69e03288619b142e64696e68ec36b860491dacf18561867b75b3334580841c2c3705b2bfca7bcc834b4834c1d2398402df279bed6549
7
+ data.tar.gz: dd67394786c89aa8f52584cc933a164e0a221c534de89c2189141797b5d6103abf79c542fe54e6aae55760333185b5de30a9aead6db67f56cef56280fdefa9f0
data/bin/padrino CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
- require 'bundler/setup' if %w(Gemfile .components).all? { |f| File.exist?(f) }
2
+ require 'padrino-core/cli/binstub'
3
+ Padrino.replace_with_binstub('padrino')
3
4
 
4
5
  padrino_core_path = File.expand_path('../../lib', __FILE__)
5
6
  $:.unshift(padrino_core_path) if File.directory?(padrino_core_path) && !$:.include?(padrino_core_path)
@@ -203,7 +203,7 @@ module Padrino
203
203
  # @since 0.10.8
204
204
  # @api public
205
205
  def redirect(url, *args)
206
- flashes = args.extract_options!
206
+ flashes = args.last.is_a?(Hash) ? args.pop : {}
207
207
 
208
208
  flashes.each do |type, message|
209
209
  message = I18n.translate(message) if message.is_a?(Symbol) && defined?(I18n)
@@ -1,9 +1,3 @@
1
- begin
2
- require 'active_support/core_ext/object/deep_dup' # AS 4.1
3
- rescue LoadError
4
- require 'active_support/core_ext/hash/deep_dup' # AS >= 3.1
5
- end
6
-
7
1
  module Padrino
8
2
  ##
9
3
  # Padrino application module providing means for mass-assignment protection.
@@ -45,7 +39,7 @@ module Padrino
45
39
  def params(*allowed_params)
46
40
  allowed_params = prepare_allowed_params(allowed_params)
47
41
  condition do
48
- @original_params = params.deep_dup
42
+ @original_params = Utils.deep_dup(params)
49
43
  filter_params!(params, allowed_params)
50
44
  end
51
45
  end
@@ -217,10 +217,11 @@ module Padrino
217
217
  # @see http://www.padrinorb.com/guides/controllers#route-filters
218
218
  #
219
219
  def construct_filter(*args, &block)
220
- options = args.extract_options!
220
+ options = args.last.is_a?(Hash) ? args.pop : {}
221
221
  if except = options.delete(:except)
222
222
  fail "You cannot use :except with other options specified" unless args.empty? && options.empty?
223
- options = Array(except).extract_options!
223
+ except = Array(except)
224
+ options = except.last.is_a?(Hash) ? except.pop : {}
224
225
  end
225
226
  Filter.new(!except, @_controller, options, Array(except || args), &block)
226
227
  end
@@ -337,7 +338,7 @@ module Padrino
337
338
  # url(:index, :fragment => 'comments')
338
339
  #
339
340
  def url(*args)
340
- params = args.extract_options!
341
+ params = args.last.is_a?(Hash) ? args.pop : {}
341
342
  fragment = params.delete(:fragment) || params.delete(:anchor)
342
343
  path = make_path_with_params(args, value_to_param(params.symbolize_keys))
343
344
  rebase_url(fragment ? path << '#' << fragment.to_s : path)
@@ -401,7 +402,7 @@ module Padrino
401
402
 
402
403
  # Saves controller options, yields the block, restores controller options.
403
404
  def with_new_options(*args)
404
- options = args.extract_options!
405
+ options = args.last.is_a?(Hash) ? args.pop : {}
405
406
 
406
407
  CONTROLLER_OPTIONS.each{ |key| replace_instance_variable("@_#{key}", options.delete(key)) }
407
408
  replace_instance_variable(:@_controller, args)
@@ -538,7 +539,7 @@ module Padrino
538
539
  route.default_values = defaults if defaults
539
540
  end
540
541
  options.delete_if do |option, captures|
541
- if route.significant_variable_names.include?(option)
542
+ if route.significant_variable_names.include?(option.to_s)
542
543
  route.capture[option] = Array(captures).first
543
544
  true
544
545
  end
@@ -579,6 +580,7 @@ module Padrino
579
580
  # controllers, parents, 'with' parameters, and other options.
580
581
  #
581
582
  def parse_route(path, options, verb)
583
+ path = path.dup if path.kind_of?(String)
582
584
  route_options = {}
583
585
 
584
586
  if options[:params] == true
@@ -926,6 +928,10 @@ module Padrino
926
928
  end
927
929
 
928
930
  def dispatch!
931
+ unless @params
932
+ @params = indifferent_params(@request.params)
933
+ force_encoding(@params)
934
+ end
929
935
  invoke do
930
936
  static! if settings.static? && (request.get? || request.head?)
931
937
  route!
@@ -977,7 +983,11 @@ module Padrino
977
983
  @route = request.route_obj = route
978
984
  captured_params = captures_from_params(params)
979
985
 
980
- @params.merge!(params) { |key, original, newval| original } unless params.empty?
986
+ # Should not overwrite params by given query
987
+ @params.merge!(params) do |key, original, newval|
988
+ @route.significant_variable_names.include?(key) ? newval : original
989
+ end unless params.empty?
990
+
981
991
  @params[:format] = params[:format] if params[:format]
982
992
  @params[:captures] = captured_params if !captured_params.empty? && route.path.is_a?(Regexp)
983
993
 
@@ -28,16 +28,20 @@ module Padrino
28
28
  def console(*args)
29
29
  prepare :console
30
30
  require File.expand_path("../../version", __FILE__)
31
- ARGV.clear
32
- require 'irb'
33
- begin
34
- require "irb/completion"
35
- rescue LoadError
36
- end
37
31
  require File.expand_path('config/boot.rb')
38
32
  puts "=> Loading #{Padrino.env} console (Padrino v.#{Padrino.version})"
39
33
  require File.expand_path('../console', __FILE__)
40
- IRB.start
34
+ ARGV.clear
35
+ if defined? Pry
36
+ Pry.start
37
+ else
38
+ require 'irb'
39
+ begin
40
+ require "irb/completion"
41
+ rescue LoadError
42
+ end
43
+ IRB.start
44
+ end
41
45
  end
42
46
 
43
47
  desc "generate", "Executes the Padrino generator with given options (alternatively use 'gen' or 'g')."
@@ -0,0 +1,27 @@
1
+ module Padrino
2
+ ##
3
+ # Replaces the current process with it's binstub.
4
+ #
5
+ def self.replace_with_binstub(executable)
6
+ begin
7
+ return if Bundler.definition.missing_specs.empty?
8
+ rescue NameError, NoMethodError
9
+ end
10
+
11
+ project_root = Dir.pwd
12
+ until project_root.empty?
13
+ break if File.file?(File.join(project_root, 'Gemfile'))
14
+ project_root = project_root.rpartition('/').first
15
+ end
16
+
17
+ if %w(Gemfile .components).all? { |file| File.file?(File.join(project_root, file)) }
18
+ binstub = File.join(project_root, 'bin', executable)
19
+ if File.file?(binstub)
20
+ exec Gem.ruby, binstub, *ARGV
21
+ else
22
+ puts 'Please run `bundler install --binstubs` from your project root to generate bundle-specific executables'
23
+ exit!
24
+ end
25
+ end
26
+ end
27
+ end
@@ -143,7 +143,8 @@ module Padrino
143
143
  # require_dependencies("#{Padrino.root}/lib/**/*.rb")
144
144
  #
145
145
  def require_dependencies(*paths)
146
- options = paths.extract_options!.merge( :cyclic => true )
146
+ options = (paths.last.is_a?(Hash) ? paths.pop : {}).merge( :cyclic => true )
147
+
147
148
  files = paths.flatten.flat_map{ |path| Dir.glob(path).sort_by{ |filename| filename.count('/') } }.uniq
148
149
 
149
150
  until files.empty?
@@ -55,7 +55,7 @@ module Padrino
55
55
  # Finds a path which is matched with conditions from arguments
56
56
  #
57
57
  def path(name, *args)
58
- params = args.extract_options!
58
+ params = args.last.is_a?(Hash) ? args.pop : {}
59
59
  candidates = @routes.select { |route| route.name == name }
60
60
  fail InvalidRouteException if candidates.empty?
61
61
  route = candidates.sort_by! { |route|
@@ -63,9 +63,9 @@ module Padrino
63
63
  def significant_variable_names
64
64
  @significant_variable_names ||=
65
65
  if @path.is_a?(String)
66
- @path.scan(SIGNIFICANT_VARIABLES_REGEX).map{ |p| p.last.to_sym }
66
+ @path.scan(SIGNIFICANT_VARIABLES_REGEX).map(&:last)
67
67
  elsif @path.is_a?(Regexp) and @path.respond_to?(:named_captures)
68
- @path.named_captures.keys.map(&:to_sym)
68
+ @path.named_captures.keys
69
69
  else
70
70
  []
71
71
  end
@@ -74,7 +74,7 @@ module Padrino
74
74
  #
75
75
  def lock!
76
76
  klasses = Storage.send(:object_classes) do |klass|
77
- original_klass_name = klass._orig_klass_name
77
+ original_klass_name = constant_name(klass)
78
78
  original_klass_name.split('::').first if original_klass_name
79
79
  end
80
80
  klasses |= Padrino.mounted_apps.map(&:app_class)
@@ -244,7 +244,7 @@ module Padrino
244
244
  # Tells if a constant should be excluded from Reloader routines.
245
245
  #
246
246
  def constant_excluded?(const)
247
- external_constant?(const) || (exclude_constants - include_constants).any?{ |excluded_constant| const._orig_klass_name.start_with?(excluded_constant) }
247
+ external_constant?(const) || (exclude_constants - include_constants).any?{ |excluded_constant| constant_name(const).start_with?(excluded_constant) }
248
248
  end
249
249
 
250
250
  ##
@@ -310,5 +310,11 @@ module Padrino
310
310
  ensure
311
311
  $-v = verbosity_level
312
312
  end
313
+
314
+ def constant_name(constant)
315
+ constant._orig_klass_name
316
+ rescue NoMethodError
317
+ constant.name
318
+ end
313
319
  end
314
320
  end
@@ -57,7 +57,7 @@ module Padrino
57
57
  def object_classes
58
58
  klasses = Set.new
59
59
 
60
- ObjectSpace.each_object(Class).each do |klass|
60
+ ObjectSpace.each_object(::Class).each do |klass|
61
61
  if block_given?
62
62
  if filtered_class = yield(klass)
63
63
  klasses << filtered_class
@@ -110,9 +110,9 @@ module Padrino
110
110
  # Detects Host and Port for Rack server.
111
111
  #
112
112
  def self.detect_address(options)
113
- address = DEFAULT_ADDRESS.merge options.slice(:Host, :Port)
114
- address[:Host] = options[:host] if options[:host].present?
115
- address[:Port] = options[:port] if options[:port].present?
113
+ address = DEFAULT_ADDRESS.merge options.select{ |key| [:Host, :Port].include?(key) }
114
+ address[:Host] = options[:host] if options[:host]
115
+ address[:Port] = options[:port] if options[:port]
116
116
  address
117
117
  end
118
118
  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.13.2' unless defined?(Padrino::VERSION)
9
+ VERSION = '0.13.3' unless defined?(Padrino::VERSION)
10
10
 
11
11
  #
12
12
  # The current Padrino version.
@@ -0,0 +1,5 @@
1
+ PADRINO_ROOT = File.dirname(__FILE__) unless defined? PADRINO_ROOT
2
+
3
+ class SystemConcernedClassDemo < Padrino::Application
4
+ set :reload, true
5
+ end
@@ -0,0 +1,4 @@
1
+ module BadModule
2
+ @happy_global_variable ||= 0
3
+ @happy_global_variable += 1
4
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  PADRINO_ROOT = File.dirname(__FILE__) unless defined? PADRINO_ROOT
2
4
 
3
5
  class SystemDemo < Padrino::Application
data/test/test_logger.rb CHANGED
@@ -102,7 +102,8 @@ describe "PadrinoLogger" do
102
102
  @logger.error binary_data
103
103
  @logger.error utf8_data
104
104
  @logger.flush
105
- assert_match /\?.*фыв/m, @log.string.encode(Encoding.default_external)
105
+ assert @log.string.force_encoding(encoding).include?("?\n".encode(encoding))
106
+ assert @log.string.force_encoding(encoding).include?(utf8_data.encode(encoding))
106
107
  end
107
108
 
108
109
  it 'should log an application' do
@@ -80,7 +80,7 @@ describe "SimpleReloader" do
80
80
  assert ok?
81
81
  last_body = body
82
82
  assert_equal 1, @app.filters[:before].size
83
- assert_equal 1, @app.errors.size
83
+ assert_equal 0, @app.errors.reject{ |key, _| [404, Sinatra::NotFound].include? key }.size
84
84
  assert_equal 2, @app.filters[:after].size # app + content-type + padrino-flash
85
85
  assert_equal 0, @app.middleware.size
86
86
  assert_equal 4, @app.routes.size # GET+HEAD of "/" + GET+HEAD of "/rand" = 4
@@ -90,7 +90,7 @@ describe "SimpleReloader" do
90
90
  get "/rand"
91
91
  refute_equal last_body, body
92
92
  assert_equal 1, @app.filters[:before].size
93
- assert_equal 1, @app.errors.size
93
+ assert_equal 0, @app.errors.reject{ |key, _| [404, Sinatra::NotFound].include? key }.size
94
94
  assert_equal 2, @app.filters[:after].size
95
95
  assert_equal 0, @app.middleware.size
96
96
  assert_equal 4, @app.routes.size # GET+HEAD of "/" = 2
@@ -0,0 +1,52 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ describe "Padrino::Reloader::Storage" do
4
+ describe "#classes" do
5
+ it 'should take an snapshot of the current loaded classes' do
6
+ snapshot = Padrino::Reloader::Storage.send(:object_classes)
7
+ assert_equal snapshot.include?(Padrino::Logger), true
8
+ end
9
+
10
+ it 'should return a Set object' do
11
+ snapshot = Padrino::Reloader::Storage.send(:object_classes)
12
+ assert_equal snapshot.kind_of?(Set), true
13
+ end
14
+
15
+ it 'should be able to process a the class name given a block' do
16
+ klasses = Padrino::Reloader::Storage.send(:object_classes) do |klass|
17
+ next unless klass.respond_to?(:name) # fix JRuby < 1.7.22
18
+ if klass.name =~ /^Padrino::/
19
+ klass
20
+ end
21
+ end
22
+
23
+ assert_equal (klasses.size > 1), true
24
+ klasses.each do |klass|
25
+ assert_match /^Padrino::/, klass.to_s
26
+ end
27
+ end
28
+ end
29
+
30
+ describe "#new_classes" do
31
+ before do
32
+ @snapshot = Padrino::Reloader::Storage.send(:object_classes)
33
+ end
34
+
35
+ it 'should return list of new classes' do
36
+ skip
37
+ class OSTest; end
38
+ module OSTestModule; class B; end; end
39
+
40
+ new_classes = Padrino::Reloader::Storage.send(:new_classes, @snapshot)
41
+
42
+ assert_equal new_classes.size, 3
43
+ assert_equal new_classes.include?(OSTest), true
44
+ assert_equal new_classes.include?(OSTestModule::B), true
45
+ end
46
+
47
+ it 'should return a Set object' do
48
+ new_classes = Padrino::Reloader::Storage.send(:new_classes, @snapshot)
49
+ assert_equal new_classes.kind_of?(Set), true
50
+ end
51
+ end
52
+ end
@@ -140,4 +140,20 @@ describe "SystemReloader" do
140
140
  assert Padrino::Reloader.changed?, 'Change to custom dependency has not been recognised'
141
141
  end
142
142
  end
143
+
144
+ describe 'reloading module constants' do
145
+ it 'should remove constants of misdesigned modules' do
146
+ skip
147
+ Padrino.clear!
148
+ require File.expand_path(File.dirname(__FILE__) + '/fixtures/apps/concerned/app.rb')
149
+ @app = SystemConcernedClassDemo
150
+ Padrino.mount(SystemConcernedClassDemo).to("/")
151
+ get '/'
152
+
153
+ original_value = BadModule.instance_variable_get(:@happy_global_variable)
154
+ FileUtils.touch File.dirname(__FILE__) + '/fixtures/apps/concerned/models/mixins/badmodule.rb'
155
+ Padrino.reload!
156
+ assert_equal original_value, BadModule.instance_variable_get(:@happy_global_variable)
157
+ end
158
+ end
143
159
  end
data/test/test_routing.rb CHANGED
@@ -2403,4 +2403,14 @@ describe "Routing" do
2403
2403
  get '/update/1?product[title]=test'
2404
2404
  assert_equal 'test==test', body
2405
2405
  end
2406
+
2407
+ it "prevent overwriting params by given query" do
2408
+ mock_app do
2409
+ get '/prohibit/:id' do
2410
+ params[:id]
2411
+ end
2412
+ end
2413
+ get '/prohibit/123?id=456'
2414
+ assert_equal '123', body
2415
+ end
2406
2416
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: padrino-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.2
4
+ version: 0.13.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Padrino Team
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2016-05-09 00:00:00.000000000 Z
14
+ date: 2016-08-17 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: padrino-support
@@ -19,14 +19,14 @@ dependencies:
19
19
  requirements:
20
20
  - - '='
21
21
  - !ruby/object:Gem::Version
22
- version: 0.13.2
22
+ version: 0.13.3
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - '='
28
28
  - !ruby/object:Gem::Version
29
- version: 0.13.2
29
+ version: 0.13.3
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: sinatra
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -123,6 +123,7 @@ files:
123
123
  - lib/padrino-core/caller.rb
124
124
  - lib/padrino-core/cli/adapter.rb
125
125
  - lib/padrino-core/cli/base.rb
126
+ - lib/padrino-core/cli/binstub.rb
126
127
  - lib/padrino-core/cli/console.rb
127
128
  - lib/padrino-core/cli/launcher.rb
128
129
  - lib/padrino-core/cli/rake.rb
@@ -157,6 +158,8 @@ files:
157
158
  - test/fixtures/app_gem/lib/app_gem.rb
158
159
  - test/fixtures/app_gem/lib/app_gem/version.rb
159
160
  - test/fixtures/apps/complex.rb
161
+ - test/fixtures/apps/concerned/app.rb
162
+ - test/fixtures/apps/concerned/models/mixins/badmodule.rb
160
163
  - test/fixtures/apps/custom_dependencies/custom_dependencies.rb
161
164
  - test/fixtures/apps/custom_dependencies/my_dependencies/my_dependency.rb
162
165
  - test/fixtures/apps/demo_app.rb
@@ -209,6 +212,7 @@ files:
209
212
  - test/test_reloader_complex.rb
210
213
  - test/test_reloader_external.rb
211
214
  - test/test_reloader_simple.rb
215
+ - test/test_reloader_storage.rb
212
216
  - test/test_reloader_system.rb
213
217
  - test/test_restful_routing.rb
214
218
  - test/test_router.rb
@@ -234,71 +238,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
234
238
  version: 1.3.6
235
239
  requirements: []
236
240
  rubyforge_project: padrino-core
237
- rubygems_version: 2.4.8
241
+ rubygems_version: 2.6.4
238
242
  signing_key:
239
243
  specification_version: 4
240
244
  summary: The required Padrino core gem
241
- test_files:
242
- - test/fixtures/app_gem/Gemfile
243
- - test/fixtures/app_gem/app/app.rb
244
- - test/fixtures/app_gem/app_gem.gemspec
245
- - test/fixtures/app_gem/lib/app_gem.rb
246
- - test/fixtures/app_gem/lib/app_gem/version.rb
247
- - test/fixtures/apps/complex.rb
248
- - test/fixtures/apps/custom_dependencies/custom_dependencies.rb
249
- - test/fixtures/apps/custom_dependencies/my_dependencies/my_dependency.rb
250
- - test/fixtures/apps/demo_app.rb
251
- - test/fixtures/apps/demo_demo.rb
252
- - test/fixtures/apps/demo_project/api/app.rb
253
- - test/fixtures/apps/demo_project/api/lib/api_lib.rb
254
- - test/fixtures/apps/demo_project/app.rb
255
- - test/fixtures/apps/external_apps/fake_lib.rb
256
- - test/fixtures/apps/external_apps/fake_root.rb
257
- - test/fixtures/apps/helpers/class_methods_helpers.rb
258
- - test/fixtures/apps/helpers/instance_methods_helpers.rb
259
- - test/fixtures/apps/helpers/system_helpers.rb
260
- - test/fixtures/apps/kiq.rb
261
- - test/fixtures/apps/lib/myklass.rb
262
- - test/fixtures/apps/lib/myklass/mysubklass.rb
263
- - test/fixtures/apps/models/child.rb
264
- - test/fixtures/apps/models/parent.rb
265
- - test/fixtures/apps/mountable_apps/rack_apps.rb
266
- - test/fixtures/apps/mountable_apps/static.html
267
- - test/fixtures/apps/precompiled_app.rb
268
- - test/fixtures/apps/simple.rb
269
- - test/fixtures/apps/static.rb
270
- - test/fixtures/apps/stealthy/app.rb
271
- - test/fixtures/apps/stealthy/helpers/stealthy_class_helpers.rb
272
- - test/fixtures/apps/system.rb
273
- - test/fixtures/apps/system_class_methods_demo.rb
274
- - test/fixtures/apps/system_instance_methods_demo.rb
275
- - test/fixtures/dependencies/a.rb
276
- - test/fixtures/dependencies/b.rb
277
- - test/fixtures/dependencies/c.rb
278
- - test/fixtures/dependencies/circular/e.rb
279
- - test/fixtures/dependencies/circular/f.rb
280
- - test/fixtures/dependencies/circular/g.rb
281
- - test/fixtures/dependencies/d.rb
282
- - test/fixtures/reloadable_apps/external/app/app.rb
283
- - test/fixtures/reloadable_apps/external/app/controllers/base.rb
284
- - test/fixtures/reloadable_apps/main/app.rb
285
- - test/helper.rb
286
- - test/test_application.rb
287
- - test/test_configuration.rb
288
- - test/test_core.rb
289
- - test/test_csrf_protection.rb
290
- - test/test_dependencies.rb
291
- - test/test_filters.rb
292
- - test/test_flash.rb
293
- - test/test_locale.rb
294
- - test/test_logger.rb
295
- - test/test_mounter.rb
296
- - test/test_params_protection.rb
297
- - test/test_reloader_complex.rb
298
- - test/test_reloader_external.rb
299
- - test/test_reloader_simple.rb
300
- - test/test_reloader_system.rb
301
- - test/test_restful_routing.rb
302
- - test/test_router.rb
303
- - test/test_routing.rb
304
- has_rdoc:
245
+ test_files: []