cream 0.6.4 → 0.7.0
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/.bundle/config +2 -0
- data/Gemfile +4 -3
- data/README.markdown +15 -15
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/cream.gemspec +31 -12
- data/lib/cream/configure/rails.rb +6 -3
- data/lib/generators/cancan/config/config_generator.rb +57 -0
- data/lib/generators/cream/app/app_generator.rb +64 -0
- data/lib/generators/cream/config/config_generator.rb +2 -2
- data/lib/generators/cream/config/modules/app_config.rb +1 -1
- data/lib/generators/cream/config/modules/cancan_config.rb +1 -1
- data/lib/generators/cream/config/modules/devise_users_config.rb +18 -13
- data/lib/generators/cream/config/modules/helper.rb +1 -1
- data/lib/generators/devise/config/config_generator.rb +105 -0
- data/lib/generators/devise/users/users_generator.rb +150 -0
- data/lib/generators/permits/config/config_generator.rb +68 -0
- data/lib/generators/roles/config/config_generator.rb +113 -0
- data/spec/cream/configure/cream_setup_spec.rb +2 -0
- data/spec/generator_spec_helper.rb +4 -4
- data/spec/generators/cancan/config/cancan_config_generator_spec.rb +36 -0
- data/spec/generators/cream/app/app_generator_spec.rb +30 -0
- data/spec/generators/devise/config/devise_config_generator_spec.rb +48 -0
- data/spec/generators/devise/users/devise_users_generator_spec.rb +44 -0
- data/spec/generators/permits/config/permits_config_generator_spec.rb +38 -0
- data/spec/generators/roles/config/roles_config_generator_spec.rb +60 -0
- metadata +30 -11
@@ -0,0 +1,105 @@
|
|
1
|
+
require 'sugar-high/file'
|
2
|
+
require 'sugar-high/module'
|
3
|
+
require 'cream'
|
4
|
+
require 'rails3_artifactor'
|
5
|
+
require 'logging_assist'
|
6
|
+
|
7
|
+
module Devise
|
8
|
+
module Generators
|
9
|
+
class ConfigGenerator < Rails::Generators::Base
|
10
|
+
desc "Configure Devise"
|
11
|
+
|
12
|
+
# ORM to use
|
13
|
+
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
14
|
+
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
15
|
+
|
16
|
+
def configure_devise
|
17
|
+
logger.add_logfile :logfile => logfile if logfile
|
18
|
+
devise_gems
|
19
|
+
devise_install
|
20
|
+
[:orm, :mailer, :protection].each{|m| send(:"#{m}_configure!", orm) }
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
include Rails3::Assist::BasicLogger
|
26
|
+
extend Rails3::Assist::UseMacro
|
27
|
+
|
28
|
+
use_helpers :controller, :app, :special, :file
|
29
|
+
|
30
|
+
def logfile
|
31
|
+
options[:logfile]
|
32
|
+
end
|
33
|
+
|
34
|
+
def orm
|
35
|
+
options[:orm]
|
36
|
+
end
|
37
|
+
|
38
|
+
# rails generate ...
|
39
|
+
def rgen command
|
40
|
+
execute "rails g #{command}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def execute command
|
44
|
+
logger.debug command
|
45
|
+
run command
|
46
|
+
end
|
47
|
+
|
48
|
+
def devise_install
|
49
|
+
logger.debug "initializer_file? #{initializer_file?(:devise)}"
|
50
|
+
return if initializer_file?(:devise)
|
51
|
+
rgen 'devise:install'
|
52
|
+
end
|
53
|
+
|
54
|
+
def bundle_install
|
55
|
+
run "bundle install"
|
56
|
+
end
|
57
|
+
|
58
|
+
def devise_gems
|
59
|
+
logger.debug 'devise_gems'
|
60
|
+
gem 'devise'
|
61
|
+
|
62
|
+
# Devise ORM integration
|
63
|
+
case orm.to_sym
|
64
|
+
when :mongoid
|
65
|
+
say "Please configure Devise for Mongoid as similar to Rails 3 example app: http://github.com/fortuity/rails3-mongoid-devise"
|
66
|
+
when :mongo_mapper
|
67
|
+
gem 'mm-devise'
|
68
|
+
when :data_mapper
|
69
|
+
gem 'dm-devise'
|
70
|
+
when :couch_db
|
71
|
+
gem 'devise_couch'
|
72
|
+
say "Please note that Couch DB does not currently have a Roles implementation. Feel free to provide one."
|
73
|
+
say "Look at Roles DataMapper (roles_data_mapper) for an example ;)"
|
74
|
+
else
|
75
|
+
say "Orm #{orm} is not currently supported by Cream. You are most welcome to provide a Cream adapter for that ORM ;)"
|
76
|
+
end
|
77
|
+
# bundle_install
|
78
|
+
end
|
79
|
+
|
80
|
+
def protection_configure! orm
|
81
|
+
logger.debug "config protection"
|
82
|
+
## Add Devise protection to Application controller:
|
83
|
+
insert_into_controller :application do
|
84
|
+
"before_filter :authenticate_user!"
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
# inside 'config/initializers/devise.rb' change to:
|
89
|
+
# require 'devise/orm/mongo_mapper'
|
90
|
+
def orm_configure! orm
|
91
|
+
return if orm == :active_record
|
92
|
+
logger.debug "config orm: #{orm}"
|
93
|
+
found = File.read(initializer_file(:devise)) =~/devise\/orm\/w+/
|
94
|
+
logger.debug "found?: #{found}"
|
95
|
+
|
96
|
+
File.replace_content_from initializer_file(:devise), :where => /devise\/orm\/\w+/, :with => "devise/orm/#{orm}"
|
97
|
+
end
|
98
|
+
|
99
|
+
def mailer_configure! orm
|
100
|
+
logger.debug "config mailer"
|
101
|
+
insert_application_config "action_mailer.default_url_options = { :host => 'localhost:3000' }"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'sugar-high/file'
|
2
|
+
require 'sugar-high/module'
|
3
|
+
require 'cream'
|
4
|
+
require 'rails3_artifactor'
|
5
|
+
require 'logging_assist'
|
6
|
+
|
7
|
+
module Devise
|
8
|
+
module Generators
|
9
|
+
class UsersGenerator < Rails::Generators::Base
|
10
|
+
desc "Configure Devise with Users"
|
11
|
+
|
12
|
+
# Create Admin user
|
13
|
+
class_option :admin_user, :type => :boolean, :default => false, :desc => "Create admin user"
|
14
|
+
# ORM to use
|
15
|
+
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
16
|
+
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
17
|
+
|
18
|
+
def configure_devise_users
|
19
|
+
logger.add_logfile :logfile => logfile if logfile
|
20
|
+
logger.debug "Configure Devise Users"
|
21
|
+
|
22
|
+
devise_gems
|
23
|
+
devise_default_user if !has_model? :user
|
24
|
+
|
25
|
+
# # if User model is NOT configured with devise strategy
|
26
|
+
insert_devise_strategy :user, :defaults if !has_devise_user? :user
|
27
|
+
|
28
|
+
devise_admin_user if admin_user?
|
29
|
+
end
|
30
|
+
|
31
|
+
protected
|
32
|
+
|
33
|
+
extend Rails3::Assist::UseMacro
|
34
|
+
include Rails3::Assist::BasicLogger
|
35
|
+
|
36
|
+
use_helpers :model
|
37
|
+
|
38
|
+
def logfile
|
39
|
+
options[:logfile]
|
40
|
+
end
|
41
|
+
|
42
|
+
def devise_gems
|
43
|
+
gem 'devise'
|
44
|
+
# bundle_install
|
45
|
+
end
|
46
|
+
|
47
|
+
def bundle_install
|
48
|
+
run "bundle install"
|
49
|
+
end
|
50
|
+
|
51
|
+
def devise_default_user
|
52
|
+
create_devise_model :user
|
53
|
+
end
|
54
|
+
|
55
|
+
def devise_admin_user
|
56
|
+
# if app does NOT have a Admin model
|
57
|
+
create_admin_user if !has_model? :admin
|
58
|
+
end
|
59
|
+
|
60
|
+
def create_admin_user
|
61
|
+
logger.debug 'create_admin_user'
|
62
|
+
create_user_model :admin
|
63
|
+
# remove any current inheritance
|
64
|
+
remove_inheritance :admin
|
65
|
+
|
66
|
+
# insert default devise Admin strategy
|
67
|
+
insert_devise_strategy :admin, :defaults if has_model? :admin
|
68
|
+
|
69
|
+
# and make Admin model inherit from User model
|
70
|
+
inherit_model :user => :admin
|
71
|
+
end
|
72
|
+
|
73
|
+
# Helpers
|
74
|
+
|
75
|
+
def admin_user?
|
76
|
+
options[:admin_user]
|
77
|
+
end
|
78
|
+
|
79
|
+
def user_generator
|
80
|
+
active_record? ? 'devise' : "#{orm}:devise"
|
81
|
+
end
|
82
|
+
|
83
|
+
def active_record?
|
84
|
+
orm == 'active_record'
|
85
|
+
end
|
86
|
+
|
87
|
+
# rails generate ...
|
88
|
+
def rgen command
|
89
|
+
execute "rails g #{command}"
|
90
|
+
end
|
91
|
+
|
92
|
+
def execute command
|
93
|
+
logger.debug command
|
94
|
+
run command
|
95
|
+
end
|
96
|
+
|
97
|
+
def orm
|
98
|
+
options[:orm]
|
99
|
+
end
|
100
|
+
|
101
|
+
def create_user_model user = :user
|
102
|
+
rgen "#{user_generator} #{user}"
|
103
|
+
end
|
104
|
+
|
105
|
+
def devise_users?
|
106
|
+
has_devise_user?(:user) && has_devise_user?(:admin)
|
107
|
+
end
|
108
|
+
|
109
|
+
def has_devise_user? user
|
110
|
+
return true if user == :admin && !admin_user?
|
111
|
+
begin
|
112
|
+
read_model(user) =~ /devise/
|
113
|
+
rescue Exception => e
|
114
|
+
logger.info "Exception for #has_devise_user? #{user}: #{e.message}"
|
115
|
+
false
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
# Must be ORM specific!
|
120
|
+
def create_devise_model user = :user
|
121
|
+
rgen "#{user_generator} #{user}"
|
122
|
+
end
|
123
|
+
|
124
|
+
def remove_inheritance user
|
125
|
+
File.remove_content_from model_file_name(user), :where => /<\s*ActiveRecord::Base/
|
126
|
+
end
|
127
|
+
|
128
|
+
def inherit_model hash
|
129
|
+
superclass = hash.keys.first.to_s.camelize
|
130
|
+
subclass = hash.values.first
|
131
|
+
logger.debug "subclass: #{subclass}"
|
132
|
+
logger.debug "superclass: #{superclass}"
|
133
|
+
File.replace_content_from model_file_name(subclass), :where => /class Admin/, :with => "class Admin < #{superclass}"
|
134
|
+
end
|
135
|
+
|
136
|
+
def insert_devise_strategy model_name, *names
|
137
|
+
names = devise_default_strategies if names.first == :defaults
|
138
|
+
namestr = names.map{|n| ":#{n}"}.join(', ')
|
139
|
+
insert_into_model model_name do
|
140
|
+
"devise #{namestr}"
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def devise_default_strategies
|
145
|
+
[:database_authenticatable, :confirmable, :recoverable, :rememberable, :trackable, :validatable]
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'sugar-high/file'
|
2
|
+
require 'sugar-high/module'
|
3
|
+
require 'cream'
|
4
|
+
require 'rails3_artifactor'
|
5
|
+
require 'logging_assist'
|
6
|
+
|
7
|
+
module Permits
|
8
|
+
module Generators
|
9
|
+
class ConfigGenerator < Rails::Generators::Base
|
10
|
+
desc "Configure Permits"
|
11
|
+
|
12
|
+
# ORM to use
|
13
|
+
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
14
|
+
class_option :roles, :type => :array, :default => ['guest', 'admin'], :desc => "Roles for permits"
|
15
|
+
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
16
|
+
|
17
|
+
def configure_permits
|
18
|
+
logger.add_logfile :logfile => logfile if logfile
|
19
|
+
logger.debug "Configure Permits"
|
20
|
+
|
21
|
+
permits_gems
|
22
|
+
permits_initializer
|
23
|
+
|
24
|
+
# Run permits generator to generate permit for each role
|
25
|
+
rgen "permits --roles #{roles}"
|
26
|
+
end
|
27
|
+
|
28
|
+
protected
|
29
|
+
|
30
|
+
include Rails3::Assist::BasicLogger
|
31
|
+
extend Rails3::Assist::UseMacro
|
32
|
+
|
33
|
+
use_helpers :app, :file, :special
|
34
|
+
|
35
|
+
# rails generate ...
|
36
|
+
def rgen command
|
37
|
+
execute "rails g #{command}"
|
38
|
+
end
|
39
|
+
|
40
|
+
def execute command
|
41
|
+
logger.debug command
|
42
|
+
run command
|
43
|
+
end
|
44
|
+
|
45
|
+
def logfile
|
46
|
+
options[:logfile]
|
47
|
+
end
|
48
|
+
|
49
|
+
def roles
|
50
|
+
options[:roles]
|
51
|
+
end
|
52
|
+
|
53
|
+
def orm
|
54
|
+
options[:orm]
|
55
|
+
end
|
56
|
+
|
57
|
+
def permits_gems
|
58
|
+
gem 'cancan-permits'
|
59
|
+
end
|
60
|
+
|
61
|
+
def permits_initializer
|
62
|
+
create_initializer :permits do
|
63
|
+
"Permits::Ability.orm = :#{options[:orm]}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'sugar-high/file'
|
2
|
+
require 'sugar-high/module'
|
3
|
+
require 'cream'
|
4
|
+
require 'rails3_artifactor'
|
5
|
+
require 'logging_assist'
|
6
|
+
|
7
|
+
module Roles
|
8
|
+
module Generators
|
9
|
+
class ConfigGenerator < Rails::Generators::Base
|
10
|
+
desc "Configure Roles"
|
11
|
+
|
12
|
+
# ORM to use
|
13
|
+
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
14
|
+
class_option :strategy, :type => :string, :default => 'role_string', :desc => "Roles strategy to use"
|
15
|
+
class_option :roles, :type => :array, :default => ['guest', 'admin'], :desc => "Valid roles to use"
|
16
|
+
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
17
|
+
class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
|
18
|
+
|
19
|
+
def configure_roles
|
20
|
+
logger.add_logfile :logfile => logfile if logfile
|
21
|
+
roles_gems
|
22
|
+
create_roles
|
23
|
+
set_valid_roles_cream
|
24
|
+
use_roles_strategy
|
25
|
+
end
|
26
|
+
|
27
|
+
protected
|
28
|
+
|
29
|
+
include Rails3::Assist::BasicLogger
|
30
|
+
extend Rails3::Assist::UseMacro
|
31
|
+
|
32
|
+
use_helpers :model, :file
|
33
|
+
|
34
|
+
def logfile
|
35
|
+
options[:logfile]
|
36
|
+
end
|
37
|
+
|
38
|
+
# rails generate ...
|
39
|
+
def rgen command
|
40
|
+
execute "rails g #{command}"
|
41
|
+
end
|
42
|
+
|
43
|
+
def execute command
|
44
|
+
logger.debug command
|
45
|
+
run command
|
46
|
+
end
|
47
|
+
|
48
|
+
def orm
|
49
|
+
options[:orm]
|
50
|
+
end
|
51
|
+
|
52
|
+
def strategy
|
53
|
+
options[:strategy]
|
54
|
+
end
|
55
|
+
|
56
|
+
def roles
|
57
|
+
options[:roles].join(' ')
|
58
|
+
end
|
59
|
+
|
60
|
+
def default_roles?
|
61
|
+
options[:default_roles]
|
62
|
+
end
|
63
|
+
|
64
|
+
def roles_gems
|
65
|
+
gem "roles_#{orm}"
|
66
|
+
# bundle_install
|
67
|
+
end
|
68
|
+
|
69
|
+
def bundle_install
|
70
|
+
run "bundle install"
|
71
|
+
end
|
72
|
+
|
73
|
+
def roles_generator
|
74
|
+
"#{orm}:roles"
|
75
|
+
end
|
76
|
+
|
77
|
+
def create_roles
|
78
|
+
rgen "#{roles_generator} --strategy #{strategy} --roles #{roles} #{default_roles}"
|
79
|
+
end
|
80
|
+
|
81
|
+
def set_valid_roles_cream
|
82
|
+
user_exist?
|
83
|
+
if initializer_file? :cream
|
84
|
+
if read_model(:user) =~ /valid_roles_are/
|
85
|
+
replace_in_model_file :user, :where => /valid_roles_are\s+[(.*)]/, :with => 'valid_roles_are Cream.roles'
|
86
|
+
else
|
87
|
+
insert_into_model :user do
|
88
|
+
"valid_roles_are Cream.roles"
|
89
|
+
end
|
90
|
+
end
|
91
|
+
else
|
92
|
+
say "Missing initializer file for cream. Please run Cream config generator to create this initializer"
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def user_exist?
|
97
|
+
raise "User model missing. Please create a User model before running this generator" if !model_file?(:user)
|
98
|
+
end
|
99
|
+
|
100
|
+
def use_roles_strategy
|
101
|
+
user_exist?
|
102
|
+
|
103
|
+
unless read_model(:user) =~ /use_roles_strategy/
|
104
|
+
inject_into_file model_file(:user), "use_roles_strategy :admin_flag\n\n", :before => "class"
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def default_roles
|
109
|
+
default_roles? ? '--default-roles' : '--no-default-roles'
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|