cruft_tracker 0.2.0 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 20710aba981f3164c44b99d0aa870650f19aac7a64b31b8b866655a479dae74c
4
- data.tar.gz: 3a4b8fec7d399446a31aef44d77a8fc35e8affc209370393fc3d6bae9037f95b
3
+ metadata.gz: f3460be9573ae2b54fe73ce702f82a7927f447e5495de026bfe4e5690111fe26
4
+ data.tar.gz: d26d664335c9da97deb9365e291a00ca4a3061e4e11717d2bfd1f70a862a53e6
5
5
  SHA512:
6
- metadata.gz: ad71fc2c540815704899075e337d1c5030165911441befb63d8432689b258e56319c111a3b9dc445eaa67c1e2486dd9bb1af80a82270bfc74c7a523354bf9a5a
7
- data.tar.gz: a2d602fa9a427d8c457e38379c8e03707a3d8b58fe4497dbaea8b0e1c3493812dae652c8843645cb42deb430798c67fdcd2213f3491afda1625c3284f97951fe
6
+ metadata.gz: 3a24be83b7b4fef793b01ddd18868b4d161c321791c942b8bd0bf6358d545328d0edc8c8ebf9f8ce72f5bccff22e4733c09f02f145c0881aa02e15069ade13e8
7
+ data.tar.gz: 9c97c8ea00fa75bcff566ec04677ba811692c7ad70e763a513bc187f921216bf2cfc74baa73b26472ca611f45077bdd1e0f77bea60ff34a9903a2af25177e6d3
data/README.md CHANGED
@@ -47,6 +47,16 @@ CruftTracker.init do
47
47
  end
48
48
  ```
49
49
 
50
+ Note: you may need to wrap the `CruftTracker.init` call in `Rails.application.reloader.to_prepare` to prevent deprecation warnings related to autoloading constants during initialization. For example:
51
+
52
+ ```ruby
53
+ Rails.application.reloader.to_prepare do
54
+ CruftTracker.init do
55
+ # your configuration.... (more on this below)
56
+ end
57
+ end
58
+ ```
59
+
50
60
  ### Tracking method invocations
51
61
 
52
62
  CruftTracker is pretty simple. Let's say you have a class (or module) like this...
@@ -59,7 +69,7 @@ class SomeOldClass
59
69
  end
60
70
  ```
61
71
 
62
- You're unsure if the `some_old_method` method is actually being used. All you need to do is add an instance of the `is_this_method_used? ` to the CruftTracker initializer. This method requires you to pass the class constant and a symbol to identify the name of the method to track. For example:
72
+ You're unsure if the `some_old_method` method is actually being used. All you need to do is add an instance of the `is_this_method_used? ` to the CruftTracker initializer. This method requires you to pass the class constant and a symbol to identify the name of the method to track. For example:
63
73
 
