lib/generators/somatics/authenticated/authenticated_generator.rb in somatics3-generators-0.0.9 vs lib/generators/somatics/authenticated/authenticated_generator.rb in somatics3-generators-0.0.10
- old
+ new
@@ -1,219 +1,51 @@
require 'generators/somatics'
require 'rails/generators/named_base'
-require 'rails/generators/resource_helpers'
-require 'digest/sha1'
-require 'rails/generators/migration'
-
+
module Somatics
module Generators
class AuthenticatedGenerator < Rails::Generators::NamedBase
extend TemplatePath
- include Rails::Generators::ResourceHelpers
- include Rails::Generators::Migration
-
- argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
class_option :namespace, :banner => "NAME", :type => :string, :default => ''
-
- class_option :skip_routes, :type => :boolean, :desc => "Don't generate a resource line in config/routes.rb."
- class_option :skip_migration, :type => :boolean, :desc => "Don't generate a migration file for this model."
- class_option :aasm, :type => :boolean, :desc => "Works the same as stateful but uses the updated aasm gem"
- class_option :stateful, :type => :boolean, :desc => "Builds in support for acts_as_state_machine and generatesactivation code."
- class_option :rspec, :type => :boolean, :desc => "Generate RSpec tests and Stories in place of standard rails tests."
- class_option :old_passwords, :type => :boolean, :desc => "Use the older password scheme"
- class_option :include_activation, :type => :boolean, :desc => "Skip the code for a ActionMailer and its respective Activation Code through email"
- class_option :dump_generator_attrs, :type => :boolean, :desc => "Dump Generator Attrs"
-
+ class_option :locales, :type => :array, :banner => "LOCALE LOCALE", :default => %w( en zh-TW ),
+ :desc => "Supported Locales"
- def create_model_files
- template 'model.rb', File.join('app/models', class_path, "#{ file_name }.rb")
- if options.include_activation?
- # Check for class naming collisions.
- class_collisions "#{class_name}Mailer", "#{class_name}MailerTest", "#{class_name}Observer"
- template "mailer.rb", File.join('app/mailers', class_path, "#{ file_name }_mailer.rb")
- template "observer.rb", File.join('app/models', class_path, "#{ file_name }_observer.rb")
- end
+ def create_devise_model
+ invoke 'devise'
end
- def add_model_and_migration
- unless options.skip_migration?
- migration_template 'migration.rb', "db/migrate/create_#{ migration_file_name }.rb"
+ def add_fields_to_devise_model
+ invoke "migration", [%(add_name_to_#{table_name}), "name:string"]
+ if File.exists?("app/models/#{singular_name}.rb")
+ inject_into_file "app/models/#{singular_name}.rb", :after => ":remember_me" do
+ ", :name"
+ end
end
end
-
- def dump_generator_attribute_names
- generator_attribute_names = [
- :table_name,
- :file_name,
- :class_name,
- :sessions_controller_name,
- :sessions_controller_class_path,
- :sessions_controller_file_path,
- # :sessions_controller_class_nesting,
- # :sessions_controller_class_nesting_depth,
- :sessions_controller_class_name,
- :sessions_controller_singular_name,
- :sessions_controller_plural_name,
- :sessions_controller_routing_name, # new_session_path
- :sessions_controller_routing_path, # /session/new
- :sessions_controller_controller_name, # sessions
- :sessions_controller_file_name,
- :sessions_controller_table_name,
- :controller_name,
- :controller_class_path,
- :controller_file_path,
- # :controller_class_nesting,
- # :controller_class_nesting_depth,
- # :controller_class_name,
- # :controller_singular_name,
- :controller_plural_name,
- :controller_routing_name, # new_user_path
- # :controller_routing_path, # /users/new
- # :controller_controller_name, # users
- # :controller_file_name,
- # :controller_singular_name,
- # :controller_table_name,
- # :controller_plural_name,
- ]
- generator_attribute_names.each do |attr|
- puts "%-40s %s" % ["#{attr}:", self.send(attr.to_s)] # instance_variable_get("@#{attr.to_s}"
- end
-
+ hook_for :scaffold_controller do |invoked|
+ invoke invoked, [name, "email:string", "name:string"], :namespace => 'admin'
+ if File.exists?("app/models/#{singular_name}.rb")
+ inject_into_file "app/models/#{singular_name}.rb", :after => "has_paper_trail :ignore => [:updated_at" do
+ ", :encrypted_password, :password_salt, :reset_password_token, :remember_token, :remember_created_at, :sign_in_count, :current_sign_in_at, :last_sign_in_at, :current_sign_in_ip, :last_sign_in_ip"
+ end
+ end
end
- # rails g authenticated FoonParent::Foon SporkParent::Spork -p --force --rspec --dump-generator-attrs
- # table_name: foon_parent_foons
- # file_name: foon
- # class_name: FoonParent::Foon
- # controller_name: SporkParent::Sporks
- # controller_class_path: spork_parent
- # controller_file_path: spork_parent/sporks
- # controller_class_nesting: SporkParent
- # controller_class_nesting_depth: 1
- # controller_class_name: SporkParent::Sporks
- # controller_singular_name: spork
- # controller_plural_name: sporks
- # controller_routing_name: spork
- # controller_routing_path: spork_parent/spork
- # controller_controller_name: sporks
- # controller_file_name: sporks
- # controller_table_name: sporks
- # controller_plural_name: sporks
- # model_controller_name: FoonParent::Foons
- # model_controller_class_path: foon_parent
- # model_controller_file_path: foon_parent/foons
- # model_controller_class_nesting: FoonParent
- # model_controller_class_nesting_depth: 1
- # model_controller_class_name: FoonParent::Foons
- # model_controller_singular_name: foons
- # model_controller_plural_name: foons
- # model_controller_routing_name: foon_parent_foons
- # model_controller_routing_path: foon_parent/foons
- # model_controller_controller_name: foons
- # model_controller_file_name: foons
- # model_controller_singular_name: foons
- # model_controller_table_name: foons
- # model_controller_plural_name: foons
-
-
- protected
-
- def namespace_class
- # options[:namespace].classify
+ def modify_devise_model_form
+ template "partial_form.html.erb", File.join('app/views', 'admin', class_path, plural_name, "_form.html.erb"), :force => true
end
- def namespace_name
- # options[:namespace].underscore
+ def create_sessions_controller
+ invoke 'somatics:authenticated_controller'
end
-
- def sessions_controller_name
- file_name + '_sessions'
- end
-
- def sessions_controller_class_path
- class_path
- end
-
- def sessions_controller_file_path
- controller_file_path
- end
-
- def sessions_controller_singular_name
- controller_name
- end
-
- def sessions_controller_plural_name
- controller_name
- end
-
- def sessions_controller_routing_name
- singular_name
- end
-
- def sessions_controller_routing_path
- sessions_controller_file_path.singularize
- end
-
- def sessions_controller_class_name
- class_name + 'Session'
- end
-
- def sessions_controller_controller_name
- controller_plural_name
- end
-
- def sessions_controller_file_name
- file_name + '_session'
- end
-
- def sessions_controller_table_name
- controller_plural_name
- end
-
- def controller_plural_name
- plural_name
- end
-
- def controller_routing_name
- controller_plural_name
- end
-
- def migration_name
- "Create#{ class_name.pluralize.gsub(/::/, '') }"
- end
- def migration_file_name
- "#{ file_path.gsub(/\//, '_').pluralize }"
- end
-
- #
- # Implement the required interface for Rails::Generators::Migration.
- # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
- #
- def self.next_migration_number(dirname) #:nodoc:
- if ActiveRecord::Base.timestamped_migrations
- Time.now.utc.strftime("%Y%m%d%H%M%S")
- else
- "%.3d" % (current_migration_number(dirname) + 1)
+ def modify_devise_route
+ inject_into_file File.join('config/routes.rb'), :after => "devise_for :#{table_name}" do
+ session_controller = ((options.namespace.blank? ? [] : [options.namespace]) << "#{name}_sessions").join('/')
+ ", :path => '#{options.namespace}', :controllers => {:sessions => '#{session_controller}'}"
end
end
-
- #
- # !! These must match the corresponding routines in by_password.rb !!
- #
- def secure_digest(*args)
- Digest::SHA1.hexdigest(args.flatten.join('--'))
- end
- def make_token
- secure_digest(Time.now, (1..10).map{ rand.to_s })
- end
- def password_digest(password, salt)
- digest = $rest_auth_site_key_from_generator
- $rest_auth_digest_stretches_from_generator.times do
- digest = secure_digest(digest, salt, password, $rest_auth_site_key_from_generator)
- end
- digest
- end
+
end
end
end