railties 4.1.16 → 4.2.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +80 -439
  3. data/RDOC_MAIN.rdoc +1 -1
  4. data/README.rdoc +6 -2
  5. data/lib/rails.rb +7 -1
  6. data/lib/rails/all.rb +1 -0
  7. data/lib/rails/api/task.rb +7 -0
  8. data/lib/rails/app_rails_loader.rb +4 -2
  9. data/lib/rails/application.rb +74 -47
  10. data/lib/rails/application/configuration.rb +23 -1
  11. data/lib/rails/application/finisher.rb +0 -2
  12. data/lib/rails/code_statistics.rb +4 -2
  13. data/lib/rails/commands/commands_tasks.rb +1 -6
  14. data/lib/rails/commands/console.rb +24 -12
  15. data/lib/rails/commands/dbconsole.rb +2 -2
  16. data/lib/rails/commands/plugin.rb +1 -1
  17. data/lib/rails/commands/server.rb +22 -9
  18. data/lib/rails/engine.rb +7 -7
  19. data/lib/rails/gem_version.rb +3 -3
  20. data/lib/rails/generators.rb +68 -15
  21. data/lib/rails/generators/actions.rb +27 -7
  22. data/lib/rails/generators/actions/create_migration.rb +2 -1
  23. data/lib/rails/generators/app_base.rb +55 -65
  24. data/lib/rails/generators/base.rb +2 -2
  25. data/lib/rails/generators/erb/scaffold/templates/_form.html.erb +0 -5
  26. data/lib/rails/generators/erb/scaffold/templates/edit.html.erb +1 -1
  27. data/lib/rails/generators/erb/scaffold/templates/index.html.erb +3 -1
  28. data/lib/rails/generators/erb/scaffold/templates/new.html.erb +1 -1
  29. data/lib/rails/generators/generated_attribute.rb +24 -4
  30. data/lib/rails/generators/model_helpers.rb +28 -0
  31. data/lib/rails/generators/rails/app/app_generator.rb +8 -2
  32. data/lib/rails/generators/rails/app/templates/Gemfile +21 -6
  33. data/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt +1 -1
  34. data/lib/rails/generators/rails/app/templates/bin/setup +28 -0
  35. data/lib/rails/generators/rails/app/templates/config/application.rb +5 -1
  36. data/lib/rails/generators/rails/app/templates/config/boot.rb +1 -2
  37. data/lib/rails/generators/rails/app/templates/config/databases/ibm_db.yml +1 -3
  38. data/lib/rails/generators/rails/app/templates/config/databases/oracle.yml +1 -1
  39. data/lib/rails/generators/rails/app/templates/config/environments/development.rb.tt +4 -0
  40. data/lib/rails/generators/rails/app/templates/config/environments/production.rb.tt +8 -10
  41. data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +3 -0
  42. data/lib/rails/generators/rails/app/templates/config/initializers/cookies_serializer.rb +1 -1
  43. data/lib/rails/generators/rails/app/templates/gitignore +2 -0
  44. data/lib/rails/generators/rails/controller/USAGE +0 -1
  45. data/lib/rails/generators/rails/controller/controller_generator.rb +6 -2
  46. data/lib/rails/generators/rails/helper/USAGE +0 -4
  47. data/lib/rails/generators/rails/model/USAGE +11 -1
  48. data/lib/rails/generators/rails/model/model_generator.rb +4 -0
  49. data/lib/rails/generators/rails/plugin/plugin_generator.rb +1 -3
  50. data/lib/rails/generators/rails/plugin/templates/%name%.gemspec +1 -1
  51. data/lib/rails/generators/rails/plugin/templates/Gemfile +10 -6
  52. data/lib/rails/generators/rails/plugin/templates/Rakefile +4 -0
  53. data/lib/rails/generators/rails/plugin/templates/app/controllers/%name%/application_controller.rb.tt +0 -1
  54. data/lib/rails/generators/rails/plugin/templates/rails/javascripts.js +1 -1
  55. data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb +2 -10
  56. data/lib/rails/generators/rails/resource_route/resource_route_generator.rb +2 -4
  57. data/lib/rails/generators/rails/scaffold/USAGE +7 -1
  58. data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +0 -1
  59. data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb +1 -1
  60. data/lib/rails/generators/resource_helpers.rb +2 -11
  61. data/lib/rails/generators/test_unit/helper/helper_generator.rb +1 -5
  62. data/lib/rails/generators/testing/behaviour.rb +17 -0
  63. data/lib/rails/info.rb +1 -1
  64. data/lib/rails/info_controller.rb +1 -1
  65. data/lib/rails/mailers_controller.rb +14 -16
  66. data/lib/rails/paths.rb +1 -1
  67. data/lib/rails/rack.rb +1 -1
  68. data/lib/rails/rack/log_tailer.rb +4 -0
  69. data/lib/rails/rack/logger.rb +1 -1
  70. data/lib/rails/railtie.rb +2 -2
  71. data/lib/rails/ruby_version_check.rb +1 -1
  72. data/lib/rails/source_annotation_extractor.rb +23 -16
  73. data/lib/rails/tasks/framework.rake +1 -1
  74. data/lib/rails/tasks/statistics.rake +8 -3
  75. data/lib/rails/templates/rails/mailers/email.html.erb +2 -13
  76. data/lib/rails/templates/rails/mailers/index.html.erb +2 -2
  77. data/lib/rails/templates/rails/mailers/mailer.html.erb +1 -1
  78. data/lib/rails/test_unit/sub_test_task.rb +2 -2
  79. metadata +13 -13
  80. data/lib/rails/generators/test_unit/helper/templates/helper_test.rb +0 -6
  81. data/lib/rails/rubyprof_ext.rb +0 -35
