rails 2.3.2 → 2.3.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.

Potentially problematic release.


This version of rails might be problematic. Click here for more details.

Files changed (118) hide show
  1. data/CHANGELOG +4 -0
  2. data/Rakefile +11 -9
  3. data/configs/routes.rb +1 -1
  4. data/guides/files/javascripts/code_highlighter.js +188 -0
  5. data/guides/files/javascripts/guides.js +8 -0
  6. data/guides/files/javascripts/highlighters.js +90 -0
  7. data/guides/files/stylesheets/main.css +441 -0
  8. data/guides/files/stylesheets/print.css +52 -0
  9. data/guides/files/stylesheets/reset.css +43 -0
  10. data/guides/files/stylesheets/style.css +13 -0
  11. data/guides/files/stylesheets/syntax.css +31 -0
  12. data/guides/images/belongs_to.png +0 -0
  13. data/guides/images/book_icon.gif +0 -0
  14. data/guides/images/bullet.gif +0 -0
  15. data/guides/images/chapters_icon.gif +0 -0
  16. data/guides/images/check_bullet.gif +0 -0
  17. data/guides/images/credits_pic_blank.gif +0 -0
  18. data/guides/images/csrf.png +0 -0
  19. data/guides/images/customized_error_messages.png +0 -0
  20. data/guides/images/error_messages.png +0 -0
  21. data/guides/images/feature_tile.gif +0 -0
  22. data/guides/images/footer_tile.gif +0 -0
  23. data/guides/images/fxn.jpg +0 -0
  24. data/guides/images/grey_bullet.gif +0 -0
  25. data/guides/images/habtm.png +0 -0
  26. data/guides/images/has_many.png +0 -0
  27. data/guides/images/has_many_through.png +0 -0
  28. data/guides/images/has_one.png +0 -0
  29. data/guides/images/has_one_through.png +0 -0
  30. data/guides/images/header_backdrop.png +0 -0
  31. data/guides/images/header_tile.gif +0 -0
  32. data/guides/images/i18n/demo_localized_pirate.png +0 -0
  33. data/guides/images/i18n/demo_translated_en.png +0 -0
  34. data/guides/images/i18n/demo_translated_pirate.png +0 -0
  35. data/guides/images/i18n/demo_translation_missing.png +0 -0
  36. data/guides/images/i18n/demo_untranslated.png +0 -0
  37. data/guides/images/icons/README +5 -0
  38. data/guides/images/icons/callouts/1.png +0 -0
  39. data/guides/images/icons/callouts/10.png +0 -0
  40. data/guides/images/icons/callouts/11.png +0 -0
  41. data/guides/images/icons/callouts/12.png +0 -0
  42. data/guides/images/icons/callouts/13.png +0 -0
  43. data/guides/images/icons/callouts/14.png +0 -0
  44. data/guides/images/icons/callouts/15.png +0 -0
  45. data/guides/images/icons/callouts/2.png +0 -0
  46. data/guides/images/icons/callouts/3.png +0 -0
  47. data/guides/images/icons/callouts/4.png +0 -0
  48. data/guides/images/icons/callouts/5.png +0 -0
  49. data/guides/images/icons/callouts/6.png +0 -0
  50. data/guides/images/icons/callouts/7.png +0 -0
  51. data/guides/images/icons/callouts/8.png +0 -0
  52. data/guides/images/icons/callouts/9.png +0 -0
  53. data/guides/images/icons/caution.png +0 -0
  54. data/guides/images/icons/example.png +0 -0
  55. data/guides/images/icons/home.png +0 -0
  56. data/guides/images/icons/important.png +0 -0
  57. data/guides/images/icons/next.png +0 -0
  58. data/guides/images/icons/note.png +0 -0
  59. data/guides/images/icons/prev.png +0 -0
  60. data/guides/images/icons/tip.png +0 -0
  61. data/guides/images/icons/up.png +0 -0
  62. data/guides/images/icons/warning.png +0 -0
  63. data/guides/images/nav_arrow.gif +0 -0
  64. data/guides/images/polymorphic.png +0 -0
  65. data/guides/images/posts_index.png +0 -0
  66. data/guides/images/rails_guides_logo.gif +0 -0
  67. data/guides/images/rails_logo_remix.gif +0 -0
  68. data/guides/images/rails_welcome.png +0 -0
  69. data/guides/images/session_fixation.png +0 -0
  70. data/guides/images/tab_grey.gif +0 -0
  71. data/guides/images/tab_info.gif +0 -0
  72. data/guides/images/tab_note.gif +0 -0
  73. data/guides/images/tab_red.gif +0 -0
  74. data/guides/images/tab_yellow.gif +0 -0
  75. data/guides/images/tab_yellow.png +0 -0
  76. data/guides/images/validation_error_messages.png +0 -0
  77. data/guides/rails_guides.rb +42 -0
  78. data/guides/rails_guides/generator.rb +138 -0
  79. data/guides/rails_guides/helpers.rb +34 -0
  80. data/guides/rails_guides/indexer.rb +55 -0
  81. data/guides/rails_guides/textile_extensions.rb +41 -0
  82. data/guides/source/2_2_release_notes.textile +422 -0
  83. data/guides/source/2_3_release_notes.textile +610 -0
  84. data/guides/source/action_controller_overview.textile +776 -0
  85. data/guides/source/action_mailer_basics.textile +424 -0
  86. data/guides/source/active_record_basics.textile +135 -0
  87. data/guides/source/active_record_querying.textile +969 -0
  88. data/guides/source/activerecord_validations_callbacks.textile +1086 -0
  89. data/guides/source/association_basics.textile +1781 -0
  90. data/guides/source/caching_with_rails.textile +524 -0
  91. data/guides/source/command_line.textile +589 -0
  92. data/guides/source/configuring.textile +234 -0
  93. data/guides/source/contribute.textile +71 -0
  94. data/guides/source/contributing_to_rails.textile +239 -0
  95. data/guides/source/credits.erb.textile +52 -0
  96. data/guides/source/debugging_rails_applications.textile +709 -0
  97. data/guides/source/form_helpers.textile +766 -0
  98. data/guides/source/getting_started.textile +1297 -0
  99. data/guides/source/i18n.textile +912 -0
  100. data/guides/source/index.erb.textile +124 -0
  101. data/guides/source/layout.html.erb +103 -0
  102. data/guides/source/layouts_and_rendering.textile +979 -0
  103. data/guides/source/migrations.textile +591 -0
  104. data/guides/source/nested_model_forms.textile +222 -0
  105. data/guides/source/performance_testing.textile +531 -0
  106. data/guides/source/plugins.textile +1512 -0
  107. data/guides/source/rails_on_rack.textile +309 -0
  108. data/guides/source/routing.textile +903 -0
  109. data/guides/source/security.textile +986 -0
  110. data/guides/source/testing.textile +951 -0
  111. data/lib/commands/performance/profiler.rb +1 -1
  112. data/lib/initializer.rb +27 -4
  113. data/lib/rails/gem_dependency.rb +35 -6
  114. data/lib/rails/rack/metal.rb +1 -1
  115. data/lib/rails/version.rb +1 -1
  116. data/lib/tasks/gems.rake +19 -6
  117. data/lib/test_help.rb +4 -1
  118. metadata +123 -7
