From 38bfe3f990acb0cbb56fdc5a11a0f84c5f321505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Wed, 17 Feb 2010 10:53:11 +0100 Subject: [PATCH] First generator for Rails 3. --- generators/devise/USAGE | 5 -- generators/devise/devise_generator.rb | 15 ------ generators/devise/lib/route_devise.rb | 32 ----------- generators/devise/templates/model.rb | 9 ---- lib/generators/devise/USAGE | 5 ++ lib/generators/devise/devise_generator.rb | 54 +++++++++++++++++++ .../generators}/devise/templates/migration.rb | 0 7 files changed, 59 insertions(+), 61 deletions(-) delete mode 100644 generators/devise/USAGE delete mode 100644 generators/devise/devise_generator.rb delete mode 100644 generators/devise/lib/route_devise.rb delete mode 100644 generators/devise/templates/model.rb create mode 100644 lib/generators/devise/USAGE create mode 100644 lib/generators/devise/devise_generator.rb rename {generators => lib/generators}/devise/templates/migration.rb (100%) diff --git a/generators/devise/USAGE b/generators/devise/USAGE deleted file mode 100644 index 766ee18d..00000000 --- a/generators/devise/USAGE +++ /dev/null @@ -1,5 +0,0 @@ -To create a devise resource user: - - script/generate devise User - -This will generate a model named User, a route map for devise called :users, and a migration file for table :users with all devise modules. diff --git a/generators/devise/devise_generator.rb b/generators/devise/devise_generator.rb deleted file mode 100644 index 31cc7434..00000000 --- a/generators/devise/devise_generator.rb +++ /dev/null @@ -1,15 +0,0 @@ -require File.expand_path(File.dirname(__FILE__) + "/lib/route_devise.rb") - -class DeviseGenerator < Rails::Generator::NamedBase - - def manifest - record do |m| - m.directory(File.join('app', 'models', class_path)) - m.template 'model.rb', File.join('app', 'models', "#{file_path}.rb") - - m.migration_template 'migration.rb', 'db/migrate', :migration_file_name => "devise_create_#{table_name}" - m.route_devise table_name - end - end - -end diff --git a/generators/devise/lib/route_devise.rb b/generators/devise/lib/route_devise.rb deleted file mode 100644 index be4add3a..00000000 --- a/generators/devise/lib/route_devise.rb +++ /dev/null @@ -1,32 +0,0 @@ -module Rails - module Generator - module Commands - class Create < Base - - # Create devise route. Based on route_resources - def route_devise(*resources) - resource_list = resources.map { |r| r.to_sym.inspect }.join(', ') - sentinel = 'ActionController::Routing::Routes.draw do |map|' - - logger.route "map.devise_for #{resource_list}" - unless options[:pretend] - gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi do |match| - "#{match}\n map.devise_for #{resource_list}\n" - end - end - end - end - - class Destroy < RewindBase - - # Destroy devise route. Based on route_resources - def route_devise(*resources) - resource_list = resources.map { |r| r.to_sym.inspect }.join(', ') - look_for = "\n map.devise_for #{resource_list}\n" - logger.route "map.devise_for #{resource_list}" - gsub_file 'config/routes.rb', /(#{look_for})/mi, '' - end - end - end - end -end diff --git a/generators/devise/templates/model.rb b/generators/devise/templates/model.rb deleted file mode 100644 index 601450c9..00000000 --- a/generators/devise/templates/model.rb +++ /dev/null @@ -1,9 +0,0 @@ -class <%= class_name %> < ActiveRecord::Base - # Include default devise modules. Others available are: - # :http_authenticatable, :token_authenticatable, :lockable, :timeoutable and :activatable - devise :registerable, :authenticatable, :confirmable, :recoverable, - :rememberable, :trackable, :validatable - - # Setup accessible (or protected) attributes for your model - attr_accessible :email, :password, :password_confirmation -end diff --git a/lib/generators/devise/USAGE b/lib/generators/devise/USAGE new file mode 100644 index 00000000..43ad8010 --- /dev/null +++ b/lib/generators/devise/USAGE @@ -0,0 +1,5 @@ +To create a devise resource user: + + script/generate devise User + +This will generate a model named User (if one does not exist), add devise configuration, a route map for devise called :users and a migration file for table :users with default devise modules. diff --git a/lib/generators/devise/devise_generator.rb b/lib/generators/devise/devise_generator.rb new file mode 100644 index 00000000..b864625c --- /dev/null +++ b/lib/generators/devise/devise_generator.rb @@ -0,0 +1,54 @@ +require 'rails/generators/migration' + +class DeviseGenerator < Rails::Generators::NamedBase + include Rails::Generators::Migration + + def self.source_root + @_devise_source_root ||= File.expand_path("../templates", __FILE__) + end + + def self.orm_has_migration? + Rails::Generators.options[:rails][:orm] == :active_record + end + + def self.next_migration_number(path) + Time.now.utc.strftime("%Y%m%d%H%M%S") + end + + class_option :migration, :type => :boolean, :default => orm_has_migration? + + def invoke_orm_model + if File.exists?(File.join(destination_root, model_path)) + say "* Model already exists. Adding Devise behavior." + else + invoke "model", [name], :migration => false + end + end + + def inject_devise_config_into_model + inject_into_class model_path, class_name, <<-CONTENT + # Include default devise modules. Others available are: + # :http_authenticatable, :token_authenticatable, :lockable, :timeoutable and :activatable + devise :registerable, :authenticatable, :confirmable, :recoverable, + :rememberable, :trackable, :validatable + + # Setup accessible (or protected) attributes for your model + attr_accessible :email, :password, :password_confirmation +CONTENT + end + + def copy_migration_template + return unless options.migration? + migration_template "migration.rb", "db/migrate/devise_create_#{table_name}" + end + + def add_devise_routes + route "devise_for :#{table_name}" + end + + protected + + def model_path + @model_path ||= File.join("app", "models", "#{file_path}.rb") + end +end diff --git a/generators/devise/templates/migration.rb b/lib/generators/devise/templates/migration.rb similarity index 100% rename from generators/devise/templates/migration.rb rename to lib/generators/devise/templates/migration.rb