Skip to content

Commit

Permalink
Revert "done"
Browse files Browse the repository at this point in the history
This reverts commit 0ad0304.
  • Loading branch information
kristianmandrup committed Sep 13, 2010
1 parent 0ad0304 commit 1d028f5
Show file tree
Hide file tree
Showing 56 changed files with 10,774 additions and 151 deletions.
16 changes: 10 additions & 6 deletions Rakefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@ begin
gem.email = "kmandrup@gmail.com"
gem.homepage = "http://github.com/kristianmandrup/devise-assistant"
gem.authors = ["Kristian Mandrup"]
gem.add_development_dependency "rspec", ">= 2.0.0.beta.19"
gem.add_dependency "devise", ">= 1.1"
gem.add_dependency "cancan", ">= 1.3"
gem.add_dependency "rails3_plugin_toolbox", ">= 0.3.4"
gem.add_dependency "rspec-action_view", ">= 0.1.2"
gem.add_dependency "sugar-high", ">= 0.1.0"
gem.add_development_dependency "rspec", "~> 2.0.0.beta.22"
gem.add_dependency "devise", "~> 1.1.2"
gem.add_dependency "cancan", "~> 1.3.4"
gem.add_dependency "r3_plugin_toolbox", "~> 0.3.6"
gem.add_dependency "rspec-action_view", "~> 0.3.1"
gem.add_dependency "sugar-high", "~> 0.2.5"
gem.add_dependency "activesupport", "~> 3.0.0"
gem.add_dependency "rails3_artifactor", "~> 0.1.4"
gem.add_dependency 'logging_assist', "~> 0.1.2"


# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings

Expand Down
255 changes: 145 additions & 110 deletions lib/generators/cream/config/config_generator.rb
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
60 changes: 60 additions & 0 deletions lib/generators/cream/config/helpers.rb
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
3 changes: 1 addition & 2 deletions spec/generator_spec_helper.rb
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'

Expand Down
Loading

0 comments on commit 1d028f5

Please sign in to comment.