@@ -29,7 +29,7 @@ begin
29
29
  printer_class = RubyProf::FlatPrinter
30
30
  end
31
31
  printer = printer_class.new(results)
32
- printer.print($stderr, 0)
32
+ printer.print($stderr)
33
33
  rescue LoadError
34
34
  require "prof"
35
35
  $stderr.puts 'Using the old ruby-prof extension.'
@@ -159,6 +159,8 @@ module Rails
159
159
 
160
160
  add_support_load_paths
161
161
 
162
+ check_for_unbuilt_gems
163
+
162
164
  load_gems
163
165
  load_plugins
164
166
 
@@ -301,11 +303,30 @@ module Rails
301
303
  end
302
304
 
303
305
  def load_gems
304
- unless $gems_build_rake_task
306
+ unless $gems_rake_task
305
307
  @configuration.gems.each { |gem| gem.load }
306
308
  end
307
309
  end
308
310
 
311
+ def check_for_unbuilt_gems
312
+ unbuilt_gems = @configuration.gems.select(&:frozen?).reject(&:built?)
313
+ if unbuilt_gems.size > 0
314
+ # don't print if the gems:build rake tasks are being run
315
+ unless $gems_build_rake_task
316
+ abort <<-end_error
317
+ The following gems have native components that need to be built
318
+ #{unbuilt_gems.map { |gem| "#{gem.name} #{gem.requirement}" } * "\n "}
319
+
320
+ You're running:
321
+ ruby #{Gem.ruby_version} at #{Gem.ruby}
322
+ rubygems #{Gem::RubyGemsVersion} at #{Gem.path * ', '}
323
+
324
+ Run `rake gems:build` to build the unbuilt gems.
325
+ end_error
326
+ end
327
+ end
328
+ end
329
+
309
330
  def check_gem_dependencies
