cream 0.8.5 → 0.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Changelog.txt +4 -0
- data/VERSION +1 -1
- data/cream.gemspec +11 -2
- data/lib/generators/cream/full_config/full_config_generator.rb +33 -112
- data/lib/generators/cream/helpers/all.rb +14 -0
- data/lib/generators/cream/helpers/args_helper.rb +78 -0
- data/lib/generators/cream/helpers/execute_helper.rb +23 -0
- data/lib/generators/cream/helpers/orm_helper.rb +60 -0
- data/lib/generators/cream/helpers/strategy_helper.rb +31 -0
- data/lib/generators/devise/config/app_helper.rb +74 -0
- data/lib/generators/devise/config/config_generator.rb +25 -186
- data/lib/generators/devise/config/gem_helper.rb +63 -0
- data/lib/generators/devise/users/helper.rb +64 -0
- data/lib/generators/devise/users/routes_helper.rb +55 -0
- data/lib/generators/devise/users/users_generator.rb +81 -101
- data/lib/generators/permits/config/config_generator.rb +9 -39
- data/lib/generators/roles/config/config_generator.rb +29 -64
- metadata +12 -3
@@ -0,0 +1,55 @@
|
|
1
|
+
module DeviseUserGenerator
|
2
|
+
module RoutesHelper
|
3
|
+
def model_routes
|
4
|
+
arg = "#{user_class.pluralize.underscore}"
|
5
|
+
arg << ", :admins" if admin_user?
|
6
|
+
arg
|
7
|
+
end
|
8
|
+
|
9
|
+
def routes_configure!
|
10
|
+
insert_into_routes do
|
11
|
+
routes_for_roles
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def routes_for_roles
|
16
|
+
say customize_note, :green
|
17
|
+
|
18
|
+
routes_customize_comment << roles_routes
|
19
|
+
end
|
20
|
+
|
21
|
+
def roles_except *names
|
22
|
+
roles.reject {|r| names.include? r.to_sym }
|
23
|
+
end
|
24
|
+
|
25
|
+
def roles_routes
|
26
|
+
roles_except(:guest).map do |role|
|
27
|
+
next if read_routes_file =~ /devise_for :#{role.pluralize}/
|
28
|
+
%Q{
|
29
|
+
devise_for :#{role.pluralize}, :class_name => '#{role.classify}'
|
30
|
+
as :#{role} do
|
31
|
+
match "/#{role.pluralize}/sign_up" => "devise/registrations#new", :as => :#{role}_signup
|
32
|
+
end
|
33
|
+
}
|
34
|
+
end.join("\n")
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
def routes_customize_comment
|
39
|
+
return "" if read_routes_file =~ /customize controller action/
|
40
|
+
%q{
|
41
|
+
# customize controller action if needed to render individual registration form for each role
|
42
|
+
# Example:
|
43
|
+
# match "/editors/sign_up" => "user_registrations#new_editor", :as => :editor_signup
|
44
|
+
|
45
|
+
# 'user_registrations_controller.rb' with the action #new_editor
|
46
|
+
# def new_editor
|
47
|
+
# build_resource({})
|
48
|
+
# end
|
49
|
+
#
|
50
|
+
# and the registration form in 'views/user_registrations/new_editor.html.erb'
|
51
|
+
#
|
52
|
+
}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -3,6 +3,10 @@ require 'sugar-high/module'
|
|
3
3
|
require 'cream'
|
4
4
|
require 'rails3_artifactor'
|
5
5
|
require 'logging_assist'
|
6
|
+
require 'generators/cream/helpers/all'
|
7
|
+
|
8
|
+
# include helpers
|
9
|
+
require_all File.dirname(__FILE__)
|
6
10
|
|
7
11
|
module Devise
|
8
12
|
module Generators
|
@@ -10,23 +14,41 @@ module Devise
|
|
10
14
|
desc "Configure Devise with Users"
|
11
15
|
|
12
16
|
# Create Admin user
|
13
|
-
class_option :
|
17
|
+
class_option :admin_class, :type => :string, :default => nil, :desc => "Admin class"
|
18
|
+
|
19
|
+
class_option :user_class, :type => :string, :default => 'User', :desc => "User class"
|
20
|
+
|
14
21
|
# ORM to use
|
15
|
-
class_option :orm,
|
16
|
-
class_option :
|
17
|
-
class_option :
|
22
|
+
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
23
|
+
class_option :roles, :type => :array, :default => [], :desc => "Roles"
|
24
|
+
class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
|
25
|
+
|
26
|
+
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
27
|
+
class_option :gems, :type => :boolean, :default => false, :desc => "Add gems to gemfile?"
|
18
28
|
|
19
29
|
def configure_devise_users
|
20
30
|
logger.add_logfile :logfile => logfile if logfile
|
21
31
|
logger.debug "Configure Devise Users"
|
22
32
|
|
33
|
+
self.class.use_orm orm.to_sym
|
34
|
+
|
23
35
|
devise_gems if gems?
|
24
|
-
|
36
|
+
|
37
|
+
# create user model with devise strategies if user model doesn't already exist
|
38
|
+
devise_base_user if !has_user_model?
|
25
39
|
|
26
40
|
# # if User model is NOT configured with devise strategy
|
27
|
-
insert_devise_strategy
|
41
|
+
insert_devise_strategy user_class, :defaults if !has_devise_user? user_class
|
28
42
|
|
29
|
-
|
43
|
+
# create Admin User model for with devise strategy if admin user should be present
|
44
|
+
devise_user admin_user if admin_user?
|
45
|
+
|
46
|
+
# create role specific user inheriting from base User for each role
|
47
|
+
roles.each do |role|
|
48
|
+
create_user(role) if !has_model? role
|
49
|
+
end
|
50
|
+
|
51
|
+
routes_configure!
|
30
52
|
end
|
31
53
|
|
32
54
|
protected
|
@@ -34,122 +56,80 @@ module Devise
|
|
34
56
|
extend Rails3::Assist::UseMacro
|
35
57
|
include Rails3::Assist::BasicLogger
|
36
58
|
|
37
|
-
|
59
|
+
include Cream::GeneratorHelper::Orm
|
60
|
+
include Cream::GeneratorHelper::Executor
|
61
|
+
include Cream::GeneratorHelper::Args
|
62
|
+
|
63
|
+
include DeviseUserGenerator::Helper
|
64
|
+
include DeviseUserGenerator::RoutesHelper
|
65
|
+
|
66
|
+
use_helpers :model, :app, :special, :file
|
67
|
+
|
68
|
+
# creates a new user model of a given name without devise strategies, instead inheriting from the base User
|
69
|
+
# Never create a Guest user model as this should always be a "fake" (suggestions!?)
|
70
|
+
def create_user name
|
71
|
+
return if name.to_sym == :guest
|
72
|
+
|
73
|
+
logger.debug "create_user: #{name}"
|
74
|
+
create_user_model name
|
75
|
+
# remove any current inheritance
|
76
|
+
remove_inheritance name
|
77
|
+
|
78
|
+
# and make Admin model inherit from User model
|
79
|
+
inherit_model name => user_class
|
80
|
+
end
|
81
|
+
|
82
|
+
def insert_devise_strategy model_name, *names
|
83
|
+
insert_into_model model_name do
|
84
|
+
"devise #{name_string names}"
|
85
|
+
end
|
86
|
+
end
|
38
87
|
|
39
|
-
def
|
40
|
-
|
88
|
+
def name_string names
|
89
|
+
names = devise_strategies[:default] if names.first == :defaults
|
90
|
+
names = devise_strategies[:admin] if names.first == :admin
|
91
|
+
|
92
|
+
names.map{|n| ":#{n}"}.join(', ')
|
41
93
|
end
|
42
94
|
|
43
|
-
|
44
|
-
|
95
|
+
# Must be ORM specific!
|
96
|
+
def create_devise_model user = 'User'
|
97
|
+
rgen "#{user_generator} #{user}"
|
45
98
|
end
|
46
99
|
|
47
100
|
def devise_gems
|
48
101
|
gem 'devise'
|
49
102
|
bundle_install # 'devise'
|
50
103
|
end
|
51
|
-
|
52
|
-
def bundle_install #*gems
|
53
|
-
run "bundle install" # #{gems.jon(' ')}"
|
54
|
-
end
|
55
104
|
|
56
|
-
def
|
57
|
-
create_devise_model
|
105
|
+
def devise_base_user
|
106
|
+
create_devise_model user_class
|
58
107
|
end
|
59
108
|
|
60
109
|
def devise_admin_user
|
61
110
|
# if app does NOT have a Admin model
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
def create_admin_user
|
66
|
-
logger.debug 'create_admin_user'
|
67
|
-
create_user_model :admin
|
68
|
-
# remove any current inheritance
|
69
|
-
remove_inheritance :admin
|
70
|
-
|
71
|
-
# insert default devise Admin strategy
|
72
|
-
insert_devise_strategy :admin, :defaults if has_model? :admin
|
73
|
-
|
74
|
-
# and make Admin model inherit from User model
|
75
|
-
inherit_model :user => :admin
|
76
|
-
end
|
77
|
-
|
78
|
-
# Helpers
|
79
|
-
|
80
|
-
def admin_user?
|
81
|
-
options[:admin_user]
|
111
|
+
create_user(admin_class) if !has_admin_model?
|
82
112
|
end
|
83
113
|
|
84
|
-
|
85
|
-
active_record? ? 'devise' : "#{orm}:devise"
|
86
|
-
end
|
87
|
-
|
88
|
-
def active_record?
|
89
|
-
orm == 'active_record'
|
90
|
-
end
|
114
|
+
private
|
91
115
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
116
|
+
def customize_note
|
117
|
+
%q{
|
118
|
+
Customize controller action if needed to render individual registration form for each role
|
119
|
+
Example:
|
96
120
|
|
97
|
-
|
98
|
-
|
99
|
-
run command
|
100
|
-
end
|
121
|
+
routes.rb
|
122
|
+
match "/editors/sign_up" => "user_registrations#new_editor", :as => :editor_signup
|
101
123
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
def create_user_model user = :user
|
107
|
-
rgen "#{user_generator} #{user}"
|
108
|
-
end
|
109
|
-
|
110
|
-
def devise_users?
|
111
|
-
has_devise_user?(:user) && has_devise_user?(:admin)
|
112
|
-
end
|
124
|
+
user_registrations_controller.rb
|
125
|
+
def new_editor
|
126
|
+
build_resource({})
|
127
|
+
end
|
113
128
|
|
114
|
-
|
115
|
-
|
116
|
-
begin
|
117
|
-
read_model(user) =~ /devise/
|
118
|
-
rescue Exception => e
|
119
|
-
logger.info "Exception for #has_devise_user? #{user}: #{e.message}"
|
120
|
-
false
|
121
|
-
end
|
129
|
+
Create the registration form for the editor user in 'views/user_registrations/new_editor.html.erb'
|
130
|
+
}
|
122
131
|
end
|
123
132
|
|
124
|
-
# Must be ORM specific!
|
125
|
-
def create_devise_model user = :user
|
126
|
-
rgen "#{user_generator} #{user}"
|
127
|
-
end
|
128
|
-
|
129
|
-
def remove_inheritance user
|
130
|
-
File.remove_content_from model_file_name(user), :where => /<\s*ActiveRecord::Base/
|
131
|
-
end
|
132
|
-
|
133
|
-
def inherit_model hash
|
134
|
-
superclass = hash.keys.first.to_s.camelize
|
135
|
-
subclass = hash.values.first
|
136
|
-
logger.debug "subclass: #{subclass}"
|
137
|
-
logger.debug "superclass: #{superclass}"
|
138
|
-
File.replace_content_from model_file_name(subclass), :where => /class Admin/, :with => "class Admin < #{superclass}"
|
139
|
-
end
|
140
|
-
|
141
|
-
def insert_devise_strategy model_name, *names
|
142
|
-
names = devise_default_strategies if names.first == :defaults
|
143
|
-
namestr = names.map{|n| ":#{n}"}.join(', ')
|
144
|
-
insert_into_model model_name do
|
145
|
-
"devise #{namestr}"
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
def devise_default_strategies
|
150
|
-
[:database_authenticatable, :confirmable, :recoverable, :rememberable, :trackable, :validatable]
|
151
|
-
end
|
152
|
-
|
153
133
|
end
|
154
134
|
end
|
155
135
|
end
|
@@ -3,6 +3,7 @@ require 'sugar-high/module'
|
|
3
3
|
require 'cream'
|
4
4
|
require 'rails3_artifactor'
|
5
5
|
require 'logging_assist'
|
6
|
+
require 'generators/cream/helpers/all'
|
6
7
|
|
7
8
|
module Permits
|
8
9
|
module Generators
|
@@ -10,8 +11,10 @@ module Permits
|
|
10
11
|
desc "Configure Permits"
|
11
12
|
|
12
13
|
# ORM to use
|
13
|
-
class_option :orm,
|
14
|
-
class_option :roles,
|
14
|
+
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
15
|
+
class_option :roles, :type => :array, :desc => "Roles for permits"
|
16
|
+
class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
|
17
|
+
|
15
18
|
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
16
19
|
class_option :gems, :type => :boolean, :default => false, :desc => "Add gems to gemfile?"
|
17
20
|
|
@@ -29,48 +32,15 @@ module Permits
|
|
29
32
|
protected
|
30
33
|
|
31
34
|
include Rails3::Assist::BasicLogger
|
32
|
-
extend Rails3::Assist::UseMacro
|
33
|
-
|
34
|
-
use_helpers :app, :file, :special
|
35
|
-
|
36
|
-
def gems?
|
37
|
-
options[:gems]
|
38
|
-
end
|
39
|
-
|
40
|
-
# rails generate ...
|
41
|
-
def rgen command
|
42
|
-
execute "rails g #{command}"
|
43
|
-
end
|
44
|
-
|
45
|
-
def execute command
|
46
|
-
logger.debug command
|
47
|
-
run command
|
48
|
-
end
|
49
|
-
|
50
|
-
def logfile
|
51
|
-
options[:logfile]
|
52
|
-
end
|
53
|
-
|
54
|
-
def roles
|
55
|
-
options[:roles]
|
56
|
-
end
|
57
|
-
|
58
|
-
def roles_list
|
59
|
-
roles.join(' ')
|
60
|
-
end
|
61
|
-
|
62
|
-
def orm
|
63
|
-
options[:orm]
|
64
|
-
end
|
65
35
|
|
36
|
+
include Cream::GeneratorHelper::Orm
|
37
|
+
include Cream::GeneratorHelper::Executor
|
38
|
+
include Cream::GeneratorHelper::Args
|
39
|
+
|
66
40
|
def permits_gems
|
67
41
|
gem 'cancan-permits'
|
68
42
|
bundle_install # 'cancan-permits'
|
69
43
|
end
|
70
|
-
|
71
|
-
def bundle_install #*gems
|
72
|
-
run "bundle install" # #{gems.jon(' ')}"
|
73
|
-
end
|
74
44
|
end
|
75
45
|
end
|
76
46
|
end
|
@@ -3,6 +3,7 @@ require 'sugar-high/module'
|
|
3
3
|
require 'cream'
|
4
4
|
require 'rails3_artifactor'
|
5
5
|
require 'logging_assist'
|
6
|
+
require 'generators/cream/helpers/all'
|
6
7
|
|
7
8
|
module Roles
|
8
9
|
module Generators
|
@@ -15,17 +16,20 @@ module Roles
|
|
15
16
|
class_option :roles, :type => :array, :default => ['guest', 'admin'], :desc => "Valid roles to use"
|
16
17
|
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
17
18
|
class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
|
18
|
-
class_option :gems, :type => :boolean, :default => true,
|
19
|
+
class_option :gems, :type => :boolean, :default => true, :desc => "Add gems to gemfile?"
|
19
20
|
|
20
21
|
def configure_roles
|
21
22
|
logger.add_logfile :logfile => logfile if logfile
|
22
23
|
|
23
24
|
# make the artifactor model methods behave according to selected orm! - this is a macro
|
24
|
-
|
25
|
+
set_orm
|
25
26
|
|
26
27
|
roles_gems if gems?
|
28
|
+
|
29
|
+
# run the orm specific Roles generator
|
27
30
|
create_roles
|
28
|
-
|
31
|
+
|
32
|
+
# setup User to use the roles registered with Cream
|
29
33
|
set_valid_roles_cream
|
30
34
|
end
|
31
35
|
|
@@ -33,73 +37,32 @@ module Roles
|
|
33
37
|
|
34
38
|
include Rails3::Assist::BasicLogger
|
35
39
|
extend Rails3::Assist::UseMacro
|
40
|
+
|
41
|
+
include Cream::GeneratorHelper::Orm
|
42
|
+
include Cream::GeneratorHelper::Executor
|
43
|
+
include Cream::GeneratorHelper::Args
|
36
44
|
|
37
45
|
use_helpers :model, :file
|
38
46
|
|
39
|
-
def gems?
|
40
|
-
options[:gems]
|
41
|
-
end
|
42
|
-
|
43
|
-
def logfile
|
44
|
-
options[:logfile]
|
45
|
-
end
|
46
|
-
|
47
|
-
# rails generate ...
|
48
|
-
def rgen command
|
49
|
-
execute "rails g #{command}"
|
50
|
-
end
|
51
|
-
|
52
|
-
def execute command
|
53
|
-
logger.debug command
|
54
|
-
run command
|
55
|
-
end
|
56
|
-
|
57
|
-
def orm
|
58
|
-
options[:orm]
|
59
|
-
end
|
60
|
-
|
61
|
-
def strategy
|
62
|
-
options[:strategy]
|
63
|
-
end
|
64
|
-
|
65
|
-
def roles
|
66
|
-
options[:roles].join(' ')
|
67
|
-
end
|
68
|
-
|
69
|
-
def default_roles?
|
70
|
-
options[:default_roles]
|
71
|
-
end
|
72
|
-
|
73
|
-
def add_gem name
|
74
|
-
gem name if !has_gem? name
|
75
|
-
end
|
76
|
-
|
77
47
|
def roles_gems
|
78
48
|
gem_name = "roles_#{orm}"
|
79
49
|
add_gem gem_name
|
80
50
|
bundle_install #gem_name
|
81
51
|
end
|
82
52
|
|
83
|
-
def bundle_install #*gems
|
84
|
-
run "bundle install" #{gems.join(' ')}
|
85
|
-
end
|
86
|
-
|
87
|
-
def roles_generator
|
88
|
-
"#{orm}:roles"
|
89
|
-
end
|
90
|
-
|
91
53
|
def create_roles
|
92
|
-
rgen "#{roles_generator} User --strategy #{strategy} --roles #{
|
54
|
+
rgen "#{roles_generator} User --strategy #{strategy} --roles #{roles_list} #{default_roles_option}"
|
93
55
|
end
|
94
56
|
|
95
57
|
def set_valid_roles_cream
|
96
|
-
|
58
|
+
user_exist_check
|
59
|
+
|
97
60
|
if initializer_file? :cream
|
98
|
-
if read_model(
|
99
|
-
replace_in_model
|
61
|
+
if read_model(user_class) =~ /valid_roles_are/
|
62
|
+
replace_in_model user_class, :where => /valid_roles_are\s+[(.*)]/, :with => cream_valid_roles_statement
|
100
63
|
else
|
101
|
-
insert_into_model
|
102
|
-
|
64
|
+
insert_into_model user_class do
|
65
|
+
cream_valid_roles_statement
|
103
66
|
end
|
104
67
|
end
|
105
68
|
else
|
@@ -107,19 +70,21 @@ module Roles
|
|
107
70
|
end
|
108
71
|
end
|
109
72
|
|
110
|
-
|
111
|
-
|
73
|
+
private
|
74
|
+
|
75
|
+
def user_exist_check
|
76
|
+
raise "ERROR: User model missing. Please create a User model before running this generator" if !has_user_model?
|
77
|
+
end
|
78
|
+
|
79
|
+
def roles_generator
|
80
|
+
"#{orm}:roles"
|
112
81
|
end
|
113
82
|
|
114
|
-
def
|
115
|
-
|
116
|
-
|
117
|
-
# unless read_model(:user) =~ /use_roles_strategy/
|
118
|
-
# inject_into_file model_file(:user), "use_roles_strategy :#{strategy}\n\n", :before => "class"
|
119
|
-
# end
|
83
|
+
def cream_valid_roles_statement
|
84
|
+
"valid_roles_are Cream::Role.available"
|
120
85
|
end
|
121
86
|
|
122
|
-
def
|
87
|
+
def default_roles_option
|
123
88
|
default_roles? ? '--default-roles' : '--no-default-roles'
|
124
89
|
end
|
125
90
|
end
|