cream 0.8.9.2 → 0.8.9.3
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/Gemfile +1 -1
- data/README.textile +11 -6
- data/Rakefile +1 -1
- data/cream.gemspec +21 -73
- data/lib/cream/configure/rails.rb +1 -2
- data/lib/generators/cancan/config/config_generator.rb +6 -9
- data/lib/generators/cream/app/app_generator.rb +3 -3
- data/lib/generators/cream/full_config/full_config_generator.rb +22 -13
- data/lib/generators/cream/helpers/all.rb +15 -0
- data/lib/generators/cream/helpers/args_helper.rb +27 -12
- data/lib/generators/cream/helpers/execute_helper.rb +1 -1
- data/lib/generators/cream/helpers/gemfile_helper.rb +4 -4
- data/lib/generators/devise/config/app_helper.rb +4 -4
- data/lib/generators/devise/config/config_generator.rb +4 -4
- data/lib/generators/devise/customize/customize_generator.rb +3 -3
- data/lib/generators/devise/customize/helpers/username_helper.rb +4 -4
- data/lib/generators/devise/users/helper.rb +1 -1
- data/lib/generators/devise/users/routes_helper.rb +47 -42
- data/lib/generators/devise/users/users_generator.rb +30 -29
- data/lib/generators/permits/config/config_generator.rb +3 -3
- data/lib/generators/roles/config/config_generator.rb +10 -6
- metadata +107 -428
@@ -3,10 +3,10 @@ module Cream
|
|
3
3
|
module Gemfile
|
4
4
|
def add_gem_version name, version
|
5
5
|
if !has_gem? name
|
6
|
-
|
6
|
+
debug! "Adding gem: #{name}, #{version}"
|
7
7
|
gem name, :version => version
|
8
8
|
else
|
9
|
-
|
9
|
+
debug! "gem: #{name}, #{version} already in Gemfile"
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -17,10 +17,10 @@ module Cream
|
|
17
17
|
end
|
18
18
|
|
19
19
|
if !has_gem? name
|
20
|
-
|
20
|
+
debug! "Adding gem: #{name}"
|
21
21
|
gem name
|
22
22
|
else
|
23
|
-
|
23
|
+
debug! "gem: #{name} already in Gemfile"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module DeviseConfigGenerator
|
2
2
|
module AppHelper
|
3
3
|
def protection_configure!
|
4
|
-
|
4
|
+
debug! "Configuring: devise authentication filter"
|
5
5
|
## Add Devise protection to Application controller:
|
6
6
|
insert_into_controller :application do
|
7
7
|
"before_filter :authenticate_user!"
|
@@ -12,7 +12,7 @@ module DeviseConfigGenerator
|
|
12
12
|
# require 'devise/orm/mongo_mapper'
|
13
13
|
def orm_configure!
|
14
14
|
return if orm == :active_record
|
15
|
-
|
15
|
+
debug! "Configuring orm: [#{orm}]"
|
16
16
|
|
17
17
|
if !devise_initializer?
|
18
18
|
say "WARNING: initializer/devise.rb not found", :yellow
|
@@ -20,7 +20,7 @@ module DeviseConfigGenerator
|
|
20
20
|
end
|
21
21
|
|
22
22
|
if !has_statement?(orm_replacement)
|
23
|
-
|
23
|
+
debug! "require 'devise/orm/#{orm}' already in devise.rb initializer"
|
24
24
|
return
|
25
25
|
end
|
26
26
|
|
@@ -33,7 +33,7 @@ module DeviseConfigGenerator
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def mailer_configure!
|
36
|
-
|
36
|
+
debug! "Configuring: devise mailer"
|
37
37
|
insert_application_config "action_mailer.default_url_options = { :host => 'localhost:3000' }"
|
38
38
|
end
|
39
39
|
|
@@ -2,7 +2,6 @@ require 'sugar-high/file'
|
|
2
2
|
require 'sugar-high/module'
|
3
3
|
require 'cream'
|
4
4
|
require 'rails3_artifactor'
|
5
|
-
require 'logging_assist'
|
6
5
|
require 'generators/cream/helpers/all'
|
7
6
|
|
8
7
|
# include helpers
|
@@ -17,11 +16,12 @@ module Devise
|
|
17
16
|
|
18
17
|
# ORM to use
|
19
18
|
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
19
|
+
class_option :logging, :type => :boolean, :default => false, :desc => "Logging on?"
|
20
20
|
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
21
21
|
class_option :gems, :type => :boolean, :default => true, :desc => "Add gems to gemfile?"
|
22
22
|
|
23
23
|
def configure_devise
|
24
|
-
|
24
|
+
logit!
|
25
25
|
devise_gems if gems?
|
26
26
|
say "WARNING: Not configuring devise gems for #{orm}", :yellow if !gems?
|
27
27
|
|
@@ -43,10 +43,10 @@ module Devise
|
|
43
43
|
|
44
44
|
def devise_install
|
45
45
|
if devise_initializer?
|
46
|
-
|
46
|
+
debug! "initializers/devise.rb was found so devise:install will not be run"
|
47
47
|
return
|
48
48
|
end
|
49
|
-
|
49
|
+
debug! "initializers/devise.rb was NOT found so devise:install will now be run"
|
50
50
|
rgen 'devise:install'
|
51
51
|
end
|
52
52
|
|
@@ -2,7 +2,6 @@ require 'sugar-high/file'
|
|
2
2
|
require 'sugar-high/module'
|
3
3
|
require 'cream'
|
4
4
|
require 'rails3_artifactor'
|
5
|
-
require 'logging_assist'
|
6
5
|
require 'generators/cream/helpers/all'
|
7
6
|
|
8
7
|
require_all File.dirname(__FILE__) # + '/helpers'
|
@@ -16,14 +15,15 @@ module Devise
|
|
16
15
|
|
17
16
|
# ORM to use
|
18
17
|
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
18
|
+
class_option :logging, :type => :boolean, :default => false, :desc => "Logging on?"
|
19
19
|
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
20
20
|
|
21
21
|
class_option :user_name, :type => :boolean, :default => true, :desc => "Add username as login option"
|
22
22
|
class_option :login_type, :type => :string, :default => 'generic', :desc => "How to login: 'email', 'username', 'generic' (i.e 'username' or 'email')"
|
23
23
|
|
24
24
|
def main_flow
|
25
|
-
|
26
|
-
|
25
|
+
logit!
|
26
|
+
debug! 'customizing devise...'
|
27
27
|
|
28
28
|
Devise::Customizers::UserName.new(orm, user_class, login_attribute).add_to_user_class if add_user_name?
|
29
29
|
end
|
@@ -17,9 +17,9 @@ module Devise
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def add_to_user_class
|
20
|
-
|
20
|
+
debug! 'add_to_user_class'
|
21
21
|
if active_record? && !has_migration_file?(:add_username_to_users)
|
22
|
-
|
22
|
+
debug! 'create migration: add_username_to_users'
|
23
23
|
%x[rails g migration add_username_to_users username:string]
|
24
24
|
%x[rake db:migrate]
|
25
25
|
end
|
@@ -54,7 +54,7 @@ module Devise
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def configure_generic_login
|
57
|
-
|
57
|
+
debug! 'configure generic login'
|
58
58
|
add_virtual_login_accessor
|
59
59
|
override_user_auth
|
60
60
|
modify_retrieve_password
|
@@ -126,7 +126,7 @@ module Devise
|
|
126
126
|
end
|
127
127
|
|
128
128
|
def modify_initializer
|
129
|
-
|
129
|
+
debug! 'modify devise initializer'
|
130
130
|
return if devise_init_content? keys_stmt_replacement(login_attribute)
|
131
131
|
|
132
132
|
replace_initializer_content :devise, :where => default_keys_stmt, :with => keys_stmt_replacement(login_attribute)
|
@@ -42,7 +42,7 @@ module DeviseUserGenerator
|
|
42
42
|
begin
|
43
43
|
read_model(user.as_filename) =~ /devise/
|
44
44
|
rescue Exception => e
|
45
|
-
|
45
|
+
info! "Exception for #has_devise_user? #{user}: #{e.message}"
|
46
46
|
false
|
47
47
|
end
|
48
48
|
end
|
@@ -2,69 +2,74 @@ module DeviseUserGenerator
|
|
2
2
|
module RoutesHelper
|
3
3
|
def model_routes
|
4
4
|
arg = "#{user_class.pluralize.underscore}"
|
5
|
-
arg << ", :admins" if admin_user?
|
5
|
+
# arg << ", :admins" if admin_user?
|
6
6
|
arg
|
7
7
|
end
|
8
8
|
|
9
9
|
def routes_configure!
|
10
|
-
routes_content =
|
10
|
+
routes_content = default_signin_routes << user_type_routes
|
11
11
|
puts "Insert into routes: #{routes_content}"
|
12
12
|
insert_into_routes do
|
13
13
|
routes_content
|
14
14
|
end
|
15
15
|
end
|
16
|
-
|
17
|
-
def routes_for_roles
|
18
|
-
say customize_note, :green
|
19
16
|
|
20
|
-
|
17
|
+
def user_types_to_route
|
18
|
+
@user_types_to_route ||= user_types_except(:guest).delete_if do |user_type|
|
19
|
+
name_user_types = user_type.pluralize
|
20
|
+
is_there = !(read_routes_file =~ /devise_for :#{name_user_types}, :class_name =>/).nil?
|
21
|
+
debug! "not doing devise routing for #{name_user_types} as it is already there" if is_there
|
22
|
+
is_there
|
23
|
+
end
|
21
24
|
end
|
22
25
|
|
23
|
-
def
|
24
|
-
|
25
|
-
|
26
|
+
def default_signin_routes
|
27
|
+
name_default_users = user_class.underscore.gsub('/', '_').pluralize
|
28
|
+
default_user_class = user_class.classify
|
29
|
+
%Q{
|
30
|
+
match '/sign_in' => 'main#index'
|
31
|
+
match '/log_in' => 'main#index'
|
26
32
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
+
devise_scope do
|
34
|
+
get '/sign_in' => 'main#index', :as => :new_user_session
|
35
|
+
end
|
36
|
+
|
37
|
+
devise_for :#{name_default_users}, :class_name => '#{default_user_class}', :controllers => {:sessions => 'main'} do
|
38
|
+
get '/sign_in' => 'main#index', :as => :new_user_session
|
39
|
+
end}
|
40
|
+
end
|
33
41
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
42
|
+
def user_type_routes
|
43
|
+
user_types_to_route.each do |user_type|
|
44
|
+
name_user_types = user_type.pluralize
|
45
|
+
if read_routes_file =~ /devise_for :#{name_user_types}/
|
46
|
+
debug! "removing old devise routing for: #{name_user_types}"
|
47
|
+
File.remove_content_from routes_file, :where => /devise_for :#{name_user_types}/
|
38
48
|
end
|
39
49
|
end
|
40
50
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
51
|
+
debug! "performing devise role routing for: #{user_types_to_route}"
|
52
|
+
|
53
|
+
user_types_to_route.map do |user_type|
|
54
|
+
name_user_types = user_type.pluralize
|
55
|
+
name_user_type = user_type.underscore.gsub('/', '_')
|
56
|
+
%Q{
|
57
|
+
devise_for :#{name_user_types}, :class_name => '#{user_type.classify}', :controllers => {:registrations => 'devise/registrations', :sessions => 'main'} do
|
58
|
+
match "/#{name_user_types}/sign_in" => "devise/sessions#new", :as => :#{name_user_type}_signin
|
59
|
+
match "/#{name_user_types}/sign_up" => "devise/registrations#new", :as => :#{name_user_type}_signup
|
47
60
|
end
|
48
61
|
}
|
49
62
|
end.join("\n")
|
50
|
-
end
|
63
|
+
end
|
51
64
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
# customize controller action if needed to render individual registration form for each role
|
57
|
-
# Example:
|
58
|
-
# match "/editors/sign_up" => "user_registrations#new_editor", :as => :editor_signup
|
59
|
-
|
60
|
-
# 'user_registrations_controller.rb' with the action #new_editor
|
61
|
-
# def new_editor
|
62
|
-
# build_resource({})
|
63
|
-
# end
|
64
|
-
#
|
65
|
-
# and the registration form in 'views/user_registrations/new_editor.html.erb'
|
66
|
-
#
|
67
|
-
}
|
65
|
+
protected
|
66
|
+
|
67
|
+
def roles_except *names
|
68
|
+
roles.reject {|r| names.include? r.to_sym }
|
68
69
|
end
|
70
|
+
|
71
|
+
def user_types_except *names
|
72
|
+
user_types.reject {|r| user_types.include? r.to_sym }
|
73
|
+
end
|
69
74
|
end
|
70
75
|
end
|
@@ -2,7 +2,6 @@ require 'sugar-high/file'
|
|
2
2
|
require 'sugar-high/module'
|
3
3
|
require 'cream'
|
4
4
|
require 'rails3_artifactor'
|
5
|
-
require 'logging_assist'
|
6
5
|
require 'generators/cream/helpers/all'
|
7
6
|
|
8
7
|
# include helpers
|
@@ -18,19 +17,22 @@ module Devise
|
|
18
17
|
|
19
18
|
class_option :user_class, :type => :string, :default => 'User', :desc => "User class"
|
20
19
|
|
20
|
+
class_option :registrations_for, :type => :array, :default => [], :desc => "User types individual registrations"
|
21
|
+
|
21
22
|
# ORM to use
|
22
23
|
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
23
24
|
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
|
+
# class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
|
25
26
|
|
26
27
|
class_option :user_types, :type => :array, :default => ['admin'], :desc => "Devise Users to create that override the generic base User", :aliases => '-ut'
|
27
28
|
|
29
|
+
class_option :logging, :type => :boolean, :default => false, :desc => "Logging on?"
|
28
30
|
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
29
31
|
class_option :gems, :type => :boolean, :default => false, :desc => "Add gems to gemfile?"
|
30
32
|
|
31
33
|
def configure_devise_users
|
32
|
-
|
33
|
-
|
34
|
+
logit!
|
35
|
+
debug! "Configure Devise Users"
|
34
36
|
|
35
37
|
self.class.use_orm orm.to_sym
|
36
38
|
|
@@ -48,6 +50,17 @@ module Devise
|
|
48
50
|
end
|
49
51
|
|
50
52
|
routes_configure!
|
53
|
+
|
54
|
+
registrations.each do |reg|
|
55
|
+
if user_type? reg
|
56
|
+
# create controller
|
57
|
+
controller = "#{reg}::Registrations".camelcase
|
58
|
+
rgen "controller #{controller} new"
|
59
|
+
rgen "view #{controller} new"
|
60
|
+
|
61
|
+
# make controller a devise controller
|
62
|
+
replace_controller_inheritance controller.underscore, 'Devise::RegistrationsController'
|
63
|
+
end
|
51
64
|
end
|
52
65
|
|
53
66
|
protected
|
@@ -62,12 +75,24 @@ module Devise
|
|
62
75
|
|
63
76
|
use_helpers :model, :app, :special, :file
|
64
77
|
|
78
|
+
def remove_controller_inheritance name
|
79
|
+
File.remove_content_from controller_file_name(name.as_filename), :where => /<\s*ApplicationController/
|
80
|
+
end
|
81
|
+
|
82
|
+
def replace_controller_inheritance name, replace_controller
|
83
|
+
File.replace_content_from controller_file_name(name.as_filename), :where => /<\s*ApplicationController/, :with => replace_controller
|
84
|
+
end
|
85
|
+
|
86
|
+
def registrations
|
87
|
+
options[:registrations_for]
|
88
|
+
end
|
89
|
+
|
65
90
|
# creates a new user model of a given name without devise strategies, instead inheriting from the base User
|
66
91
|
# Never create a Guest user model as this should always be a "fake" (suggestions!?)
|
67
92
|
def create_user name
|
68
93
|
return if name.to_sym == :guest
|
69
94
|
|
70
|
-
|
95
|
+
debug! "create devise user: #{name}"
|
71
96
|
create_user_model name
|
72
97
|
# remove any current inheritance
|
73
98
|
remove_inheritance name
|
@@ -102,30 +127,6 @@ module Devise
|
|
102
127
|
def devise_base_user
|
103
128
|
create_devise_model user_class
|
104
129
|
end
|
105
|
-
|
106
|
-
private
|
107
|
-
|
108
|
-
def customize_note
|
109
|
-
%q{
|
110
|
-
Customize controller action if needed to render an individual registration form for each devise User type
|
111
|
-
|
112
|
-
Example:
|
113
|
-
|
114
|
-
- routes.rb:
|
115
|
-
|
116
|
-
match "/editors/sign_up" => "user_registrations#new_editor", :as => :editor_signup
|
117
|
-
|
118
|
-
- user_registrations_controller.rb:
|
119
|
-
|
120
|
-
def new_editor
|
121
|
-
build_resource({})
|
122
|
-
end
|
123
|
-
|
124
|
-
Then create the registration form (view) for the :editor user in 'views/user_registrations/new_editor.html.erb'
|
125
|
-
See comments in routes.rb for more info. There is also a page on the wiki about advanced routes customization.
|
126
|
-
}
|
127
|
-
end
|
128
|
-
|
129
130
|
end
|
130
131
|
end
|
131
132
|
end
|
@@ -2,7 +2,6 @@ require 'sugar-high/file'
|
|
2
2
|
require 'sugar-high/module'
|
3
3
|
require 'cream'
|
4
4
|
require 'rails3_artifactor'
|
5
|
-
require 'logging_assist'
|
6
5
|
require 'generators/cream/helpers/all'
|
7
6
|
|
8
7
|
module Permits
|
@@ -15,12 +14,13 @@ module Permits
|
|
15
14
|
class_option :roles, :type => :array, :desc => "Roles for permits"
|
16
15
|
class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
|
17
16
|
|
17
|
+
class_option :logging, :type => :boolean, :default => false, :desc => "Logging on?"
|
18
18
|
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
19
19
|
class_option :gems, :type => :boolean, :default => false, :desc => "Add gems to gemfile?"
|
20
20
|
|
21
21
|
def configure_permits
|
22
|
-
|
23
|
-
|
22
|
+
logit!
|
23
|
+
debug! "Configure Permits"
|
24
24
|
|
25
25
|
permits_gems if gems?
|
26
26
|
|
@@ -2,7 +2,6 @@ require 'sugar-high/file'
|
|
2
2
|
require 'sugar-high/module'
|
3
3
|
require 'cream'
|
4
4
|
require 'rails3_artifactor'
|
5
|
-
require 'logging_assist'
|
6
5
|
require 'generators/cream/helpers/all'
|
7
6
|
|
8
7
|
module Roles
|
@@ -20,12 +19,16 @@ module Roles
|
|
20
19
|
class_option :role_class, :type => :string, :aliases => "-rc", :default => 'Role', :desc => "Role class name", :optional => true
|
21
20
|
class_option :user_role_class, :type => :string, :aliases => "-urc", :default => 'UserRole', :desc => "User-Role (join table) class name", :optional => true
|
22
21
|
|
22
|
+
class_option :logging, :type => :boolean, :default => false, :desc => "Logging on?"
|
23
23
|
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
24
24
|
class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
|
25
25
|
class_option :gems, :type => :boolean, :default => true, :desc => "Add gems to gemfile?"
|
26
26
|
|
27
27
|
def configure_roles
|
28
|
-
|
28
|
+
if logging_on?
|
29
|
+
require 'logging_assist'
|
30
|
+
|
31
|
+
end
|
29
32
|
|
30
33
|
# make the artifactor model methods behave according to selected orm! - this is a macro
|
31
34
|
set_orm
|
@@ -55,7 +58,8 @@ module Roles
|
|
55
58
|
end
|
56
59
|
|
57
60
|
def create_roles
|
58
|
-
|
61
|
+
# #{default_roles_option}
|
62
|
+
rgen "#{roles_generator} #{user_class} --strategy #{strategy} --roles #{roles_list} #{class_options}"
|
59
63
|
end
|
60
64
|
|
61
65
|
def set_valid_roles_cream
|
@@ -106,9 +110,9 @@ module Roles
|
|
106
110
|
"valid_roles_are Cream::Role.available"
|
107
111
|
end
|
108
112
|
|
109
|
-
def
|
110
|
-
|
111
|
-
end
|
113
|
+
# def default_user_types_option
|
114
|
+
# default_user_types? ? '--default-user-types' : '--no-default-user-types'
|
115
|
+
# end
|
112
116
|
end
|
113
117
|
end
|
114
118
|
end
|