@@ -83,7 +83,7 @@ module Rails
83
83
  #
84
84
  # The first and last part used to find the generator to be invoked are
85
85
  # guessed based on class invokes hook_for, as noticed in the example above.
86
- # This can be customized with two options: :base and :as.
86
+ # This can be customized with two options: :in and :as.
87
87
  #
88
88
  # Let's suppose you are creating a generator that needs to invoke the
89
89
  # controller generator from test unit. Your first attempt is:
@@ -108,7 +108,7 @@ module Rails
108
108
  # "test_unit:controller", "test_unit"
109
109
  #
110
110
  # Similarly, if you want it to also lookup in the rails namespace, you just
111
- # need to provide the :base value:
111
+ # need to provide the :in value:
112
112
  #
113
113
  # class AwesomeGenerator < Rails::Generators::Base
114
114
  # hook_for :test_framework, in: :rails, as: :controller
@@ -21,13 +21,8 @@
21
21
  <%%= f.label :password_confirmation %><br>
22
22
  <%%= f.password_field :password_confirmation %>
23
23
  <% else -%>
24
- <%- if attribute.reference? -%>
25
24
  <%%= f.label :<%= attribute.column_name %> %><br>
26
25
  <%%= f.<%= attribute.field_type %> :<%= attribute.column_name %> %>
27
- <%- else -%>
28
- <%%= f.label :<%= attribute.name %> %><br>
29
- <%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
30
- <%- end -%>
31
26
  <% end -%>
32
27
  </div>
33
28
  <% end -%>
@@ -1,4 +1,4 @@
1
- <h1>Editing <%= singular_table_name %></h1>
1
+ <h1>Editing <%= singular_table_name.titleize %></h1>
2
2
 
3
3
  <%%= render 'form' %>
4
4
 
@@ -1,4 +1,6 @@
1
- <h1>Listing <%= plural_table_name %></h1>
1
+ <p id="notice"><%%= notice %></p>
2
+
3
+ <h1>Listing <%= plural_table_name.titleize %></h1>
2
4
 
3
5
  <table>
