cream 0.7.0 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +3 -3
- data/VERSION +1 -1
- data/cream.gemspec +15 -37
- data/lib/cream.rb +3 -1
- data/lib/cream/configure/after_init/role_config.rb +19 -15
- data/lib/cream/configure/rails.rb +4 -12
- data/lib/cream/role.rb +9 -1
- data/lib/cream/{configure.rb → roles_config.rb} +0 -4
- data/lib/generators/cancan/config/config_generator.rb +13 -3
- data/lib/generators/cream/app/app_generator.rb +39 -18
- data/lib/generators/cream/full_config/full_config_generator.rb +154 -0
- data/lib/generators/cream/views/haml_util.rb +1 -1
- data/lib/generators/cream/views/views_generator.rb +1 -1
- data/lib/generators/devise/config/config_generator.rb +16 -7
- data/lib/generators/devise/users/users_generator.rb +13 -8
- data/lib/generators/permits/config/config_generator.rb +14 -11
- data/lib/generators/roles/config/config_generator.rb +12 -6
- data/spec/generator_spec_helper.rb +1 -1
- data/spec/generators/cancan/config/cancan_config_generator_spec.rb +1 -1
- data/spec/generators/cream/app/app_generator_spec.rb +42 -22
- data/spec/generators/cream/full_config/full_config_generator_spec.rb +37 -0
- data/spec/generators/permits/config/permits_config_generator_spec.rb +1 -1
- metadata +12 -35
- data/lib/generators/cream/config/DESIGN NOTES.markdown +0 -79
- data/lib/generators/cream/config/config_generator.rb +0 -86
- data/lib/generators/cream/config/modules/app_config.rb +0 -48
- data/lib/generators/cream/config/modules/cancan_config.rb +0 -27
- data/lib/generators/cream/config/modules/cream_config.rb +0 -36
- data/lib/generators/cream/config/modules/devise_config.rb +0 -58
- data/lib/generators/cream/config/modules/devise_users_config.rb +0 -109
- data/lib/generators/cream/config/modules/helper.rb +0 -79
- data/lib/generators/cream/config/modules/permits_config.rb +0 -15
- data/lib/generators/cream/config/modules/roles_config.rb +0 -39
- data/spec/generators/cream/config/CONFIG_GENERATOR_SPEC.markdown +0 -15
- data/spec/generators/cream/config/devise/existing_devise_users.rb +0 -61
- data/spec/generators/cream/config/empty_app/default_args_spec.rb +0 -51
- data/spec/generators/cream/config/permits/existing_permits_spec.rb +0 -0
- data/spec/generators/cream/config/permits/no_permits_spec.rb +0 -0
- data/spec/generators/cream/config/roles/default_roles.rb +0 -51
- data/spec/generators/cream/config/roles/roles_spec.rb +0 -60
- data/spec/generators/cream/shared_examples.rb +0 -18
@@ -1,79 +0,0 @@
|
|
1
|
-
# Config generator
|
2
|
-
|
3
|
-
Each of the following should be a module in its own right!
|
4
|
-
|
5
|
-
1. Create fresh Rails 3 app and set it up so that all the sub-systems work
|
6
|
-
2. Develop the generator so that it can mutate a Rails 3 app that matches this example app
|
7
|
-
|
8
|
-
## Code Design
|
9
|
-
|
10
|
-
* Create a module for each sub-system to configure
|
11
|
-
* Include modules depending on options
|
12
|
-
* For each module call the config_[module_name] method, which is responsible for configuring that module!
|
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
|
-
|
32
|
-
## Devise Configuration
|
33
|
-
|
34
|
-
Gemfile
|
35
|
-
gem 'devise'
|
36
|
-
gem ORM 'devise'
|
37
|
-
|
38
|
-
if app does NOT have a User model
|
39
|
-
run devise generator to create User model
|
40
|
-
else
|
41
|
-
if User model is NOT configured with devise strategy
|
42
|
-
insert default devise User strategy
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
if --admin option set
|
47
|
-
if app does NOT have a Admin model
|
48
|
-
run devise generator to create Admin model
|
49
|
-
remove any current inheritance
|
50
|
-
and make Admin model inherit from User model
|
51
|
-
else
|
52
|
-
insert default devise Admin strategy
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
## Cream configuration
|
57
|
-
|
58
|
-
copy locales and views (optional)
|
59
|
-
|
60
|
-
## CanCan Configuration
|
61
|
-
|
62
|
-
Gemfile:
|
63
|
-
gem 'cancan'
|
64
|
-
gem 'cancan-rest-links'
|
65
|
-
|
66
|
-
CanCan access denied exception handling
|
67
|
-
|
68
|
-
## Permits Configuration
|
69
|
-
|
70
|
-
Gemfile:
|
71
|
-
gem 'cancan-permits'
|
72
|
-
|
73
|
-
Run permits generator to generate permit for each role
|
74
|
-
|
75
|
-
## Roles Configuration
|
76
|
-
|
77
|
-
gem ORM 'roles'
|
78
|
-
|
79
|
-
run roles generator for ORM chosen
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require 'sugar-high/file'
|
2
|
-
require 'sugar-high/module'
|
3
|
-
require 'cream'
|
4
|
-
require 'rails3_artifactor'
|
5
|
-
require 'logging_assist'
|
6
|
-
|
7
|
-
module Cream
|
8
|
-
module Generators
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
require_all File.dirname(__FILE__) + '/modules'
|
13
|
-
|
14
|
-
module Cream::Generators
|
15
|
-
class ConfigGenerator < Rails::Generators::Base
|
16
|
-
extend Rails3::Assist::UseMacro
|
17
|
-
|
18
|
-
desc "Configures Devise and Users"
|
19
|
-
|
20
|
-
source_root File.dirname(__FILE__)
|
21
|
-
|
22
|
-
# Role Strategy
|
23
|
-
class_option :strategy, :type => :string, :default => 'role_string', :desc => "Role strategy to use"
|
24
|
-
|
25
|
-
# Create Admin user
|
26
|
-
class_option :admin_user, :type => :boolean, :default => false, :desc => "Create admin user"
|
27
|
-
|
28
|
-
# Roles
|
29
|
-
class_option :default_roles, :type => :boolean, :default => true, :desc => "Create default roles :admin and :guest"
|
30
|
-
class_option :roles, :type => :array, :default => [], :desc => "Roles to create"
|
31
|
-
|
32
|
-
# Permits
|
33
|
-
class_option :permits, :type => :boolean, :default => true, :desc => "Configure permits or not"
|
34
|
-
|
35
|
-
# ORM to use
|
36
|
-
class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use"
|
37
|
-
|
38
|
-
class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location"
|
39
|
-
|
40
|
-
class_option :app_config, :type => :boolean, :default => true, :desc => "Make Rails app ready for Cream"
|
41
|
-
class_option :cream_config, :type => :boolean, :default => true, :desc => "Configure app with Cream"
|
42
|
-
class_option :devise_config, :type => :boolean, :default => true, :desc => "Configure app with Devise"
|
43
|
-
class_option :devise_user_config, :type => :boolean, :default => true, :desc => "Configure app with Devise Users"
|
44
|
-
class_option :cancan_config, :type => :boolean, :default => true, :desc => "Configure app with CanCan"
|
45
|
-
class_option :permits_config, :type => :boolean, :default => true, :desc => "Configure app with Permits"
|
46
|
-
class_option :roles_config, :type => :boolean, :default => true, :desc => "Configure app with Roles"
|
47
|
-
|
48
|
-
def main_flow
|
49
|
-
configure_logger
|
50
|
-
configure_gems
|
51
|
-
|
52
|
-
MODULES.each do |name|
|
53
|
-
method = "configure_#{name}"
|
54
|
-
send method if respond_to?(method) && options[:"#{name}_config"]
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
# -----------------
|
59
|
-
protected
|
60
|
-
|
61
|
-
# configure which helper modules (from /modules subfolder) to include in this Generator!!!
|
62
|
-
|
63
|
-
MODULES = [:app, :devise, :devise_users, :cancan, :roles, :permits, :cream]
|
64
|
-
|
65
|
-
includes Cream::Generators::Config, :helper, MODULES
|
66
|
-
|
67
|
-
include Rails3::Assist::BasicLogger
|
68
|
-
|
69
|
-
# using helpers from rails3_artifactor gem.
|
70
|
-
# A macro from rails3_assist loads appropriate modules into the class and makes various Rails 3 "mutation helper" methods available
|
71
|
-
use_helpers :model, :controller, :permit, :application
|
72
|
-
|
73
|
-
def configure_logger
|
74
|
-
logger.add_logfile :logfile => logfile if logfile
|
75
|
-
logger.debug 'main flow'
|
76
|
-
end
|
77
|
-
|
78
|
-
def configure_gems
|
79
|
-
MODULES.each do |name|
|
80
|
-
method = "#{name}_gems"
|
81
|
-
send method if respond_to?(method) && options[:"#{name}_config"]
|
82
|
-
end
|
83
|
-
run "bundle install"
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
@@ -1,48 +0,0 @@
|
|
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,27 +0,0 @@
|
|
1
|
-
module Cream::Generators
|
2
|
-
module Config
|
3
|
-
module CanCan
|
4
|
-
def cancan_configure
|
5
|
-
cancan_gems
|
6
|
-
cancan_exception_handling
|
7
|
-
end
|
8
|
-
|
9
|
-
def cancan_gems
|
10
|
-
gem 'cancan'
|
11
|
-
gem 'cancan-rest-links'
|
12
|
-
end
|
13
|
-
|
14
|
-
# CanCan access denied exception handling
|
15
|
-
def cancan_exception_handling
|
16
|
-
insert_into_controller :application, :after => "ActionController::Base\n" do
|
17
|
-
%{
|
18
|
-
rescue_from CanCan::AccessDenied do |exception|
|
19
|
-
flash[:error] = exception.message
|
20
|
-
redirect_to root_url
|
21
|
-
end
|
22
|
-
}
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module Cream::Generators
|
2
|
-
module Config
|
3
|
-
module Cream
|
4
|
-
def cream_configure
|
5
|
-
cream_gems
|
6
|
-
cream_initializer
|
7
|
-
cream_locale
|
8
|
-
end
|
9
|
-
|
10
|
-
def cream_gems
|
11
|
-
gem_name = ORM_MAP[orm]
|
12
|
-
gem gem_name if gem_name
|
13
|
-
|
14
|
-
gem 'cream'
|
15
|
-
run "bundle install"
|
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
|
26
|
-
|
27
|
-
def cream_locale
|
28
|
-
src = File.expand_path "config/locales/en.yml".path.up(2)
|
29
|
-
# src = "config/locales/en.yml"
|
30
|
-
logger.debug "configure_locale, copy from: #{src}"
|
31
|
-
copy_file src, "config/locales/cream.en.yml"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
@@ -1,58 +0,0 @@
|
|
1
|
-
module Cream::Generators
|
2
|
-
module Config
|
3
|
-
module Devise
|
4
|
-
|
5
|
-
def configure_devise
|
6
|
-
initialize!
|
7
|
-
[Orm, Mailer, Protection].each{|m| m.configure!}
|
8
|
-
end
|
9
|
-
|
10
|
-
def initialize!
|
11
|
-
rgen 'devise_install'
|
12
|
-
end
|
13
|
-
|
14
|
-
def devise_gems
|
15
|
-
gem 'devise'
|
16
|
-
|
17
|
-
# Devise ORM integration
|
18
|
-
case orm.to_sym
|
19
|
-
when :mongoid
|
20
|
-
say "Please configure Devise for Mongoid as similar to Rails 3 example app: http://github.com/fortuity/rails3-mongoid-devise"
|
21
|
-
when :mongo_mapper
|
22
|
-
gem 'mm-devise'
|
23
|
-
when :data_mapper
|
24
|
-
gem 'dm-devise'
|
25
|
-
when :couch_db
|
26
|
-
gem 'devise_couch'
|
27
|
-
say "Please note that Couch DB does not currently have a Roles implementation. Feel free to provide one."
|
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 ;)"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
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
|
41
|
-
end
|
42
|
-
|
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
|
49
|
-
end
|
50
|
-
|
51
|
-
module Mailer
|
52
|
-
def self.configure!
|
53
|
-
insert_application_config "action_mailer.default_url_options = { :host => 'localhost:3000' }"
|
54
|
-
end
|
55
|
-
end
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
@@ -1,109 +0,0 @@
|
|
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_devise_user?(:user) && has_devise_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_devise_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
|
-
self << class
|
73
|
-
extend Rails3::Assist::UseMacro
|
74
|
-
use_helpers :model
|
75
|
-
|
76
|
-
def remove_inheritance user
|
77
|
-
File.remove_from model_file user, :content => /<\s*ActiveRecord::Base/
|
78
|
-
end
|
79
|
-
|
80
|
-
def inherit_model hash
|
81
|
-
subclass = hash.keys.first
|
82
|
-
superclass = hash.values.first.to_s.camelize
|
83
|
-
File.replace_content_from model_file subclass, :where => /class Admin/, :with => "class Admin < #{superclass}"
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
module Strategy
|
89
|
-
self << class
|
90
|
-
extend Rails3::Assist::UseMacro
|
91
|
-
use_helpers :model
|
92
|
-
|
93
|
-
def insert_devise_strategy model_name, *names
|
94
|
-
names = devise_default_strategies if names.first == :defaults
|
95
|
-
insert_into_model model_name do
|
96
|
-
"devise #{*names}"
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def devise_default_strategies
|
101
|
-
[:database_authenticatable, :confirmable, :recoverable, :rememberable, :trackable, :validatable]
|
102
|
-
end
|
103
|
-
end
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
|