310
331
  unloaded_gems = @configuration.gems.reject { |g| g.loaded? }
311
332
  if unloaded_gems.size > 0
@@ -420,7 +441,8 @@ Run `rake gems:install` to install the missing gems.
420
441
 
421
442
  def initialize_database_middleware
422
443
  if configuration.frameworks.include?(:active_record)
423
- if ActionController::Base.session_store == ActiveRecord::SessionStore
444
+ if configuration.frameworks.include?(:action_controller) &&
445
+ ActionController::Base.session_store == ActiveRecord::SessionStore
424
446
  configuration.middleware.insert_before :"ActiveRecord::SessionStore", ActiveRecord::ConnectionAdapters::ConnectionManagement
425
447
  configuration.middleware.insert_before :"ActiveRecord::SessionStore", ActiveRecord::QueryCache
426
448
  else
@@ -565,7 +587,7 @@ Run `rake gems:install` to install the missing gems.
565
587
  Rails::Rack::Metal.metal_paths += plugin_loader.engine_metal_paths
566
588
 
567
589
  configuration.middleware.insert_before(
568
- :"ActionController::RewindableInput",
590
+ :"ActionController::ParamsParser",
569
591
  Rails::Rack::Metal, :if => Rails::Rack::Metal.metals.any?)
570
592
  end
571
593
 
@@ -862,7 +884,7 @@ Run `rake gems:install` to install the missing gems.
862
884
 
863
885
  # Enable threaded mode. Allows concurrent requests to controller actions and
864
886
  # multiple database connections. Also disables automatic dependency loading
865
- # after boot, and disables reloading code on every request, as these are
887
+ # after boot, and disables reloading code on every request, as these are
866
888
  # fundamentally incompatible with thread safety.
867
889
  def threadsafe!
868
890
  self.preload_frameworks = true
@@ -1103,3 +1125,4 @@ class Rails::OrderedOptions < Array #:nodoc:
1103
1125
  return false
1104
1126
  end
1105
1127
  end
1128
+
@@ -29,6 +29,22 @@ module Rails
29
29
  end
30
30
  end
31
31
 
32
+ def self.from_directory_name(directory_name, load_spec=true)
33
+ directory_name_parts = File.basename(directory_name).split('-')
34
+ name = directory_name_parts[0..-2].join('-')
35
+ version = directory_name_parts.last
36
+ result = self.new(name, :version => version)
37
+ spec_filename = File.join(directory_name, '.specification')
38
+ if load_spec
39
+ raise "Missing specification file in #{File.dirname(spec_filename)}. Perhaps you need to do a 'rake gems:refresh_specs'?" unless File.exists?(spec_filename)
40
+ spec = YAML::load_file(spec_filename)
41
+ result.specification = spec
42
+ end
43
+ result
44
+ rescue ArgumentError => e
45
+ raise "Unable to determine gem name and version from '#{directory_name}'"
46
+ end
47
+
32
48
  def initialize(name, options = {})
33
49
  require 'rubygems' unless Object.const_defined?(:Gem)
34
50
 
@@ -95,14 +111,26 @@ module Rails
95
111
  end
96
112
  end
97
113
 
114
+ def specification=(s)
115
+ @spec = s
116
+ end
117
+
98
118
  def requirement
99
119
  r = version_requirements
