class IAmICan::Generators::SetupGenerator

Public Class Methods

next_migration_number(dirname) click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 66
def self.next_migration_number(dirname)
  ActiveRecord::Generators::Base.next_migration_number(dirname)
end

Public Instance Methods

group_c() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 78
def group_c; @ii_opts[:role_group_class] end
group_pms_tb() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 89
  def group_pms_tb; group_up + '_and_' + permission_up rescue nil end
end
group_role_tb() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 87
    def group_role_tb; group_up + '_and_' + role_up rescue nil end
    def role_pms_tb; role_up + '_and_' + permission_up end
    def group_pms_tb; group_up + '_and_' + permission_up rescue nil end
  end
end
group_u() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 79
def group_u; @ii_opts[:role_group_class]&.underscore end
group_up() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 80
def group_up; @ii_opts[:role_group_class]&.underscore&.pluralize end
name_c() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 70
def name_c; name.camelize end
name_u() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 71
def name_u; name.underscore end
name_up() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 72
def name_up; name_u.pluralize end
permission_c() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 82
def permission_c; @ii_opts[:permission_class] end
permission_u() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 83
def permission_u; @ii_opts[:permission_class].underscore end
permission_up() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 84
def permission_up; @ii_opts[:permission_class].underscore.pluralize end
questions() click to toggle source

TODO: more readable tips

# 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

  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_definition] = true
  end
end
role_c() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 74
def role_c; @ii_opts[:role_class] end
role_pms_tb() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 88
def role_pms_tb; role_up + '_and_' + permission_up end
role_u() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 75
def role_u; @ii_opts[:role_class].underscore end
role_up() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 76
def role_up; @ii_opts[:role_class].underscore.pluralize end
setup_initializer() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 41
def setup_initializer
  template 'initializers/i_am_i_can.erb', "config/initializers/#{name_u}_am_#{name_u}_can.rb"
end
setup_migrations() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 37
def setup_migrations
  migration_template 'migrations/i_am_i_can.erb', "db/migrate/#{name_u}_am_#{name_u}_can.rb"
end
setup_models() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 45
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_tb() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 86
def subj_role_tb; name_up + '_and_' + role_up end
tips() click to toggle source
# File lib/generators/i_am_i_can/setup_generator.rb, line 51
      def tips
        puts "\nAdd the code below to #{name_c}:".green
        puts <<~TIPS
          |
          |  has_and_belongs_to_many :stored_roles, -> { where('expire_at IS NULL OR expire_at > ?', Time.current) },
          |                          join_table: '#{subj_role_tb}', foreign_key: '#{name_u}_id', 
          |                          class_name: '#{role_c}', association_foreign_key: '#{role_u}_id'
          |
          |  has_many_temporary_roles  
          |
          |  acts_as_subject
          |
        TIPS
      end