4
6
  <thead>
@@ -1,4 +1,4 @@
1
- <h1>New <%= singular_table_name %></h1>
1
+ <h1>New <%= singular_table_name.titleize %></h1>
2
2
 
3
3
  <%%= render 'form' %>
4
4
 
@@ -44,8 +44,11 @@ module Rails
44
44
  return $1, limit: $2.to_i
45
45
  when /decimal\{(\d+)[,.-](\d+)\}/
46
46
  return :decimal, precision: $1.to_i, scale: $2.to_i
47
- when /(references|belongs_to)\{polymorphic\}/
48
- return $1, polymorphic: true
47
+ when /(references|belongs_to)\{(.+)\}/
48
+ type = $1
49
+ provided_options = $2.split(/[,.-]/)
50
+ options = Hash[provided_options.map { |opt| [opt.to_sym, true] }]
51
+ return type, options
49
52
  else
50
53
  return type, {}
51
54
  end
@@ -94,6 +97,10 @@ module Rails
94
97
  name.sub(/_id$/, '').pluralize
95
98
  end
96
99
 
100
+ def singular_name
101
+ name.sub(/_id$/, '').singularize
102
+ end
103
+
97
104
  def human_name
98
105
  name.humanize
99
106
  end
@@ -119,7 +126,11 @@ module Rails
119
126
  end
120
127
 
121
128
  def polymorphic?
122
- self.attr_options.has_key?(:polymorphic)
129
+ self.attr_options[:polymorphic]
130
+ end
131
+
132
+ def required?
133
+ self.attr_options[:required]
123
134
  end
124
135
 
125
136
  def has_index?
@@ -135,12 +146,21 @@ module Rails
135
146
  end
136
147
 
137
148
  def inject_options
138
- "".tap { |s| @attr_options.each { |k,v| s << ", #{k}: #{v.inspect}" } }
149
+ "".tap { |s| options_for_migration.each { |k,v| s << ", #{k}: #{v.inspect}" } }
139
150
  end
140
151
 
141
152
  def inject_index_options
142
153
  has_uniq_index? ? ", unique: true" : ""
143
154
  end
155
+
156
+ def options_for_migration
157
+ @attr_options.dup.tap do |options|
158
+ if required?
159
+ options.delete(:required)
160
+ options[:null] = false
161
+ end
162
+ end
163
+ end
144
164
  end
145
165
  end
146
166
  end
@@ -0,0 +1,28 @@
1
+ require 'rails/generators/active_model'
2
+
3
+ module Rails
4
+ module Generators
5
+ module ModelHelpers # :nodoc:
6
+ PLURAL_MODEL_NAME_WARN_MESSAGE = "[WARNING] The model name '%s' was recognized as a plural, using the singular '%s' instead. " \
7
+ "Override with --force-plural or setup custom inflection rules for this noun before running the generator."
8
+ mattr_accessor :skip_warn
9
+
10
+ def self.included(base) #:nodoc:
11
+ base.class_option :force_plural, type: :boolean, default: false, desc: 'Forces the use of the given model name'
12
+ end
13
+
14
+ def initialize(args, *_options)
15
+ super
16
+ if name == name.pluralize && name.singularize != name.pluralize && !options[:force_plural]
17
+ singular = name.singularize
18
+ unless ModelHelpers.skip_warn
19
+ say PLURAL_MODEL_NAME_WARN_MESSAGE % [name, singular]
20
+ ModelHelpers.skip_warn = true
21
+ end
22
+ name.replace singular
23
+ assign_names!(name)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -50,7 +50,7 @@ module Rails
50
50
  end
51
51
 
52
52
  def gitignore
53
- copy_file "gitignore", ".gitignore"
53
+ template "gitignore", ".gitignore"
54
54
  end
55
55
 
56
56
  def app
@@ -259,6 +259,12 @@ module Rails
259
259
  public_task :apply_rails_template, :run_bundle
