railties 3.0.0.rc → 3.0.0.rc2
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.
- data/CHANGELOG +80 -75
- data/README.rdoc +1 -1
- data/guides/assets/stylesheets/main.css +14 -14
- data/guides/rails_guides.rb +20 -1
- data/guides/rails_guides/generator.rb +7 -7
- data/guides/source/2_3_release_notes.textile +5 -5
- data/guides/source/3_0_release_notes.textile +4 -3
- data/guides/source/action_controller_overview.textile +32 -17
- data/guides/source/action_view_overview.textile +44 -44
- data/guides/source/active_record_basics.textile +2 -2
- data/guides/source/active_record_querying.textile +7 -7
- data/guides/source/active_record_validations_callbacks.textile +20 -20
- data/guides/source/active_support_core_extensions.textile +370 -198
- data/guides/source/ajax_on_rails.textile +17 -17
- data/guides/source/api_documentation_guidelines.textile +3 -3
- data/guides/source/association_basics.textile +2 -2
- data/guides/source/caching_with_rails.textile +5 -5
- data/guides/source/command_line.textile +8 -8
- data/guides/source/configuring.textile +6 -6
- data/guides/source/contributing_to_rails.textile +14 -11
- data/guides/source/debugging_rails_applications.textile +8 -6
- data/guides/source/form_helpers.textile +1 -1
- data/guides/source/generators.textile +34 -30
- data/guides/source/getting_started.textile +13 -13
- data/guides/source/i18n.textile +12 -1
- data/guides/source/index.html.erb +4 -0
- data/guides/source/initialization.textile +67 -72
- data/guides/source/layout.html.erb +1 -0
- data/guides/source/layouts_and_rendering.textile +9 -9
- data/guides/source/nested_model_forms.textile +7 -7
- data/guides/source/plugins.textile +1 -1
- data/guides/source/rails_application_templates.textile +2 -2
- data/guides/source/routing.textile +27 -5
- data/guides/source/security.textile +6 -6
- data/guides/w3c_validator.rb +9 -9
- data/lib/rails/application.rb +1 -0
- data/lib/rails/application/configuration.rb +1 -1
- data/lib/rails/code_statistics.rb +4 -4
- data/lib/rails/commands.rb +1 -1
- data/lib/rails/commands/dbconsole.rb +1 -1
- data/lib/rails/commands/plugin.rb +1 -1
- data/lib/rails/commands/runner.rb +1 -1
- data/lib/rails/deprecation.rb +31 -52
- data/lib/rails/engine.rb +1 -1
- data/lib/rails/engine/configuration.rb +28 -1
- data/lib/rails/generators.rb +2 -2
- data/lib/rails/generators/actions.rb +3 -3
- data/lib/rails/generators/active_model.rb +3 -3
- data/lib/rails/generators/base.rb +1 -1
- data/lib/rails/generators/rails/app/app_generator.rb +9 -3
- data/lib/rails/generators/rails/app/templates/Gemfile +2 -2
- data/lib/rails/generators/rails/app/templates/config/databases/mysql.yml +4 -13
- data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml +1 -1
- data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +4 -0
- data/lib/rails/generators/rails/app/templates/config/routes.rb +4 -4
- data/lib/rails/generators/rails/app/templates/public/index.html +0 -23
- data/lib/rails/generators/rails/app/templates/public/javascripts/effects.js +1 -1
- data/lib/rails/generators/rails/generator/USAGE +3 -2
- data/lib/rails/generators/rails/migration/USAGE +4 -4
- data/lib/rails/generators/rails/plugin/USAGE +1 -1
- data/lib/rails/generators/rails/resource/resource_generator.rb +2 -2
- data/lib/rails/generators/test_case.rb +1 -1
- data/lib/rails/info_controller.rb +1 -1
- data/lib/rails/plugin.rb +1 -1
- data/lib/rails/rack/log_tailer.rb +2 -5
- data/lib/rails/railtie.rb +22 -22
- data/lib/rails/script_rails_loader.rb +2 -2
- data/lib/rails/tasks/documentation.rake +5 -5
- data/lib/rails/tasks/framework.rake +1 -1
- data/lib/rails/tasks/routes.rake +23 -9
- data/lib/rails/test_unit/testing.rake +3 -2
- data/lib/rails/version.rb +1 -1
- metadata +10 -10
data/lib/rails/deprecation.rb
CHANGED
@@ -1,62 +1,41 @@
|
|
1
1
|
require "active_support/string_inquirer"
|
2
|
-
require "active_support/
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def replace(*args)
|
13
|
-
warn(caller, :replace, *args)
|
14
|
-
end
|
15
|
-
|
16
|
-
def warn(callstack, called, args)
|
17
|
-
unless warned
|
18
|
-
ActiveSupport::Deprecation.warn("RAILS_ROOT is deprecated! Use Rails.root instead", callstack)
|
19
|
-
self.warned = true
|
2
|
+
require "active_support/basic_object"
|
3
|
+
|
4
|
+
module Rails
|
5
|
+
module Initializer
|
6
|
+
def self.run(&block)
|
7
|
+
klass = Class.new(Rails::Application)
|
8
|
+
klass.instance_exec(klass.config, &block)
|
9
|
+
klass.initialize!
|
20
10
|
end
|
21
11
|
end
|
22
|
-
end).new
|
23
|
-
|
24
|
-
RAILS_ENV = (Class.new(ActiveSupport::Deprecation::DeprecationProxy) do
|
25
|
-
cattr_accessor :warned
|
26
|
-
self.warned = false
|
27
|
-
|
28
|
-
def target
|
29
|
-
Rails.env
|
30
|
-
end
|
31
12
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
def warn(callstack, called, args)
|
37
|
-
unless warned
|
38
|
-
ActiveSupport::Deprecation.warn("RAILS_ENV is deprecated! Use Rails.env instead", callstack)
|
39
|
-
self.warned = true
|
13
|
+
class DeprecatedConstant < ActiveSupport::BasicObject
|
14
|
+
def self.deprecate(old, new)
|
15
|
+
constant = self.new(old, new)
|
16
|
+
eval "::#{old} = constant"
|
40
17
|
end
|
41
|
-
end
|
42
|
-
end).new
|
43
|
-
|
44
|
-
RAILS_DEFAULT_LOGGER = (Class.new(ActiveSupport::Deprecation::DeprecationProxy) do
|
45
|
-
cattr_accessor :warned
|
46
|
-
self.warned = false
|
47
18
|
|
48
|
-
|
49
|
-
|
50
|
-
|
19
|
+
def initialize(old, new)
|
20
|
+
@old, @new = old, new
|
21
|
+
@target = ::Kernel.eval "proc { #{@new} }"
|
22
|
+
@warned = false
|
23
|
+
end
|
51
24
|
|
52
|
-
|
53
|
-
|
54
|
-
|
25
|
+
def method_missing(meth, *args, &block)
|
26
|
+
::ActiveSupport::Deprecation.warn("#{@old} is deprecated. Please use #{@new}") unless @warned
|
27
|
+
@warned = true
|
55
28
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
29
|
+
target = @target.call
|
30
|
+
if target.respond_to?(meth)
|
31
|
+
target.send(meth, *args, &block)
|
32
|
+
else
|
33
|
+
super
|
34
|
+
end
|
60
35
|
end
|
61
36
|
end
|
62
|
-
|
37
|
+
|
38
|
+
DeprecatedConstant.deprecate("RAILS_ROOT", "Rails.root.to_s")
|
39
|
+
DeprecatedConstant.deprecate("RAILS_ENV", "Rails.env")
|
40
|
+
DeprecatedConstant.deprecate("RAILS_DEFAULT_LOGGER", "Rails.logger")
|
41
|
+
end
|
data/lib/rails/engine.rb
CHANGED
@@ -119,7 +119,7 @@ module Rails
|
|
119
119
|
root = File.exist?("#{root_path}/#{flag}") ? root_path : default
|
120
120
|
raise "Could not find root path for #{self}" unless root
|
121
121
|
|
122
|
-
|
122
|
+
RbConfig::CONFIG['host_os'] =~ /mswin|mingw/ ?
|
123
123
|
Pathname.new(root).expand_path : Pathname.new(root).realpath
|
124
124
|
end
|
125
125
|
end
|
@@ -48,6 +48,33 @@ module Rails
|
|
48
48
|
def autoload_paths
|
49
49
|
@autoload_paths ||= paths.autoload_paths
|
50
50
|
end
|
51
|
+
|
52
|
+
def load_paths
|
53
|
+
ActiveSupport::Deprecation.warn "config.load_paths is deprecated. Please use config.autoload_paths instead."
|
54
|
+
autoload_paths
|
55
|
+
end
|
56
|
+
|
57
|
+
def load_paths=(paths)
|
58
|
+
ActiveSupport::Deprecation.warn "config.load_paths= is deprecated. Please use config.autoload_paths instead."
|
59
|
+
self.autoload_paths = paths
|
60
|
+
end
|
61
|
+
|
62
|
+
# Rails 3, by default, uses bundler, which shims the Kernel#gem method so that it should
|
63
|
+
# behave correctly for this deprecation.
|
64
|
+
def gem(name, options = {})
|
65
|
+
super name, options[:version] || ">= 0"
|
66
|
+
require options[:lib] || name
|
67
|
+
rescue Gem::LoadError
|
68
|
+
msg = "config.gem is deprecated, and you tried to activate the '#{name}' gem (#{options.inspect}) using it.\n"
|
69
|
+
|
70
|
+
if File.exist?("#{Rails.root}/Gemfile")
|
71
|
+
msg << "Please add '#{name}' to your Gemfile."
|
72
|
+
else
|
73
|
+
msg << "Please update your application to use bundler."
|
74
|
+
end
|
75
|
+
ActiveSupport::Deprecation.warn(msg, caller)
|
76
|
+
exit
|
77
|
+
end
|
51
78
|
end
|
52
79
|
end
|
53
|
-
end
|
80
|
+
end
|
data/lib/rails/generators.rb
CHANGED
@@ -218,11 +218,11 @@ module Rails
|
|
218
218
|
puts "Usage: rails #{command} GENERATOR [args] [options]"
|
219
219
|
puts
|
220
220
|
puts "General options:"
|
221
|
-
puts " -h, [--help] # Print
|
221
|
+
puts " -h, [--help] # Print generator's options and usage"
|
222
222
|
puts " -p, [--pretend] # Run but do not make any changes"
|
223
223
|
puts " -f, [--force] # Overwrite files that already exist"
|
224
224
|
puts " -s, [--skip] # Skip files that already exist"
|
225
|
-
puts " -q, [--quiet] #
|
225
|
+
puts " -q, [--quiet] # Suppress status output"
|
226
226
|
puts
|
227
227
|
puts "Please choose a generator below."
|
228
228
|
puts
|
@@ -242,7 +242,7 @@ module Rails
|
|
242
242
|
def rake(command, options={})
|
243
243
|
log :rake, command
|
244
244
|
env = options[:env] || 'development'
|
245
|
-
sudo = options[:sudo] &&
|
245
|
+
sudo = options[:sudo] && RbConfig::CONFIG['host_os'] !~ /mswin|mingw/ ? 'sudo ' : ''
|
246
246
|
in_root { run("#{sudo}#{extify(:rake)} #{command} RAILS_ENV=#{env}", :verbose => false) }
|
247
247
|
end
|
248
248
|
|
@@ -275,7 +275,7 @@ module Rails
|
|
275
275
|
#
|
276
276
|
def route(routing_code)
|
277
277
|
log :route, routing_code
|
278
|
-
sentinel = /\.routes\.draw do(
|
278
|
+
sentinel = /\.routes\.draw do(?:\s*\|map\|)?\s*$/
|
279
279
|
|
280
280
|
in_root do
|
281
281
|
inject_into_file 'config/routes.rb', "\n #{routing_code}\n", { :after => sentinel, :verbose => false }
|
@@ -309,7 +309,7 @@ module Rails
|
|
309
309
|
# Add an extension to the given name based on the platform.
|
310
310
|
#
|
311
311
|
def extify(name)
|
312
|
-
if
|
312
|
+
if RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
|
313
313
|
"#{name}.bat"
|
314
314
|
else
|
315
315
|
name
|
@@ -9,16 +9,16 @@ module Rails
|
|
9
9
|
# For example:
|
10
10
|
#
|
11
11
|
# ActiveRecord::Generators::ActiveModel.find(Foo, "params[:id]")
|
12
|
-
#
|
12
|
+
# # => "Foo.find(params[:id])"
|
13
13
|
#
|
14
14
|
# Datamapper::Generators::ActiveModel.find(Foo, "params[:id]")
|
15
|
-
#
|
15
|
+
# # => "Foo.get(params[:id])"
|
16
16
|
#
|
17
17
|
# On initialization, the ActiveModel accepts the instance name that will
|
18
18
|
# receive the calls:
|
19
19
|
#
|
20
20
|
# builder = ActiveRecord::Generators::ActiveModel.new "@foo"
|
21
|
-
# builder.save
|
21
|
+
# builder.save # => "@foo.save"
|
22
22
|
#
|
23
23
|
# The only exception in ActiveModel for ActiveRecord is the use of self.build
|
24
24
|
# instead of self.new.
|
@@ -81,7 +81,7 @@ module Rails
|
|
81
81
|
# guessed based on class invokes hook_for, as noticed in the example above.
|
82
82
|
# This can be customized with two options: :base and :as.
|
83
83
|
#
|
84
|
-
# Let's suppose you are creating a generator that needs to invoke the
|
84
|
+
# Let's suppose you are creating a generator that needs to invoke the
|
85
85
|
# controller generator from test unit. Your first attempt is:
|
86
86
|
#
|
87
87
|
# class AwesomeGenerator < Rails::Generators::Base
|
@@ -216,7 +216,7 @@ module Rails
|
|
216
216
|
|
217
217
|
empty_directory '.'
|
218
218
|
set_default_accessors!
|
219
|
-
FileUtils.cd(destination_root)
|
219
|
+
FileUtils.cd(destination_root) unless options[:pretend]
|
220
220
|
end
|
221
221
|
|
222
222
|
def create_root_files
|
@@ -356,8 +356,13 @@ module Rails
|
|
356
356
|
@app_name ||= File.basename(destination_root)
|
357
357
|
end
|
358
358
|
|
359
|
+
def defined_app_const_base
|
360
|
+
Rails.respond_to?(:application) && defined?(Rails::Application) &&
|
361
|
+
Rails.application.is_a?(Rails::Application) && Rails.application.class.name.sub(/::Application$/, "")
|
362
|
+
end
|
363
|
+
|
359
364
|
def app_const_base
|
360
|
-
@app_const_base ||= app_name.gsub(/\W/, '_').squeeze('_').camelize
|
365
|
+
@app_const_base ||= defined_app_const_base || app_name.gsub(/\W/, '_').squeeze('_').camelize
|
361
366
|
end
|
362
367
|
|
363
368
|
def app_const
|
@@ -389,6 +394,7 @@ module Rails
|
|
389
394
|
when "postgresql" then "pg"
|
390
395
|
when "sqlite3" then "sqlite3-ruby"
|
391
396
|
when "frontbase" then "ruby-frontbase"
|
397
|
+
when "mysql" then "mysql2"
|
392
398
|
else options[:database]
|
393
399
|
end
|
394
400
|
end
|
@@ -410,7 +416,7 @@ module Rails
|
|
410
416
|
"/opt/local/var/run/mysql4/mysqld.sock", # mac + darwinports + mysql4
|
411
417
|
"/opt/local/var/run/mysql5/mysqld.sock", # mac + darwinports + mysql5
|
412
418
|
"/opt/lampp/var/mysql/mysql.sock" # xampp for linux
|
413
|
-
].find { |f| File.exist?(f) } unless
|
419
|
+
].find { |f| File.exist?(f) } unless RbConfig::CONFIG['host_os'] =~ /mswin|mingw/
|
414
420
|
end
|
415
421
|
|
416
422
|
def empty_directory_with_gitkeep(destination, config = {})
|
@@ -13,7 +13,7 @@ gem 'rails', '<%= Rails::VERSION::STRING %>'
|
|
13
13
|
# gem 'rails', :git => 'git://github.com/rails/rails.git'
|
14
14
|
<%- end -%>
|
15
15
|
|
16
|
-
<% unless options[:
|
16
|
+
<% unless options[:skip_active_record] -%>
|
17
17
|
gem '<%= gem_for_database %>'<% if require_for_database %>, :require => '<%= require_for_database %>'<% end %>
|
18
18
|
<% end -%>
|
19
19
|
|
@@ -28,7 +28,7 @@ gem '<%= gem_for_database %>'<% if require_for_database %>, :require => '<%= req
|
|
28
28
|
|
29
29
|
# Bundle the extra gems:
|
30
30
|
# gem 'bj'
|
31
|
-
# gem 'nokogiri'
|
31
|
+
# gem 'nokogiri'
|
32
32
|
# gem 'sqlite3-ruby', :require => 'sqlite3'
|
33
33
|
# gem 'aws-s3', :require => 'aws/s3'
|
34
34
|
|
@@ -1,21 +1,12 @@
|
|
1
1
|
# MySQL. Versions 4.1 and 5.0 are recommended.
|
2
2
|
#
|
3
3
|
# Install the MySQL driver:
|
4
|
-
# gem install
|
5
|
-
# On Mac OS X:
|
6
|
-
# sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql
|
7
|
-
# On Mac OS X Leopard:
|
8
|
-
# sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
|
9
|
-
# This sets the ARCHFLAGS environment variable to your native architecture
|
10
|
-
# On Windows:
|
11
|
-
# gem install mysql
|
12
|
-
# Choose the win32 build.
|
13
|
-
# Install MySQL and put its /bin directory on your path.
|
4
|
+
# gem install mysql2
|
14
5
|
#
|
15
6
|
# And be sure to use new-style password hashing:
|
16
7
|
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
|
17
8
|
development:
|
18
|
-
adapter:
|
9
|
+
adapter: mysql2
|
19
10
|
encoding: utf8
|
20
11
|
reconnect: false
|
21
12
|
database: <%= app_name %>_development
|
@@ -32,7 +23,7 @@ development:
|
|
32
23
|
# re-generated from your development database when you run "rake".
|
33
24
|
# Do not set this db to the same as development or production.
|
34
25
|
test:
|
35
|
-
adapter:
|
26
|
+
adapter: mysql2
|
36
27
|
encoding: utf8
|
37
28
|
reconnect: false
|
38
29
|
database: <%= app_name %>_test
|
@@ -46,7 +37,7 @@ test:
|
|
46
37
|
<% end -%>
|
47
38
|
|
48
39
|
production:
|
49
|
-
adapter:
|
40
|
+
adapter: mysql2
|
50
41
|
encoding: utf8
|
51
42
|
reconnect: false
|
52
43
|
database: <%= app_name %>_production
|
@@ -4,7 +4,7 @@
|
|
4
4
|
# http://rubyforge.org/projects/ruby-oci8/
|
5
5
|
#
|
6
6
|
# Specify your database using any valid connection syntax, such as a
|
7
|
-
# tnsnames.ora service name, or
|
7
|
+
# tnsnames.ora service name, or an SQL connect string of the form:
|
8
8
|
#
|
9
9
|
# //host:[port][/service name]
|
10
10
|
#
|
@@ -16,12 +16,12 @@
|
|
16
16
|
# Sample resource route with options:
|
17
17
|
# resources :products do
|
18
18
|
# member do
|
19
|
-
# get
|
20
|
-
# post
|
19
|
+
# get 'short'
|
20
|
+
# post 'toggle'
|
21
21
|
# end
|
22
22
|
#
|
23
23
|
# collection do
|
24
|
-
# get
|
24
|
+
# get 'sold'
|
25
25
|
# end
|
26
26
|
# end
|
27
27
|
|
@@ -35,7 +35,7 @@
|
|
35
35
|
# resources :products do
|
36
36
|
# resources :comments
|
37
37
|
# resources :sales do
|
38
|
-
# get
|
38
|
+
# get 'recent', :on => :collection
|
39
39
|
# end
|
40
40
|
# end
|
41
41
|
|
@@ -151,19 +151,6 @@
|
|
151
151
|
}
|
152
152
|
|
153
153
|
|
154
|
-
#search {
|
155
|
-
margin: 0;
|
156
|
-
padding-top: 10px;
|
157
|
-
padding-bottom: 10px;
|
158
|
-
font-size: 11px;
|
159
|
-
}
|
160
|
-
#search input {
|
161
|
-
font-size: 11px;
|
162
|
-
margin: 2px;
|
163
|
-
}
|
164
|
-
#search-text {width: 170px}
|
165
|
-
|
166
|
-
|
167
154
|
#sidebar ul {
|
168
155
|
margin-left: 0;
|
169
156
|
padding-left: 0;
|
@@ -194,16 +181,6 @@
|
|
194
181
|
info.innerHTML = xhr.responseText;
|
195
182
|
info.style.display = 'block'
|
196
183
|
}
|
197
|
-
|
198
|
-
function prepend() {
|
199
|
-
search = document.getElementById('search-text');
|
200
|
-
text = search.value;
|
201
|
-
search.value = 'site:rubyonrails.org ' + text;
|
202
|
-
}
|
203
|
-
|
204
|
-
window.onload = function() {
|
205
|
-
document.getElementById('search-text').value = '';
|
206
|
-
}
|
207
184
|
</script>
|
208
185
|
</head>
|
209
186
|
<body>
|
@@ -150,7 +150,7 @@ var Effect = {
|
|
150
150
|
toggle: function(element, effect, options) {
|
151
151
|
element = $(element);
|
152
152
|
effect = (effect || 'appear').toLowerCase();
|
153
|
-
|
153
|
+
|
154
154
|
return Effect[ Effect.PAIRS[ effect ][ element.visible() ? 1 : 0 ] ](element, Object.extend({
|
155
155
|
queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
|
156
156
|
}, options || {}));
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Description:
|
2
|
-
Stubs out a new generator at lib/generators. Pass the generator name,
|
3
|
-
CamelCased or
|
2
|
+
Stubs out a new generator at lib/generators. Pass the generator name as an argument,
|
3
|
+
either CamelCased or snake_cased.
|
4
4
|
|
5
5
|
Example:
|
6
6
|
`rails generate generator Awesome`
|
@@ -8,4 +8,5 @@ Example:
|
|
8
8
|
creates a standard awesome generator:
|
9
9
|
lib/generators/awesome/
|
10
10
|
lib/generators/awesome/awesome_generator.rb
|
11
|
+
lib/generators/awesome/USAGE
|
11
12
|
lib/generators/awesome/templates/
|
@@ -18,12 +18,12 @@ Example:
|
|
18
18
|
This will create the AddTitleBodyToPost in db/migrate/20080514090912_add_title_body_to_post.rb with
|
19
19
|
this in the Up migration:
|
20
20
|
|
21
|
-
add_column :posts, :title, :string
|
22
|
-
add_column :posts, :body, :text
|
21
|
+
add_column :posts, :title, :string
|
22
|
+
add_column :posts, :body, :text
|
23
23
|
add_column :posts, :published, :boolean
|
24
24
|
|
25
25
|
And this in the Down migration:
|
26
26
|
|
27
|
-
remove_column :posts, :published
|
28
|
-
remove_column :posts, :body
|
27
|
+
remove_column :posts, :published
|
28
|
+
remove_column :posts, :body
|
29
29
|
remove_column :posts, :title
|