Class: Trek::Generators::Install::ProsopiteGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Includes:
Helpers
Defined in:
lib/generators/trek/install/prosopite_generator.rb

Instance Method Summary collapse

Instance Method Details

#add_gemsObject



14
15
16
17
18
19
20
21
# File 'lib/generators/trek/install/prosopite_generator.rb', line 14

def add_gems
  return if in_gemfile?("prosopite")

  gem "prosopite", group: [:development, :test],
    comment: "N+1 query detection (raises in test, logs in development) [https://github.com/charkost/prosopite]"
  gem "pg_query", group: [:development, :test]
  bundle_install
end

#create_initializerObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/generators/trek/install/prosopite_generator.rb', line 23

def create_initializer
  return if File.exist?("config/initializers/prosopite.rb")

  create_file "config/initializers/prosopite.rb" do
    <<~RUBY
      # N+1 query detection with Prosopite, in development and test only (the gem is not loaded in production).
      # Every request is scanned by the Rack middleware, which also covers Trek's engine controllers.
      # Detected N+1s raise Prosopite::NPlusOneQueriesError in test and are logged in development.
      # Legitimate repeated queries can be wrapped in `Prosopite.pause { … }`.
      if defined?(Prosopite)
        require "prosopite/middleware/rack"

        Rails.application.configure do
          config.middleware.use(Prosopite::Middleware::Rack)
        end

        Rails.application.config.after_initialize do
          Prosopite.rails_logger = true
          Prosopite.raise = Rails.env.test?
        end
      end
    RUBY
  end
end

#create_smoke_specObject



48
49
50
51
52
# File 'lib/generators/trek/install/prosopite_generator.rb', line 48

def create_smoke_spec
  return if File.exist?("spec/requests/admin/n_plus_one_spec.rb")

  copy_file "spec/requests/admin/n_plus_one_spec.rb", "spec/requests/admin/n_plus_one_spec.rb"
end