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.
@@ -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 :admin_user, :type => :boolean, :default => false, :desc => "Create admin user"
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, :type => :string, :default => 'active_record', :desc => "ORM to use"
16
- class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
17
- class_option :gems, :type => :boolean, :default => false, :desc => "Add gems to gemfile?"
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
- devise_default_user if !has_model? :user
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 :user, :defaults if !has_devise_user? :user
41
+ insert_devise_strategy user_class, :defaults if !has_devise_user? user_class
28
42
 
29
- devise_admin_user if admin_user?
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
- use_helpers :model
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 gems?
40
- options[:gems]
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
- def logfile
44
- options[:logfile]
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 devise_default_user
57
- create_devise_model :user
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
- create_admin_user if !has_model? :admin
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
- def user_generator
85
- active_record? ? 'devise' : "#{orm}:devise"
86
- end
87
-
88
- def active_record?
89
- orm == 'active_record'
90
- end
114
+ private
91
115
 
92
- # rails generate ...
93
- def rgen command
94
- execute "rails g #{command}"
95
- end
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
- def execute command
98
- logger.debug command
99
- run command
100
- end
121
+ routes.rb
122
+ match "/editors/sign_up" => "user_registrations#new_editor", :as => :editor_signup
101
123
 
102
- def orm
103
- options[:orm]
104
- end
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
- def has_devise_user? user
115
- return true if user == :admin && !admin_user?
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, :type => :string, :default => 'active_record', :desc => "ORM to use"
14
- class_option :roles, :type => :array, :default => ['guest', 'admin'], :desc => "Roles for permits"
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, :desc => "Add gems to gemfile?"
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
- self.class.use_orm :"#{orm}"
25
+ set_orm
25
26
 
26
27
  roles_gems if gems?
28
+
29
+ # run the orm specific Roles generator
27
30
  create_roles
28
- use_roles_strategy
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 #{roles} #{default_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
- user_exist?
58
+ user_exist_check
59
+
97
60
  if initializer_file? :cream
98
- if read_model(:user) =~ /valid_roles_are/
99
- replace_in_model :user, :where => /valid_roles_are\s+[(.*)]/, :with => 'valid_roles_are Cream.roles'
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 :user do
102
- "valid_roles_are Cream::Role.available"
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
- def user_exist?
111
- raise "User model missing. Please create a User model before running this generator" if !model_file?(:user)
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 use_roles_strategy
115
- # user_exist?
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 default_roles
87
+ def default_roles_option
123
88
  default_roles? ? '--default-roles' : '--no-default-roles'
124
89
  end
125
90
  end