class Weapon

Public Class Methods

source_root() click to toggle source
# File lib/weapon.rb, line 12
def self.source_root
  File.dirname(__FILE__)
end

Public Instance Methods

build_activeadmin_pages() click to toggle source
# File lib/weapon.rb, line 151
def build_activeadmin_pages
  makesure_in_git
  FileUtils.mkdir_p "lib/generators/build_activeadmin_pages"
  copy_file 'support/build_activeadmin_pages/build_activeadmin_pages_generator.rb', 'lib/generators/build_activeadmin_pages/build_activeadmin_pages_generator.rb'
  run 'git add lib/'
  run 'rails g build_activeadmin_pages'
  run 'git add app/ test/ lib/'
  run 'git commit -a -m "add build_activeadmin_pages generator and build pages from model"'
end
config_bootstrap() click to toggle source
# File lib/weapon.rb, line 25
def config_bootstrap
  File.open("Gemfile", "a").write("\ngem 'bootstrap-sass'")
  run "bundle"
  #config bootstrap stylesheets
  File.open('app/assets/javascripts/application.js', 'a') { |f| f.write("\n//= require bootstrap-sprockets")}
  File.open('app/assets/stylesheets/application.scss', 'a') { |f| f.write("\n@import 'bootstrap-sprockets';\n@import 'bootstrap';") }
  run "rm app/assets/stylesheets/application.css"
end
create_gem(name) click to toggle source
# File lib/weapon.rb, line 315
def create_gem(name)
  FileUtils.mkdir_p "lib"
  FileUtils.mkdir_p "bin"

  gemspec_file = "#{name}/#{name}.gemspec"
  copy_file "support/create_gem/basic.gemspec", gemspec_file
  gsub_file gemspec_file, "gem_name_for_replace", name
  gsub_file gemspec_file, "date_for_replace", Time.now.strftime("%Y-%m-%d")
  gsub_file gemspec_file, "libfile_for_replace", "lib/#{name}.rb"

  summary = ask("input summary for this gem")
  gsub_file gemspec_file, "summary_for_replace", summary

  description = ask("input description for this gem")
  gsub_file gemspec_file, "description_for_replace", description

  author = ask("input name as author for this gem")
  gsub_file gemspec_file, "author_for_replace", author

  email = ask("input email for this gem")
  gsub_file gemspec_file, "email_for_replace", email


  libfile = "#{name}/lib/#{name}.rb"
  copy_file "support/create_gem/basic.rb", libfile
  gsub_file libfile, "gem_name_for_replace", name.camelize


  binfile = "#{name}/bin/#{name}"
  copy_file "support/create_gem/basic.bin", binfile
  run "chmod +x #{binfile}"

  gsub_file binfile, "gem_name_for_replace", name
  gsub_file binfile, "Gem_name_for_replace", name.camelize

  makesure_in_git(name)
  invoke :push_to_github, name

  s = `cd #{name};git remote -v`.split(' ')[1]
  homepage = 'https://github.com/' + s.split('/')[0].split(':')[-1] + '/' + s.split('/')[1].split('.')[0]
  ap homepage
  gsub_file gemspec_file, "homepage_for_replace", homepage

  run "cd #{name};git commit -a --amend --no-edit"

  command = "cd #{name};gem build #{name}.gemspec; gem push #{name}-0.0.1.gem"
  ap command
  run command
end
custom_i18n() click to toggle source
# File lib/weapon.rb, line 175
  def custom_i18n
    makesure_in_git
    puts "custom i18n"
    File.open("Gemfile", "a").write("\ngem 'slim-rails'\ngem 'simple_form', '~> 3.1.0'")
    run "bundle"

    unless File.exist?('config/locales/zh-CN.yml')
      copy_file 'support/custom_i18n/zh-CN.yml', 'config/locales/zh-CN.yml'
    end

    config_bootstrap
    run "rails g simple_form:install --bootstrap"
    copy_file 'support/custom_i18n/_form.html.slim', 'lib/templates/slim/scaffold/_form.html.slim'
    copy_file 'support/custom_i18n/index.html.slim', 'lib/templates/slim/scaffold/index.html.slim'
    copy_file 'support/custom_i18n/new.html.slim', 'lib/templates/slim/scaffold/new.html.slim'
    copy_file 'support/custom_i18n/edit.html.slim', 'lib/templates/slim/scaffold/edit.html.slim'
    copy_file 'support/custom_i18n/show.html.slim', 'lib/templates/slim/scaffold/show.html.slim'

    copy_file 'support/custom_i18n/controller.rb', 'lib/templates/rails/i18n_scaffold_controller/controller.rb'
    copy_file 'support/custom_i18n/i18n_scaffold_controller_generator.rb', 'lib/generators/rails/i18n_scaffold_controller/i18n_scaffold_controller_generator.rb'

    inject_into_file 'config/application.rb', after: "# -- all .rb files in that directory are automatically loaded.\n" do <<-'RUBY'
    config.generators.template_engine = :slim
    config.generators.scaffold_controller = "i18n_scaffold_controller"
    config.i18n.default_locale = "zh-CN"
    RUBY
    end
    run "rails g simple_form:install --bootstrap"
  end