100
120
  (r == Gem::Requirement.default) ? nil : r
101
121
  end
102
122
 
103
123
  def built?
104
- # TODO: If Rubygems ever gives us a way to detect this, we should use it
105
- false
124
+ return false unless frozen?
125
+
126
+ if vendor_gem?
127
+ specification.extensions.each do |ext|
128
+ makefile = File.join(unpacked_gem_directory, File.dirname(ext), 'Makefile')
129
+ return false unless File.exists?(makefile)
130
+ end
131
+ end
132
+
133
+ true
106
134
  end
107
135
 
108
136
  def framework_gem?
@@ -155,15 +183,16 @@ module Rails
155
183
  specification && File.exists?(unpacked_gem_directory)
156
184
  end
157
185
 
158
- def build
186
+ def build(options={})
159
187
  require 'rails/gem_builder'
160
- unless built?
188
+ return if specification.nil?
189
+ if options[:force] || !built?
161
190
  return unless File.exists?(unpacked_specification_filename)
162
191
  spec = YAML::load_file(unpacked_specification_filename)
163
192
  Rails::GemBuilder.new(spec, unpacked_gem_directory).build_extensions
164
193
  puts "Built gem: '#{unpacked_gem_directory}'"
165
194
  end
166
- dependencies.each { |dep| dep.build }
195
+ dependencies.each { |dep| dep.build(options) }
167
196
  end
168
197
 
169
198
  def install
@@ -223,7 +252,7 @@ module Rails
223
252
  real_spec = Gem::Specification.load(specification.loaded_from)
224
253
  write_specification(real_spec)
225
254
  end
226
- dependencies.each { |dep| dep.unpack } if options[:recursive]
255
+ dependencies.each { |dep| dep.unpack(options) } if options[:recursive]
227
256
  end
228
257
 
229
258
  def write_specification(spec)
@@ -26,7 +26,7 @@ module Rails
26
26
 
27
27
  load_list.map do |requested_metal|
28
28
  if metal = all_metals[requested_metal]
29
- require metal
29
+ require_dependency metal
30
30
  requested_metal.constantize
31
31
  end
32
32
  end.compact
@@ -2,7 +2,7 @@ module Rails
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 2
4
4
  MINOR = 3
5
- TINY = 2
5
+ TINY = 3
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -20,18 +20,25 @@ namespace :gems do
20
20
  desc "Build any native extensions for unpacked gems"
21
21
  task :build do
22
22
  $gems_build_rake_task = true
23
- Rake::Task['gems:unpack'].invoke
24
- current_gems.each &:build
23
+ frozen_gems.each { |gem| gem.build }
24
+ end
25
+
26
+ namespace :build do
27
+ desc "Force the build of all gems"
28
+ task :force do
29
+ $gems_build_rake_task = true
30
+ frozen_gems.each { |gem| gem.build(:force => true) }
31
+ end
25
32
  end
26
33
 
27
34
  desc "Installs all required gems."
28
35
  task :install => :base do
29
- current_gems.each &:install
36
+ current_gems.each { |gem| gem.install }
30
37
  end
31
38
 
32
39
  desc "Unpacks all required gems into vendor/gems."
33
40
  task :unpack => :install do
34
- current_gems.each &:unpack
41
+ current_gems.each { |gem| gem.unpack }
35
42
  end
36
43
 
37
44
  namespace :unpack do
@@ -42,8 +49,8 @@ namespace :gems do
42
49
  end
43
50
 
44
51
  desc "Regenerate gem specifications in correct format."
45
- task :refresh_specs => :base do
46
- current_gems.each &:refresh
52
+ task :refresh_specs do
53
+ frozen_gems(false).each { |gem| gem.refresh }
47
54
  end
48
55
  end
49
56
 
@@ -53,6 +60,12 @@ def current_gems
53
60
  gems
54
61
  end
55
62
 
63
+ def frozen_gems(load_specs=true)
64
+ Dir[File.join(RAILS_ROOT, 'vendor', 'gems', '*-*')].map do |gem_dir|
65
+ Rails::GemDependency.from_directory_name(gem_dir, load_specs)
66
+ end
67
+ end
68
+
56
69
  def print_gem_status(gem, indent=1)