260
260
  public_task :generate_spring_binstubs
261
261
 
262
+ def run_after_bundle_callbacks
263
+ @after_bundle_callbacks.each do |callback|
264
+ callback.call
265
+ end
266
+ end
267
+
262
268
  protected
263
269
 
264
270
  def self.banner
@@ -334,7 +340,7 @@ module Rails
334
340
  #
335
341
  # This class should be called before the AppGenerator is required and started
336
342
  # since it configures and mutates ARGV correctly.
337
- class ARGVScrubber # :nodoc:
343
+ class ARGVScrubber # :nodoc
338
344
  def initialize(argv = ARGV)
339
345
  @argv = argv
340
346
  end
@@ -1,6 +1,5 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- <% max_width = gemfile_entries.map { |g| g.name.length }.max -%>
4
3
  <% gemfile_entries.each do |gem| -%>
5
4
  <% if gem.comment -%>
6
5
 
@@ -8,7 +7,7 @@ source 'https://rubygems.org'
8
7
  <% end -%>
9
8
  <%= gem.commented_out ? '# ' : '' %>gem '<%= gem.name %>'<%= %(, '#{gem.version}') if gem.version -%>
10
9
  <% if gem.options.any? -%>
11
- ,<%= gem.padding(max_width) %><%= gem.options.map { |k,v|
10
+ , <%= gem.options.map { |k,v|
12
11
  "#{k}: #{v.inspect}" }.join(', ') %>
13
12
  <% end -%>
14
13
  <% end -%>
@@ -16,18 +15,34 @@ source 'https://rubygems.org'
16
15
  # Use ActiveModel has_secure_password
17
16
  # gem 'bcrypt', '~> 3.1.7'
18
17
 
19
- # Use unicorn as the app server
18
+ # Use Rails Html Sanitizer for HTML sanitization
19
+ gem 'rails-html-sanitizer', '~> 1.0'
20
+
21
+ # Use Unicorn as the app server
20
22
  # gem 'unicorn'
21
23
 
22
24
  # Use Capistrano for deployment
23
25
  # gem 'capistrano-rails', group: :development
24
26
 
27
+ group :development, :test do
25
28
  <% unless defined?(JRUBY_VERSION) -%>
26
- # Use debugger
27
- # gem 'debugger', group: [:development, :test]
29
+ # Call 'debugger' anywhere in the code to stop execution and get a debugger console
30
+ <%- if RUBY_VERSION < '2.0.0' -%>
31
+ gem 'debugger'
32
+ <%- else -%>
33
+ gem 'byebug'
34
+ <%- end -%>
35
+
36
+ # Access an IRB console on exceptions page and /console in development
37
+ gem 'web-console', '~> 2.0.0.beta2'
38
+ <%- if spring_install? %>
39
+ # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
40
+ gem 'spring'
41
+ <% end -%>
28
42
  <% end -%>
43
+ end
29
44
 
30
45
  <% if RUBY_PLATFORM.match(/bccwin|cygwin|emx|mingw|mswin|wince/) -%>
31
46
  # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
32
- gem 'tzinfo-data', platforms: [:mingw, :mswin]
47
+ gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw]
33
48
  <% end -%>
@@ -7,7 +7,7 @@
7
7
  // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
8
8
  // compiled file.
9
9
  //
10
- // Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
10
+ // Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
11
11
  // about supported directives.
12
12
  //
13
13
  <% unless options[:skip_javascript] -%>
