railties 3.0.0.rc → 3.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|