Class: ActiveAdmin::Logins::Generators::InstallGenerator

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

Instance Method Summary collapse

Instance Method Details

#create_migrationsObject



79
80
81
# File 'lib/generators/active_admin/logins/install/install_generator.rb', line 79

def create_migrations
  migration_template 'migrations/create_user_logins.rb', 'db/migrate/create_user_logins.rb'
end

#create_user_login_fileObject



14
15
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/generators/active_admin/logins/install/install_generator.rb', line 14

def 
  create_file "app/admin/user_login.rb" do
    %Q{ActiveAdmin.register UserLogin do
  config.batch_actions = false
  config.sort_order = 'created_at_desc'

  filter :ip, as: :string
  filter :user_agent
  filter :created_at
  filter :country
  filter :city

  # In order to hack the heroku issue with collations
  # We're sorting in rails and not on the DB level
  filter :user, collection: proc { User.all.sort_by { |u| u.email.downcase } }

  index do
    column(:user, sortable: "users.email") do |login|
      link_to login.user.email, admin_user_path(login.user)
    end
    column :ip
    column :user_agent
    column :country
    column :city
    column(:date, sortable: "created_at") do |login|
      login.created_at
    end
    column(:filter) do |login|
      link_to(I18n.t("messages.filters.this_user", default: "Filter by this user"),
admin_user_logins_path({ q: { user_id_eq: login.user.id } }))
    end
  end

  controller do
    def scoped_collection
      super.includes :user # prevents N+1 queries to your database
    end
  end

end
    }
  end
end

#inject_into_user_modelObject



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/generators/active_admin/logins/install/install_generator.rb', line 58

def inject_into_user_model
  if Rails.version.to_i < 5
    class_line = "class User < ActiveRecord::Base"
  else
    class_line = "class User < ApplicationRecord"
  end

  inject_into_file 'app/models/user.rb', after: "#{class_line}\n" do <<-'RUBY'

  has_many :user_logins, dependent: :destroy

  def update_tracked_fields!(request)
    super
    UserLoginWorker.perform_async(self.id, request.remote_ip, request.user_agent)
  end


  RUBY
  end
end