heartcombo--devise/lib/generators/devise/views_generator.rb

146 lines
4.4 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
require 'rails/generators/base'
module Devise
module Generators
2011-06-27 14:31:29 +00:00
# Include this module in your generator to generate Devise views.
# `copy_views` is the main method and by default copies all views
# with forms.
module ViewPathTemplates #:nodoc:
2011-06-27 14:20:32 +00:00
extend ActiveSupport::Concern
included do
2014-02-25 16:42:55 +00:00
argument :scope, required: false, default: nil,
desc: "The scope to copy views to"
2011-06-27 14:31:29 +00:00
# Le sigh, ensure Thor won't handle opts as args
2012-06-19 09:27:30 +00:00
# It should be fixed in future Rails releases
2014-02-25 16:42:55 +00:00
class_option :form_builder, aliases: "-b"
class_option :markerb
class_option :views, aliases: "-v", type: :array, desc: "Select specific view directories to generate (confirmations, passwords, registrations, sessions, unlocks, mailer)"
2011-06-27 14:31:29 +00:00
public_task :copy_views
end
def copy_views
if options[:views]
options[:views].each do |directory|
view_directory directory.to_sym
end
else
view_directory :confirmations
view_directory :passwords
view_directory :registrations
view_directory :sessions
view_directory :unlocks
end
2011-06-27 14:20:32 +00:00
end
protected
def view_directory(name, _target_path = nil)
directory name.to_s, _target_path || "#{target_path}/#{name}" do |content|
if scope
content.gsub "devise/shared/links", "#{plural_scope}/shared/links"
else
content
end
end
2011-06-27 14:20:32 +00:00
end
def target_path
@target_path ||= "app/views/#{plural_scope || :devise}"
end
def plural_scope
@plural_scope ||= scope.presence && scope.underscore.pluralize
2011-06-27 14:20:32 +00:00
end
end
class SharedViewsGenerator < Rails::Generators::Base #:nodoc:
include ViewPathTemplates
source_root File.expand_path("../../../../app/views/devise", __FILE__)
desc "Copies shared Devise views to your application."
2012-03-03 14:32:58 +00:00
hide!
# Override copy_views to just copy mailer and shared.
def copy_views
view_directory :shared
end
end
2011-06-27 14:31:29 +00:00
class FormForGenerator < Rails::Generators::Base #:nodoc:
2011-06-27 14:20:32 +00:00
include ViewPathTemplates
2011-06-27 14:50:28 +00:00
source_root File.expand_path("../../../../app/views/devise", __FILE__)
2011-06-27 14:20:32 +00:00
desc "Copies default Devise views to your application."
2012-02-03 08:04:05 +00:00
hide!
2011-06-27 14:31:29 +00:00
end
2011-06-27 14:31:29 +00:00
class SimpleFormForGenerator < Rails::Generators::Base #:nodoc:
include ViewPathTemplates
source_root File.expand_path("../../templates/simple_form_for", __FILE__)
2011-06-27 14:31:29 +00:00
desc "Copies simple form enabled views to your application."
2012-02-03 08:04:05 +00:00
hide!
def copy_views
if options[:views]
options[:views].delete('mailer')
end
super
end
2011-06-27 14:31:29 +00:00
end
class ErbGenerator < Rails::Generators::Base #:nodoc:
include ViewPathTemplates
source_root File.expand_path("../../../../app/views/devise", __FILE__)
desc "Copies Devise mail erb views to your application."
2012-02-03 08:04:05 +00:00
hide!
def copy_views
if !options[:views] || options[:views].include?('mailer')
view_directory :mailer
end
end
end
class MarkerbGenerator < Rails::Generators::Base #:nodoc:
include ViewPathTemplates
source_root File.expand_path("../../templates", __FILE__)
desc "Copies Devise mail markerb views to your application."
2012-02-03 08:04:05 +00:00
hide!
def copy_views
if !options[:views] || options[:views].include?('mailer')
view_directory :markerb, target_path
end
end
def target_path
"app/views/#{plural_scope || :devise}/mailer"
end
end
2011-06-27 14:31:29 +00:00
class ViewsGenerator < Rails::Generators::Base
desc "Copies Devise views to your application."
2014-02-25 16:42:55 +00:00
argument :scope, required: false, default: nil,
desc: "The scope to copy views to"
2011-06-27 14:31:29 +00:00
invoke SharedViewsGenerator
2012-06-18 11:44:43 +00:00
2014-02-25 16:42:55 +00:00
hook_for :form_builder, aliases: "-b",
desc: "Form builder to be used",
default: defined?(SimpleForm) ? "simple_form_for" : "form_for"
2014-02-25 16:42:55 +00:00
hook_for :markerb, desc: "Generate markerb instead of erb mail views",
default: defined?(Markerb),
type: :boolean
hook_for :erb, desc: "Generate erb mail views",
default: !defined?(Markerb),
2014-02-25 16:42:55 +00:00
type: :boolean
end
end
end