for_seaify() click to toggle source
# File lib/weapon.rb, line 214
def for_seaify
  makesure_in_git
  invoke :install_must_gems
  invoke :custom_i18n
  invoke :setup_settings_ui
end
install_must_gems() click to toggle source
# File lib/weapon.rb, line 224
def install_must_gems

  makesure_in_git

  gem 'enumerize'
  gem 'aasm'
  gem 'slim-rails'
  gem 'sass-rails', '~> 5.0'
  gem 'bootstrap-sass'
  gem 'font-awesome-sass'
  gem 'simple_form', '~> 3.1.0'
  gem 'annotate', '~> 2.6.6'
  gem 'i18n-tasks', '~> 0.8.3'
  gem 'monadic'
  gem 'gon'
  gem 'exception_notification'
  gem 'awesome_print'
  gem 'slack-notifier'
  gem 'activevalidators'

  gem_group :development do
    gem 'mina', require: false
    gem 'mina-multistage', require: false
    gem 'mina-sidekiq', require: false
  end

  gem 'figaro'
  gem 'whenever', '~> 0.9.2'
  gem "rails-erd"

  gem_group :development, :test do
    gem 'web-console', '~> 2.0'
    gem 'rspec-rails'
    gem 'factory_girl_rails'
    gem 'faker', '~> 1.4.3'
    gem 'spring'
  end

  gem_group :development do
    gem 'guard-bundler'
    gem 'guard-rails'
    gem 'guard-rspec'
    gem 'guard-livereload'
    gem 'rack-livereload'
    gem 'guard-migrate'
    gem 'guard-annotate'
    gem 'guard-shell'
    gem 'quiet_assets'
    gem 'rails_layout'
    gem 'spring-commands-rspec'
    gem 'better_errors'
    gem 'meta_request'
    gem 'binding_of_caller'
    gem 'hirb'
    gem 'brakeman'
    gem 'rails_panel'
    gem 'pry'
    gem 'pry-byebug'
    gem 'pry-nav'
    #gem 'pry-rails', :group => :development
  end

  gem_group :test do
    gem 'database_cleaner'
    gem 'launchy'
    gem 'selenium-webdriver'
    gem 'faker'
    gem 'simplecov'
    gem 'timecop'
  end

  application(nil, env: "development") do
    "config.middleware.insert_before(Rack::Lock, Rack::LiveReload)"
  end

  application do
    "config.generators.template_engine = :slim"
  end

  gsub_file 'Gemfile', "gem 'byebug'", ''
  run "bundle"
  run "guard init"
  generate "rspec:install"
  generate "simple_form:install"

  run "git add lib/ spec/ config Guardfile .rspec .gitignore"
  run "git commit -a --amend --no-edit"

end
makesure_in_git(dir=".") click to toggle source
# File lib/weapon.rb, line 17
def makesure_in_git(dir=".")
  #run "spring stop"
  unless (run "cd #{dir}; git remote -v")
    puts "this project should in version controll use git"
    run "cd #{dir}; git init; git add *; git commit -a -m 'commit by seaify/weapon'"
  end
end
model_from_sql() click to toggle source
# File lib/weapon.rb, line 135
def model_from_sql
  makesure_in_git
  FileUtils.mkdir_p "lib/generators/model_from_sql"
  copy_file 'support/model_from_sql/model_from_sql_generator.rb', 'lib/generators/model_from_sql/model_from_sql_generator.rb'
  run 'git add lib/'
  run "rails g model_from_sql #{options.contain}"
  run 'git add app/'
  run 'git add spec/'
  run 'git add test/'
  run 'git add lib/'
  run 'git add db/migrate'
  run 'git commit -a -m "add model_from_sql generator and build models from sql"'
  run 'annonate'
end
push_to_github(dir_name='.') click to toggle source
# File lib/weapon.rb, line 206
def push_to_github(dir_name='.')
  repo_name = (dir_name == '.')? File.basename(Dir.getwd): dir_name
  makesure_in_git(dir_name)
  puts "pull to github"
  run "cd #{dir_name}; gem install hub;hub create #{repo_name}; hub push -u origin master"
