/
create.rb
54 lines (44 loc) · 1.31 KB
/
create.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# Methods needed to create a project.
require 'rubygems'
require File.expand_path(File.dirname(__FILE__) + "/errors")
module Suspenders
class Create
attr_accessor :project_path
def self.run!(project_path)
creator = self.new(project_path)
creator.create_project!
end
def initialize(project_path)
self.project_path = project_path
validate_project_path
validate_project_name
end
def create_project!
exec(<<-COMMAND)
rails new #{project_path} \
--template=#{template} \
--skip-test-unit \
--skip-prototype
COMMAND
end
private
def validate_project_name
project_name = File.basename(project_path)
unless project_name =~ /^[a-z0-9_]+$/
raise InvalidInput.new("Project name must only contain [a-z0-9_]")
end
end
def validate_project_path
base_directory = Dir.pwd
full_path = File.join(base_directory, project_path)
# This is for the common case for the user's convenience; the race
# condition can still occur.
if File.exists?(full_path)
raise InvalidInput.new("Project directory (#{project_path}) already exists")
end
end
def template
File.expand_path(File.dirname(__FILE__) + "/../template/suspenders.rb")
end
end
end