aboutsummaryrefslogtreecommitdiffstats
path: root/railties
diff options
context:
space:
mode:
authorRichard Schneeman <richard.schneeman+no-recruiters@gmail.com>2017-02-24 19:29:34 -0600
committerGitHub <noreply@github.com>2017-02-24 19:29:34 -0600
commit0325758046ff51e1cbeae6ad7bd6d889b479cdad (patch)
treeb085c7e7376680394263bd6a9b2a1841ec60c21e /railties
parent14ab460f8efa9d259cce0b9fa51ce87dc5687207 (diff)
parent6ac4dabbcfa092ddda24ae9ee4698a55eb495021 (diff)
downloadrails-0325758046ff51e1cbeae6ad7bd6d889b479cdad.tar.gz
rails-0325758046ff51e1cbeae6ad7bd6d889b479cdad.tar.bz2
rails-0325758046ff51e1cbeae6ad7bd6d889b479cdad.zip
Merge pull request #28137 from schneems/schneems/fix-default-puma-port
[close #24435] Send user_supplied_options to server
Diffstat (limited to 'railties')
-rw-r--r--railties/lib/rails/commands/server/server_command.rb55
-rw-r--r--railties/test/commands/server_test.rb8
2 files changed, 52 insertions, 11 deletions
diff --git a/railties/lib/rails/commands/server/server_command.rb b/railties/lib/rails/commands/server/server_command.rb
index d58721f648..cde8b575b5 100644
--- a/railties/lib/rails/commands/server/server_command.rb
+++ b/railties/lib/rails/commands/server/server_command.rb
@@ -133,22 +133,55 @@ module Rails
no_commands do
def server_options
{
- server: @server,
- log_stdout: @log_stdout,
- Port: port,
- Host: host,
- DoNotReverseLookup: true,
- config: options[:config],
- environment: environment,
- daemonize: options[:daemon],
- pid: pid,
- caching: options["dev-caching"],
- restart_cmd: restart_command
+ user_supplied_options: user_supplied_options,
+ server: @server,
+ log_stdout: @log_stdout,
+ Port: port,
+ Host: host,
+ DoNotReverseLookup: true,
+ config: options[:config],
+ environment: environment,
+ daemonize: options[:daemon],
+ pid: pid,
+ caching: options["dev-caching"],
+ restart_cmd: restart_command
}
end
end
private
+ def user_supplied_options
+ @user_supplied_options ||= begin
+ # Convert incoming options array to a hash of flags
+ # ["-p", "3001", "-c", "foo"] # => {"-p" => true, "-c" => true}
+ user_flag = {}
+ @original_options.each_with_index { |command, i| user_flag[command] = true if i.even? }
+
+ # Collect all options that the user has explicitly defined so we can
+ # differentiate them from defaults
+ user_supplied_options = []
+ self.class.class_options.select do |key, option|
+ if option.aliases.any? { |name| user_flag[name] } || user_flag["--#{option.name}"]
+ name = option.name.to_sym
+ case name
+ when :port
+ name = :Port
+ when :binding
+ name = :Host
+ when :"dev-caching"
+ name = :caching
+ when :daemonize
+ name = :daemon
+ end
+ user_supplied_options << name
+ end
+ end
+ user_supplied_options << :Host if ENV["Host"]
+ user_supplied_options << :Port if ENV["PORT"]
+ user_supplied_options.uniq
+ end
+ end
+
def port
ENV.fetch("PORT", options[:port]).to_i
end
diff --git a/railties/test/commands/server_test.rb b/railties/test/commands/server_test.rb
index e3dfc3e82b..0f236ff463 100644
--- a/railties/test/commands/server_test.rb
+++ b/railties/test/commands/server_test.rb
@@ -121,6 +121,14 @@ class Rails::ServerTest < ActiveSupport::TestCase
end
end
+ def test_records_user_supplied_options
+ server_options = parse_arguments(["-p", 3001])
+ assert_equal [:Port], server_options[:user_supplied_options]
+
+ server_options = parse_arguments(["--port", 3001])
+ assert_equal [:Port], server_options[:user_supplied_options]
+ end
+
def test_default_options
server = Rails::Server.new
old_default_options = server.default_options