class Grape::Generator::CLI
Public Class Methods
source_root()
click to toggle source
# File lib/grape/generator/cli.rb, line 11 def source_root 'templates' end
Public Instance Methods
build_params(work_dir, app_name)
click to toggle source
# File lib/grape/generator/cli.rb, line 98 def build_params(work_dir, app_name) end
database_gem_entry(database)
click to toggle source
# File lib/grape/generator/cli.rb, line 101 def database_gem_entry(database) run_ruby([ "require 'rails'", "require 'rails/generators'", "require 'rails/generators/rails/app/app_generator'", "options = {}", database ? "options[:database] = database" : "", "generator = Rails::Generators::AppGenerator.new ['rails'], options", "gem_name, gem_version = generator.send('gem_for_database')", "puts File.readlines('Gemfile').find{|line| line =~ /^gem '\#{gem_name}/ }.chomp", ]) end
error_and_exit(status)
click to toggle source
# File lib/grape/generator/cli.rb, line 82 def error_and_exit(status) error(status) exit(1) end
exec(commands)
click to toggle source
# File lib/grape/generator/cli.rb, line 87 def exec(commands) commands.map do |cmd| run cmd, @config raise "Failed in exec `#{cmd}`" unless $?.exitstatus == 0 end end
new(name)
click to toggle source
# File lib/grape/generator/cli.rb, line 25 def new(name) @config = {capture: !options[:verbose], verbose: true} current_dir = Pathname.pwd case name when "." app_name = current_dir.basename.to_path work_dir = current_dir else raise "#{name} is already exists." if File.exists?(name) app_name = name work_dir = current_dir.join(name) end params = { app: {name: app_name} } Dir[File.join(template_base, "**", "{*.*,.keep}")].each do |src| dst = Pathname.new src.sub(template_base, work_dir.to_path) template(src, dst.sub_ext("").to_path, params) end if options[:rails] rails_dir = work_dir.join("rails") setup_dir = work_dir.join(app_name) rails_new(setup_dir, options[:rails_new_options], params) Dir[File.join(template_rails, "**", "{*.*,.keep}")].each do |src| dst = Pathname.new src.sub(template_rails, work_dir.to_path) dst_path = dst.sub_ext("").to_path template(src, dst_path, params.merge(force: :true)) end inside(work_dir, @config) do exec(["mv #{setup_dir.to_path} #{rails_dir.to_path}"]) end end inside(work_dir, @config) do |dst| exec([ "bundle install --path vendor/bundle --without production" ]) end rescue puts $!.backtrace error_and_exit($!.message) end
rails_new(dir, options, params)
click to toggle source
# File lib/grape/generator/cli.rb, line 114 def rails_new(dir, options, params) inside(dir, @config) do |dst| exec([ "bundle init", "echo \"gem 'rails'\" >> Gemfile", "bundle install --path ../vendor/bundle --without production", "bundle exec rails new . #{options}", "bundle install", "mv db ../", "ln -s ../db db", ]) options =~ /-d (.+)/i params[:app][:database_gem_entry] = database_gem_entry($1) end inside(dir.join("app"), @config) do exec([ "mv models ../../app", "ln -s ../../app/models models", ]) end inside(dir.join("config"), @config) do exec([ "mv database.yml ../../config", "ln -s ../../config/database.yml database.yml", ]) end end
run_ruby(cmd)
click to toggle source
# File lib/grape/generator/cli.rb, line 94 def run_ruby(cmd) run("bundle exec ruby -e \"#{cmd.join(";")}\"", capture: true, verbose: false).chomp end
template_base()
click to toggle source
# File lib/grape/generator/cli.rb, line 74 def template_base @template_base ||= templates_path('base') end
template_rails()
click to toggle source
# File lib/grape/generator/cli.rb, line 78 def template_rails @template_rails ||= templates_path('rails') end
templates_path(*item)
click to toggle source
# File lib/grape/generator/cli.rb, line 70 def templates_path(*item) File.expand_path(File.join(File.dirname(__FILE__), ["templates"] + item)) end