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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +80 -439
- data/RDOC_MAIN.rdoc +1 -1
- data/README.rdoc +6 -2
- data/lib/rails.rb +7 -1
- data/lib/rails/all.rb +1 -0
- data/lib/rails/api/task.rb +7 -0
- data/lib/rails/app_rails_loader.rb +4 -2
- data/lib/rails/application.rb +74 -47
- data/lib/rails/application/configuration.rb +23 -1
- data/lib/rails/application/finisher.rb +0 -2
- data/lib/rails/code_statistics.rb +4 -2
- data/lib/rails/commands/commands_tasks.rb +1 -6
- data/lib/rails/commands/console.rb +24 -12
- data/lib/rails/commands/dbconsole.rb +2 -2
- data/lib/rails/commands/plugin.rb +1 -1
- data/lib/rails/commands/server.rb +22 -9
- data/lib/rails/engine.rb +7 -7
- data/lib/rails/gem_version.rb +3 -3
- data/lib/rails/generators.rb +68 -15
- data/lib/rails/generators/actions.rb +27 -7
- data/lib/rails/generators/actions/create_migration.rb +2 -1
- data/lib/rails/generators/app_base.rb +55 -65
- data/lib/rails/generators/base.rb +2 -2
- data/lib/rails/generators/erb/scaffold/templates/_form.html.erb +0 -5
- data/lib/rails/generators/erb/scaffold/templates/edit.html.erb +1 -1
- data/lib/rails/generators/erb/scaffold/templates/index.html.erb +3 -1
- data/lib/rails/generators/erb/scaffold/templates/new.html.erb +1 -1
- data/lib/rails/generators/generated_attribute.rb +24 -4
- data/lib/rails/generators/model_helpers.rb +28 -0
- data/lib/rails/generators/rails/app/app_generator.rb +8 -2
- data/lib/rails/generators/rails/app/templates/Gemfile +21 -6
- data/lib/rails/generators/rails/app/templates/app/assets/javascripts/application.js.tt +1 -1
- data/lib/rails/generators/rails/app/templates/bin/setup +28 -0
- data/lib/rails/generators/rails/app/templates/config/application.rb +5 -1
- data/lib/rails/generators/rails/app/templates/config/boot.rb +1 -2
- data/lib/rails/generators/rails/app/templates/config/databases/ibm_db.yml +1 -3
- 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/environments/production.rb.tt +8 -10
- data/lib/rails/generators/rails/app/templates/config/initializers/assets.rb.tt +3 -0
- data/lib/rails/generators/rails/app/templates/config/initializers/cookies_serializer.rb +1 -1
- data/lib/rails/generators/rails/app/templates/gitignore +2 -0
- data/lib/rails/generators/rails/controller/USAGE +0 -1
- data/lib/rails/generators/rails/controller/controller_generator.rb +6 -2
- data/lib/rails/generators/rails/helper/USAGE +0 -4
- data/lib/rails/generators/rails/model/USAGE +11 -1
- data/lib/rails/generators/rails/model/model_generator.rb +4 -0
- data/lib/rails/generators/rails/plugin/plugin_generator.rb +1 -3
- data/lib/rails/generators/rails/plugin/templates/%name%.gemspec +1 -1
- data/lib/rails/generators/rails/plugin/templates/Gemfile +10 -6
- data/lib/rails/generators/rails/plugin/templates/Rakefile +4 -0
- data/lib/rails/generators/rails/plugin/templates/app/controllers/%name%/application_controller.rb.tt +0 -1
- data/lib/rails/generators/rails/plugin/templates/rails/javascripts.js +1 -1
- data/lib/rails/generators/rails/plugin/templates/test/test_helper.rb +2 -10
- data/lib/rails/generators/rails/resource_route/resource_route_generator.rb +2 -4
- data/lib/rails/generators/rails/scaffold/USAGE +7 -1
- data/lib/rails/generators/rails/scaffold_controller/scaffold_controller_generator.rb +0 -1
- data/lib/rails/generators/rails/scaffold_controller/templates/controller.rb +1 -1
- data/lib/rails/generators/resource_helpers.rb +2 -11
- data/lib/rails/generators/test_unit/helper/helper_generator.rb +1 -5
- data/lib/rails/generators/testing/behaviour.rb +17 -0
- data/lib/rails/info.rb +1 -1
- data/lib/rails/info_controller.rb +1 -1
- data/lib/rails/mailers_controller.rb +14 -16
- data/lib/rails/paths.rb +1 -1
- data/lib/rails/rack.rb +1 -1
- data/lib/rails/rack/log_tailer.rb +4 -0
- data/lib/rails/rack/logger.rb +1 -1
- data/lib/rails/railtie.rb +2 -2
- data/lib/rails/ruby_version_check.rb +1 -1
- data/lib/rails/source_annotation_extractor.rb +23 -16
- data/lib/rails/tasks/framework.rake +1 -1
- data/lib/rails/tasks/statistics.rake +8 -3
- data/lib/rails/templates/rails/mailers/email.html.erb +2 -13
- data/lib/rails/templates/rails/mailers/index.html.erb +2 -2
- data/lib/rails/templates/rails/mailers/mailer.html.erb +1 -1
- data/lib/rails/test_unit/sub_test_task.rb +2 -2
- metadata +13 -13
- data/lib/rails/generators/test_unit/helper/templates/helper_test.rb +0 -6
- data/lib/rails/rubyprof_ext.rb +0 -35
@@ -20,7 +20,7 @@ module Rails
|
|
20
20
|
ENV['RAILS_ENV'] = options[:environment] || environment
|
21
21
|
|
22
22
|
case config["adapter"]
|
23
|
-
when /^mysql/
|
23
|
+
when /^(jdbc)?mysql/
|
24
24
|
args = {
|
25
25
|
'host' => '--host',
|
26
26
|
'port' => '--port',
|
@@ -30,7 +30,7 @@ module Rails
|
|
30
30
|
'sslca' => '--ssl-ca',
|
31
31
|
'sslcert' => '--ssl-cert',
|
32
32
|
'sslcapath' => '--ssl-capath',
|
33
|
-
'sslcipher' => '--
|
33
|
+
'sslcipher' => '--ssh-cipher',
|
34
34
|
'sslkey' => '--ssl-key'
|
35
35
|
}.map { |opt, arg| "#{arg}=#{config[opt]}" if config[opt] }.compact
|
36
36
|
|
@@ -11,7 +11,7 @@ else
|
|
11
11
|
end
|
12
12
|
if File.exist?(railsrc)
|
13
13
|
extra_args_string = File.read(railsrc)
|
14
|
-
extra_args = extra_args_string.split(/\n+/).
|
14
|
+
extra_args = extra_args_string.split(/\n+/).flat_map {|l| l.split}
|
15
15
|
puts "Using #{extra_args.join(" ")} from #{railsrc}"
|
16
16
|
ARGV.insert(1, *extra_args)
|
17
17
|
end
|
@@ -9,7 +9,17 @@ module Rails
|
|
9
9
|
def parse!(args)
|
10
10
|
args, options = args.dup, {}
|
11
11
|
|
12
|
-
|
12
|
+
option_parser(options).parse! args
|
13
|
+
|
14
|
+
options[:log_stdout] = options[:daemonize].blank? && (options[:environment] || Rails.env) == "development"
|
15
|
+
options[:server] = args.shift
|
16
|
+
options
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def option_parser(options)
|
22
|
+
OptionParser.new do |opts|
|
13
23
|
opts.banner = "Usage: rails server [mongrel, thin, etc] [options]"
|
14
24
|
opts.on("-p", "--port=port", Integer,
|
15
25
|
"Runs Rails on the specified port.", "Default: 3000") { |v| options[:Port] = v }
|
@@ -18,7 +28,14 @@ module Rails
|
|
18
28
|
opts.on("-c", "--config=file", String,
|
19
29
|
"Use custom rackup configuration file") { |v| options[:config] = v }
|
20
30
|
opts.on("-d", "--daemon", "Make server run as a Daemon.") { options[:daemonize] = true }
|
21
|
-
opts.on("-u", "--debugger", "Enable the debugger")
|
31
|
+
opts.on("-u", "--debugger", "Enable the debugger") do
|
32
|
+
if RUBY_VERSION < '2.0.0'
|
33
|
+
options[:debugger] = true
|
34
|
+
else
|
35
|
+
puts "=> Notice: debugger option is ignored since ruby 2.0 and " \
|
36
|
+
"it will be removed in future versions"
|
37
|
+
end
|
38
|
+
end
|
22
39
|
opts.on("-e", "--environment=name", String,
|
23
40
|
"Specifies the environment to run this server under (test/development/production).",
|
24
41
|
"Default: development") { |v| options[:environment] = v }
|
@@ -30,12 +47,6 @@ module Rails
|
|
30
47
|
|
31
48
|
opts.on("-h", "--help", "Show this help message.") { puts opts; exit }
|
32
49
|
end
|
33
|
-
|
34
|
-
opt_parser.parse! args
|
35
|
-
|
36
|
-
options[:log_stdout] = options[:daemonize].blank? && (options[:environment] || Rails.env) == "development"
|
37
|
-
options[:server] = args.shift
|
38
|
-
options
|
39
50
|
end
|
40
51
|
end
|
41
52
|
|
@@ -75,7 +86,9 @@ module Rails
|
|
75
86
|
|
76
87
|
def middleware
|
77
88
|
middlewares = []
|
78
|
-
|
89
|
+
if RUBY_VERSION < '2.0.0'
|
90
|
+
middlewares << [Rails::Rack::Debugger] if options[:debugger]
|
91
|
+
end
|
79
92
|
middlewares << [::Rack::ContentLength]
|
80
93
|
|
81
94
|
# FIXME: add Rack::Lock in the case people are using webrick.
|
data/lib/rails/engine.rb
CHANGED
@@ -351,7 +351,7 @@ module Rails
|
|
351
351
|
|
352
352
|
base.called_from = begin
|
353
353
|
call_stack = if Kernel.respond_to?(:caller_locations)
|
354
|
-
caller_locations.map
|
354
|
+
caller_locations.map(&:path)
|
355
355
|
else
|
356
356
|
# Remove the line number from backtraces making sure we don't leave anything behind
|
357
357
|
caller.map { |p| p.sub(/:\d+.*/, '') }
|
@@ -371,7 +371,7 @@ module Rails
|
|
371
371
|
end
|
372
372
|
|
373
373
|
def isolate_namespace(mod)
|
374
|
-
engine_name(generate_railtie_name(mod))
|
374
|
+
engine_name(generate_railtie_name(mod.name))
|
375
375
|
|
376
376
|
self.routes.default_scope = { module: ActiveSupport::Inflector.underscore(mod.name) }
|
377
377
|
self.isolated = true
|
@@ -395,7 +395,7 @@ module Rails
|
|
395
395
|
end
|
396
396
|
|
397
397
|
unless mod.respond_to?(:railtie_routes_url_helpers)
|
398
|
-
define_method(:railtie_routes_url_helpers) { railtie.routes.url_helpers }
|
398
|
+
define_method(:railtie_routes_url_helpers) {|include_path_helpers = true| railtie.routes.url_helpers(include_path_helpers) }
|
399
399
|
end
|
400
400
|
end
|
401
401
|
end
|
@@ -509,7 +509,7 @@ module Rails
|
|
509
509
|
def call(env)
|
510
510
|
env.merge!(env_config)
|
511
511
|
if env['SCRIPT_NAME']
|
512
|
-
env
|
512
|
+
env["ROUTES_#{routes.object_id}_SCRIPT_NAME"] = env['SCRIPT_NAME'].dup
|
513
513
|
end
|
514
514
|
app.call(env)
|
515
515
|
end
|
@@ -567,10 +567,10 @@ module Rails
|
|
567
567
|
end
|
568
568
|
|
569
569
|
initializer :add_routing_paths do |app|
|
570
|
-
|
570
|
+
paths = self.paths["config/routes.rb"].existent
|
571
571
|
|
572
|
-
if routes? ||
|
573
|
-
app.routes_reloader.paths.unshift(*
|
572
|
+
if routes? || paths.any?
|
573
|
+
app.routes_reloader.paths.unshift(*paths)
|
574
574
|
app.routes_reloader.route_sets << routes
|
575
575
|
end
|
576
576
|
end
|
data/lib/rails/gem_version.rb
CHANGED
data/lib/rails/generators.rb
CHANGED
@@ -156,10 +156,20 @@ module Rails
|
|
156
156
|
args << "--help" if args.empty? && klass.arguments.any? { |a| a.required? }
|
157
157
|
klass.start(args, config)
|
158
158
|
else
|
159
|
-
|
159
|
+
options = sorted_groups.map(&:last).flatten
|
160
|
+
suggestions = options.sort_by {|suggested| levenshtein_distance(namespace.to_s, suggested) }.first(3)
|
161
|
+
msg = "Could not find generator '#{namespace}'. "
|
162
|
+
msg << "Maybe you meant #{ suggestions.map {|s| "'#{s}'"}.join(" or ") }\n"
|
163
|
+
msg << "Run `rails generate --help` for more options."
|
164
|
+
puts msg
|
160
165
|
end
|
161
166
|
end
|
162
167
|
|
168
|
+
# Returns an array of generator namespaces that are hidden.
|
169
|
+
# Generator namespaces may be hidden for a variety of reasons.
|
170
|
+
# Some are aliased such as "rails:migration" and can be
|
171
|
+
# invoked with the shorter "migration", others are private to other generators
|
172
|
+
# such as "css:scaffold".
|
163
173
|
def self.hidden_namespaces
|
164
174
|
@hidden_namespaces ||= begin
|
165
175
|
orm = options[:rails][:orm]
|
@@ -199,17 +209,6 @@ module Rails
|
|
199
209
|
|
200
210
|
# Show help message with available generators.
|
201
211
|
def self.help(command = 'generate')
|
202
|
-
lookup!
|
203
|
-
|
204
|
-
namespaces = subclasses.map{ |k| k.namespace }
|
205
|
-
namespaces.sort!
|
206
|
-
|
207
|
-
groups = Hash.new { |h,k| h[k] = [] }
|
208
|
-
namespaces.each do |namespace|
|
209
|
-
base = namespace.split(':').first
|
210
|
-
groups[base] << namespace
|
211
|
-
end
|
212
|
-
|
213
212
|
puts "Usage: rails #{command} GENERATOR [args] [options]"
|
214
213
|
puts
|
215
214
|
puts "General options:"
|
@@ -222,20 +221,74 @@ module Rails
|
|
222
221
|
puts "Please choose a generator below."
|
223
222
|
puts
|
224
223
|
|
225
|
-
|
224
|
+
print_generators
|
225
|
+
end
|
226
|
+
|
227
|
+
def self.public_namespaces
|
228
|
+
lookup!
|
229
|
+
subclasses.map { |k| k.namespace }
|
230
|
+
end
|
231
|
+
|
232
|
+
def self.print_generators
|
233
|
+
sorted_groups.each { |b, n| print_list(b, n) }
|
234
|
+
end
|
235
|
+
|
236
|
+
def self.sorted_groups
|
237
|
+
namespaces = public_namespaces
|
238
|
+
namespaces.sort!
|
239
|
+
groups = Hash.new { |h,k| h[k] = [] }
|
240
|
+
namespaces.each do |namespace|
|
241
|
+
base = namespace.split(':').first
|
242
|
+
groups[base] << namespace
|
243
|
+
end
|
226
244
|
rails = groups.delete("rails")
|
227
245
|
rails.map! { |n| n.sub(/^rails:/, '') }
|
228
246
|
rails.delete("app")
|
229
247
|
rails.delete("plugin")
|
230
|
-
print_list("rails", rails)
|
231
248
|
|
232
249
|
hidden_namespaces.each { |n| groups.delete(n.to_s) }
|
233
250
|
|
234
|
-
groups.sort.
|
251
|
+
[["rails", rails]] + groups.sort.to_a
|
235
252
|
end
|
236
253
|
|
237
254
|
protected
|
238
255
|
|
256
|
+
# This code is based directly on the Text gem implementation
|
257
|
+
# Returns a value representing the "cost" of transforming str1 into str2
|
258
|
+
def self.levenshtein_distance str1, str2
|
259
|
+
s = str1
|
260
|
+
t = str2
|
261
|
+
n = s.length
|
262
|
+
m = t.length
|
263
|
+
max = n/2
|
264
|
+
|
265
|
+
return m if (0 == n)
|
266
|
+
return n if (0 == m)
|
267
|
+
return n if (n - m).abs > max
|
268
|
+
|
269
|
+
d = (0..m).to_a
|
270
|
+
x = nil
|
271
|
+
|
272
|
+
str1.each_char.each_with_index do |char1,i|
|
273
|
+
e = i+1
|
274
|
+
|
275
|
+
str2.each_char.each_with_index do |char2,j|
|
276
|
+
cost = (char1 == char2) ? 0 : 1
|
277
|
+
x = [
|
278
|
+
d[j+1] + 1, # insertion
|
279
|
+
e + 1, # deletion
|
280
|
+
d[j] + cost # substitution
|
281
|
+
].min
|
282
|
+
d[j] = e
|
283
|
+
e = x
|
284
|
+
end
|
285
|
+
|
286
|
+
d[m] = x
|
287
|
+
end
|
288
|
+
|
289
|
+
return x
|
290
|
+
end
|
291
|
+
|
239
292
|
# Prints a list of generators.
|
240
293
|
def self.print_list(base, namespaces) #:nodoc:
|
241
294
|
namespaces = namespaces.reject do |n|
|
@@ -7,6 +7,7 @@ module Rails
|
|
7
7
|
def initialize(*) # :nodoc:
|
8
8
|
super
|
9
9
|
@in_group = nil
|
10
|
+
@after_bundle_callbacks = []
|
10
11
|
end
|
11
12
|
|
12
13
|
# Adds an entry into +Gemfile+ for the supplied gem.
|
@@ -20,9 +21,9 @@ module Rails
|
|
20
21
|
|
21
22
|
# Set the message to be shown in logs. Uses the git repo if one is given,
|
22
23
|
# otherwise use name (version).
|
23
|
-
parts, message = [ name
|
24
|
+
parts, message = [ quote(name) ], name
|
24
25
|
if version ||= options.delete(:version)
|
25
|
-
parts << version
|
26
|
+
parts << quote(version)
|
26
27
|
message << " (#{version})"
|
27
28
|
end
|
28
29
|
message = options[:git] if options[:git]
|
@@ -30,7 +31,7 @@ module Rails
|
|
30
31
|
log :gemfile, message
|
31
32
|
|
32
33
|
options.each do |option, value|
|
33
|
-
parts << "#{option}: #{value
|
34
|
+
parts << "#{option}: #{quote(value)}"
|
34
35
|
end
|
35
36
|
|
36
37
|
in_root do
|
@@ -68,7 +69,7 @@ module Rails
|
|
68
69
|
log :source, source
|
69
70
|
|
70
71
|
in_root do
|
71
|
-
prepend_file "Gemfile", "source #{source
|
72
|
+
prepend_file "Gemfile", "source #{quote(source)}\n", verbose: false
|
72
73
|
end
|
73
74
|
end
|
74
75
|
|
@@ -188,7 +189,7 @@ module Rails
|
|
188
189
|
# generate(:authenticated, "user session")
|
189
190
|
def generate(what, *args)
|
190
191
|
log :generate, what
|
191
|
-
argument = args.
|
192
|
+
argument = args.flat_map {|arg| arg.to_s }.join(" ")
|
192
193
|
|
193
194
|
in_root { run_ruby_script("bin/rails generate #{what} #{argument}", verbose: false) }
|
194
195
|
end
|
@@ -218,10 +219,10 @@ module Rails
|
|
218
219
|
# route "root 'welcome#index'"
|
219
220
|
def route(routing_code)
|
220
221
|
log :route, routing_code
|
221
|
-
sentinel = /\.routes\.draw do\s
|
222
|
+
sentinel = /\.routes\.draw do\s*$/
|
222
223
|
|
223
224
|
in_root do
|
224
|
-
inject_into_file 'config/routes.rb', " #{routing_code}
|
225
|
+
inject_into_file 'config/routes.rb', "\n #{routing_code}", { after: sentinel, verbose: false }
|
225
226
|
end
|
226
227
|
end
|
227
228
|
|
@@ -232,6 +233,16 @@ module Rails
|
|
232
233
|
log File.read(find_in_source_paths(path))
|
233
234
|
end
|
234
235
|
|
236
|
+
# Registers a callback to be executed after bundle and spring binstubs
|
237
|
+
# have run.
|
238
|
+
#
|
239
|
+
# after_bundle do
|
240
|
+
# git add: '.'
|
241
|
+
# end
|
242
|
+
def after_bundle(&block)
|
243
|
+
@after_bundle_callbacks << block
|
244
|
+
end
|
245
|
+
|
235
246
|
protected
|
236
247
|
|
237
248
|
# Define log for backwards compatibility. If just one argument is sent,
|
@@ -255,6 +266,15 @@ module Rails
|
|
255
266
|
end
|
256
267
|
end
|
257
268
|
|
269
|
+
# Surround string with single quotes if there is no quotes.
|
270
|
+
# Otherwise fall back to double quotes
|
271
|
+
def quote(str)
|
272
|
+
if str.include?("'")
|
273
|
+
str.inspect
|
274
|
+
else
|
275
|
+
"'#{str}'"
|
276
|
+
end
|
277
|
+
end
|
258
278
|
end
|
259
279
|
end
|
260
280
|
end
|
@@ -55,7 +55,8 @@ module Rails
|
|
55
55
|
else
|
56
56
|
say_status :conflict, :red
|
57
57
|
raise Error, "Another migration is already named #{migration_file_name}: " +
|
58
|
-
|
58
|
+
"#{existing_migration}. Use --force to replace this migration " +
|
59
|
+
"or --skip to ignore conflicted file."
|
59
60
|
end
|
60
61
|
end
|
61
62
|
|
@@ -41,6 +41,9 @@ module Rails
|
|
41
41
|
class_option :skip_active_record, type: :boolean, aliases: '-O', default: false,
|
42
42
|
desc: 'Skip Active Record files'
|
43
43
|
|
44
|
+
class_option :skip_gems, type: :array, default: [],
|
45
|
+
desc: 'Skip the provided gems files'
|
46
|
+
|
44
47
|
class_option :skip_action_view, type: :boolean, aliases: '-V', default: false,
|
45
48
|
desc: 'Skip Action View files'
|
46
49
|
|
@@ -79,8 +82,7 @@ module Rails
|
|
79
82
|
end
|
80
83
|
|
81
84
|
def initialize(*args)
|
82
|
-
@
|
83
|
-
@gem_filter = lambda { |gem| true }
|
85
|
+
@gem_filter = lambda { |gem| !options[:skip_gems].include?(gem.name) }
|
84
86
|
@extra_entries = []
|
85
87
|
super
|
86
88
|
convert_database_option_for_jruby
|
@@ -105,15 +107,14 @@ module Rails
|
|
105
107
|
end
|
106
108
|
|
107
109
|
def gemfile_entries
|
108
|
-
[
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
@extra_entries].flatten.find_all(&@gem_filter)
|
110
|
+
[rails_gemfile_entry,
|
111
|
+
database_gemfile_entry,
|
112
|
+
assets_gemfile_entry,
|
113
|
+
javascript_gemfile_entry,
|
114
|
+
jbuilder_gemfile_entry,
|
115
|
+
sdoc_gemfile_entry,
|
116
|
+
psych_gemfile_entry,
|
117
|
+
@extra_entries].flatten.find_all(&@gem_filter)
|
117
118
|
end
|
118
119
|
|
119
120
|
def add_gem_entry_filter
|
@@ -161,8 +162,7 @@ module Rails
|
|
161
162
|
|
162
163
|
def database_gemfile_entry
|
163
164
|
return [] if options[:skip_active_record]
|
164
|
-
|
165
|
-
GemfileEntry.version gem_name, gem_version,
|
165
|
+
GemfileEntry.version gem_for_database, nil,
|
166
166
|
"Use #{options[:database]} as the database for Active Record"
|
167
167
|
end
|
168
168
|
|
@@ -174,17 +174,17 @@ module Rails
|
|
174
174
|
options[value] ? '# ' : ''
|
175
175
|
end
|
176
176
|
|
177
|
+
def sqlite3?
|
178
|
+
!options[:skip_active_record] && options[:database] == 'sqlite3'
|
179
|
+
end
|
180
|
+
|
177
181
|
class GemfileEntry < Struct.new(:name, :version, :comment, :options, :commented_out)
|
178
182
|
def initialize(name, version, comment, options = {}, commented_out = false)
|
179
183
|
super
|
180
184
|
end
|
181
185
|
|
182
|
-
def self.github(name, github,
|
183
|
-
|
184
|
-
new(name, nil, comment, github: github, branch: branch)
|
185
|
-
else
|
186
|
-
new(name, nil, comment, github: github)
|
187
|
-
end
|
186
|
+
def self.github(name, github, comment = nil)
|
187
|
+
new(name, nil, comment, github: github)
|
188
188
|
end
|
189
189
|
|
190
190
|
def self.version(name, version, comment = nil)
|
@@ -194,28 +194,13 @@ module Rails
|
|
194
194
|
def self.path(name, path, comment = nil)
|
195
195
|
new(name, nil, comment, path: path)
|
196
196
|
end
|
197
|
-
|
198
|
-
def padding(max_width)
|
199
|
-
' ' * (max_width - name.length + 2)
|
200
|
-
end
|
201
|
-
|
202
|
-
def version
|
203
|
-
version = super
|
204
|
-
|
205
|
-
if version.is_a?(Array)
|
206
|
-
version.join("', '")
|
207
|
-
else
|
208
|
-
version
|
209
|
-
end
|
210
|
-
end
|
211
197
|
end
|
212
198
|
|
213
199
|
def rails_gemfile_entry
|
214
200
|
if options.dev?
|
215
|
-
[GemfileEntry.path('rails', Rails::Generators::RAILS_DEV_PATH)
|
216
|
-
GemfileEntry.github('arel', 'rails/arel', '5-0-stable')]
|
201
|
+
[GemfileEntry.path('rails', Rails::Generators::RAILS_DEV_PATH)]
|
217
202
|
elsif options.edge?
|
218
|
-
[GemfileEntry.github('rails', 'rails/rails'
|
203
|
+
[GemfileEntry.github('rails', 'rails/rails')]
|
219
204
|
else
|
220
205
|
[GemfileEntry.version('rails',
|
221
206
|
Rails::VERSION::STRING,
|
@@ -226,16 +211,16 @@ module Rails
|
|
226
211
|
def gem_for_database
|
227
212
|
# %w( mysql oracle postgresql sqlite3 frontbase ibm_db sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql )
|
228
213
|
case options[:database]
|
229
|
-
when "oracle" then
|
230
|
-
when "postgresql" then
|
231
|
-
when "frontbase" then
|
232
|
-
when "mysql" then
|
233
|
-
when "sqlserver" then
|
234
|
-
when "jdbcmysql" then
|
235
|
-
when "jdbcsqlite3" then
|
236
|
-
when "jdbcpostgresql" then
|
237
|
-
when "jdbc" then
|
238
|
-
else
|
214
|
+
when "oracle" then "ruby-oci8"
|
215
|
+
when "postgresql" then "pg"
|
216
|
+
when "frontbase" then "ruby-frontbase"
|
217
|
+
when "mysql" then "mysql2"
|
218
|
+
when "sqlserver" then "activerecord-sqlserver-adapter"
|
219
|
+
when "jdbcmysql" then "activerecord-jdbcmysql-adapter"
|
220
|
+
when "jdbcsqlite3" then "activerecord-jdbcsqlite3-adapter"
|
221
|
+
when "jdbcpostgresql" then "activerecord-jdbcpostgresql-adapter"
|
222
|
+
when "jdbc" then "activerecord-jdbc-adapter"
|
223
|
+
else options[:database]
|
239
224
|
end
|
240
225
|
end
|
241
226
|
|
@@ -253,14 +238,23 @@ module Rails
|
|
253
238
|
def assets_gemfile_entry
|
254
239
|
return [] if options[:skip_sprockets]
|
255
240
|
|
256
|
-
[
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
GemfileEntry.
|
261
|
-
|
262
|
-
|
263
|
-
|
241
|
+
gems = []
|
242
|
+
if options.dev? || options.edge?
|
243
|
+
gems << GemfileEntry.github('sprockets-rails', 'rails/sprockets-rails',
|
244
|
+
'Use edge version of sprockets-rails')
|
245
|
+
gems << GemfileEntry.github('sass-rails', 'rails/sass-rails',
|
246
|
+
'Use SCSS for stylesheets')
|
247
|
+
else
|
248
|
+
gems << GemfileEntry.version('sass-rails',
|
249
|
+
'~> 5.0.0.beta1',
|
250
|
+
'Use SCSS for stylesheets')
|
251
|
+
end
|
252
|
+
|
253
|
+
gems << GemfileEntry.version('uglifier',
|
254
|
+
'>= 1.3.0',
|
255
|
+
'Use Uglifier as compressor for JavaScript assets')
|
256
|
+
|
257
|
+
gems
|
264
258
|
end
|
265
259
|
|
266
260
|
def jbuilder_gemfile_entry
|
@@ -276,7 +270,7 @@ module Rails
|
|
276
270
|
def coffee_gemfile_entry
|
277
271
|
comment = 'Use CoffeeScript for .js.coffee assets and views'
|
278
272
|
if options.dev? || options.edge?
|
279
|
-
GemfileEntry.github 'coffee-rails', 'rails/coffee-rails',
|
273
|
+
GemfileEntry.github 'coffee-rails', 'rails/coffee-rails', comment
|
280
274
|
else
|
281
275
|
GemfileEntry.version 'coffee-rails', '~> 4.0.0', comment
|
282
276
|
end
|
@@ -297,7 +291,7 @@ module Rails
|
|
297
291
|
end
|
298
292
|
|
299
293
|
def javascript_runtime_gemfile_entry
|
300
|
-
comment = 'See https://github.com/
|
294
|
+
comment = 'See https://github.com/sstephenson/execjs#readme for more supported runtimes'
|
301
295
|
if defined?(JRUBY_VERSION)
|
302
296
|
GemfileEntry.version 'therubyrhino', nil, comment
|
303
297
|
else
|
@@ -305,16 +299,12 @@ module Rails
|
|
305
299
|
end
|
306
300
|
end
|
307
301
|
|
308
|
-
def
|
309
|
-
return [] unless
|
310
|
-
comment = 'Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring'
|
311
|
-
GemfileEntry.new('spring', nil, comment, group: :development)
|
312
|
-
end
|
313
|
-
|
314
|
-
def mime_type_gemfile_entry
|
315
|
-
return [] unless RUBY_VERSION < '2'
|
302
|
+
def psych_gemfile_entry
|
303
|
+
return [] unless defined?(Rubinius)
|
316
304
|
|
317
|
-
|
305
|
+
comment = 'Use Psych as the YAML engine, instead of Syck, so serialized ' \
|
306
|
+
'data can be read safely from different rubies (see http://git.io/uuLVag)'
|
307
|
+
GemfileEntry.new('psych', '~> 2.0', comment, platforms: :rbx)
|
318
308
|
end
|
319
309
|
|
320
310
|
def bundle_command(command)
|