cream 0.7.0 → 0.7.2
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/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
|
-
|