154 lines
5.6 KiB
Ruby
154 lines
5.6 KiB
Ruby
|
#require 'acts_as_permissible/rails_commands'
|
||
|
class PermissibleGenerator < Rails::Generator::NamedBase
|
||
|
default_options :skip_migrations => false, :skip_timestamps => false
|
||
|
|
||
|
attr_reader :role_model_name
|
||
|
attr_reader :role_model_file_name
|
||
|
attr_reader :role_membership_model_name
|
||
|
attr_reader :role_membership_model_file_name
|
||
|
|
||
|
def initialize(runtime_args, runtime_options = {})
|
||
|
super
|
||
|
|
||
|
unless options[:skip_roles]
|
||
|
if @args.first.blank?
|
||
|
puts "No Roles model name supplied! Please use --skip-roles if you do not want roles support generated."
|
||
|
exit()
|
||
|
end
|
||
|
@role_model_name = @args.first
|
||
|
@role_model_file_name = role_model_name.underscore
|
||
|
@role_membership_model_name = role_model_name + "Membership"
|
||
|
@role_membership_model_file_name = role_membership_model_name.underscore
|
||
|
end
|
||
|
|
||
|
@rspec = has_rspec?
|
||
|
end
|
||
|
|
||
|
def manifest
|
||
|
recorded_session = record do |m|
|
||
|
m.directory File.join('app/models', class_path)
|
||
|
|
||
|
if @rspec
|
||
|
m.directory File.join('spec/models', class_path)
|
||
|
m.directory File.join('spec/fixtures', class_path)
|
||
|
# else
|
||
|
# m.directory File.join('test/unit', class_path)
|
||
|
end
|
||
|
|
||
|
m.template 'model.rb',
|
||
|
File.join('app/models',
|
||
|
class_path,
|
||
|
"#{file_name}.rb")
|
||
|
m.template 'acts_as_permissible.rb',
|
||
|
File.join('lib',
|
||
|
"acts_as_permissible.rb")
|
||
|
# m.template 'initializer.rb',
|
||
|
# File.join('config/initializers',
|
||
|
# "acts_as_permissible_init.rb")
|
||
|
unless options[:skip_roles]
|
||
|
m.template 'role_model.rb',
|
||
|
File.join('app/models',
|
||
|
"#{role_model_file_name}.rb")
|
||
|
m.template 'role_membership_model.rb',
|
||
|
File.join('app/models',
|
||
|
"#{role_membership_model_file_name}.rb")
|
||
|
end
|
||
|
|
||
|
if @rspec
|
||
|
m.template 'model_spec.rb',
|
||
|
File.join('spec/models',
|
||
|
class_path,
|
||
|
"#{file_name}_spec.rb")
|
||
|
m.template 'fixtures.yml',
|
||
|
File.join('spec/fixtures',
|
||
|
"#{table_name}.yml")
|
||
|
m.template 'acts_as_permissible_spec.rb',
|
||
|
File.join('spec/models',
|
||
|
"acts_as_permissible_spec.rb")
|
||
|
unless options[:skip_roles]
|
||
|
m.template 'role_model_spec.rb',
|
||
|
File.join('spec/models',
|
||
|
"#{role_model_file_name}_spec.rb")
|
||
|
m.template 'role_membership_model_spec.rb',
|
||
|
File.join('spec/models',
|
||
|
"#{role_model_file_name}_membership_spec.rb")
|
||
|
m.template 'role_model_fixtures.yml',
|
||
|
File.join('spec/fixtures',
|
||
|
"#{role_model_file_name.pluralize}.yml")
|
||
|
m.template 'role_membership_model_fixtures.yml',
|
||
|
File.join('spec/fixtures',
|
||
|
"#{role_membership_model_file_name.pluralize}.yml")
|
||
|
end
|
||
|
# else
|
||
|
# m.template 'unit_test.rb',
|
||
|
# File.join('test/unit',
|
||
|
# class_path,
|
||
|
# "#{file_name}_test.rb")
|
||
|
# m.template 'fixtures.yml',
|
||
|
# File.join('test/fixtures',
|
||
|
# "#{table_name}.yml")
|
||
|
end
|
||
|
|
||
|
unless options[:skip_migrations]
|
||
|
m.migration_template 'migration.rb', 'db/migrate', :assigns => {
|
||
|
:migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}"
|
||
|
}, :migration_file_name => "create_#{file_name.pluralize}"
|
||
|
unless options[:skip_roles]
|
||
|
m.migration_template 'role_migration.rb', 'db/migrate', :assigns => {
|
||
|
:migration_name => "Create#{role_model_name.pluralize.gsub(/::/, '')}"
|
||
|
}, :migration_file_name => "create_#{role_model_file_name.pluralize}"
|
||
|
m.migration_template 'role_membership_migration.rb', 'db/migrate', :assigns => {
|
||
|
:migration_name => "Create#{role_membership_model_name.pluralize.gsub(/::/, '')}"
|
||
|
}, :migration_file_name => "create_#{role_membership_model_file_name.pluralize}"
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
|
||
|
action = nil
|
||
|
action = $0.split("/")[1]
|
||
|
case action
|
||
|
when "generate"
|
||
|
puts
|
||
|
puts ("-" * 70)
|
||
|
puts
|
||
|
puts "acts_as_permissible"
|
||
|
puts
|
||
|
puts ("-" * 70)
|
||
|
puts
|
||
|
when "destroy"
|
||
|
puts
|
||
|
puts ("-" * 70)
|
||
|
puts
|
||
|
puts "Thanks for using acts_as_permissible"
|
||
|
puts
|
||
|
puts ("-" * 70)
|
||
|
puts
|
||
|
else
|
||
|
puts
|
||
|
end
|
||
|
|
||
|
recorded_session
|
||
|
end
|
||
|
|
||
|
def has_rspec?
|
||
|
options[:rspec] || (File.exist?('spec') && File.directory?('spec'))
|
||
|
end
|
||
|
|
||
|
protected
|
||
|
def banner
|
||
|
"Usage: #{$0} permissible <PermissionsModelName> [RoleModelName]"
|
||
|
end
|
||
|
|
||
|
def add_options!(opt)
|
||
|
opt.separator ''
|
||
|
opt.separator 'Options:'
|
||
|
opt.on("--skip-roles",
|
||
|
"Don't generate roles support") { |v| options[:skip_roles] = v }
|
||
|
opt.on("--skip-migrations",
|
||
|
"Don't generate migration files for these models") { |v| options[:skip_migrations] = v }
|
||
|
opt.on("--skip-timestamps",
|
||
|
"Don't add timestamps to the migration file for this model") { |v| options[:skip_timestamps] = v }
|
||
|
opt.on("--rspec",
|
||
|
"Force rspec mode (checks for RAILS_ROOT/spec by default)") { |v| options[:rspec] = true }
|
||
|
end
|
||
|
end
|