-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
56 changed files
with
10,774 additions
and
151 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,148 +1,183 @@ | ||
require 'sugar-high/file' | ||
require 'auth-assistant' | ||
require 'rails3_artifactor' | ||
require 'logging_assist' | ||
|
||
module Cream | ||
module Cream | ||
module Generators | ||
class ConfigGenerator < Rails::Generators::Base | ||
desc "Configures Devise and Users" | ||
end | ||
end | ||
|
||
# Role Strategy | ||
argument :strategy, :type => :string, :desc => "Role strategy to use", | ||
:default => 'role_string' | ||
require 'generators/cream/config/helpers' | ||
|
||
# Init Devise | ||
class_option :init_devise, :type => :boolean, :desc => "Initialize devise", | ||
:default => false, :aliases => "-d", | ||
# module Rails::Assist::BasicLogging | ||
# def log | ||
# @log ||= Rails::Assist::Logging.new | ||
# end | ||
# end | ||
|
||
# Create Admin user | ||
class_option :admin_user, :type => :boolean, :desc => "Create admin user", | ||
:default => false | ||
# def logger | ||
# @log ||= Rails::Assist::Logging.new | ||
# end | ||
|
||
# Default roles | ||
class_option :default_roles, :type => :boolean, :desc => "Create default roles :admin and :guest", | ||
:default => true | ||
|
||
class_option :roles_config, :type => :boolean, :desc => "Configure roles or not", | ||
:default => true | ||
module Cream::Generators | ||
class ConfigGenerator < Rails::Generators::Base | ||
extend Rails3::Assist::UseMacro | ||
|
||
desc "Configures Devise and Users" | ||
|
||
class_option :permission_config, :type => :boolean, :desc => "Configure permissions or not", | ||
:default => true | ||
source_root File.dirname(__FILE__) | ||
|
||
class_option :roles, :type => :array, :desc => "Create default roles :admin and :guest", | ||
:default => [] | ||
# Role Strategy | ||
class_option :strategy, :type => :string, :desc => "Role strategy to use", | ||
:default => 'role_string' | ||
|
||
# ORM to use | ||
class_option :orm, :type => :string, :desc => "ORM to use", | ||
:default => 'active_record' | ||
# Init Devise | ||
class_option :init_devise, :type => :boolean, :desc => "Initialize devise", | ||
:default => false | ||
|
||
def main_flow | ||
init_devise if init_devise? | ||
configure_devise_gems | ||
create_users | ||
# configure_roles if roles_config? | ||
# configure_permission_system if permission_config? | ||
# configure_locale | ||
end | ||
# Create Admin user | ||
class_option :admin_user, :type => :boolean, :desc => "Create admin user", | ||
:default => false | ||
|
||
# ----------------- | ||
protected | ||
# Default roles | ||
class_option :default_roles, :type => :boolean, :desc => "Create default roles :admin and :guest", | ||
:default => true | ||
|
||
def init_devise | ||
invoke 'devise_install' | ||
end | ||
class_option :roles_config, :type => :boolean, :desc => "Configure roles or not", | ||
:default => true | ||
|
||
ORM_MAP = { | ||
:data_mapper => 'dm-devise', | ||
:mongo_mapper => 'mm-devise', | ||
:mongoid => 'rails3-mongoid-devise' | ||
} | ||
|
||
def configure_devise_gems | ||
gem_name = ORM_MAP[orm] | ||
gem gem_name if !gem_name | ||
gem 'cancan' | ||
gem "roles-#{orm}" | ||
run "bundle install" | ||
end | ||
class_option :permission_config, :type => :boolean, :desc => "Configure permissions or not", | ||
:default => true | ||
|
||
def create_users | ||
create_user | ||
create_admin_user if admin_user? | ||
end | ||
class_option :roles, :type => :array, :desc => "Create default roles :admin and :guest", | ||
:default => [] | ||
|
||
def configure_roles | ||
invoke "#{orm}:roles --strategy #{strategy} --roles #{roles} #{default_roles}" | ||
end | ||
# ORM to use | ||
class_option :orm, :type => :string, :desc => "ORM to use", | ||
:default => 'active_record' | ||
|
||
def configure_permission_system | ||
configure_exception_handling | ||
end | ||
class_option :logfile, :type => :string, :desc => "Logfile location", | ||
:default => nil | ||
|
||
def configure_locale | ||
copy_file "config/locales/en.yml".up(4), "config/locales/auth_assist.en.yml" | ||
def main_flow | ||
logger.add_logfile :logfile => logfile | ||
logger.debug 'main flow' | ||
|
||
init_devise if init_devise? | ||
configure_devise_gems | ||
handle_devise_users if !devise_users? | ||
|
||
if devise_users? | ||
logger.debug 'Devise users OK' | ||
configure_roles if roles_config? | ||
configure_permission_system if permission_config? | ||
configure_locale | ||
handle_devise_users | ||
else | ||
logger.warning 'Devise users not there!' | ||
end | ||
end | ||
|
||
# ----------------- | ||
private | ||
# ----------------- | ||
protected | ||
|
||
# Must be ORM specific! | ||
def create_user | ||
invoke 'devise User' | ||
end | ||
# include Rails::Assist::BasicLogging | ||
|
||
def create_admin_user | ||
invoke 'devise Admin' | ||
end | ||
|
||
# CanCan permissions configuration | ||
def configure_exception_handling | ||
inject_into_file "app/controllers/application_controller.rb", :after => "ActionController::Base\n" do | ||
%{ | ||
rescue_from CanCan::AccessDenied do |exception| | ||
flash[:error] = exception.message | ||
redirect_to root_url | ||
end | ||
} | ||
end | ||
end | ||
def logger | ||
@log ||= Rails::Assist::Logging.new | ||
end | ||
|
||
# options | ||
# ----------------- | ||
use_helpers :model, :controller, :permit | ||
|
||
def default_roles | ||
options[:default_roles] ? '--default-roles' : '--no-default-roles' | ||
end | ||
def init_devise | ||
invoke 'devise_install' | ||
end | ||
|
||
def roles | ||
options[:roles].join(' ') | ||
ORM_MAP = { | ||
:data_mapper => 'dm-devise', | ||
:mongo_mapper => 'mm-devise', | ||
:mongoid => 'rails3-mongoid-devise' | ||
} | ||
|
||
def configure_devise_gems | ||
gem_name = ORM_MAP[orm] | ||
gem gem_name if gem_name | ||
gem "roles_#{orm}" | ||
gem 'devise' | ||
gem 'cancan' | ||
run "bundle install" | ||
end | ||
|
||
def orm | ||
options[:orm] | ||
end | ||
def devise_users? | ||
has_user?(:user) && has_user?(:admin) | ||
end | ||
|
||
def roles_config? | ||
options[:roles_config] | ||
end | ||
def handle_devise_users | ||
return notify_create_users if !init_devise? | ||
create_users | ||
end | ||
|
||
def permission_config? | ||
options[:permission_config] | ||
end | ||
|
||
def admin_user? | ||
options[:admin] | ||
end | ||
def notify_create_users | ||
logger.debug 'notify_create_users' | ||
say "You must first run devise generators:" | ||
say "rails g devise User" | ||
say "rails g devise Admin" if admin_user? | ||
end | ||
|
||
def init_devise? | ||
options[:devise] | ||
def create_users | ||
logger.debug 'create_users' | ||
exec "rails g devise User" | ||
if user_admin? | ||
logger.debug 'create devise Admin user' | ||
exec "rails g model Admin" | ||
File.replace_content_from model_file(:admin), where => /Admin/, with => 'Admin < User' | ||
end | ||
end | ||
|
||
def here | ||
File.dirname(__FILE__) | ||
end | ||
def configure_roles | ||
command = "rails g #{orm}:roles --strategy #{strategy} --roles #{roles} #{default_roles}" | ||
logger.debug command | ||
run command | ||
end | ||
|
||
def root_dir | ||
File.dirname(__FILE__).up(4) | ||
def configure_permission_system | ||
logger.debug "configure_permission_system" | ||
configure_exception_handling | ||
end | ||
|
||
def configure_locale | ||
src = File.expand_path "config/locales/en.yml".path.up(2) | ||
# src = "config/locales/en.yml" | ||
logger.debug "configure_locale, copy from: #{src}" | ||
copy_file src, "config/locales/auth_assist.en.yml" | ||
end | ||
|
||
# ----------------- | ||
private | ||
|
||
# Must be ORM specific! | ||
def create_user | ||
'rails g devise User' | ||
end | ||
|
||
def create_admin_user | ||
run 'rails g devise Admin' | ||
end | ||
|
||
# CanCan permissions configuration | ||
def configure_exception_handling | ||
insert_into_controller :application, :after => "ActionController::Base\n" do | ||
%{ | ||
rescue_from CanCan::AccessDenied do |exception| | ||
flash[:error] = exception.message | ||
redirect_to root_url | ||
end | ||
} | ||
end | ||
end | ||
|
||
include Helpers | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,60 @@ | ||
module Cream::Generators | ||
class ConfigGenerator < Rails::Generators::Base | ||
module Helpers | ||
|
||
def has_user? user | ||
return true if user == :admin && !admin_user? | ||
begin | ||
read_model(user) =~ /devise/ | ||
rescue Exception => e | ||
logger.info "Exception for has_user? #{user}: #{e.message}" | ||
false | ||
end | ||
end | ||
|
||
def strategy | ||
options[:strategy] | ||
end | ||
|
||
def logfile | ||
options[:logfile] | ||
end | ||
|
||
def default_roles | ||
options[:default_roles] ? '--default-roles' : '--no-default-roles' | ||
end | ||
|
||
def roles | ||
options[:roles].join(' ') | ||
end | ||
|
||
def orm | ||
options[:orm] | ||
end | ||
|
||
def roles_config? | ||
options[:roles_config] | ||
end | ||
|
||
def permission_config? | ||
options[:permission_config] | ||
end | ||
|
||
def admin_user? | ||
options[:admin] | ||
end | ||
|
||
def init_devise? | ||
options[:devise] | ||
end | ||
|
||
def here | ||
File.dirname(__FILE__) | ||
end | ||
|
||
def root_dir | ||
File.dirname(__FILE__).up(4) | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,4 @@ | ||
require 'rspec' | ||
require 'rspec/autorun' | ||
require 'rspec/core' | ||
require 'generator-spec' | ||
require 'auth-assistant' | ||
|
||
|
Oops, something went wrong.