end
setup_mina_unicorn(user_host) click to toggle source
# File lib/weapon.rb, line 38
  def setup_mina_unicorn(user_host)
    makesure_in_git
    repo_path = `git config --get remote.origin.url`.strip()
    return puts "at least one remote url should be set before we start!!!".colorize(:red) unless repo_path.present?
    gem_group :development do
      gem 'mina-multistage', require: false
      gem 'mina-unicorn', require: false
      gem 'unicorn'
    end
    run "bundle"
    FileUtils.mkdir_p "config/deploy"
    FileUtils.mkdir_p "config/unicorn"

    copy_file 'support/mina_unicorn/deploy.rb', 'config/deploy.rb'
    copy_file 'support/mina_unicorn/unicorn_production.rb', 'config/unicorn/production.rb'
    copy_file 'support/mina_unicorn/unicorn_staging.rb', 'config/unicorn/staging.rb'
    copy_file 'support/mina_unicorn/deploy_production.rb', 'config/deploy/production.rb'
    copy_file 'support/mina_unicorn/deploy_staging.rb', 'config/deploy/staging.rb'
    copy_file 'support/mina_unicorn/unicorn-nginx.conf', 'unicorn-nginx.conf'
    copy_file 'support/mina_unicorn/staging-unicorn-nginx.conf', 'staging-unicorn-nginx.conf'

    puts "setup mina deploy"

    app_name = `pwd`.split('/')[-1].strip()
    username, domain = user_host.split('@')
    deploy_directory = "/home/#{username}/#{app_name}"


    %w(app_name username domain deploy_directory repo_path).each do |key|
      ap key
      gsub_file "config/deploy/production.rb", "#{key}_for_replace", eval(key)
      gsub_file "config/deploy/staging.rb", "#{key}_for_replace", eval(key)

      gsub_file "config/unicorn/production.rb", "#{key}_for_replace", eval(key)
      gsub_file "config/unicorn/staging.rb", "#{key}_for_replace", eval(key)

      gsub_file "unicorn-nginx.conf", "#{key}_for_replace", eval(key)
      gsub_file "staging-unicorn-nginx.conf", "#{key}_for_replace", eval(key)
      gsub_file "config/deploy.rb", "#{key}_for_replace", eval(key)

    end

    setup_dir_command = 'ssh ' + username + '@' + domain + " -t 'mkdir -p " + deploy_directory  + ';chown -R ' + username + ' ' + deploy_directory + "'"
    run setup_dir_command
    setup_staging_dir_command = 'ssh ' + username + '@' + domain + " -t 'mkdir -p " + deploy_directory  + '_staging;chown -R ' + username + ' ' + deploy_directory + "_staging'"
    run setup_staging_dir_command


    #run 'scp unicorn-nginx.conf ' + username + '@' + domain + ':' + "/etc/nginx/sites-enabled/#{app_name}.conf"
=begin
    run "git clone https://github.com/sstephenson/rbenv.git ~/.rbenv"
    run "echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc"
    run "echo 'eval "$(rbenv init -)"' >> ~/.zshrc"
=end
    run "ssh-copy-id #{username}@#{domain}"

    staging = `git branch -a | grep staging | ag remote`
    ap staging
    run 'mina setup' if staging.present?
    run 'mina production setup'

    run 'scp config/database.yml ' + username + '@' + domain + ':' + deploy_directory + '/shared/config/'
    run 'scp config/application.yml ' + username + '@' + domain + ':' + deploy_directory + '/shared/config/'

    run 'cp config/secrets.yml config/production_secrets.yml'
    gsub_file "config/production_secrets.yml", "production", "staging"
    gsub_file "config/production_secrets.yml", "test", "production"
    run 'scp config/production_secrets.yml ' + username + '@' + domain + ':' + deploy_directory + '/shared/config/secrets.yml'
    run "rm config/production_secrets.yml"

    ## for staging

    run 'cp config/database.yml config/staging_database.yml'
    gsub_file "config/staging_database.yml", "production", "staging"
    run 'scp config/staging_database.yml ' + username + '@' + domain + ':' + deploy_directory + '_staging/shared/config/database.yml'
    run "rm config/staging_database.yml"

    run 'cp config/secrets.yml config/staging_secrets.yml'
    gsub_file "config/staging_secrets.yml", "development", "staging"
    run 'scp config/staging_secrets.yml ' + username + '@' + domain + ':' + deploy_directory + '_staging/shared/config/secrets.yml'
    run "rm config/staging_secrets.yml"

    run 'scp config/application.yml ' + username + '@' + domain + ':' + deploy_directory + '_staging/shared/config/'

    ## run mina setup && deploy
    run 'mina deploy' if staging.present?
    run 'mina production deploy'
    run 'git add config/ .gitignore staging-unicorn-nginx.conf unicorn-nginx.conf'
    run 'git commit -a -m "add mina unicorn multi stage support"'
    puts "remember to make soft link to unicorn-nginx.conf && staging-unicorn-nginx.conf".colorize(:blue)
    puts "remember to restart nginx server".colorize(:blue)
    puts "remember to add ssh key to your repo setting url".colorize(:blue)
    puts "staging branch missing, you need create staging branch, then exec mina setup, mina deploy".colorize(:red) unless staging.present?
  end
setup_settings_ui() click to toggle source
# File lib/weapon.rb, line 162
def setup_settings_ui
  makesure_in_git
  #inject_into_file "Gemfile", "gem 'rails-settings-ui', '~> 0.3.0'\n gem 'rails-settings-cached', '0.4.1'\n", :before => /^end/
  File.open("Gemfile", "a").write("\ngem 'rails-settings-ui', '~> 0.3.0'\n gem 'rails-settings-cached', '0.4.1'\n")
  run "bundle"
  run "rails g settings setting"
  run "rails g rails_settings_ui:install"
  run "rake db:migrate"
  copy_file 'support/rails_settings_ui/rails_settings_ui.rb', 'config/initializers/rails_settings_ui.rb'
  copy_file 'support/rails_settings_ui/setting.rb', 'app/models/setting.rb'
end