64
74
  ```ruby
65
75
  # config/initializers/cruft_tracker.rb
@@ -355,7 +365,7 @@ Let's say you have this view and you're just not sure it's being used anymore:
355
365
  <!-- app/views/something/some_view.html.erb -->
356
366
 
357
367
  <div>
358
- <%- if @data.present? %>
368
+ <%- if @data.present? %>
359
369
  <strong>Woo hoo!</strong>
360
370
  <% end %>
361
371
  </div>
@@ -445,7 +455,7 @@ When the view is actually rendered, CruftTracker will collect information about
445
455
  | ---- | ------- | -------------------------------- | -------------- | ------------ | ---------------------- | ------------ | ----------- | ------------------- | ------------------- |
446
456
  | 1 | 1 | 98cc3bd79cf6f3606c5afe3b9faf925b | SomeController | do_something | /foo/:id/bar(.:format) | [{...}] | 1 | 2022-07-06 15:29:06 | 2022-07-06 15:29:06 |
447
457
 
448
- This record is represented by the `CruftTracker::ViewRender` model and can be loaded in the usual ways. You can also access it from a specific view record. EG: `CruftTracker::View.find(1).view_renders`, which will return an association of unique renders.
458
+ This record is represented by the `CruftTracker::ViewRender` model and can be loaded in the usual ways. You can also access it from a specific view record. EG: `CruftTracker::View.find(1).view_renders`, which will return an association of unique renders.
449
459
 
450
460
  There's a lot packed into that record. Let's disect it:
451
461
 
@@ -531,6 +541,34 @@ A word of caution: don't track ever variable. Variables are, by definition, vari
531
541
 
532
542
  CruftTacker automatically cleans up after itself. ✨🧹 If you remove any configured tracking, CruftTracker will recognize this when your application starts up and mark the associated `cruft_tracker_methods` record as deleted.
533
543
 
544
+ ## Configuration
545
+
546
+ Imagine a scenario where you have a method or view that is used in many places, or maybe as a result of metaprogramming. Perhaps you have some logic that is user-configurable and might lead to a tracked method being called with any number of backtraces. It's not super helpful to track all possible backtraces and it's actively bad, since it wastes space in your database and slows down queries. Besides, it's no fun drinking from the firehose.
547
+
548
+ CruftTracker provides a few configurable settings to control the amount of data recorded in some of its tables.
549
+
550
+ | Name | Default | Description |
551
+ | ------------------------------------------------ | ------- | ------------------------------------------------------------ |
552
+ | `max_argument_variations_per_tracked_method` | 50 | Sets the maximum number of distinct arguments that can be recorded for any tracked method. |
553
+ | `max_backtrace_variations_per_tracked_method` | 50 | Sets the maximum number of distinct backtraces that can be recorded for any tracked method. |
554
+ | `max_view_renders_per_view` | 50 | Sets the maximum number of distinct renders that can be recorded for any tracked view. |
555
+ | `max_render_metadata_variations_per_view_render` | 50 | Sets the maximum number of distinct render metadata records that can be recorded for any specific render of a view. |
556
+
557
+ These configuration values can be set within the CruftTracker initializer like this:
558
+
559
+ ```ruby
560
+ # config/initializers/cruft_tracker.rb
561
+
562
+ CruftTracker.init do
563
+ config.max_argument_variations_per_tracked_method = 20
564
+ config.max_backtrace_variations_per_tracked_method = 25
565
+ config.max_view_renders_per_view = 30
566
+ config.max_render_metadata_variations_per_view_render = 35
567
+
568
+ # ... your configuration for tracking methods or views ...
569
+ end
570
+ ```
571
+
534
572
  ## API Docs
535
573
 
536
574
  ### `CruftTracker` module methods
@@ -2,9 +2,7 @@
2
2
 
3
3
  module CruftTracker
4
4
  class MethodsController < ApplicationController
5
-
6
5
  def index
7
-
8
6
  end
9
7
  end
10
8
  end
@@ -17,7 +17,7 @@ module CruftTracker
17
17
  private
18
18
 
19
19
  def cruft_tracker_view
20
- path = render_stack.first[:path].gsub(/#{Rails.root}\//, "")
20
+ path = render_stack.first[:path].gsub(%r{#{Rails.root}/}, '')
21
21
  view = CruftTracker::View.find_by(view: path)
22
22
 
23
23
  return view if view.present?
@@ -26,9 +26,9 @@ module CruftTracker
26
26
  end
27
27
 
28
28
  def route_path
29
- _routes.router.recognize(request) do |route, _|
30
- return route.path.spec.to_s
31
- end
29
+ _routes
30
+ .router
31
+ .recognize(request) { |route, _| return route.path.spec.to_s }
32
32
 
33
33
  nil
34
34
  end
@@ -38,18 +38,20 @@ module CruftTracker
38
38
  end
39
39
 
40
40
  def render_stack
41
- caller_locations.select do |caller_location|
42
- paths_to_views.any? do |path_for_view|
43
- caller_location.path.match?(/^#{path_for_view}\//)
41
+ caller_locations
42
+ .select do |caller_location|
43
+ paths_to_views.any? do |path_for_view|
44
+ caller_location.path.match?(%r{^#{path_for_view}/})
45
+ end
46
+ end
47
+ .map do |location|
48
+ {
49
+ path: location.path,
50
+ label: location.label,
51
+ base_label: location.base_label,
52
+ lineno: location.lineno
53
+ }
44
54
  end
45
- end.map do |location|
46
- {
47
- path: location.path,
48
- label: location.label,
49
- base_label: location.base_label,
50
- lineno: location.lineno
51
- }
52
- end
53
55
  end
54
56
  end
55
57
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CruftTracker
4
- class RenderMetadata < ActiveRecord::Base
4
+ class RenderMetadata < ActiveRecord::Base
5
5
  belongs_to :view_render, class_name: 'CruftTracker::ViewRender'
6
6
  end
7
7
  end
@@ -11,7 +11,9 @@ module CruftTracker
11
11
 
12
12
  def still_tracked?
13
13
  return true if CruftTracker::Registry.include?(self)
14
- return true if File.read(absolute_path).match?(/record_cruft_tracker_view_render/)
14
+ if File.read(absolute_path).match?(/record_cruft_tracker_view_render/)
15
+ return true
16
+ end
15
17
 
16
18
  false
17
19
  end
@@ -9,10 +9,10 @@ module CruftTracker
9
9
  CruftTracker::View
10
10
  .where(deleted_at: nil)
11
11
  .each do |view|
12
- unless view.still_exists? && view.still_tracked?
13
- view.update(deleted_at: Time.current)
12
+ unless view.still_exists? && view.still_tracked?
13
+ view.update(deleted_at: Time.current)
14
+ end
14
15
  end
15
- end
16
16
  end
17
17
  rescue StandardError
18
18
  # I'm actively ignoring all errors. Chances are, these are due to something like running rake
@@ -9,6 +9,8 @@ module CruftTracker
9
9
  private
10
10
 
11
11
  def execute
12
+ return unless arguments_record.present?
13
+
12
14
  CruftTracker::LogSuppressor.suppress_logging do
13
15
  arguments_record.with_lock do
14
16
  arguments_record.reload
@@ -22,13 +24,20 @@ module CruftTracker
22
24
  def arguments_record
23
25
  @arguments_record ||=
24
26
  begin
27
+ arguments_record = CruftTracker::Argument.find_by(
28
+ method: method,
29
+ arguments_hash: arguments_hash
30
+ )
31
+
32
+ if arguments_record.present? || max_records_reached?
33
+ return arguments_record
34
+ end
35
+
25
36
  CruftTracker::Argument.create(
26
37
  method: method,
27
38
  arguments_hash: arguments_hash,
28
39
  arguments: transformed_arguments
29
40
  )
30
- rescue ActiveRecord::RecordNotUnique
31
- CruftTracker::Argument.find_by(arguments_hash: arguments_hash)
32
41
  end
33
42
  end
34
43
 
@@ -39,5 +48,9 @@ module CruftTracker
39
48
  def transformed_arguments
40
49
  @transformed_arguments ||= transformer.call(arguments)
41
50
  end
51
+
52
+ def max_records_reached?
53
+ CruftTracker::Argument.where(method: method).count >= CruftTracker.config.max_argument_variations_per_tracked_method
54
+ end
42
55
  end
43
56
  end
@@ -7,6 +7,8 @@ module CruftTracker
7
7
  private
8
8
 
9
9
  def execute
10
+ return unless backtrace_record.present?
11
+
10
12
  CruftTracker::LogSuppressor.suppress_logging do
11
13
  backtrace_record.with_lock do
12
14
  backtrace_record.reload
@@ -20,13 +22,20 @@ module CruftTracker
20
22
  def backtrace_record
21
23
  @backtrace_record ||=
22
24
  begin
25
+ backtrace_record = CruftTracker::Backtrace.find_by(
26
+ traceable: method,
27
+ trace_hash: backtrace_hash
28
+ )
29
+
30
+ if backtrace_record.present? || max_records_reached?
31
+ return backtrace_record
32
+ end
33
+
23
34
  CruftTracker::Backtrace.create(
24
35
  traceable: method,
25
36
  trace_hash: backtrace_hash,
26
37
  trace: filtered_backtrace
27
38
  )
28
- rescue ActiveRecord::RecordNotUnique
29
- CruftTracker::Backtrace.find_by(trace_hash: backtrace_hash)
30
39
  end
31
40
  end
32
41
 
@@ -51,5 +60,9 @@ module CruftTracker
51
60
  }
52
61
  end
53
62
  end
63
+
64
+ def max_records_reached?
65
+ CruftTracker::Backtrace.where(traceable: method).count >= CruftTracker.config.max_backtrace_variations_per_tracked_method
66
+ end
54
67
  end
55
68
  end
@@ -10,11 +10,14 @@ module CruftTracker
10
10
 
11
11
  def execute
12
12
  return unless metadata.present?
13
+ return unless render_metadata_record.present?
13
14
 
14
15
  CruftTracker::LogSuppressor.suppress_logging do
15
16
  render_metadata_record.with_lock do
16
17
  render_metadata_record.reload
17
- render_metadata_record.update(occurrences: render_metadata_record.occurrences + 1)
18
+ render_metadata_record.update(
19
+ occurrences: render_metadata_record.occurrences + 1
20
+ )
18
21
  end
19
22
  end
20
23
  end
@@ -22,18 +25,29 @@ module CruftTracker
22
25
  def render_metadata_record
23
26
  @render_metadata_record ||=
24
27
  begin
28
+ render_metadata_record = CruftTracker::RenderMetadata.find_by(
29
+ view_render: view_render,
30
+ metadata_hash: metadata_hash
31
+ )
32
+
33
+ if render_metadata_record.present? || max_records_reached?
34
+ return render_metadata_record
35
+ end
36
+
25
37
  CruftTracker::RenderMetadata.create(
26
38
  view_render: view_render,
27
39
  metadata_hash: metadata_hash,
28
40
  metadata: metadata
29
41
  )
30
- rescue ActiveRecord::RecordNotUnique
31
- CruftTracker::RenderMetadata.find_by(metadata_hash: metadata_hash)
32
42
  end
33
43
  end
34
44
 
35
45
  def metadata_hash
36
46
  Digest::MD5.hexdigest([view_render.render_hash, metadata].to_json)
37
47
  end
48
+
49
+ def max_records_reached?
50
+ CruftTracker::RenderMetadata.where(view_render: view_render).count >= CruftTracker.config.max_render_metadata_variations_per_view_render
51
+ end
38
52
  end
39
53
  end
@@ -20,6 +20,8 @@ module CruftTracker
20
20
  private
21
21
 
22
22
  def execute
23
+ return unless view_render_record.present?
24
+
23
25
  CruftTracker::LogSuppressor.suppress_logging do
24
26
  view.with_lock do
25
27
  view.reload
@@ -28,7 +30,9 @@ module CruftTracker
28
30
 
29
31
  view_render_record.with_lock do
30
32
  view_render_record.reload
31
- view_render_record.update(occurrences: view_render_record.occurrences + 1)
33
+ view_render_record.update(
34
+ occurrences: view_render_record.occurrences + 1
35
+ )
32
36
 
33
37
  record_render_metadata(view_render_record)
34
38
 
@@ -38,14 +42,25 @@ module CruftTracker
38
42
  end
39
43
 
40
44
  def record_render_metadata(view_render_record)
41
- compose(CruftTracker::RecordRenderMetadata,
42
- view_render: view_render_record,
43
- metadata: metadata)
45
+ compose(
46
+ CruftTracker::RecordRenderMetadata,
47
+ view_render: view_render_record,
48
+ metadata: metadata
49
+ )
44
50
  end
45
51
 
46
52
  def view_render_record
47
53
  @view_render_record ||=
48
54
  begin
55
+ view_render_record = CruftTracker::ViewRender.find_by(
56
+ view: view,
57
+ render_hash: render_hash
58
+ )
59
+
60
+ if view_render_record.present? || max_records_reached?
61
+ return view_render_record
62
+ end
63
+
49
64
  CruftTracker::ViewRender.create(
50
65
  view: view,
51
66
  render_hash: render_hash,
@@ -55,8 +70,6 @@ module CruftTracker
55
70
  http_method: http_method,
56
71
  render_stack: render_stack
57
72
  )
58
- rescue ActiveRecord::RecordNotUnique
59
- CruftTracker::ViewRender.find_by(render_hash: render_hash)
60
73
  end
61
74
  end
62
75
 
@@ -72,5 +85,8 @@ module CruftTracker
72
85
  )
73
86
  end
74
87
 
88
+ def max_records_reached?
89
+ CruftTracker::ViewRender.where(view: view).count >= CruftTracker.config.max_view_renders_per_view
90
+ end
75
91
  end
76
92
  end
@@ -77,17 +77,19 @@ module CruftTracker
77
77
  end
78
78
 
79
79
  def create_or_find_method_record
80
- CruftTracker::Method.create(
80
+ method_record = CruftTracker::Method.find_by(
81
81
  owner: owner.name,
82
82
  name: name,
83
- method_type: method_type,
84
- comment: comment
83
+ method_type: method_type
85
84
  )
86
- rescue ActiveRecord::RecordNotUnique
87
- CruftTracker::Method.find_by(
85
+
86
+ return method_record if method_record.present?
87
+
88
+ CruftTracker::Method.create(
88
89
  owner: owner.name,
89
90
  name: name,
90
- method_type: method_type
91
+ method_type: method_type,
92
+ comment: comment
91
93
  )
92
94
  end
93
95
 
@@ -9,13 +9,14 @@ module CruftTracker
9
9
  interface :comment, methods: %i[to_json], default: nil
10
10
 
11
11
  def execute
12
- view_record = CruftTracker::LogSuppressor.suppress_logging do
13
- view_record = create_or_find_view_record
14
- view_record.deleted_at = nil
15
- view_record.comment = comment if comment != view_record.comment
16
- view_record.save
17
- view_record
18
- end
12
+ view_record =
13
+ CruftTracker::LogSuppressor.suppress_logging do
14
+ view_record = create_or_find_view_record
15
+ view_record.deleted_at = nil
16
+ view_record.comment = comment if comment != view_record.comment
17
+ view_record.save
18
+ view_record
19
+ end
19
20
 
20
21
  listen_for_render(view_record)
21
22
 
@@ -33,7 +34,7 @@ module CruftTracker
33
34
  'CruftTracker was unable to record a view. Have migrations been run?'
34
35
  )
35
36
  rescue Mysql2::Error::ConnectionError,
36
- ActiveRecord::ConnectionNotEstablished
37
+ ActiveRecord::ConnectionNotEstablished
37
38
  Rails.logger.warn(
38
39
  'CruftTracker was unable to record a view due to being unable to connect to the database. This may be a non-issue in cases where the database is intentionally not available.'
39
40
  )
@@ -51,14 +52,11 @@ module CruftTracker
51
52
  end
52
53
 
53
54
  def create_or_find_view_record
54
- CruftTracker::View.create(
55
- view: view,
56
- comment: comment
57
- )
58
- rescue ActiveRecord::RecordNotUnique
59
- CruftTracker::View.find_by(
60
- view: view
61
- )
55
+ view_record = CruftTracker::View.find_by(view: view)
56
+
57
+ return view_record if view_record.present?
58
+
59
+ CruftTracker::View.create(view: view, comment: comment)
62
60
  end
63
61
  end
64
62
  end
data/config/routes.rb CHANGED
@@ -1,3 +1 @@
1
- CruftTracker::Engine.routes.draw do
2
- resources :methods, only: %i[index]
3
- end
1
+ CruftTracker::Engine.routes.draw { resources :methods, only: %i[index] }
@@ -3,17 +3,13 @@ module CruftTracker
3
3
  isolate_namespace CruftTracker
4
4
 
5
5
  config.after_initialize do
6
+ ActionController::Base.helper CruftTracker::ApplicationHelper
6
7
  CruftTracker::CleanupUntrackedMethods.run!
7
8
  CruftTracker::CleanupUntrackedViews.run!
8
9
  rescue StandardError
9
10
  # Swallow all errors to prevent initialization failures.
10
11
  end
11
12
 
12
- initializer 'local_helper.action_controller' do
13
- ActiveSupport.on_load :action_controller do
14
- helper CruftTracker::ApplicationHelper
15
- end
16
- end
17
13
 
18
14
  end
19
15
  end
@@ -1,3 +1,3 @@
1
1
  module CruftTracker
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.3'
3
3
  end
data/lib/cruft_tracker.rb CHANGED
@@ -4,18 +4,18 @@ require 'cruft_tracker/registry'
4
4
  require 'cruft_tracker/log_suppressor'
5
5
 
6
6
  module CruftTracker
7
+ class << self
8
+ attr_accessor :config
9
+ end
10
+
7
11
  def self.init(&block)
12
+ self.config = Config.instance
13
+
8
14
  self.instance_eval(&block)
9
15
  end
10
16
 
11
- def self.is_this_view_used?(
12
- view,
13
- comment: nil
14
- )
15
- CruftTracker::TrackView.run!(
16
- view: view,
17
- comment: comment
18
- )
17
+ def self.is_this_view_used?(view, comment: nil)
18
+ CruftTracker::TrackView.run!(view: view, comment: comment)
19
19
  end
20
20
 
21
21
  def self.is_this_method_used?(
@@ -37,4 +37,28 @@ module CruftTracker
37
37
  def self.are_any_of_these_methods_being_used?(owner, comment: nil)
38
38
  CruftTracker::TrackAllMethods.run!(owner: owner, comment: comment)
39
39
  end
40
+
41
+ class Config
42
+ include Singleton
43
+
44
+ DEFAULT_MAX_ARGUMENTS_VARIATIONS_PER_TRACKED_METHOD = 50
45
+ DEFAULT_MAX_BACKTRACE_VARIATIONS_PER_TRACKED_METHOD = 50
46
+ DEFAULT_MAX_VIEW_RENDERS_PER_VIEW = 50
47
+ DEFAULT_MAX_RENDER_METADATA_VARIATIONS_PER_VIEW_RENDER = 50
48
+
49
+ attr_accessor :max_argument_variations_per_tracked_method,
50
+ :max_backtrace_variations_per_tracked_method,
51
+ :max_view_renders_per_view,
52
+ :max_render_metadata_variations_per_view_render
53
+
54
+ def initialize
55
+ @max_argument_variations_per_tracked_method =
56
+ DEFAULT_MAX_ARGUMENTS_VARIATIONS_PER_TRACKED_METHOD
57
+ @max_backtrace_variations_per_tracked_method =
58
+ DEFAULT_MAX_BACKTRACE_VARIATIONS_PER_TRACKED_METHOD
59
+ @max_view_renders_per_view = DEFAULT_MAX_VIEW_RENDERS_PER_VIEW
60
+ @max_render_metadata_variations_per_view_render =
61
+ DEFAULT_MAX_RENDER_METADATA_VARIATIONS_PER_VIEW_RENDER
62
+ end
63
+ end
40
64
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cruft_tracker
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adwerx Inc.
8
8
  - Doug Hughes
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-07-06 00:00:00.000000000 Z
12
+ date: 2022-08-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: active_interaction
@@ -235,6 +235,20 @@ dependencies:
235
235
  - - "~>"
236
236
  - !ruby/object:Gem::Version
237
237
  version: 2.5.0
238
+ - !ruby/object:Gem::Dependency
239
+ name: prettier
240
+ requirement: !ruby/object:Gem::Requirement
241
+ requirements:
242
+ - - ">="
243
+ - !ruby/object:Gem::Version
244
+ version: '0'
245
+ type: :development
246
+ prerelease: false
247
+ version_requirements: !ruby/object:Gem::Requirement
248
+ requirements:
249
+ - - ">="
250
+ - !ruby/object:Gem::Version
251
+ version: '0'
238
252
  description: |
239
253
  Have you ever asked yourself, "Is this method even being used?!" Or, "What the heck is this method receiving?" Does your application use Rails? If the answers these questions are yes, this gem may be of use to you!
240
254
 
@@ -299,7 +313,7 @@ licenses:
299
313
  metadata:
300
314
  homepage_uri: https://github.com/AdWerx/cruft-tracker
301
315
  source_code_uri: https://github.com/AdWerx/cruft-tracker
302
- post_install_message:
316
+ post_install_message:
303
317
  rdoc_options: []
304
318
  require_paths:
305
319
  - lib
@@ -314,8 +328,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
314
328
  - !ruby/object:Gem::Version
315
329
  version: '0'
316
330
  requirements: []
317
- rubygems_version: 3.1.6
318
- signing_key:
331
+ rubygems_version: 3.3.17
332
+ signing_key:
319
333
  specification_version: 4
320
334
  summary: Provides a system to track Ruby method usage somewhat unobtrusively.
321
335
  test_files: []