@@ -0,0 +1,28 @@
1
+ require 'pathname'
2
+
3
+ # path to your application root.
4
+ APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
5
+
6
+ Dir.chdir APP_ROOT do
7
+ # This script is a starting point to setup your application.
8
+ # Add necessary setup steps to this file:
9
+
10
+ puts "== Installing dependencies =="
11
+ system "gem install bundler --conservative"
12
+ system "bundle check || bundle install"
13
+
14
+ # puts "\n== Copying sample files =="
15
+ # unless File.exist?("config/database.yml")
16
+ # system "cp config/database.yml.sample config/database.yml"
17
+ # end
18
+
19
+ puts "\n== Preparing database =="
20
+ system "bin/rake db:setup"
21
+
22
+ puts "\n== Removing old logs and tempfiles =="
23
+ system "rm -f log/*"
24
+ system "rm -rf tmp/cache"
25
+
26
+ puts "\n== Restarting application server =="
27
+ system "touch tmp/restart.txt"
28
+ end
@@ -3,7 +3,6 @@ require File.expand_path('../boot', __FILE__)
3
3
  <% if include_all_railties? -%>
4
4
  require 'rails/all'
5
5
  <% else -%>
6
- require "rails"
7
6
  # Pick the frameworks you want:
8
7
  require "active_model/railtie"
9
8
  <%= comment_if :skip_active_record %>require "active_record/railtie"
@@ -31,5 +30,10 @@ module <%= app_const_base %>
31
30
  # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
32
31
  # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
33
32
  # config.i18n.default_locale = :de
33
+ <%- unless options.skip_active_record? -%>
34
+
35
+ # For not swallow errors in after_commit/after_rollback callbacks.
36
+ config.active_record.raise_in_transactional_callbacks = true
37
+ <%- end -%>
34
38
  end
35
39
  end
@@ -1,4 +1,3 @@
1
- # Set up gems listed in the Gemfile.
2
1
  ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__)
3
2
 
4
- require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE'])
3
+ require 'bundler/setup' # Set up gems listed in the Gemfile.
@@ -1,7 +1,7 @@
1
1
  # IBM Dataservers
2
2
  #
3
3
  # Home Page
4
- # http://rubyforge.org/projects/rubyibm/
4
+ # https://github.com/dparnell/ibm_db
5
5
  #
6
6
  # To install the ibm_db gem:
7
7
  #
@@ -31,8 +31,6 @@
31
31
  # Configure Using Gemfile
32
32
  # gem 'ibm_db'
33
33
  #
34
- # For more details on the installation and the connection parameters below,
35
- # please refer to the latest documents at http://rubyforge.org/docman/?group_id=2361
36
34
  #
37
35
  default: &default
38
36
  adapter: ibm_db
@@ -1,7 +1,7 @@
1
1
  # Oracle/OCI 8i, 9, 10g
2
2
  #
3
3
  # Requires Ruby/OCI8:
4
- # http://rubyforge.org/projects/ruby-oci8/
4
+ # https://github.com/kubo/ruby-oci8
5
5
  #
6
6
  # Specify your database using any valid connection syntax, such as a
7
7
  # tnsnames.ora service name, or an SQL connect string of the form:
@@ -30,6 +30,10 @@ Rails.application.configure do
30
30
  # number of complex assets.
31
31
  config.assets.debug = true
32
32
 
33
+ # Asset digests allow you to set far-future HTTP expiration dates on all assets,
34
+ # yet still be able to expire them through the digest params.
35
+ config.assets.digest = true
36
+
33
37
  # Adds additional error checking when serving assets at runtime.
34
38
  # Checks for improperly declared sprockets dependencies.
35
39
  # Raises helpful error messages.
@@ -16,10 +16,10 @@ Rails.application.configure do
16
16
 
17
17
  # Enable Rack::Cache to put a simple HTTP cache in front of your application
18
18
  # Add `rack-cache` to your Gemfile before enabling this.
19
- # For large-scale production use, consider using a caching reverse proxy like nginx, varnish or squid.
19
+ # For large-scale production use, consider using a caching reverse proxy like NGINX, varnish or squid.
20
20
  # config.action_dispatch.rack_cache = true
21
21
 
22
- # Disable Rails's static asset server (Apache or nginx will already do this).
22
+ # Disable Rails's static asset server (Apache or NGINX will already do this).
23
23
  config.serve_static_assets = false
