cream 0.6.1 → 0.6.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/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
|