aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails/generators/app_name.rb
diff options
context:
space:
mode:
authorGannon McGibbon <gannon.mcgibbon@gmail.com>2018-12-31 13:44:34 -0500
committerGannon McGibbon <gannon.mcgibbon@gmail.com>2019-01-09 13:10:40 -0500
commite3204b9c33cc8a0385f002ce8ca42b4f4192d869 (patch)
treea8fd845c956982d07ecf99d3df456b5779dff126 /railties/lib/rails/generators/app_name.rb
parent9f1a07af0499080c9fd8815705a03a4c7e8fb506 (diff)
downloadrails-e3204b9c33cc8a0385f002ce8ca42b4f4192d869.tar.gz
rails-e3204b9c33cc8a0385f002ce8ca42b4f4192d869.tar.bz2
rails-e3204b9c33cc8a0385f002ce8ca42b4f4192d869.zip
Move application generator naming and database code to concerns
Diffstat (limited to 'railties/lib/rails/generators/app_name.rb')
-rw-r--r--railties/lib/rails/generators/app_name.rb50
1 files changed, 50 insertions, 0 deletions
diff --git a/railties/lib/rails/generators/app_name.rb b/railties/lib/rails/generators/app_name.rb
new file mode 100644
index 0000000000..c4f71694d8
--- /dev/null
+++ b/railties/lib/rails/generators/app_name.rb
@@ -0,0 +1,50 @@
+# frozen_string_literal: true
+
+module Rails
+ module Generators
+ module AppName # :nodoc:
+ RESERVED_NAMES = %w(application destroy plugin runner test)
+
+ private
+ def app_name
+ @app_name ||= original_app_name.tr("-", "_")
+ end
+
+ def original_app_name
+ @original_app_name ||= (defined_app_const_base? ? defined_app_name : File.basename(destination_root)).tr('\\', "").tr(". ", "_")
+ end
+
+ def defined_app_name
+ defined_app_const_base.underscore
+ end
+
+ def defined_app_const_base
+ Rails.respond_to?(:application) && defined?(Rails::Application) &&
+ Rails.application.is_a?(Rails::Application) && Rails.application.class.name.chomp("::Application")
+ end
+
+ alias :defined_app_const_base? :defined_app_const_base
+
+ def app_const_base
+ @app_const_base ||= defined_app_const_base || app_name.gsub(/\W/, "_").squeeze("_").camelize
+ end
+ alias :camelized :app_const_base
+
+ def app_const
+ @app_const ||= "#{app_const_base}::Application"
+ end
+
+ def valid_const?
+ if /^\d/.match?(app_const)
+ raise Error, "Invalid application name #{original_app_name}. Please give a name which does not start with numbers."
+ elsif RESERVED_NAMES.include?(original_app_name)
+ raise Error, "Invalid application name #{original_app_name}. Please give a " \
+ "name which does not match one of the reserved rails " \
+ "words: #{RESERVED_NAMES.join(", ")}"
+ elsif Object.const_defined?(app_const_base)
+ raise Error, "Invalid application name #{original_app_name}, constant #{app_const_base} is already in use. Please choose another application name."
+ end
+ end
+ end
+ end
+end