lib/generators/devise/config/config_generator.rb in cream-0.8.5 vs lib/generators/devise/config/config_generator.rb in cream-0.8.6

- old
+ new

@@ -1,235 +1,74 @@ require 'sugar-high/file' require 'sugar-high/module' require 'cream' require 'rails3_artifactor' require 'logging_assist' +require 'generators/cream/helpers/all' +# include helpers +require_all File.dirname(__FILE__) + module Devise module Generators class ConfigGenerator < Rails::Generators::Base desc "Configure Devise" + argument :user_class, :type => :string, :default => 'User', :desc => "User class" + # ORM to use class_option :orm, :type => :string, :default => 'active_record', :desc => "ORM to use" class_option :logfile, :type => :string, :default => nil, :desc => "Logfile location" class_option :gems, :type => :boolean, :default => true, :desc => "Add gems to gemfile?" - class_option :admin_user, :type => :boolean, :default => false, :desc => "Setup for admin user" + class_option :admin_user, :type => :boolean, :default => false, :desc => "Setup for admin user" def configure_devise logger.add_logfile :logfile => logfile if logfile - if gems? - devise_gems - else - say "WARNING: Not configuring devise gems for #{orm}", :yellow - end + devise_gems if gems? + say "WARNING: Not configuring devise gems for #{orm}", :yellow if !gems? - devise_install - [:orm, :mailer, :protection, :routes].each{|m| send(:"#{m}_configure!", orm) } + devise_install + configure_devise! end protected include Rails3::Assist::BasicLogger extend Rails3::Assist::UseMacro + include Cream::GeneratorHelper::Orm + include Cream::GeneratorHelper::Executor + include Cream::GeneratorHelper::Args + use_helpers :controller, :app, :special, :file - # rails generate ... - def rgen command - execute "rails g #{command}" - end - - def execute command - logger.debug command - run command - end - - def devise_initializer - initializer_file(:devise) - end - - def devise_initializer? - initializer_file?(:devise) - end - - def devise_initializer_content - File.new(devise_initializer).read - end + include DeviseConfigGenerator::AppHelper + include DeviseConfigGenerator::GemHelper def devise_install if devise_initializer? logger.debug "initializers/devise.rb was found so devise:install will not be run" return end logger.debug "initializers/devise.rb was NOT found so devise:install will now be run" rgen 'devise:install' end - def bundle_install - run "bundle install" + # see app_helper.rb + def configure_devise! + [:orm, :mailer, :protection].each{|m| send(:"#{m}_configure!") } end - - def gems_mongo_db - add_gem 'bson_ext', '>= 1.1.4' - end - - def is_active_record? - [:ar, :active_record].include? orm.to_sym - end - - def is_mongo_mapper? - [:mm, :mongo_mapper].include? orm.to_sym - end - - def is_data_mapper? - [:dm, :data_mapper].include? orm.to_sym - end def devise_gems - say "Configuring devise gems for #{orm}", :green + say "Configuring devise gems for orm: #{orm}", :green add_gem 'devise' - # Devise ORM integration - case orm.to_sym - when is_active_record? - say "Configuring for Active Record" - when is_mongo_mapper? - say "Configuring for Mongo Mapper" - add_gem 'mm-devise' - gems_mongo_db - when is_data_mapper? - say "Configuring for Data Mapper" - add_gem 'dm-devise' - when :mongoid - say "Configuring for Mongoid" - say "Please configure Devise for Mongoid similar to Rails 3 example app: http://github.com/fortuity/rails3-mongoid-devise" - add_gem 'mongoid', '>= 2.0.0.beta.20' - gems_mongo_db - when :couch_db - say "Configuring for Couch DB" - add_gem 'devise_couch' - say "Please note that Couch DB does not currently have a complete Roles implementation. Please help implement strategies for this adapter." - else - say "Orm #{orm} is not currently supported by Cream. You are most welcome to provide a Cream adapter for that ORM ;)" - end + send :"configure_gems_#{orm}" # see gem_helper.rb + clean_gemfile bundle_install - if orm.to_sym == :mongoid - rgen 'mongoid:config' - rgen "devise mongoid" - end - end - - def routes_configure! orm=nil - insert_into_routes do - "devise_for #{model_routes}" - end - end - - def admin_user? - options[:admin_user] - end - - def model_routes - return ':users, :admins' if admin_user? - ':users' - end - - - def protection_configure! orm=nil - logger.debug "Configuring: devise authentication filter" - ## Add Devise protection to Application controller: - insert_into_controller :application do - "before_filter :authenticate_user!" - end - end - - # inside 'config/initializers/devise.rb' change to: - # require 'devise/orm/mongo_mapper' - def orm_configure! orm - return if orm == 'active_record' - logger.debug "Configuring orm: [#{orm}]" - - if !devise_initializer? - say "WARNING: initializer/devise.rb not found", :yellow - return - end - - if !has_statement?(orm_replacement) - logger.debug "require 'devise/orm/#{orm}' already in devise.rb initializer" - return - end - - if !has_devise_orm_statement? - say "WARNING: devise/orm statement not found in devise.rb initializer", :yellow - return - end - - File.replace_content_from devise_initializer, :where => orm_statement, :with => orm_replacement - end - - def mailer_configure! orm=nil - logger.debug "Configuring: devise mailer" - insert_application_config "action_mailer.default_url_options = { :host => 'localhost:3000' }" - end - - private - - def add_gem_version name, version - if !has_gem_version?(name, version) - logger.debug "Adding gem: #{name}, #{version}" - gem name, :version => version - else - logger.debug "gem: #{name}, #{version} already in Gemfile" - end - end - - def add_gem name, version = nil - if version - add_gem_version name, version - return - end - - if !has_gem? name - logger.debug "Adding gem: #{name}" - gem name - else - logger.debug "gem: #{name} already in Gemfile" - end - end - - def gems? - options[:gems] - end - - def logfile - options[:logfile] - end - - def orm - options[:orm] - end - - def has_devise_orm_statement? - devise_initializer_content =~ orm_statement - end - - def has_statement? statement - devise_initializer_content =~ /#{Regexp.escape(statement)}/ - end - - def has_devise_orm_replacement? - has_statement? orm_replacement - end - - def orm_statement - /devise\/orm\/\w+/ - end - - def orm_replacement - "devise/orm/#{orm}" - end + devise_mongoid_setup if mongoid? + end end end end \ No newline at end of file