Class: PermissionManagement::Generators::InstallGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
Rails::Generators::Migration
Defined in:
lib/generators/permission_management/install_generator.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.next_migration_number(dirname) ⇒ Object



32
33
34
# File 'lib/generators/permission_management/install_generator.rb', line 32

def self.next_migration_number(dirname)
  Time.now.strftime("%Y%m%d%H%M%S")
end

Instance Method Details

#ability_contentObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/generators/permission_management/install_generator.rb', line 36

def ability_content
<<RUBY

    case user.pm_role_role_type
    when 'super_admin'
can :manage, :all
    when 'read_only'
can :read, :all
    when 'no_access'

    when 'custom'
user.pm_role.permissions.each do |permission|
  unless permission.action == 'no_access'
    can permission.action.to_sym, permission.model_name.constantize
  end
end
    end
RUBY
end

#copy_permission_management_migrationObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/generators/permission_management/install_generator.rb', line 10

def copy_permission_management_migration
  migration_template 'active_record/role_migration.rb', 'db/migrate/pm_create_roles'
  copy_file 'active_record/permission.rb', 'app/models/pm/permission.rb'
  copy_file 'active_record/role.rb', 'app/models/pm/role.rb'
  if File.exists? File.join(destination_root, 'app', 'models', 'ability.rb')
    insert_into_file 'app/models/ability.rb', ability_content, :after => 'user ||= User.new', :force => false
  else
    copy_file 'ability.rb', 'app/models/ability.rb'
  end
  inject_into_file 'config/routes.rb', "\n  mount PermissionManagement::Engine => '/'", { :after => /\.routes\.draw do\s*$/, :force => false }
  if PermissionManagement.user_model != 'User'
    insert_into_file 'app/controllers/application_controller.rb', "\n  load_and_authorize_resource\n", :after => 'protect_from_forgery', :force => false
    current_ability = 
<<RUBY
  def current_ability
    @current_ability ||= Ability.new(current_#{PermissionManagement.user_model.underscore})
  end
RUBY
    insert_into_file 'app/controllers/application_controller.rb', current_ability, :after => 'load_and_authorize_resource', :force => false          
  end
end