cream 0.6.1 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/cream.gemspec +13 -4
- data/lib/cream.rb +1 -0
- data/lib/cream/configure.rb +10 -1
- data/lib/cream/configure/rails.rb +10 -1
- data/lib/cream/controller/ability.rb +3 -2
- data/lib/cream/rails/config.rb +11 -0
- data/lib/cream/role.rb +10 -1
- data/lib/generators/cream/config/DESIGN NOTES.markdown +18 -0
- data/lib/generators/cream/config/config_generator.rb +13 -7
- data/lib/generators/cream/config/modules/app_config.rb +48 -0
- data/lib/generators/cream/config/modules/cancan_config.rb +8 -3
- data/lib/generators/cream/config/modules/cream_config.rb +17 -4
- data/lib/generators/cream/config/modules/devise_config.rb +24 -74
- data/lib/generators/cream/config/modules/devise_users_config.rb +104 -0
- data/lib/generators/cream/config/modules/helper.rb +25 -3
- data/lib/generators/cream/config/modules/permits_config.rb +1 -1
- data/lib/generators/cream/config/modules/roles_config.rb +29 -5
- data/spec/cream/configure/cream_setup_spec.rb +5 -0
- data/spec/cream/configure/rails_custom_roles_spec.rb +30 -0
- data/spec/cream/configure/{rails_spec.rb → rails_role_spec.rb} +0 -0
- data/spec/cream/configure/rails_user_roles_spec.rb +34 -0
- metadata +14 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.6.
|
1
|
+
0.6.3
|
data/cream.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{cream}
|
8
|
-
s.version = "0.6.
|
8
|
+
s.version = "0.6.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-10-05}
|
13
13
|
s.description = %q{Provides assistance for setting up Session, Role and Permission systems for a Rails 3 app. Support for multiple ORMs}
|
14
14
|
s.email = %q{kmandrup@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -45,15 +45,18 @@ Gem::Specification.new do |s|
|
|
45
45
|
"lib/cream/helper/host.rb",
|
46
46
|
"lib/cream/helper/role.rb",
|
47
47
|
"lib/cream/namespaces.rb",
|
48
|
+
"lib/cream/rails/config.rb",
|
48
49
|
"lib/cream/role.rb",
|
49
50
|
"lib/cream/view/host_area.rb",
|
50
51
|
"lib/cream/view/role_area.rb",
|
51
52
|
"lib/cream/view/user_action_menu.rb",
|
52
53
|
"lib/generators/cream/config/DESIGN NOTES.markdown",
|
53
54
|
"lib/generators/cream/config/config_generator.rb",
|
55
|
+
"lib/generators/cream/config/modules/app_config.rb",
|
54
56
|
"lib/generators/cream/config/modules/cancan_config.rb",
|
55
57
|
"lib/generators/cream/config/modules/cream_config.rb",
|
56
58
|
"lib/generators/cream/config/modules/devise_config.rb",
|
59
|
+
"lib/generators/cream/config/modules/devise_users_config.rb",
|
57
60
|
"lib/generators/cream/config/modules/helper.rb",
|
58
61
|
"lib/generators/cream/config/modules/permits_config.rb",
|
59
62
|
"lib/generators/cream/config/modules/roles_config.rb",
|
@@ -63,7 +66,10 @@ Gem::Specification.new do |s|
|
|
63
66
|
"log/development.log",
|
64
67
|
"sandbox/test.rb",
|
65
68
|
"spec/configure_helper.rb",
|
66
|
-
"spec/cream/configure/
|
69
|
+
"spec/cream/configure/cream_setup_spec.rb",
|
70
|
+
"spec/cream/configure/rails_custom_roles_spec.rb",
|
71
|
+
"spec/cream/configure/rails_role_spec.rb",
|
72
|
+
"spec/cream/configure/rails_user_roles_spec.rb",
|
67
73
|
"spec/cream/helper/host_spec.rb",
|
68
74
|
"spec/cream/helper/role_spec.rb",
|
69
75
|
"spec/cream/view/host_area_spec.rb",
|
@@ -94,7 +100,10 @@ Gem::Specification.new do |s|
|
|
94
100
|
s.summary = %q{Integrates Devise, Roles and CanCan with Permits for a Rails 3 app}
|
95
101
|
s.test_files = [
|
96
102
|
"spec/configure_helper.rb",
|
97
|
-
"spec/cream/configure/
|
103
|
+
"spec/cream/configure/cream_setup_spec.rb",
|
104
|
+
"spec/cream/configure/rails_custom_roles_spec.rb",
|
105
|
+
"spec/cream/configure/rails_role_spec.rb",
|
106
|
+
"spec/cream/configure/rails_user_roles_spec.rb",
|
98
107
|
"spec/cream/helper/host_spec.rb",
|
99
108
|
"spec/cream/helper/role_spec.rb",
|
100
109
|
"spec/cream/view/host_area_spec.rb",
|
data/lib/cream.rb
CHANGED
@@ -17,6 +17,7 @@ require 'cream/role'
|
|
17
17
|
require_all File.dirname(__FILE__) + '/cream/controller'
|
18
18
|
require_all File.dirname(__FILE__) + '/cream/helper'
|
19
19
|
require_all File.dirname(__FILE__) + '/cream/view'
|
20
|
+
require_all File.dirname(__FILE__) + '/cream/rails'
|
20
21
|
|
21
22
|
require 'cream/configure'
|
22
23
|
|
data/lib/cream/configure.rb
CHANGED
@@ -18,5 +18,14 @@ Rails3::Plugin::Extender.new do
|
|
18
18
|
|
19
19
|
after :initialize do
|
20
20
|
require_all File.dirname(__FILE__) + '/after_init'
|
21
|
-
|
21
|
+
|
22
|
+
Rails3.with_configuration do
|
23
|
+
autoload_paths += %W(#{Rails.root}/app/permits)
|
24
|
+
end
|
25
|
+
|
26
|
+
# set cream config object
|
27
|
+
# Rails3.with_configuration do
|
28
|
+
# cream = Cream::Rails::Config.new :roles => Cream::Role.available
|
29
|
+
# end
|
30
|
+
end
|
22
31
|
end
|
data/lib/cream/role.rb
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
module Cream
|
2
|
+
class << self
|
3
|
+
attr_accessor :available_roles
|
4
|
+
end
|
5
|
+
|
2
6
|
module Role
|
3
7
|
def self.available
|
4
|
-
|
8
|
+
return Cream.available_roles if Cream.available_roles.present?
|
9
|
+
if defined? ::Role
|
10
|
+
::Role.all.map(&:name).to_symbols
|
11
|
+
else
|
12
|
+
User.roles.to_symbols
|
13
|
+
end
|
5
14
|
end
|
6
15
|
end
|
7
16
|
end
|
@@ -11,6 +11,24 @@ Each of the following should be a module in its own right!
|
|
11
11
|
* Include modules depending on options
|
12
12
|
* For each module call the config_[module_name] method, which is responsible for configuring that module!
|
13
13
|
|
14
|
+
## App config
|
15
|
+
|
16
|
+
in config/application.rb
|
17
|
+
|
18
|
+
If not using Active Record, substitute
|
19
|
+
<pre>
|
20
|
+
require 'rails/all'
|
21
|
+
</pre>
|
22
|
+
|
23
|
+
|
24
|
+
With
|
25
|
+
<pre>
|
26
|
+
require "action_controller/railtie"
|
27
|
+
require "action_mailer/railtie"
|
28
|
+
require "active_resource/railtie"
|
29
|
+
require "rails/test_unit/railtie"
|
30
|
+
</pre>
|
31
|
+
|
14
32
|
## Devise Configuration
|
15
33
|
|
16
34
|
Gemfile
|
@@ -20,10 +20,10 @@ module Cream::Generators
|
|
20
20
|
source_root File.dirname(__FILE__)
|
21
21
|
|
22
22
|
# Role Strategy
|
23
|
-
class_option :strategy, :type => :string, :default => 'role_string', :desc => "Role strategy to use"
|
23
|
+
class_option :strategy, :type => :string, :default => 'role_string', :desc => "Role strategy to use"
|
24
24
|
|
25
25
|
# Create Admin user
|
26
|
-
class_option :admin_user, :type => :boolean, :default => false, :desc => "Create admin user"
|
26
|
+
class_option :admin_user, :type => :boolean, :default => false, :desc => "Create admin user"
|
27
27
|
|
28
28
|
# Roles
|
29
29
|
class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
|
@@ -42,20 +42,25 @@ module Cream::Generators
|
|
42
42
|
configure_gems
|
43
43
|
|
44
44
|
MODULES.each do |name|
|
45
|
-
|
45
|
+
method = "configure_#{name}"
|
46
|
+
send method if respond_to?(method)
|
46
47
|
end
|
47
48
|
end
|
48
49
|
|
49
50
|
# -----------------
|
50
51
|
protected
|
51
52
|
|
52
|
-
|
53
|
+
# configure which helper modules (from /modules subfolder) to include in this Generator!!!
|
54
|
+
|
55
|
+
MODULES = [:app, :devise, :devise_users, :cancan, :roles, :permits, :cream]
|
53
56
|
|
54
|
-
includes Cream::Generators::Config, :helper, MODULES
|
57
|
+
includes Cream::Generators::Config, :helper, MODULES
|
55
58
|
|
56
59
|
include Rails3::Assist::BasicLogger
|
57
60
|
|
58
|
-
|
61
|
+
# using helpers from rails3_artifactor gem.
|
62
|
+
# A macro from rails3_assist loads appropriate modules into the class and makes various Rails 3 "mutation helper" methods available
|
63
|
+
use_helpers :model, :controller, :permit, :application
|
59
64
|
|
60
65
|
def configure_logger
|
61
66
|
logger.add_logfile :logfile => logfile
|
@@ -64,7 +69,8 @@ module Cream::Generators
|
|
64
69
|
|
65
70
|
def configure_gems
|
66
71
|
MODULES.each do |name|
|
67
|
-
|
72
|
+
method = "#{name}_gems"
|
73
|
+
send method if respond_to?(method)
|
68
74
|
end
|
69
75
|
run "bundle install"
|
70
76
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Cream::Generators
|
2
|
+
module Config
|
3
|
+
module CanCan
|
4
|
+
def configure_application
|
5
|
+
app_orm
|
6
|
+
app_routes
|
7
|
+
app_layout
|
8
|
+
end
|
9
|
+
|
10
|
+
def app_orm
|
11
|
+
return if orm == 'active_record'
|
12
|
+
File.replace_content_from config_file(:application), :where => "require 'rails/all'" do
|
13
|
+
%q{
|
14
|
+
require "action_controller/railtie"
|
15
|
+
require "action_mailer/railtie"
|
16
|
+
require "active_resource/railtie"
|
17
|
+
require "rails/test_unit/railtie"
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
21
|
+
def app_routes
|
22
|
+
routes = read_from config_file(:routes)
|
23
|
+
# if no :welcome controller
|
24
|
+
if !(routes =~ /root\s+:/)
|
25
|
+
# create one with an 'index' view.
|
26
|
+
insert_into config_file(:routes) :after => 'do', :content => 'root :to => "welcome#index"'
|
27
|
+
execute "rails g controller Welcome index"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
# in 'app/views/layouts/application.html.erb'
|
32
|
+
# insert special flash msg displayers after opening <body> element
|
33
|
+
def app_layout
|
34
|
+
layout_content = read_view :application, :folder => 'layouts' #, :type => :erb
|
35
|
+
|
36
|
+
[:alert, :notice].each{|name| insert_flash_displayer name}
|
37
|
+
end
|
38
|
+
|
39
|
+
def insert_flash_displayer name
|
40
|
+
return if layout_content =~ /<%=\s+#{name}\s+%>/
|
41
|
+
insert_into_view :application, :folder => 'layouts', :after => '<body>' do
|
42
|
+
'<p class="alert"><%= alert %></p>'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
@@ -1,13 +1,18 @@
|
|
1
1
|
module Cream::Generators
|
2
2
|
module Config
|
3
|
-
module CanCan
|
4
|
-
def
|
3
|
+
module CanCan
|
4
|
+
def cancan_configure
|
5
|
+
configure_cancan_gems
|
6
|
+
cancan_exception_handling
|
7
|
+
end
|
8
|
+
|
9
|
+
def cancan_gems
|
5
10
|
gem 'cancan'
|
6
11
|
gem 'cancan-rest-links'
|
7
12
|
end
|
8
13
|
|
9
14
|
# CanCan access denied exception handling
|
10
|
-
def
|
15
|
+
def cancan_exception_handling
|
11
16
|
insert_into_controller :application, :after => "ActionController::Base\n" do
|
12
17
|
%{
|
13
18
|
rescue_from CanCan::AccessDenied do |exception|
|
@@ -1,17 +1,30 @@
|
|
1
1
|
module Cream::Generators
|
2
2
|
module Config
|
3
|
-
module Cream
|
3
|
+
module Cream
|
4
|
+
def cream_configure
|
5
|
+
cream_gems
|
6
|
+
cream_initializer
|
7
|
+
cream_locale
|
8
|
+
end
|
9
|
+
|
4
10
|
def cream_gems
|
5
11
|
gem_name = ORM_MAP[orm]
|
6
12
|
gem gem_name if gem_name
|
7
13
|
|
8
|
-
gem 'devise'
|
9
|
-
gem 'cancan'
|
10
14
|
gem 'cream'
|
11
15
|
run "bundle install"
|
12
16
|
end
|
17
|
+
|
18
|
+
def cream_initializer
|
19
|
+
create_initializer_file :cream do
|
20
|
+
%Q{
|
21
|
+
Cream.setup do |config|
|
22
|
+
config.roles = #{roles.inspect}
|
23
|
+
end
|
24
|
+
}
|
25
|
+
end
|
13
26
|
|
14
|
-
def
|
27
|
+
def cream_locale
|
15
28
|
src = File.expand_path "config/locales/en.yml".path.up(2)
|
16
29
|
# src = "config/locales/en.yml"
|
17
30
|
logger.debug "configure_locale, copy from: #{src}"
|
@@ -2,30 +2,13 @@ module Cream::Generators
|
|
2
2
|
module Config
|
3
3
|
module Devise
|
4
4
|
|
5
|
-
def configure_devise
|
6
|
-
|
7
|
-
|
8
|
-
create_devise_model :user
|
9
|
-
end
|
10
|
-
|
11
|
-
# if User model is NOT configured with devise strategy
|
12
|
-
if !has_devise_strategy? :user
|
13
|
-
insert_devise_strategy :user, :defaults
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
configure_admin_user if configure_admin_user?
|
5
|
+
def configure_devise
|
6
|
+
initialize!
|
7
|
+
[Orm, Mailer, Protection].each{|m| m.configure!}
|
18
8
|
end
|
19
9
|
|
20
|
-
def
|
21
|
-
|
22
|
-
if !has_model? :admin
|
23
|
-
create_admin_user
|
24
|
-
end
|
25
|
-
if has_model? :admin
|
26
|
-
# insert default devise Admin strategy
|
27
|
-
insert_devise_strategy :user, :defaults
|
28
|
-
end
|
10
|
+
def initialize!
|
11
|
+
rgen 'devise_install'
|
29
12
|
end
|
30
13
|
|
31
14
|
def devise_gems
|
@@ -43,66 +26,33 @@ module Cream::Generators
|
|
43
26
|
gem 'devise_couch'
|
44
27
|
say "Please note that Couch DB does not currently have a Roles implementation. Feel free to provide one."
|
45
28
|
say "Look at Roles DataMapper (roles_data_mapper) for an example ;)"
|
29
|
+
else
|
30
|
+
say "Orm #{orm} is not currently supported by Cream. You are most welcome to provide a Cream adapter for that ORM ;)"
|
46
31
|
end
|
47
32
|
end
|
48
|
-
|
49
|
-
def init_devise
|
50
|
-
execute 'devise_install'
|
51
|
-
end
|
52
33
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
end
|
61
|
-
|
62
|
-
def notify_create_users
|
63
|
-
logger.debug 'notify_create_users'
|
64
|
-
say "You must first run devise generators:"
|
65
|
-
say "rails g devise User"
|
66
|
-
say "rails g devise Admin" if admin_user?
|
34
|
+
module Protection
|
35
|
+
def self.configure!
|
36
|
+
## Add Devise protection to Application controller:
|
37
|
+
insert_into_controller :application do
|
38
|
+
"before_filter :authenticate_user!"
|
39
|
+
end
|
40
|
+
end
|
67
41
|
end
|
68
42
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
inherit_model :user => :admin
|
76
|
-
end
|
77
|
-
|
78
|
-
def remove_inheritance user
|
79
|
-
File.remove_from model_file user, :content => /<\s*ActiveRecord::Base/
|
80
|
-
end
|
81
|
-
|
82
|
-
def inherit_model hash
|
83
|
-
subclass = hash.keys.first
|
84
|
-
superclass = hash.values.first.to_s.camelize
|
85
|
-
File.replace_content_from model_file subclass, :where => /class Admin/, :with => "class Admin < #{superclass}"
|
86
|
-
end
|
87
|
-
|
88
|
-
# Must be ORM specific!
|
89
|
-
def create_devise_model user
|
90
|
-
execute "rails g devise #{user}"
|
43
|
+
module Orm
|
44
|
+
# inside 'config/initializers/devise.rb' change to:
|
45
|
+
# require 'devise/orm/mongo_mapper'
|
46
|
+
def self.configure!
|
47
|
+
File.replace_content_from initializer_file(:devise), :where => /devise\/orm\/w+/, :content => 'devise/orm/mongo_mapper'
|
48
|
+
end
|
91
49
|
end
|
92
50
|
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
def has_user? user
|
98
|
-
return true if user == :admin && !admin_user?
|
99
|
-
begin
|
100
|
-
read_model(user) =~ /devise/
|
101
|
-
rescue Exception => e
|
102
|
-
logger.info "Exception for has_user? #{user}: #{e.message}"
|
103
|
-
false
|
51
|
+
module Mailer
|
52
|
+
def self.configure!
|
53
|
+
insert_application_config "action_mailer.default_url_options = { :host => 'localhost:3000' }"
|
104
54
|
end
|
105
|
-
end
|
55
|
+
end
|
106
56
|
end
|
107
57
|
end
|
108
58
|
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
module Cream::Generators
|
2
|
+
module Config
|
3
|
+
module DeviseUsers
|
4
|
+
attr_accessor :user_helper
|
5
|
+
|
6
|
+
def configure_devise_users
|
7
|
+
@user_helper = UserHelper.new user_generator
|
8
|
+
|
9
|
+
devise_default_user if !has_model? :user
|
10
|
+
|
11
|
+
# if User model is NOT configured with devise strategy
|
12
|
+
Strategy.insert_devise_strategy :user, :defaults if !has_devise_user? :user
|
13
|
+
|
14
|
+
devise_admin_user if admin_user?
|
15
|
+
end
|
16
|
+
|
17
|
+
def devise_default_user
|
18
|
+
user_helper.create_devise_model :user
|
19
|
+
end
|
20
|
+
|
21
|
+
def devise_admin_user
|
22
|
+
# if app does NOT have a Admin model
|
23
|
+
user_helper.create_admin_user if !has_model? :admin
|
24
|
+
|
25
|
+
# insert default devise Admin strategy
|
26
|
+
Strategy.insert_devise_strategy :admin, :defaults if has_model? :admin
|
27
|
+
end
|
28
|
+
|
29
|
+
def create_admin_user
|
30
|
+
logger.debug 'create_admin_user'
|
31
|
+
user_helper.create_user_model :admin
|
32
|
+
# remove any current inheritance
|
33
|
+
Inherit.remove_inheritance :admin
|
34
|
+
# and make Admin model inherit from User model
|
35
|
+
Inherit.inherit_model :user => :admin
|
36
|
+
end
|
37
|
+
|
38
|
+
# Helpers
|
39
|
+
|
40
|
+
class UserHelper
|
41
|
+
attr_accessor :user_generator
|
42
|
+
|
43
|
+
def initialize user_gen
|
44
|
+
@user_generator = user_gen
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_user_model user = :user
|
48
|
+
rgen "#{user_generator} model #{user}"
|
49
|
+
end
|
50
|
+
|
51
|
+
def devise_users?
|
52
|
+
has_user?(:user) && has_user?(:admin)
|
53
|
+
end
|
54
|
+
|
55
|
+
def has_devise_user? user
|
56
|
+
return true if user == :admin && !admin_user?
|
57
|
+
begin
|
58
|
+
read_model(user) =~ /devise/
|
59
|
+
rescue Exception => e
|
60
|
+
logger.info "Exception for has_user? #{user}: #{e.message}"
|
61
|
+
false
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Must be ORM specific!
|
66
|
+
def create_devise_model user = :user
|
67
|
+
rgen "#{user_generator} #{user}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
module Inherit
|
72
|
+
def self.remove_inheritance user
|
73
|
+
File.remove_from model_file user, :content => /<\s*ActiveRecord::Base/
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.inherit_model hash
|
77
|
+
subclass = hash.keys.first
|
78
|
+
superclass = hash.values.first.to_s.camelize
|
79
|
+
File.replace_content_from model_file subclass, :where => /class Admin/, :with => "class Admin < #{superclass}"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
module Strategy
|
84
|
+
self << class
|
85
|
+
extend Rails3::Assist::UseMacro
|
86
|
+
use_helpers :model
|
87
|
+
|
88
|
+
def insert_devise_strategy model_name, *names
|
89
|
+
names = devise_default_strategies if names.first == :defaults
|
90
|
+
insert_into_model model_name do
|
91
|
+
"devise #{*names}"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.devise_default_strategies
|
96
|
+
[:database_authenticatable, :confirmable, :recoverable, :rememberable, :trackable, :validatable]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
@@ -8,6 +8,11 @@ module Cream::Generators
|
|
8
8
|
:mongoid => 'rails3-mongoid-devise'
|
9
9
|
}
|
10
10
|
|
11
|
+
# rails generate ...
|
12
|
+
def rgen command
|
13
|
+
execute "rails g #{command}"
|
14
|
+
end
|
15
|
+
|
11
16
|
def execute command
|
12
17
|
logger.debug command
|
13
18
|
run command
|
@@ -21,18 +26,35 @@ module Cream::Generators
|
|
21
26
|
options[:logfile]
|
22
27
|
end
|
23
28
|
|
24
|
-
def
|
25
|
-
|
29
|
+
def users
|
30
|
+
extra_users = admin_user? ? :admin : nil
|
31
|
+
@users ||= ([:user] + extra_users).compact
|
26
32
|
end
|
27
33
|
|
28
34
|
def roles
|
29
|
-
options[:roles].join(' ')
|
35
|
+
@roles ||= options[:roles].join(' ')
|
36
|
+
end
|
37
|
+
|
38
|
+
def roles_generator
|
39
|
+
"#{orm}:roles"
|
40
|
+
end
|
41
|
+
|
42
|
+
def user_generator
|
43
|
+
active_record? ? "#{orm}:devise" : 'devise'
|
44
|
+
end
|
45
|
+
|
46
|
+
def active_record?
|
47
|
+
orm == 'active_record'
|
30
48
|
end
|
31
49
|
|
32
50
|
def orm
|
33
51
|
options[:orm]
|
34
52
|
end
|
35
53
|
|
54
|
+
def default_roles?
|
55
|
+
options[:default_roles]
|
56
|
+
end
|
57
|
+
|
36
58
|
def roles_config?
|
37
59
|
options[:roles_config]
|
38
60
|
end
|
@@ -1,14 +1,38 @@
|
|
1
1
|
module Cream::Generators
|
2
2
|
module Config
|
3
3
|
module Roles
|
4
|
-
def
|
4
|
+
def configure_roles
|
5
|
+
create_roles
|
6
|
+
set_valid_roles_cream
|
7
|
+
use_roles_strategy
|
8
|
+
end
|
9
|
+
|
10
|
+
def roles_gems
|
5
11
|
gem "roles_#{orm}"
|
6
12
|
end
|
7
13
|
|
8
|
-
def
|
9
|
-
|
10
|
-
|
11
|
-
|
14
|
+
def create_roles
|
15
|
+
rgen "#{roles_generator} --strategy #{strategy} --roles #{roles} #{default_roles}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def set_valid_roles_cream
|
19
|
+
if initializer_file? :cream
|
20
|
+
replace_in_model_file :user, :where => /valid_roles_are\s+[(.*)]/, :with => 'valid_roles_are Cream.roles'
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def use_roles_strategy
|
25
|
+
unless read_model_file(:user) =~ /use_roles_strategy/
|
26
|
+
insert_into_model :user do
|
27
|
+
"use_roles_strategy :admin_flag"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def default_roles
|
35
|
+
default_roles? ? '--default-roles' : '--no-default-roles'
|
12
36
|
end
|
13
37
|
end
|
14
38
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'configure_helper'
|
2
|
+
|
3
|
+
Cream.available_roles = [:guest, :admin]
|
4
|
+
|
5
|
+
describe "Rails extension" do
|
6
|
+
describe 'Extensions' do
|
7
|
+
it "should extend Action View with Roles helper instance_methods and specific role methods" do
|
8
|
+
after_init :view do
|
9
|
+
:view.should be_extended_with Cream::View, :role, :host, :user_action_menu
|
10
|
+
:view.should be_extended_with Cream::Helper, :role, :auth_label
|
11
|
+
end
|
12
|
+
|
13
|
+
init_app_railties :minimal, :view
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should extend Action Controller" do
|
17
|
+
after_init :controller do
|
18
|
+
:controller.should be_extended_with Cream, :role
|
19
|
+
:controller.should be_extended_with Cream::Controller, :ability
|
20
|
+
:controller.should be_extended_with Cream::Helper, :role, :host, :auth_label
|
21
|
+
end
|
22
|
+
|
23
|
+
init_app_railties :minimal, :view
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should work with safe_concat" do
|
27
|
+
"abc".html_safe.should == "abc"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
File without changes
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'configure_helper'
|
2
|
+
|
3
|
+
class User
|
4
|
+
def self.roles
|
5
|
+
[:guest, :admin]
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
describe "Rails extension" do
|
10
|
+
describe 'Extensions' do
|
11
|
+
it "should extend Action View with Roles helper instance_methods and specific role methods" do
|
12
|
+
after_init :view do
|
13
|
+
:view.should be_extended_with Cream::View, :role, :host, :user_action_menu
|
14
|
+
:view.should be_extended_with Cream::Helper, :role, :auth_label
|
15
|
+
end
|
16
|
+
|
17
|
+
init_app_railties :minimal, :view
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should extend Action Controller" do
|
21
|
+
after_init :controller do
|
22
|
+
:controller.should be_extended_with Cream, :role
|
23
|
+
:controller.should be_extended_with Cream::Controller, :ability
|
24
|
+
:controller.should be_extended_with Cream::Helper, :role, :host, :auth_label
|
25
|
+
end
|
26
|
+
|
27
|
+
init_app_railties :minimal, :view
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should work with safe_concat" do
|
31
|
+
"abc".html_safe.should == "abc"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 6
|
8
|
-
-
|
9
|
-
version: 0.6.
|
8
|
+
- 3
|
9
|
+
version: 0.6.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kristian Mandrup
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-10-05 00:00:00 +02:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -282,15 +282,18 @@ files:
|
|
282
282
|
- lib/cream/helper/host.rb
|
283
283
|
- lib/cream/helper/role.rb
|
284
284
|
- lib/cream/namespaces.rb
|
285
|
+
- lib/cream/rails/config.rb
|
285
286
|
- lib/cream/role.rb
|
286
287
|
- lib/cream/view/host_area.rb
|
287
288
|
- lib/cream/view/role_area.rb
|
288
289
|
- lib/cream/view/user_action_menu.rb
|
289
290
|
- lib/generators/cream/config/DESIGN NOTES.markdown
|
290
291
|
- lib/generators/cream/config/config_generator.rb
|
292
|
+
- lib/generators/cream/config/modules/app_config.rb
|
291
293
|
- lib/generators/cream/config/modules/cancan_config.rb
|
292
294
|
- lib/generators/cream/config/modules/cream_config.rb
|
293
295
|
- lib/generators/cream/config/modules/devise_config.rb
|
296
|
+
- lib/generators/cream/config/modules/devise_users_config.rb
|
294
297
|
- lib/generators/cream/config/modules/helper.rb
|
295
298
|
- lib/generators/cream/config/modules/permits_config.rb
|
296
299
|
- lib/generators/cream/config/modules/roles_config.rb
|
@@ -300,7 +303,10 @@ files:
|
|
300
303
|
- log/development.log
|
301
304
|
- sandbox/test.rb
|
302
305
|
- spec/configure_helper.rb
|
303
|
-
- spec/cream/configure/
|
306
|
+
- spec/cream/configure/cream_setup_spec.rb
|
307
|
+
- spec/cream/configure/rails_custom_roles_spec.rb
|
308
|
+
- spec/cream/configure/rails_role_spec.rb
|
309
|
+
- spec/cream/configure/rails_user_roles_spec.rb
|
304
310
|
- spec/cream/helper/host_spec.rb
|
305
311
|
- spec/cream/helper/role_spec.rb
|
306
312
|
- spec/cream/view/host_area_spec.rb
|
@@ -357,7 +363,10 @@ specification_version: 3
|
|
357
363
|
summary: Integrates Devise, Roles and CanCan with Permits for a Rails 3 app
|
358
364
|
test_files:
|
359
365
|
- spec/configure_helper.rb
|
360
|
-
- spec/cream/configure/
|
366
|
+
- spec/cream/configure/cream_setup_spec.rb
|
367
|
+
- spec/cream/configure/rails_custom_roles_spec.rb
|
368
|
+
- spec/cream/configure/rails_role_spec.rb
|
369
|
+
- spec/cream/configure/rails_user_roles_spec.rb
|
361
370
|
- spec/cream/helper/host_spec.rb
|
362
371
|
- spec/cream/helper/role_spec.rb
|
363
372
|
- spec/cream/view/host_area_spec.rb
|