forked from thoughtbot/clearance
/
clearance_generator.rb
72 lines (56 loc) · 1.74 KB
/
clearance_generator.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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
require 'rails/generators/active_record'
class ClearanceGenerator < ActiveRecord::Generators::Base
desc "Setup the basic stuff needed for Clearance"
argument :name, :type => :string, :default => "migration_source_name"
def self.source_root
@_clearance_source_root ||= File.join(File.dirname(__FILE__), "clearance_templates")
end
def install
template "clearance.rb", "config/initializers/clearance.rb"
inject_into_class "app/controllers/application_controller.rb", ApplicationController do
" include Clearance::Authentication\n"
end
user_model = "app/models/user.rb"
if File.exists?(user_model)
inject_into_class user_model, User do
"include Clearance::User"
end
else
template "user.rb", user_model
end
if File.exists?("spec")
template "factories.rb", "spec/factories/clearance.rb"
else
template "factories.rb", "test/factories/clearance.rb"
end
migration_template "migrations/#{migration_source_name}.rb",
"db/migrate/clearance_#{migration_target_name}"
#readme "README"
end
private
def schema_version_constant
if upgrading_clearance_again?
"To#{schema_version.gsub('_', '')}"
end
end
def migration_source_name
if ActiveRecord::Base.connection.table_exists?(:users)
'update_users'
else
'create_users'
end
end
def migration_target_name
if upgrading_clearance_again?
"update_users_to_#{schema_version}"
else
'create_users'
end
end
def schema_version
IO.read(File.join(File.dirname(__FILE__), '..', '..', '..', 'VERSION')).strip.gsub(/[^\d]/, '_')
end
def upgrading_clearance_again?
ActiveRecord::Base.connection.table_exists?(:users)
end
end