Class: ActiveRecord::Generators::SuspiciousLoginGenerator

Inherits:
Base
  • Object
show all
Includes:
SuspiciousLogin::Generators::OrmHelpers
Defined in:
lib/generators/active_record/suspicious_login_generator.rb

Instance Method Summary collapse

Methods included from SuspiciousLogin::Generators::OrmHelpers

#append_devise_module, #devise_module_exists?, #force_gsub_file, #migration_exists?, #migration_path, #missing_modules, #model_exists?, #model_path, #required_devise_modules

Instance Method Details

#add_warden_strategyObject



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/generators/active_record/suspicious_login_generator.rb', line 35

def add_warden_strategy
  template('../../templates/suspicious_login.rb', 'config/initializers/suspicious_login.rb') unless File.exist?(File.join(destination_root, 'config/initializers/suspicious_login.rb'))

  content = File.read(File.join(destination_root, 'config/initializers/suspicious_login.rb'))

  if content.include?("config.warden do |manager|\n")
    inject_into_file 'config/initializers/suspicious_login.rb', :after => "config.warden do |manager|\n" do
      "    manager.default_strategies(:scope => :#{name.downcase.to_sym}).unshift :suspicious_login_token\n"
    end
  else
    inject_into_file 'config/initializers/suspicious_login.rb', :after => "Devise.setup do |config|" do
      """  config.warden do |manager|
          manager.default_strategies(:scope => :#{name.downcase.to_sym}).unshift :suspicious_login_token
        end
      """
    end
  end
end

#copy_devise_migrationObject



27
28
29
30
31
32
33
# File 'lib/generators/active_record/suspicious_login_generator.rb', line 27

def copy_devise_migration
  if (behavior == :invoke && model_exists?) || (behavior == :revoke && migration_exists?(table_name))
    migration_template "migration_existing.rb", "#{migration_path}/add_devise_suspicious_login_to_#{table_name}.rb", migration_version: migration_version
  else
    migration_template "migration.rb", "#{migration_path}/devise_create_#{table_name}.rb", migration_version: migration_version
  end
end

#generate_modelObject



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/generators/active_record/suspicious_login_generator.rb', line 13

def generate_model
  class_path = namespaced? ? class_name.to_s.split("::") : [class_name]

  if behavior == :invoke && !model_exists?
    if Rails.env.test?
      invoke "active_record:model", [name], migration: false
    else
      raise(SuspiciousLogin::MissingModelError, I18n.t('devise.installer.missing_model', name: class_path.last))
    end
  elsif behavior == :revoke
    return
  end
end

#inject_devise_contentObject



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/generators/active_record/suspicious_login_generator.rb', line 61

def inject_devise_content
  devise_modules_re = /devise((\s*)(:\S*))+/
   = /devise(?:(?:\s*)(?::\S*))+(,\s*:suspicious_login)/
  content = File.read(File.join(destination_root, model_path))

  if model_exists?
    class_path = namespaced? ? class_name.to_s.split("::") : [class_name]

    if behavior == :invoke
      devise_content = devise_modules_re.match(content)&.[](0)
      devise_missing_modules = missing_modules(devise_content)
      if devise_content && devise_missing_modules
        updated_devise_content = devise_missing_modules.reduce(devise_content) { |acc, mod| "#{acc}, :#{mod.to_s}" }
        puts I18n.t('devise.installer.missing_modules', missing_modules: devise_missing_modules.join(', '), count: devise_missing_modules.length) if devise_missing_modules.any? && gsub_file(model_path, devise_modules_re, updated_devise_content) > 0
        puts "\n"
      else
        raise(SuspiciousLogin::DeviseMissingFromModel, I18n.t('devise.installer.devise_missing', name: class_path.last)) if !Rails.env.test?
      end
    elsif behavior == :revoke
      chop_content = .match(content)&.[](1)
      force_gsub_file(model_path, chop_content, "") if chop_content
    end
  end
end

#migration_dataObject



54
55
56
57
58
59
# File 'lib/generators/active_record/suspicious_login_generator.rb', line 54

def migration_data
<<RUBY
t.string #{Devise.token_field_name}
t.datetime #{Devise.token_created_at_field_name}
RUBY
end

#migration_versionObject



90
91
92
93
94
# File 'lib/generators/active_record/suspicious_login_generator.rb', line 90

def migration_version
  if rails5?
    "[#{Rails::VERSION::MAJOR}.#{Rails::VERSION::MINOR}]"
  end
end

#rails5?Boolean

Returns:

  • (Boolean)


86
87
88
# File 'lib/generators/active_record/suspicious_login_generator.rb', line 86

def rails5?
  Rails.version.start_with? '5'
end