57
70
  code = case
58
71
  when gem.framework_gem? then 'R'
@@ -29,7 +29,10 @@ end
29
29
  begin
30
30
  require_library_or_gem 'ruby-debug'
31
31
  Debugger.start
32
- Debugger.settings[:autoeval] = true if Debugger.respond_to?(:settings)
32
+ if Debugger.respond_to?(:settings)
33
+ Debugger.settings[:autoeval] = true
34
+ Debugger.settings[:autolist] = 1
35
+ end
33
36
  rescue LoadError
34
37
  # ruby-debug wasn't available so neither can the debugging be
35
38
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.2
4
+ version: 2.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-15 00:00:00 -05:00
12
+ date: 2009-07-20 00:00:00 -05:00
13
13
  default_executable: rails
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -30,7 +30,7 @@ dependencies:
30
30
  requirements:
31
31
  - - "="
32
32
  - !ruby/object:Gem::Version
33
- version: 2.3.2
33
+ version: 2.3.3
34
34
  version:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: activerecord
@@ -40,7 +40,7 @@ dependencies:
40
40
  requirements:
41
41
  - - "="
42
42
  - !ruby/object:Gem::Version
43
- version: 2.3.2
43
+ version: 2.3.3
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
46
  name: actionpack
@@ -50,7 +50,7 @@ dependencies:
50
50
  requirements:
51
51
  - - "="
52
52
  - !ruby/object:Gem::Version
53
- version: 2.3.2
53
+ version: 2.3.3
54
54
  version:
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: actionmailer
@@ -60,7 +60,7 @@ dependencies:
60
60
  requirements:
61
61
  - - "="
62
62
  - !ruby/object:Gem::Version
63
- version: 2.3.2
63
+ version: 2.3.3
64
64
  version:
65
65
  - !ruby/object:Gem::Dependency
66
66
  name: activeresource
@@ -70,7 +70,7 @@ dependencies:
70
70
  requirements:
71
71
  - - "="
72
72
  - !ruby/object:Gem::Version
73
- version: 2.3.2
73
+ version: 2.3.3
74
74
  version:
75
75
  description: Rails is a framework for building web-application using CGI, FCGI, mod_ruby, or WEBrick on top of either MySQL, PostgreSQL, SQLite, DB2, SQL Server, or Oracle with eRuby- or Builder-based templates.
76
76
  email: david@loudthinking.com
@@ -143,6 +143,122 @@ files:
143
143
  - environments/environment.rb
144
144
  - environments/production.rb
145
145
  - environments/test.rb
