lib/generic_app.rb in generic_app-0.1.1 vs lib/generic_app.rb in generic_app-1.0.0
- old
+ new
@@ -3,62 +3,37 @@
require "generic_app/version"
require "string_in_file"
require "line_containing"
ENV['DIR_MAIN'] = File.expand_path("../../", __FILE__)
+ENV['DIR_PARENT'] = File.expand_path("../../../", __FILE__)
module GenericApp
-
# Create app, stick with SQLite database in development
- def self.sq (subdir_name)
+ def self.create_new (subdir_name, email)
self.git_clone (subdir_name)
- self.guard_file (subdir_name)
- self.app_views_password (subdir_name)
- self.guard_file (subdir_name)
- self.add_scripts (subdir_name) # Also used in the add-on procedure
- self.add_notes (subdir_name)
- self.add_readme (subdir_name)
- self.update_gitignore (subdir_name) # Also used in the add-on procedure
+ self.email_update(subdir_name, email)
self.git_init (subdir_name)
end
-
+
def self.git_clone (subdir_name)
- puts "*************************************************"
- puts "Downloading the Sample App from railstutorial.org"
+ puts "------------------------------------"
+ puts "Downloading the Generic App Template"
t1 = Thread.new {
- system("git clone https://github.com/mhartl/sample_app_3rd_edition.git #{subdir_name}")
- system("cd #{subdir_name} && git checkout remotes/origin/account-activation-password-reset")
+ system("git clone https://github.com/jhsu802701/generic_app_template.git #{subdir_name}")
}
t1.join
end
- def self.guard_file (subdir_name)
- puts "*************************************************************"
- puts "Setting the Guardfile to automatically run tests upon startup"
- str_guard_orig = "all_on_start: false"
- str_guard_new = "all_on_start: true"
- StringInFile.replace(str_guard_orig, str_guard_new, "#{subdir_name}/Guardfile")
+ def self.email_update (subdir_name, email)
+ email_orig = 'please-change-me-at-config-initializers-devise@example.com'
+ path_of_email = "#{subdir_name}/config/initializers/devise.rb"
+ StringInFile.replace(email_orig, email, path_of_email)
end
-
- def self.app_views_password (subdir_name)
- puts "*********************************************************************************"
- puts "Advising users to use a password management program to create and store passwords"
- str1 = "</h1>"
- str2a = "</h1>"
- str2b = "\nUsing the same password for all of your accounts is risky."
- str2b += "\nLimiting yourself to passwords that you can easily remember is risky."
- str2b += "\nYou should use a password management program like <a href='http://www.keepassx.org/'>KeePassX</a>"
- str2b += "\nto create much better passwords AND store them in encrypted form.<br>"
- str2 = str2a + str2b
- StringInFile.replace(str1, str2, "#{subdir_name}/app/views/users/new.html.erb")
- StringInFile.replace(str1, str2, "#{subdir_name}/app/views/users/edit.html.erb")
- StringInFile.replace(str1, str2, "#{subdir_name}/app/views/password_resets/new.html.erb")
- StringInFile.replace(str1, str2, "#{subdir_name}/app/views/password_resets/edit.html.erb")
- end
-
+
def self.git_init (subdir_name)
- puts "****************"
+ puts "----------------"
puts "Initializing Git"
t1 = Thread.new {
$stdout = File.new( '/dev/null', 'w' )
system("cd #{subdir_name} && rm -rf .git")
system("cd #{subdir_name} && git init")
@@ -66,33 +41,18 @@
system("cd #{subdir_name} && git commit -m 'Initial commit' >/dev/null")
$stdout = STDOUT
}
t1.join
end
-
- def self.add_scripts (subdir_name)
- puts "*******************"
- puts "Adding Bash scripts"
- system("cp -r #{ENV['DIR_MAIN']}/to_add/*.sh #{subdir_name}")
- system("cd #{subdir_name} && sh list_files.sh")
+
+ def self.add (subdir_name)
+ self.update_gitignore (subdir_name)
+ self.copy_scripts (subdir_name)
end
-
- def self.add_notes (subdir_name)
- puts "*****************************"
- puts "Adding notes on MVC structure"
- system("mkdir -p #{subdir_name}/notes")
- system("cp -r #{ENV['DIR_MAIN']}/to_add/notes/* #{subdir_name}/notes")
- end
-
- def self.add_readme (subdir_name)
- puts "*****************************"
- puts "Adding README"
- system("cp -r #{ENV['DIR_MAIN']}/to_add/README.md #{subdir_name}")
- end
-
+
def self.update_gitignore (subdir_name)
- puts "*******************"
+ puts "-------------------"
puts "Updating .gitignore"
if StringInFile.present("tmp*","#{subdir_name}/.gitignore") == false
command = 'echo "\ntmp*" >> '
command += "#{subdir_name}/.gitignore"
system(command)
@@ -101,119 +61,17 @@
command = 'echo "\n.DS_Store" >> '
command += "#{subdir_name}/.gitignore"
system(command)
end
end
-
- # Create app, use PostgreSQL instead of SQLite
- # NOTE: Three databases are used: development, testing, and production.
- # NOTE: Each database has the same username and password.
- # INPUT PARAMETERS:
- # Name of directory containing the app
- # Database root name
- # Name of environmental variable used to store the username
- # Name of environmental variable used to store the password
- # Username
- # Password
-
- def self.pg (subdir_name, db_rootname_x, var_store_username, var_store_password, username_x, password_x)
- self.sq (subdir_name)
- self.pg_gemfile (subdir_name)
- self.pg_remove_sqlite (subdir_name)
- t1 = Thread.new {
- self.set_pg_params(subdir_name, db_rootname_x, var_store_username, var_store_password, username_x, password_x)
- }
- t1.join
- self.git_init (subdir_name)
+ def self.copy_scripts (subdir_name)
+ puts "----------------------------------------------"
+ puts "Adding scripts and config/database-pg.yml file"
+ dir_template = "#{ENV['DIR_PARENT']}/high_speed_rails_clobbers_not_exactly"
+ self.git_clone (dir_template)
+ system("cp -r #{dir_template}/*.sh #{subdir_name}")
+ system("cp -r #{dir_template}/*.rb #{subdir_name}")
+ system("cp -r #{dir_template}/config/database-pg.yml #{subdir_name}/config")
+ system("rm -rf #{dir_template}")
end
-
- def self.pg_gemfile (subdir_name)
- puts "**************************************************************************"
- puts "Updating the Gemfile (PostgreSQL for development, testing, and production)"
- LineContaining.delete("sqlite", "#{subdir_name}/Gemfile")
- LineContaining.delete("gem 'pg'", "#{subdir_name}/Gemfile")
- open("#{subdir_name}/Gemfile", 'a') {|f|
- f << "\n\ngem 'pg'\n"
- f << "gem 'figaro', '1.1.0'\n"
- }
- end
-
- def self.pg_remove_sqlite (subdir_name)
- system("rm #{subdir_name}/db/*.sqlite")
- end
-
- def self.set_pg_params (subdir_name, db_rootname_x, var_store_username, var_store_password, username_x, password_x)
- system("cp -r #{ENV['DIR_MAIN']}/to_add_pg/* #{subdir_name}")
- puts "*********************************************"
- puts "Setting up the PostgreSQL database parameters"
- # NOTE: These environmental variables are temporary and only used here.
- ENV['APP_DB_NAME_DEV'] = "#{db_rootname_x}_dev"
- ENV['APP_DB_NAME_TEST'] = "#{db_rootname_x}_test"
- ENV['APP_DB_NAME_PRO'] = "#{db_rootname_x}_pro"
- ENV['APP_DB_USER'] = username_x
- ENV['APP_DB_PASS'] = password_x
- system(%q{sudo -u postgres psql -c"CREATE ROLE $APP_DB_USER WITH CREATEDB LOGIN PASSWORD '$APP_DB_PASS';"})
-
- # Development database
- system(%q{sudo -u postgres psql -c"CREATE DATABASE $APP_DB_NAME_DEV WITH OWNER=$APP_DB_USER;"})
- system("wait")
-
- # Testing database
- system(%q{sudo -u postgres psql -c"CREATE DATABASE $APP_DB_NAME_TEST WITH OWNER=$APP_DB_USER;"})
- system("wait")
-
- # Production database
- system(%q{sudo -u postgres psql -c"CREATE DATABASE $APP_DB_NAME_PRO WITH OWNER=$APP_DB_USER;"})
- system("wait")
-
- puts "****************************************"
- puts "rm #{subdir_name}/config/application.yml"
- system ("rm #{subdir_name}/config/application.yml")
-
- puts "**************************************************"
- puts "Using Figaro to create initial configuration files"
- system("cd #{subdir_name} && figaro install")
-
- puts
- puts "*********************************"
- puts "Setting up config/application.yml"
- open("#{subdir_name}/config/application.yml", 'a') { |f|
- f << "\n\n"
- f << 'VAR_STORE_USERNAME: "USERNAME123"'
- f << "\n"
- f << 'VAR_STORE_PASSWORD: "PASSWORD123"'
- }
- StringInFile.replace("VAR_STORE_USERNAME", var_store_username, "#{subdir_name}/config/application.yml")
- StringInFile.replace("USERNAME123", username_x, "#{subdir_name}/config/application.yml")
- StringInFile.replace("VAR_STORE_PASSWORD", var_store_password, "#{subdir_name}/config/application.yml")
- StringInFile.replace("PASSWORD123", password_x, "#{subdir_name}/config/application.yml")
- puts
- puts "******************************"
- puts "Setting up config/database.yml"
- system("cp -r #{ENV['DIR_MAIN']}/to_add_pg/* #{subdir_name}")
- StringInFile.replace("VAR_STORE_USERNAME", var_store_username, "#{subdir_name}/config/database.yml")
- StringInFile.replace("VAR_STORE_PASSWORD", var_store_password, "#{subdir_name}/config/database.yml")
- StringInFile.replace("DB_NAME_DEV", ENV['APP_DB_NAME_DEV'], "#{subdir_name}/config/database.yml")
- StringInFile.replace("DB_NAME_TEST", ENV['APP_DB_NAME_TEST'], "#{subdir_name}/config/database.yml")
- StringInFile.replace("DB_NAME_PRO", ENV['APP_DB_NAME_PRO'], "#{subdir_name}/config/database.yml")
- puts
- puts "*************************************"
- puts "POSTGRESQL PUBLIC DATABASE PARAMETERS"
- puts "This information is stored in the config/database.yml file"
- puts "Database Name (development): #{ENV['APP_DB_NAME_DEV']}"
- puts "Database Name (testing): #{ENV['APP_DB_NAME_TEST']}"
- puts "Database Name (production): #{ENV['APP_DB_NAME_PRO']}"
- puts "Name of Environmental Variable Containing The Username: #{var_store_username}"
- puts "Name of Environmental Variable Containing the Password: #{var_store_password}"
- puts
- puts "**************************************"
- puts "POSTGRESQL PRIVATE DATABASE PARAMETERS"
- puts "This information is stored in the config/application.yml file."
- puts "The config/application.yml file is ignored by Git, which keeps it private."
- puts "Be sure you have this information saved in KeePassX."
- puts "Username: #{username_x}"
- puts "Password: #{password_x}"
-
- end
-
end