rails-buddy 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +45 -0
  4. data/Rakefile +10 -0
  5. data/app/assets/builds/rails/buddy/application.css +7 -0
  6. data/app/assets/builds/rails/buddy/application.js +28660 -0
  7. data/app/assets/config/rails_buddy_manifest.js +1 -0
  8. data/app/controllers/rails/buddy/application_controller.rb +8 -0
  9. data/app/controllers/rails/buddy/requests_controller.rb +23 -0
  10. data/app/helpers/rails/buddy/application_helper.rb +8 -0
  11. data/app/jobs/rails/buddy/application_job.rb +8 -0
  12. data/app/mailers/rails/buddy/application_mailer.rb +10 -0
  13. data/app/models/rails/buddy/application_record.rb +9 -0
  14. data/app/views/layouts/rails/buddy/application.html.erb +14 -0
  15. data/app/views/rails/buddy/icons/_expand.html.erb +50 -0
  16. data/app/views/rails/buddy/requests/_request.html.erb +7 -0
  17. data/app/views/rails/buddy/requests/close.html.erb +2 -0
  18. data/app/views/rails/buddy/requests/deleted.html.erb +14 -0
  19. data/app/views/rails/buddy/requests/index.html.erb +32 -0
  20. data/app/views/rails/buddy/requests/show/_controller.html.erb +60 -0
  21. data/app/views/rails/buddy/requests/show/_models.html.erb +10 -0
  22. data/app/views/rails/buddy/requests/show/_queries.html.erb +29 -0
  23. data/app/views/rails/buddy/requests/show.html.erb +37 -0
  24. data/config/routes.rb +10 -0
  25. data/lib/generators/rails/buddy/config_generator.rb +22 -0
  26. data/lib/generators/rails/buddy/templates/initializer.rb +6 -0
  27. data/lib/rails/buddy/config.rb +33 -0
  28. data/lib/rails/buddy/current.rb +20 -0
  29. data/lib/rails/buddy/engine.rb +39 -0
  30. data/lib/rails/buddy/middlewares/track_current_request.rb +37 -0
  31. data/lib/rails/buddy/request.rb +66 -0
  32. data/lib/rails/buddy/requests_buffer.rb +31 -0
  33. data/lib/rails/buddy/subscribers/action_controller.rb +40 -0
  34. data/lib/rails/buddy/subscribers/active_record.rb +61 -0
  35. data/lib/rails/buddy/subscribers/base.rb +19 -0
  36. data/lib/rails/buddy/tracker.rb +25 -0
  37. data/lib/rails/buddy/version.rb +7 -0
  38. data/lib/rails/buddy.rb +26 -0
  39. data/lib/tasks/rails/buddy_tasks.rake +6 -0
  40. metadata +99 -0
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'base'
4
+
5
+ module Rails
6
+ module Buddy
7
+ module Subscribers
8
+ class ActiveRecord < Base
9
+ EVENTS = { 'sql.active_record' => :active_record }.freeze
10
+
11
+ class << self
12
+ def subscribe
13
+ super
14
+ ActiveSupport.on_load(:active_record) do
15
+ after_initialize do |model|
16
+ Tracker.add_model(model)
17
+ end
18
+ end
19
+ end
20
+
21
+ def active_record(event) # rubocop:disable Metrics/MethodLength
22
+ return unless Tracker.track? && event.payload[:name] != 'SCHEMA'
23
+
24
+ payload = event.payload
25
+
26
+ Tracker.add_query({
27
+ title: title_from_payload(payload, event.duration),
28
+ name: payload[:name],
29
+ sql: sql_from_payload(payload),
30
+ cached: payload[:cached].present?,
31
+ async: payload[:async],
32
+ duration: event.duration.round(1),
33
+ lock_wait: payload[:lock_wait]&.round(1)
34
+ })
35
+ end
36
+
37
+ private
38
+
39
+ def title_from_payload(payload, duration)
40
+ title = if payload[:async]
41
+ "ASYNC #{payload[:name]} (#{payload[:lock_wait].round(1)}ms) (db time #{duration.round(1)}ms)"
42
+ else
43
+ "#{payload[:name] || 'Unnamed'} (#{duration.round(1)}ms)"
44
+ end
45
+ payload[:cached] ? "CACHE #{title}" : title
46
+ end
47
+
48
+ def sql_from_payload(payload)
49
+ sql = payload[:sql]
50
+
51
+ payload[:binds].reverse.each_with_index do |bind, i|
52
+ match = "$#{payload[:binds].size - i}"
53
+ sql = sql.gsub(match, bind.value_for_database.to_s)
54
+ end
55
+ sql
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rails
4
+ module Buddy
5
+ module Subscribers
6
+ class Base
7
+ class << self
8
+ def subscribe
9
+ self::EVENTS.each do |name, method|
10
+ ActiveSupport::Notifications.subscribe(name) do |event|
11
+ send(method, event) unless Current.ignore?
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rails
4
+ module Buddy
5
+ class Tracker
6
+ class << self
7
+ def add_model(model)
8
+ return unless track?
9
+
10
+ Current.request.add_model(model)
11
+ end
12
+
13
+ def add_query(query)
14
+ return unless track?
15
+
16
+ Current.request.add_query(query)
17
+ end
18
+
19
+ def track?
20
+ !Buddy::Current.ignore? && Current.request
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rails
4
+ module Buddy
5
+ VERSION = '1.0.1'
6
+ end
7
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails/buddy/version'
4
+
5
+ module Rails
6
+ module Buddy
7
+ autoload :VERSION, 'rails/buddy/version'
8
+ autoload :Config, 'rails/buddy/config'
9
+ autoload :Current, 'rails/buddy/current'
10
+ autoload :Request, 'rails/buddy/request'
11
+ autoload :RequestsBuffer, 'rails/buddy/requests_buffer'
12
+ autoload :Tracker, 'rails/buddy/tracker'
13
+
14
+ class << self
15
+ def config
16
+ @config ||= Config.new
17
+ end
18
+
19
+ def configure
20
+ yield config
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ require 'rails/buddy/engine'
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # desc "Explaining what the task does"
4
+ # task :rails_buddy do
5
+ # # Task goes here
6
+ # end
metadata ADDED
@@ -0,0 +1,99 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails-buddy
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Joseph BLANCHARD
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2024-06-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '7'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '7'
27
+ description: A development gem to monitor your rails application.
28
+ email:
29
+ - jooo.blanchard@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - MIT-LICENSE
35
+ - README.md
36
+ - Rakefile
37
+ - app/assets/builds/rails/buddy/application.css
38
+ - app/assets/builds/rails/buddy/application.js
39
+ - app/assets/config/rails_buddy_manifest.js
40
+ - app/controllers/rails/buddy/application_controller.rb
41
+ - app/controllers/rails/buddy/requests_controller.rb
42
+ - app/helpers/rails/buddy/application_helper.rb
43
+ - app/jobs/rails/buddy/application_job.rb
44
+ - app/mailers/rails/buddy/application_mailer.rb
45
+ - app/models/rails/buddy/application_record.rb
46
+ - app/views/layouts/rails/buddy/application.html.erb
47
+ - app/views/rails/buddy/icons/_expand.html.erb
48
+ - app/views/rails/buddy/requests/_request.html.erb
49
+ - app/views/rails/buddy/requests/close.html.erb
50
+ - app/views/rails/buddy/requests/deleted.html.erb
51
+ - app/views/rails/buddy/requests/index.html.erb
52
+ - app/views/rails/buddy/requests/show.html.erb
53
+ - app/views/rails/buddy/requests/show/_controller.html.erb
54
+ - app/views/rails/buddy/requests/show/_models.html.erb
55
+ - app/views/rails/buddy/requests/show/_queries.html.erb
56
+ - config/routes.rb
57
+ - lib/generators/rails/buddy/config_generator.rb
58
+ - lib/generators/rails/buddy/templates/initializer.rb
59
+ - lib/rails/buddy.rb
60
+ - lib/rails/buddy/config.rb
61
+ - lib/rails/buddy/current.rb
62
+ - lib/rails/buddy/engine.rb
63
+ - lib/rails/buddy/middlewares/track_current_request.rb
64
+ - lib/rails/buddy/request.rb
65
+ - lib/rails/buddy/requests_buffer.rb
66
+ - lib/rails/buddy/subscribers/action_controller.rb
67
+ - lib/rails/buddy/subscribers/active_record.rb
68
+ - lib/rails/buddy/subscribers/base.rb
69
+ - lib/rails/buddy/tracker.rb
70
+ - lib/rails/buddy/version.rb
71
+ - lib/tasks/rails/buddy_tasks.rake
72
+ homepage: https://github.com/jpheos/rails-buddy
73
+ licenses:
74
+ - MIT
75
+ metadata:
76
+ homepage_uri: https://github.com/jpheos/rails-buddy
77
+ changelog_uri: https://github.com/jpheos/rails-buddy/blob/main/CHANGELOG.md
78
+ rubygems_mfa_required: 'true'
79
+ post_install_message: "\n Thanks for installing rails-buddy! \U0001F389\n Just
80
+ go to http://localhost:3000/buddy\n "
81
+ rdoc_options: []
82
+ require_paths:
83
+ - lib
84
+ required_ruby_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '3.1'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ requirements: []
95
+ rubygems_version: 3.5.11
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: Your buddy to monitor your app.
99
+ test_files: []