146
+ - guides/files
147
+ - guides/files/javascripts
148
+ - guides/files/javascripts/code_highlighter.js
149
+ - guides/files/javascripts/guides.js
150
+ - guides/files/javascripts/highlighters.js
151
+ - guides/files/stylesheets
152
+ - guides/files/stylesheets/main.css
153
+ - guides/files/stylesheets/print.css
154
+ - guides/files/stylesheets/reset.css
155
+ - guides/files/stylesheets/style.css
156
+ - guides/files/stylesheets/syntax.css
157
+ - guides/images
158
+ - guides/images/belongs_to.png
159
+ - guides/images/book_icon.gif
160
+ - guides/images/bullet.gif
161
+ - guides/images/chapters_icon.gif
162
+ - guides/images/check_bullet.gif
163
+ - guides/images/credits_pic_blank.gif
164
+ - guides/images/csrf.png
165
+ - guides/images/customized_error_messages.png
166
+ - guides/images/error_messages.png
167
+ - guides/images/feature_tile.gif
168
+ - guides/images/footer_tile.gif
169
+ - guides/images/fxn.jpg
170
+ - guides/images/grey_bullet.gif
171
+ - guides/images/habtm.png
172
+ - guides/images/has_many.png
173
+ - guides/images/has_many_through.png
174
+ - guides/images/has_one.png
175
+ - guides/images/has_one_through.png
176
+ - guides/images/header_backdrop.png
177
+ - guides/images/header_tile.gif
178
+ - guides/images/i18n
179
+ - guides/images/i18n/demo_localized_pirate.png
180
+ - guides/images/i18n/demo_translated_en.png
181
+ - guides/images/i18n/demo_translated_pirate.png
182
+ - guides/images/i18n/demo_translation_missing.png
183
+ - guides/images/i18n/demo_untranslated.png
184
+ - guides/images/icons
185
+ - guides/images/icons/callouts
186
+ - guides/images/icons/callouts/1.png
187
+ - guides/images/icons/callouts/10.png
188
+ - guides/images/icons/callouts/11.png
189
+ - guides/images/icons/callouts/12.png
190
+ - guides/images/icons/callouts/13.png
191
+ - guides/images/icons/callouts/14.png
192
+ - guides/images/icons/callouts/15.png
193
+ - guides/images/icons/callouts/2.png
194
+ - guides/images/icons/callouts/3.png
195
+ - guides/images/icons/callouts/4.png
196
+ - guides/images/icons/callouts/5.png
197
+ - guides/images/icons/callouts/6.png
198
+ - guides/images/icons/callouts/7.png
199
+ - guides/images/icons/callouts/8.png
200
+ - guides/images/icons/callouts/9.png
201
+ - guides/images/icons/caution.png
202
+ - guides/images/icons/example.png
203
+ - guides/images/icons/home.png
204
+ - guides/images/icons/important.png
205
+ - guides/images/icons/next.png
206
+ - guides/images/icons/note.png
207
+ - guides/images/icons/prev.png
208
+ - guides/images/icons/README
209
+ - guides/images/icons/tip.png
210
+ - guides/images/icons/up.png
211
+ - guides/images/icons/warning.png
212
+ - guides/images/nav_arrow.gif
213
+ - guides/images/polymorphic.png
214
+ - guides/images/posts_index.png
215
+ - guides/images/rails_guides_logo.gif
216
+ - guides/images/rails_logo_remix.gif
217
+ - guides/images/rails_welcome.png
218
+ - guides/images/session_fixation.png
219
+ - guides/images/tab_grey.gif
220
+ - guides/images/tab_info.gif
221
+ - guides/images/tab_note.gif
222
+ - guides/images/tab_red.gif
223
+ - guides/images/tab_yellow.gif
224
+ - guides/images/tab_yellow.png
225
+ - guides/images/validation_error_messages.png
226
+ - guides/rails_guides
227
+ - guides/rails_guides/generator.rb
228
+ - guides/rails_guides/helpers.rb
229
+ - guides/rails_guides/indexer.rb
230
+ - guides/rails_guides/textile_extensions.rb
231
+ - guides/rails_guides.rb
232
+ - guides/source
233
+ - guides/source/2_2_release_notes.textile
234
+ - guides/source/2_3_release_notes.textile
235
+ - guides/source/action_controller_overview.textile
236
+ - guides/source/action_mailer_basics.textile
237
+ - guides/source/active_record_basics.textile
238
+ - guides/source/active_record_querying.textile
239
+ - guides/source/activerecord_validations_callbacks.textile
240
+ - guides/source/association_basics.textile
241
+ - guides/source/caching_with_rails.textile
242
+ - guides/source/command_line.textile
243
+ - guides/source/configuring.textile
244
+ - guides/source/contribute.textile
245
+ - guides/source/contributing_to_rails.textile
246
+ - guides/source/credits.erb.textile
247
+ - guides/source/debugging_rails_applications.textile
248
+ - guides/source/form_helpers.textile
249
+ - guides/source/getting_started.textile
250
+ - guides/source/i18n.textile
251
+ - guides/source/index.erb.textile
252
+ - guides/source/layout.html.erb
253
+ - guides/source/layouts_and_rendering.textile
254
+ - guides/source/migrations.textile
255
+ - guides/source/nested_model_forms.textile
256
+ - guides/source/performance_testing.textile
257
+ - guides/source/plugins.textile
258
+ - guides/source/rails_on_rack.textile
259
+ - guides/source/routing.textile
260
+ - guides/source/security.textile
261
+ - guides/source/testing.textile
146
262
  - helpers/application_controller.rb
147
263
  - helpers/application_helper.rb
148
264
  - helpers/performance_test.rb