cream 0.7.6 → 0.7.7
Sign up to get free protection for your applications and to get access to all the features.
- data/README.markdown +66 -58
- data/VERSION +1 -1
- data/app/views/{auth_assist → cream}/menu/_admin_login_items.html.erb +0 -0
- data/app/views/{auth_assist → cream}/menu/_login_items.html.erb +0 -0
- data/app/views/{auth_assist → cream}/menu/_registration_items.html.erb +0 -0
- data/cream.gemspec +5 -5
- data/lib/generators/cancan/config/config_generator.rb +10 -8
- data/lib/generators/cream/full_config/full_config_generator.rb +9 -6
- data/lib/generators/devise/config/config_generator.rb +119 -33
- data/lib/generators/devise/users/users_generator.rb +3 -3
- data/lib/generators/permits/config/config_generator.rb +3 -3
- data/lib/generators/roles/config/config_generator.rb +12 -8
- metadata +6 -6
data/README.markdown
CHANGED
@@ -1,33 +1,41 @@
|
|
1
1
|
# Cream
|
2
2
|
|
3
|
-
This project aims to assist you in setting up a complete
|
3
|
+
This project aims to assist you in setting up a complete Authentication and Authorization system for your Rails 3 app.
|
4
4
|
|
5
|
-
It targets
|
5
|
+
It targets
|
6
|
+
|
7
|
+
* [Devise](http://github.com/plataformatec/devise) - Authorization
|
8
|
+
* [CanCan](http://github.com/ryanb/cancan) - Authentication
|
9
|
+
* [Roles Generic](http://github.com/kristianmandrup/roles_generic) - Roles
|
10
|
+
|
11
|
+
For more advanced Authorization configuration, cream uses cancan-permits to enabel use of Permits and Licenses.
|
12
|
+
The gems *devise-links* and *cancan-rest-links* provide view helpers to facilitate working with authentication links and model REST links with permission logic.
|
13
|
+
Cream itself provides generators to easily configure your Rails 3 app with these gems and also includes various view and controller helpers to guard view or controller logic. The project targets a collection of common ORMs for Rails, for both Relational and Document based datastores.
|
6
14
|
|
7
15
|
The objective of this project is to
|
16
|
+
|
8
17
|
* Integrate all these sub-systems
|
9
|
-
* Provide
|
18
|
+
* Provide generators that can auto-configure your Rails 3 app with these sub-systems for a given ORM
|
10
19
|
|
11
|
-
|
20
|
+
_UPDATE_: 1. Dec 2010
|
21
|
+
Finally all dependency issues have been resolved.
|
22
|
+
I have tested the 'full_config' generator in a fresh Rails 3.0.3 app and it seems to be working, at least with ORM = 'mongoid' now.
|
23
|
+
Time to check with the other ORMs as well and make fixes where needed.
|
12
24
|
|
13
|
-
|
14
|
-
are updated and that they use the latest APIs of the other gems and all specs pass. Stay tuned!
|
15
|
-
The config generators is currently under construction and needs some fine-tuning to bring all the gems together.
|
25
|
+
## TODO
|
16
26
|
|
17
|
-
|
18
|
-
|
19
|
-
Mongo Mapper as the ORM and default arguments, the generartor should generate a "mirror image" of this template project. You are most welcome to help me in this effort
|
20
|
-
or provide suggestions etc. The README of the template project will contain a recipe with the steps to be taken to produce it ;)
|
27
|
+
The old Demo app [Cream rails 3 app](http://github.com/kristianmandrup/cream-rails3-app) is out of date and needs to be updated!
|
28
|
+
Any help to create a Demo app is greatly appreciated.
|
21
29
|
|
22
|
-
|
30
|
+
## Status
|
31
|
+
|
32
|
+
[CanCan permits demo](https://github.com/kristianmandrup/cancan-permits-demo) is a recent Rails 3 app I created to demonstrate configuration of a Rails 3 app using
|
33
|
+
*cancan-permits* and *cancan-rest-links*. I will build on this in the near future to provide a full Rails 3 app with all the cream features enabled.
|
34
|
+
Stay tuned! Or even better, help me create such template/tutorial projects ;)
|
23
35
|
|
24
|
-
|
25
|
-
Cream Permits Config generator uses new *cancan:permits* and *cancan:licenses* generators.
|
36
|
+
### Update Nov 28, 2010
|
26
37
|
|
27
|
-
|
28
|
-
<code>
|
29
|
-
require 'cream/configure/rails'
|
30
|
-
</code>
|
38
|
+
Finally cream again installs from a clean base without any dependency problems :) I just switched to Ruby 1.9.3-dev and tested cream from a clean ruby gems.
|
31
39
|
|
32
40
|
## Authentication systems
|
33
41
|
|
@@ -39,6 +47,14 @@ Cream targets [Devise](http://github.com/plataformatec/devise) as the Authentica
|
|
39
47
|
|
40
48
|
The project [devise links](http://github.com/kristianmandrup/devise-links) adds more convenience for creating view links to trigger Devise session actions.
|
41
49
|
|
50
|
+
## Authorization system
|
51
|
+
|
52
|
+
There is support for the [CanCan](http://github.com/ryanb/cancan) Authorization system.
|
53
|
+
I have created a [Cancan permits](http://github.com/kristianmandrup/cancan-permits) gem that adds the concept of Permits for each role (see below).
|
54
|
+
|
55
|
+
_Note:_
|
56
|
+
You are most welcome to provide "plugins" for other permission frameworks!
|
57
|
+
|
42
58
|
## Roles
|
43
59
|
|
44
60
|
I have developed a flexible *Generic Roles* strategy system.
|
@@ -67,26 +83,21 @@ _Update:_
|
|
67
83
|
Roles Generic has recently been upgraded with a better API, architecture, framework for testing and more and better functionality. It should also now be more DRY and
|
68
84
|
easier/simpler to add more strategies and Datastore adapters.
|
69
85
|
|
70
|
-
## Permission systems
|
71
|
-
|
72
|
-
There is support for the [CanCan](http://github.com/ryanb/cancan) permission system.
|
73
|
-
I have created a [Cancan permits](http://github.com/kristianmandrup/cancan-permits) gem that adds the concept of Permits for each role (see below).
|
74
|
-
|
75
|
-
_Note:_
|
76
|
-
You are most welcome to provide "plugins" for other permission frameworks!
|
77
|
-
|
78
86
|
## ORMs
|
79
87
|
|
80
|
-
In general, it should now finally be pretty easy to set up a Rails 3 app, with a full
|
88
|
+
In general, it should now finally be pretty easy to set up a Rails 3 app, with a full Authentication and an Authorization system linked to a Role system using one of the following supported Cream ORMs.
|
81
89
|
|
90
|
+
Relational DB:
|
82
91
|
* Active Record
|
83
92
|
* Data Mapper
|
84
|
-
|
85
|
-
|
93
|
+
|
94
|
+
Document datastores:
|
95
|
+
* Mongo DB
|
96
|
+
** Mongo Mapper
|
97
|
+
** Mongoid
|
86
98
|
* Couch DB
|
87
99
|
|
88
|
-
These ORMs are also supported for the
|
89
|
-
There are plans to create a top-level generator which sets up your project with all these systems for a given ORM.
|
100
|
+
These ORMs are also supported for the CanCan Permits and Roles systems.
|
90
101
|
|
91
102
|
## Installation and configuration ##
|
92
103
|
|
@@ -97,12 +108,6 @@ This gem has been designed for Rails 3 only.
|
|
97
108
|
Insert <pre>gem 'cream'</pre> in your Rails 3 Gemfile
|
98
109
|
<pre>$ bundle install</pre>
|
99
110
|
|
100
|
-
### Install as plugin
|
101
|
-
|
102
|
-
In the near future...
|
103
|
-
|
104
|
-
<code>rails plugin install http://github.com/kristianmandrup/cream.git</code>
|
105
|
-
|
106
111
|
## Role system
|
107
112
|
|
108
113
|
Role strategies can be set up using the [Roles Generic](http://github.com/kristianmandrup/roles_generic) gem or any of the ORM specific roles gems such as [Roles - Active Record](http://github.com/kristianmandrup/roles_active_record). There are currently Roles implementations for the following ORMs:
|
@@ -111,36 +116,32 @@ Role strategies can be set up using the [Roles Generic](http://github.com/kristi
|
|
111
116
|
* Data Mapper
|
112
117
|
* Mongo Mapper
|
113
118
|
* Mongoid
|
114
|
-
* Couch DB
|
119
|
+
* Couch DB (via SimplyStored)
|
115
120
|
|
116
121
|
### Update
|
117
122
|
|
118
|
-
The Role systems
|
119
|
-
I hope to soon have time to also upgrade the remaining ORM Role adapters.
|
123
|
+
The Role systems all ORMs (except SimplyStored which is in progress) have recently been upgraded to take advantage of a new Roles Generic API and archictecture.
|
120
124
|
|
121
|
-
##
|
125
|
+
## CanCan
|
122
126
|
|
123
|
-
|
127
|
+
Role based authorization for [CanCan](http://github.com/ryanb/cancan) can be done by creating a *Permit* class for each role.
|
124
128
|
|
125
|
-
###
|
129
|
+
### Permits
|
126
130
|
|
127
|
-
Role based authorization for [CanCan](http://github.com/ryanb/cancan) is currently done by creating *Permits* for each role.
|
128
131
|
A *Permit* lets a user in a given role do certain actions as defined in the Permit.
|
132
|
+
A Permit can also reuse permission logic in the form of Licenses for a more fine grained design if needed.
|
129
133
|
|
130
|
-
|
134
|
+
CanCan Permits comes with generators to generate Permit files which are placed in '/app/permits'. You can then edit the Permits to suit your needs.
|
131
135
|
|
132
136
|
The project [CanCan REST links](http://github.com/kristianmandrup/cancan-rest-links) provides a convenient way to handle CanCan REST links, using a flexible API.
|
133
137
|
|
134
|
-
## Permits
|
135
|
-
|
136
|
-
Currently CanCan is supported as the permission system. I have added the concept of Permits (and optionally Licenses) linked to Roles.
|
137
|
-
|
138
138
|
Check out [Cancan permits](http://github.com/kristianmandrup/cancan-permits) for more info for how to use Permits.
|
139
139
|
|
140
|
-
|
140
|
+
*Cancan permits* support all the ORMs that both Devise and Roles Generic support.
|
141
|
+
|
142
|
+
### Licenses
|
141
143
|
|
142
|
-
For more advanced
|
143
|
-
Note: The gem *cancan-permits* comes with both a *permits* and a *licenses* generator.
|
144
|
+
For more advanced authorization scenarios you can create reusable permission logic in license classed that are placed in '/app/licenses/'. A License can be reused in multiple Permits.
|
144
145
|
|
145
146
|
See [CanCan permits demo app](https://github.com/kristianmandrup/cancan-permits-demo) for an example of how to use cancan-permits and licenses.
|
146
147
|
|
@@ -159,20 +160,27 @@ Sub-generators
|
|
159
160
|
* permits:config - Configures app with CanCan Permits
|
160
161
|
* roles:config - Configures app with Roles
|
161
162
|
|
162
|
-
|
163
|
-
|
164
|
-
I am sure there are still some issues... so please help uncover these!
|
163
|
+
* cancan:restlinks - create REST links locale file
|
164
|
+
* devise:links - create devise links locale file (should maybe be renamed authlinks?)
|
165
165
|
|
166
|
-
|
167
|
-
and applicaiton in one go.
|
166
|
+
All the above generators have specs included in cream that demonstrate how to use them and should verify that they work as expected.
|
168
167
|
|
169
|
-
|
168
|
+
In general, the cream:config generator can be seen as a kind of "super generator", in that it should call all the sub-generators in succession to fully configure
|
169
|
+
the Rails 3 app in one go. I need more people to test this out to see how well it works. I am sure there are still a few bugs and issues here...
|
170
170
|
|
171
|
+
Cream target these ORMs:
|
172
|
+
|
173
|
+
Relational DB (SQL)
|
171
174
|
* Active Record
|
172
175
|
* Data Mapper
|
176
|
+
|
177
|
+
Mongo Mapper (NoSQL Document store)
|
173
178
|
* Mongo Mapper
|
174
179
|
* Mongoid
|
175
180
|
|
181
|
+
Couch DB (NoSQL Document store)
|
182
|
+
* SimplyStored ()
|
183
|
+
|
176
184
|
### Config Generator ###
|
177
185
|
|
178
186
|
Master cream generator which calls the sub-generators in succession.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.7
|
File without changes
|
File without changes
|
File without changes
|
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.7.
|
8
|
+
s.version = "0.7.7"
|
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-12-01}
|
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 = [
|
@@ -26,9 +26,9 @@ Gem::Specification.new do |s|
|
|
26
26
|
"README.markdown",
|
27
27
|
"Rakefile",
|
28
28
|
"VERSION",
|
29
|
-
"app/views/
|
30
|
-
"app/views/
|
31
|
-
"app/views/
|
29
|
+
"app/views/cream/menu/_admin_login_items.html.erb",
|
30
|
+
"app/views/cream/menu/_login_items.html.erb",
|
31
|
+
"app/views/cream/menu/_registration_items.html.erb",
|
32
32
|
"config/locales/cream.en.yml",
|
33
33
|
"cream.gemspec",
|
34
34
|
"features/FEATURE_NOTES.txt",
|
@@ -36,19 +36,21 @@ module Cancan
|
|
36
36
|
def cancan_gems
|
37
37
|
gem 'cancan'
|
38
38
|
gem 'cancan-rest-links'
|
39
|
-
bundle_install 'cancan', 'cancan-permits'
|
39
|
+
bundle_install #'cancan', 'cancan-permits'
|
40
40
|
end
|
41
41
|
|
42
|
-
def bundle_install
|
43
|
-
run "bundle install #{gems.jon(' ')}"
|
42
|
+
def bundle_install #*gems
|
43
|
+
run "bundle install" # #{gems.jon(' ')}"
|
44
44
|
end
|
45
45
|
|
46
46
|
# CanCan access denied exception handling
|
47
47
|
def cancan_exception_handling
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
48
|
+
if rescue_exists?
|
49
|
+
logger.debug "CanCan rescue statement already exists"
|
50
|
+
return
|
51
|
+
end
|
52
|
+
|
53
|
+
logger.debug "Insert cancan rescue statement into application controller"
|
52
54
|
insert_into_controller :application, :after => "ActionController::Base\n" do
|
53
55
|
%{
|
54
56
|
rescue_from CanCan::AccessDenied do |exception|
|
@@ -60,7 +62,7 @@ module Cancan
|
|
60
62
|
end
|
61
63
|
|
62
64
|
def rescue_exists?
|
63
|
-
File.read(controller_file :application) =~ /rescue_from CanCan::AccessDenied/
|
65
|
+
!(File.read(controller_file :application) =~ /rescue_from CanCan::AccessDenied/).nil?
|
64
66
|
end
|
65
67
|
end
|
66
68
|
end
|
@@ -65,7 +65,7 @@ module Cream
|
|
65
65
|
|
66
66
|
def run_devise
|
67
67
|
# rgen "devise:config --orm #{orm} --no-gems"
|
68
|
-
rgen "devise:config --orm #{orm}
|
68
|
+
rgen "devise:config --orm #{orm}"
|
69
69
|
rgen "devise:users --orm #{orm} #{admin_user_option} --no-gems"
|
70
70
|
end
|
71
71
|
|
@@ -74,7 +74,7 @@ module Cream
|
|
74
74
|
end
|
75
75
|
|
76
76
|
def run_roles
|
77
|
-
rgen "roles:config --orm #{orm} --roles #{roles.join(' ')} --strategy #{strategy}
|
77
|
+
rgen "roles:config --orm #{orm} --roles #{roles.join(' ')} --strategy #{strategy}"
|
78
78
|
end
|
79
79
|
|
80
80
|
def run_permits
|
@@ -129,16 +129,19 @@ module Cream
|
|
129
129
|
options[:configure].map{|c| c.to_sym}
|
130
130
|
end
|
131
131
|
|
132
|
+
|
132
133
|
def cream_gems
|
133
|
-
|
134
|
-
|
134
|
+
if !has_gem? :cream
|
135
|
+
gem 'cream'
|
136
|
+
# bundle_install
|
137
|
+
end
|
135
138
|
end
|
136
139
|
|
137
140
|
def cream_initializer
|
138
141
|
create_initializer :cream do
|
139
142
|
%Q{Cream.setup do |config|
|
140
|
-
|
141
|
-
|
143
|
+
config.roles = #{sym_roles.inspect}
|
144
|
+
end}
|
142
145
|
end
|
143
146
|
end
|
144
147
|
|
@@ -12,11 +12,16 @@ module Devise
|
|
12
12
|
# ORM to use
|
13
13
|
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
14
14
|
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
15
|
-
class_option :gems, :type => :boolean, :default =>
|
15
|
+
class_option :gems, :type => :boolean, :default => true, :desc => "Add gems to gemfile?"
|
16
16
|
|
17
17
|
def configure_devise
|
18
18
|
logger.add_logfile :logfile => logfile if logfile
|
19
|
-
|
19
|
+
if gems?
|
20
|
+
devise_gems
|
21
|
+
else
|
22
|
+
say "WARNING: Not configuring devise gems for #{orm}", :yellow
|
23
|
+
end
|
24
|
+
|
20
25
|
devise_install
|
21
26
|
[:orm, :mailer, :protection].each{|m| send(:"#{m}_configure!", orm) }
|
22
27
|
end
|
@@ -28,18 +33,6 @@ module Devise
|
|
28
33
|
|
29
34
|
use_helpers :controller, :app, :special, :file
|
30
35
|
|
31
|
-
def gems?
|
32
|
-
options[:gems]
|
33
|
-
end
|
34
|
-
|
35
|
-
def logfile
|
36
|
-
options[:logfile]
|
37
|
-
end
|
38
|
-
|
39
|
-
def orm
|
40
|
-
options[:orm]
|
41
|
-
end
|
42
|
-
|
43
36
|
# rails generate ...
|
44
37
|
def rgen command
|
45
38
|
execute "rails g #{command}"
|
@@ -49,45 +42,68 @@ module Devise
|
|
49
42
|
logger.debug command
|
50
43
|
run command
|
51
44
|
end
|
45
|
+
|
46
|
+
def devise_initializer
|
47
|
+
initializer_file(:devise)
|
48
|
+
end
|
49
|
+
|
50
|
+
def devise_initializer?
|
51
|
+
initializer_file?(:devise)
|
52
|
+
end
|
53
|
+
|
54
|
+
def devise_initializer_content
|
55
|
+
File.new(devise_initializer).read
|
56
|
+
end
|
52
57
|
|
53
|
-
def devise_install
|
54
|
-
|
55
|
-
|
58
|
+
def devise_install
|
59
|
+
if devise_initializer?
|
60
|
+
logger.debug "initializers/devise.rb was found so devise:install will not be run"
|
61
|
+
return
|
62
|
+
end
|
63
|
+
logger.debug "initializers/devise.rb was NOT found so devise:install will now be run"
|
56
64
|
rgen 'devise:install'
|
57
65
|
end
|
58
66
|
|
59
|
-
def bundle_install
|
60
|
-
run "bundle install #{gems.join(' ')}"
|
67
|
+
def bundle_install #*gems
|
68
|
+
# run "bundle install #{gems.join(' ')}"
|
69
|
+
run "bundle install"
|
61
70
|
end
|
62
71
|
|
63
72
|
def devise_gems
|
64
|
-
|
65
|
-
|
73
|
+
say "Configuring devise gems for #{orm}", :green
|
74
|
+
add_gem 'devise'
|
66
75
|
|
67
76
|
orm_gem = nil
|
68
77
|
# Devise ORM integration
|
69
78
|
case orm.to_sym
|
70
79
|
when :mongoid
|
71
|
-
say "Please configure Devise for Mongoid
|
80
|
+
say "Please configure Devise for Mongoid similar to Rails 3 example app: http://github.com/fortuity/rails3-mongoid-devise"
|
81
|
+
add_gem 'mongoid', '2.0.0.beta.19'
|
82
|
+
add_gem 'bson_ext', '1.1.4'
|
83
|
+
# copy_mongoid_config
|
72
84
|
when :mongo_mapper
|
73
85
|
orm_gem = 'mm-devise'
|
74
|
-
|
86
|
+
add_gem 'mm-devise'
|
75
87
|
when :data_mapper
|
76
88
|
orm_gem = 'dm-devise'
|
77
|
-
|
89
|
+
add_gem 'dm-devise'
|
78
90
|
when :couch_db
|
79
91
|
orm_gem = 'devise_couch'
|
80
|
-
|
92
|
+
add_gem 'devise_couch'
|
81
93
|
say "Please note that Couch DB does not currently have a Roles implementation. Feel free to provide one."
|
82
94
|
say "Look at Roles DataMapper (roles_data_mapper) for an example ;)"
|
83
95
|
else
|
84
96
|
say "Orm #{orm} is not currently supported by Cream. You are most welcome to provide a Cream adapter for that ORM ;)"
|
85
97
|
end
|
86
|
-
bundle_install 'devise', orm_gem
|
98
|
+
bundle_install #'devise', orm_gem
|
99
|
+
if orm.to_sym == :mongoid
|
100
|
+
rgen 'mongoid:config'
|
101
|
+
rgen "devise mongoid"
|
102
|
+
end
|
87
103
|
end
|
88
104
|
|
89
105
|
def protection_configure! orm
|
90
|
-
logger.debug "
|
106
|
+
logger.debug "Configuring: devise authentication filter"
|
91
107
|
## Add Devise protection to Application controller:
|
92
108
|
insert_into_controller :application do
|
93
109
|
"before_filter :authenticate_user!"
|
@@ -97,18 +113,88 @@ module Devise
|
|
97
113
|
# inside 'config/initializers/devise.rb' change to:
|
98
114
|
# require 'devise/orm/mongo_mapper'
|
99
115
|
def orm_configure! orm
|
100
|
-
return if orm ==
|
101
|
-
logger.debug "
|
102
|
-
found = File.read(initializer_file(:devise)) =~/devise\/orm\/w+/
|
103
|
-
logger.debug "found?: #{found}"
|
116
|
+
return if orm == 'active_record'
|
117
|
+
logger.debug "Configuring orm: [#{orm}]"
|
104
118
|
|
105
|
-
|
119
|
+
if !devise_initializer?
|
120
|
+
say "WARNING: initializer/devise.rb not found", :yellow
|
121
|
+
return
|
122
|
+
end
|
123
|
+
|
124
|
+
if !has_statement?(orm_replacement)
|
125
|
+
logger.debug "require 'devise/orm/#{orm}' already in devise.rb initializer"
|
126
|
+
return
|
127
|
+
end
|
128
|
+
|
129
|
+
if !has_devise_orm_statement?
|
130
|
+
say "WARNING: devise/orm statement not found in devise.rb initializer", :yellow
|
131
|
+
return
|
132
|
+
end
|
133
|
+
|
134
|
+
File.replace_content_from devise_initializer, :where => orm_statement, :with => orm_replacement
|
106
135
|
end
|
107
136
|
|
108
137
|
def mailer_configure! orm
|
109
|
-
logger.debug "
|
138
|
+
logger.debug "Configuring: devise mailer"
|
110
139
|
insert_application_config "action_mailer.default_url_options = { :host => 'localhost:3000' }"
|
111
140
|
end
|
141
|
+
|
142
|
+
private
|
143
|
+
|
144
|
+
def add_gem_version name, version
|
145
|
+
if !has_gem_version?(name, version)
|
146
|
+
logger.debug "Adding gem: #{name}, #{version}"
|
147
|
+
gem(name, version)
|
148
|
+
else
|
149
|
+
logger.debug "gem: #{name}, #{version} already in Gemfile"
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def add_gem name, version = nil
|
154
|
+
add_gem_version(name, version) and return if version
|
155
|
+
if !has_gem? name
|
156
|
+
logger.debug "Adding gem: #{name}"
|
157
|
+
gem name
|
158
|
+
else
|
159
|
+
logger.debug "gem: #{name} already in Gemfile"
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
# def copy_mongoid_config
|
164
|
+
# file File.dirname(__FILE__) + '/mongoid.yml', 'config/mongoid.yml'
|
165
|
+
# end
|
166
|
+
|
167
|
+
def gems?
|
168
|
+
options[:gems]
|
169
|
+
end
|
170
|
+
|
171
|
+
def logfile
|
172
|
+
options[:logfile]
|
173
|
+
end
|
174
|
+
|
175
|
+
def orm
|
176
|
+
options[:orm]
|
177
|
+
end
|
178
|
+
|
179
|
+
def has_devise_orm_statement?
|
180
|
+
devise_initializer_content =~ orm_statement
|
181
|
+
end
|
182
|
+
|
183
|
+
def has_statement? statement
|
184
|
+
devise_initializer_content =~ /#{Regexp.escape(statement)}/
|
185
|
+
end
|
186
|
+
|
187
|
+
def has_devise_orm_replacement?
|
188
|
+
has_statement? orm_replacement
|
189
|
+
end
|
190
|
+
|
191
|
+
def orm_statement
|
192
|
+
/devise\/orm\/\w+/
|
193
|
+
end
|
194
|
+
|
195
|
+
def orm_replacement
|
196
|
+
"devise/orm/#{orm}"
|
197
|
+
end
|
112
198
|
end
|
113
199
|
end
|
114
200
|
end
|
@@ -46,11 +46,11 @@ module Devise
|
|
46
46
|
|
47
47
|
def devise_gems
|
48
48
|
gem 'devise'
|
49
|
-
bundle_install 'devise'
|
49
|
+
bundle_install # 'devise'
|
50
50
|
end
|
51
51
|
|
52
|
-
def bundle_install
|
53
|
-
run "bundle install #{gems.jon(' ')}"
|
52
|
+
def bundle_install #*gems
|
53
|
+
run "bundle install" # #{gems.jon(' ')}"
|
54
54
|
end
|
55
55
|
|
56
56
|
def devise_default_user
|
@@ -61,11 +61,11 @@ module Permits
|
|
61
61
|
|
62
62
|
def permits_gems
|
63
63
|
gem 'cancan-permits'
|
64
|
-
bundle_install 'cancan-permits'
|
64
|
+
bundle_install # 'cancan-permits'
|
65
65
|
end
|
66
66
|
|
67
|
-
def bundle_install
|
68
|
-
run "bundle install #{gems.jon(' ')}"
|
67
|
+
def bundle_install #*gems
|
68
|
+
run "bundle install" # #{gems.jon(' ')}"
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
@@ -15,7 +15,7 @@ module Roles
|
|
15
15
|
class_option :roles, :type => :array, :default => ['guest', 'admin'], :desc => "Valid roles to use"
|
16
16
|
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
17
17
|
class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
|
18
|
-
class_option :gems,
|
18
|
+
class_option :gems, :type => :boolean, :default => true, :desc => "Add gems to gemfile?"
|
19
19
|
|
20
20
|
def configure_roles
|
21
21
|
logger.add_logfile :logfile => logfile if logfile
|
@@ -66,14 +66,18 @@ module Roles
|
|
66
66
|
options[:default_roles]
|
67
67
|
end
|
68
68
|
|
69
|
+
def add_gem name
|
70
|
+
gem name if !has_gem? name
|
71
|
+
end
|
72
|
+
|
69
73
|
def roles_gems
|
70
74
|
gem_name = "roles_#{orm}"
|
71
|
-
|
72
|
-
bundle_install gem_name
|
75
|
+
add_gem gem_name
|
76
|
+
bundle_install #gem_name
|
73
77
|
end
|
74
78
|
|
75
|
-
def bundle_install
|
76
|
-
run "bundle install
|
79
|
+
def bundle_install #*gems
|
80
|
+
run "bundle install" #{gems.join(' ')}
|
77
81
|
end
|
78
82
|
|
79
83
|
def roles_generator
|
@@ -81,7 +85,7 @@ module Roles
|
|
81
85
|
end
|
82
86
|
|
83
87
|
def create_roles
|
84
|
-
rgen "#{roles_generator} --strategy #{strategy} --roles #{roles} #{default_roles}"
|
88
|
+
rgen "#{roles_generator} User --strategy #{strategy} --roles #{roles} #{default_roles}"
|
85
89
|
end
|
86
90
|
|
87
91
|
def set_valid_roles_cream
|
@@ -91,7 +95,7 @@ module Roles
|
|
91
95
|
replace_in_model_file :user, :where => /valid_roles_are\s+[(.*)]/, :with => 'valid_roles_are Cream.roles'
|
92
96
|
else
|
93
97
|
insert_into_model :user do
|
94
|
-
"valid_roles_are Cream.
|
98
|
+
"valid_roles_are Cream::Role.available"
|
95
99
|
end
|
96
100
|
end
|
97
101
|
else
|
@@ -107,7 +111,7 @@ module Roles
|
|
107
111
|
user_exist?
|
108
112
|
|
109
113
|
unless read_model(:user) =~ /use_roles_strategy/
|
110
|
-
inject_into_file model_file(:user), "use_roles_strategy
|
114
|
+
inject_into_file model_file(:user), "use_roles_strategy :#{strategy}\n\n", :before => "class"
|
111
115
|
end
|
112
116
|
end
|
113
117
|
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 7
|
8
|
-
-
|
9
|
-
version: 0.7.
|
8
|
+
- 7
|
9
|
+
version: 0.7.7
|
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-12-01 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -426,9 +426,9 @@ files:
|
|
426
426
|
- README.markdown
|
427
427
|
- Rakefile
|
428
428
|
- VERSION
|
429
|
-
- app/views/
|
430
|
-
- app/views/
|
431
|
-
- app/views/
|
429
|
+
- app/views/cream/menu/_admin_login_items.html.erb
|
430
|
+
- app/views/cream/menu/_login_items.html.erb
|
431
|
+
- app/views/cream/menu/_registration_items.html.erb
|
432
432
|
- config/locales/cream.en.yml
|
433
433
|
- cream.gemspec
|
434
434
|
- features/FEATURE_NOTES.txt
|