Class: SqlOptimizerGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/sql_optimizer_generator.rb

Instance Method Summary collapse

Instance Method Details

#initializer_contentObject



49
50
51
52
53
54
55
# File 'lib/generators/sql_optimizer_generator.rb', line 49

def initializer_content
  <<~RUBY
    # This is for tracking sql queries
    QueryTrace.enable!

  RUBY
end

#migrate_query_logsObject



4
5
6
7
8
9
10
11
12
# File 'lib/generators/sql_optimizer_generator.rb', line 4

def migrate_query_logs
  migration_number = Dir.glob("#{Rails.root}/db/migrate/*").max_by { |name| name[/\d+/].to_i }[/\d+/].to_i + 1
  create_file "db/migrate/#{migration_number}_create_query_logs.rb", migration_content
  create_file 'app/models/query_log.rb', model_content
  application(nil, env: :development) { initializer_content }
  route route_content
  rake 'db:migrate'
  puts 'Done'
end

#migration_contentObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/generators/sql_optimizer_generator.rb', line 14

def migration_content
  <<~RUBY
    class CreateQueryLogs < ActiveRecord::Migration[6.0]
      def change
        create_table :query_logs do |t|
          t.string :query
          t.float :duration
          t.string :source
          t.bigint :follow_id
          t.integer :n_plus_one_size, default: 1

          t.timestamps
        end
      end
    end
  RUBY
end

#model_contentObject



32
33
34
35
36
37
# File 'lib/generators/sql_optimizer_generator.rb', line 32

def model_content
  <<~RUBY
    class QueryLog < ApplicationRecord
    end
  RUBY
end

#route_contentObject



39
40
41
42
43
44
45
46
47
# File 'lib/generators/sql_optimizer_generator.rb', line 39

def route_content
  <<~RUBY
    if Rails.env.development?
      get 'sql_optimizer', to: 'sql_optimizer#index'
      get 'graph',         to: 'sql_optimizer#graph'
    end

  RUBY
end