Class: IAmICan::Generators::SetupGenerator

Inherits:
Rails::Generators::NamedBase
  • Object
show all
Includes:
Rails::Generators::Migration
Defined in:
lib/generators/i_am_i_can/setup_generator.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.next_migration_number(dirname) ⇒ Object



67
68
69
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 67

def self.next_migration_number(dirname)
  ActiveRecord::Generators::Base.next_migration_number(dirname)
end

Instance Method Details

#group_cObject



79
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 79

def group_c; @ii_opts[:role_group_class] end

#group_pms_tbObject



90
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 90

def group_pms_tb; group_up + '_and_' + permission_up end

#group_role_tbObject



88
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 88

def group_role_tb; group_up + '_and_' + role_up end

#group_uObject



80
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 80

def group_u; @ii_opts[:role_group_class]&.underscore end

#group_upObject



81
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 81

def group_up; @ii_opts[:role_group_class]&.underscore&.pluralize end

#name_cObject



71
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 71

def name_c; name.camelize end

#name_uObject



72
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 72

def name_u; name.underscore end

#name_upObject



73
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 73

def name_up; name_u.pluralize end

#permission_cObject



83
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 83

def permission_c; @ii_opts[:permission_class] end

#permission_uObject



84
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 84

def permission_u; @ii_opts[:permission_class].underscore end

#permission_upObject



85
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 85

def permission_up; @ii_opts[:permission_class].underscore.pluralize end

#questionsObject

TODO: more readable tips



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 16

def questions
  @ii_opts = { }
  role_class = ask("Do you want to change the class name of the role model (defaults to [#{name_c}Role])? Press Enter or input your name:")
  @ii_opts[:role_class] = role_class.blank? ? "#{name_c}Role" : role_class
  pms_class = ask("Do you want to change the class name of the permission model (defaults to [#{name_c}Permission])? Press Enter or input your name:")
  @ii_opts[:permission_class] = pms_class.blank? ? "#{name_c}Permission" : pms_class
  if yes?('Do you want to use role group? y (default) / n')
     group_class = ask("Do you want to change the class name of the role_group model (defaults to [#{name_c}RoleGroup])? Press Enter or input your name:")
     @ii_opts[:role_group_class] = group_class.blank? ? "#{name_c}RoleGroup" : group_class
  else
    @ii_opts[:without_group] = true
  end

  unless yes?('Do yo want it to save role and permission to database by default? y (default) / n')
    @ii_opts[:default_save] = false
  end
  # if @ii_opts[:default_save] != false && yes?('Don\'t you need **local** definition and assignment feature? y / n (default)')
  #   TODO
  # end
  if yes?('Do you want it to raise error when you are doing wrong definition or assignment? y / n (default)')
    @ii_opts[:strict_mode] = true
  end
  if yes?('Do you want it to auto define the role/permission which is not defined when assigning to subject? y / n (default)')
    @ii_opts[:auto_define_before] = true
  end
end

#role_cObject



75
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 75

def role_c; @ii_opts[:role_class] end

#role_pms_tbObject



89
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 89

def role_pms_tb; role_up + '_and_' + permission_up end

#role_uObject



76
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 76

def role_u; @ii_opts[:role_class].underscore end

#role_upObject



77
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 77

def role_up; @ii_opts[:role_class].underscore.pluralize end

#setup_initializerObject



47
48
49
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 47

def setup_initializer
  template 'initializers/i_am_i_can.erb', "config/initializers/#{name_u}_am_#{name_u}_can.rb"
end

#setup_migrationsObject



43
44
45
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 43

def setup_migrations
  migration_template 'migrations/i_am_i_can.erb', "db/migrate/#{name_u}_am_#{name_u}_can.rb"
end

#setup_modelsObject



51
52
53
54
55
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 51

def setup_models
  template 'models/role.erb', "app/models/#{role_u}.rb"
  template 'models/role_group.erb', "app/models/#{group_u}.rb" unless @ii_opts[:without_group]
  template 'models/permission.erb', "app/models/#{permission_u}.rb"
end

#subj_role_tbObject



87
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 87

def subj_role_tb; name_up + '_and_' + role_up end

#tipsObject



57
58
59
60
61
62
63
64
65
# File 'lib/generators/i_am_i_can/setup_generator.rb', line 57

def tips
  puts "    Add the code below to #{name_c}:".green
  puts <<~TIPS
    has_and_belongs_to_many :stored_roles,
                            join_table: '#{subj_role_tb}', foreign_key: '#{role_u}_id', class_name: '#{role_c}', association_foreign_key: '#{name_u}_id'

    act_as_subject
  TIPS
end