24
24
 
25
25
  <%- unless options.skip_sprockets? -%>
@@ -30,21 +30,22 @@ Rails.application.configure do
30
30
  # Do not fallback to assets pipeline if a precompiled asset is missed.
31
31
  config.assets.compile = false
32
32
 
33
- # Generate digests for assets URLs.
33
+ # Asset digests allow you to set far-future HTTP expiration dates on all assets,
34
+ # yet still be able to expire them through the digest params.
34
35
  config.assets.digest = true
35
36
 
36
37
  # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb
37
38
  <%- end -%>
38
39
 
39
40
  # Specifies the header that your server uses for sending files.
40
- # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for apache
41
- # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
41
+ # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache
42
+ # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX
42
43
 
43
44
  # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
44
45
  # config.force_ssl = true
45
46
 
46
- # Set to :debug to see everything in the log.
47
- config.log_level = :info
47
+ # Set to :info to decrease the log volume.
48
+ config.log_level = :debug
48
49
 
49
50
  # Prepend all log lines with the following tags.
50
51
  # config.log_tags = [ :subdomain, :uuid ]
@@ -69,9 +70,6 @@ Rails.application.configure do
69
70
  # Send deprecation notices to registered listeners.
70
71
  config.active_support.deprecation = :notify
71
72
 
72
- # Disable automatic flushing of the log to improve performance.
73
- # config.autoflush_log = false
74
-
75
73
  # Use default logging formatter so that PID and timestamp are not suppressed.
76
74
  config.log_formatter = ::Logger::Formatter.new
77
75
  <%- unless options.skip_active_record? -%>
@@ -3,6 +3,9 @@
3
3
  # Version of your assets, change this if you want to expire all your assets.
4
4
  Rails.application.config.assets.version = '1.0'
5
5
 
6
+ # Add additional assets to the asset load path
7
+ # Rails.application.config.assets.paths << Emoji.images_path
8
+
6
9
  # Precompile additional assets.
7
10
  # application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
8
11
  # Rails.application.config.assets.precompile += %w( search.js )
@@ -1,3 +1,3 @@
1
1
  # Be sure to restart your server when you modify this file.
2
2
 
3
- Rails.application.config.action_dispatch.cookies_serializer = :json
3
+ Rails.application.config.action_dispatch.cookies_serializer = :json
@@ -7,10 +7,12 @@
7
7
  # Ignore bundler config.
8
8
  /.bundle
9
9
 
10
+ <% if sqlite3? -%>
10
11
  # Ignore the default SQLite database.
11
12
  /db/*.sqlite3
12
13
  /db/*.sqlite3-journal
13
14
 
15
+ <% end -%>
14
16
  # Ignore all logfiles and tempfiles.
15
17
  /log/*.log
16
18
  /tmp
@@ -16,4 +16,3 @@ Example:
16
16
  Test: test/controllers/credit_cards_controller_test.rb
17
17
  Views: app/views/credit_cards/debit.html.erb [...]
18
18
  Helper: app/helpers/credit_cards_helper.rb
19
- Test: test/helpers/credit_cards_helper_test.rb
@@ -2,6 +2,8 @@ module Rails
2
2
  module Generators
3
3
  class ControllerGenerator < NamedBase # :nodoc:
4
4
  argument :actions, type: :array, default: [], banner: "action action"
5
+ class_option :skip_routes, type: :boolean, desc: "Don't add routes to config/routes.rb."
6
+
5
7
  check_class_collision suffix: "Controller"
6
8
 
7
9
  def create_controller_files
@@ -9,8 +11,10 @@ module Rails
9
11
  end
10
12
 
11
13
  def add_routes
12
- actions.reverse.each do |action|
13
- route generate_routing_code(action)
14
+ unless options[:skip_routes]
15
+ actions.reverse.each do |action|
16
+ route generate_routing_code(action)
17
+ end
14
18
  end
15
19
  end
16
20