is_this_used 0.1.0 → 0.1.4
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Appraisals +3 -4
- data/README.md +172 -25
- data/gemfiles/rails_5.2.gemfile +0 -1
- data/gemfiles/rails_5.2.gemfile.lock +1 -1
- data/gemfiles/rails_6.0.gemfile +0 -1
- data/gemfiles/rails_6.0.gemfile.lock +1 -1
- data/gemfiles/rails_6.1.gemfile +7 -0
- data/gemfiles/rails_6.1.gemfile.lock +221 -0
- data/lib/is_this_used/cruft_tracker.rb +38 -21
- data/lib/is_this_used/util/log_suppressor.rb +14 -0
- data/lib/is_this_used/version.rb +1 -1
- data/lib/is_this_used.rb +1 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d781ed2774ddda32adf7b68b87cc0666e6c08de682b07ab2fbec2daa45f02789
|
4
|
+
data.tar.gz: fd32bc27fa9ece52099e5cc1214394c14753478c7677c70ab04e4b31ca92a3f6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9da3a8cfda9bc44da06b7732e205d410709a2166568cbaacd8c17020b2960f40cfd2043ea82cd6dc96eb8a37aa7c08ae616669683cde524087b88f6f083fdb3c
|
7
|
+
data.tar.gz: 8c0ae318620b3808a775c9c9d9301bc942d4426dea9981eba78433e5055d1b1484ddc717b836afdd9b9b12a5921b81cba39d839ee3bb3cb46af8d7a29600b4a9
|
data/.gitignore
CHANGED
data/Appraisals
CHANGED
data/README.md
CHANGED
@@ -1,16 +1,11 @@
|
|
1
|
-
|
1
|
+
Have you ever asked yourself, "Is this method even being used?!" Does your application use ActiveRecord? If the answers
|
2
|
+
to these two questions are yes, this gem may be of use to you!
|
2
3
|
|
3
|
-
|
4
|
-
|
4
|
+
Large applications can accrue cruft; old methods that might once have been important, but are now unused. Unfortunately,
|
5
|
+
software is _complex_ and sometimes it's unclear if a given method is still being used at all. This adds maintenance
|
6
|
+
burdens, headaches, and uncertainty.
|
5
7
|
|
6
|
-
|
7
|
-
software is _complex_. If the method in question was a part of a larger feature that has changed over time, or possibly
|
8
|
-
been removed or disabled, it can be really difficult to tell if it's being used at all. It can be even worse that than.
|
9
|
-
The method could be _tested_. 😨 That's bad because now you can tell if you break it and you'll need to maintain it, but
|
10
|
-
you have no idea if there's any value in the time and effort to do so.
|
11
|
-
|
12
|
-
The gem uses ActiveRecord to write to your database, so that's a dependency. Basically, this is really only useful for
|
13
|
-
Rails applications at this point. Also, as of now, only MySQL is supported. Other DBs could be added in the future.
|
8
|
+
This gem aims to give you a couple tools to make it easier to know whether specific methods are being used, or not.
|
14
9
|
|
15
10
|
## Installation
|
16
11
|
|
@@ -36,7 +31,7 @@ You'll need to generate and run the migrations to add the required tables to you
|
|
36
31
|
|
37
32
|
```bash
|
38
33
|
bundle exec rails generate is_this_used:migration
|
39
|
-
bundle exec rails db:migrate
|
34
|
+
bundle exec rails db:migrate
|
40
35
|
```
|
41
36
|
|
42
37
|
This will create two tables, `potential_crufts`, which is used to collect information on the methods you're
|
@@ -45,31 +40,183 @@ actually occur.
|
|
45
40
|
|
46
41
|
## Usage
|
47
42
|
|
48
|
-
|
43
|
+
is_this_used is pretty simple. Let's say you have a class (or module) like this...
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
|
47
|
+
class SomeOldClass
|
48
|
+
def some_old_method
|
49
|
+
# do things
|
50
|
+
end
|
51
|
+
end
|
52
|
+
```
|
53
|
+
|
54
|
+
You're unsure if the `some_old_method` method is actually being used. You only need to do two things:
|
55
|
+
|
56
|
+
1. include the `IsThisUsed::CruftTracker` module
|
57
|
+
2. use the `is_this_used?` method and name the method in question
|
58
|
+
|
59
|
+
Here's an example:
|
60
|
+
|
61
|
+
```ruby
|
62
|
+
|
63
|
+
class SomeOldClass
|
64
|
+
include IsThisUsed::CruftTracker
|
65
|
+
|
66
|
+
def some_old_method
|
67
|
+
# do things
|
68
|
+
end
|
69
|
+
|
70
|
+
is_this_used? :some_old_method
|
71
|
+
end
|
72
|
+
```
|
73
|
+
|
74
|
+
What do you get out of this? Well, as soon as Ruby loads the `SomeOldClass` class, is_this_used will create a new record
|
75
|
+
in the `potential_crufts` table that looks like this:
|
76
|
+
|
77
|
+
| id | owner_name | method_name | method_type | invocations | created_at | updated_at |
|
78
|
+
| --- | ------------ | --------------- | --------------- | ----------- | ------------------- | ------------------- |
|
79
|
+
| 1 | SomeOldClass | some_old_method | instance_method | 0 | 2022-01-21 14:07:48 | 2022-01-21 14:07:48 |
|
80
|
+
|
81
|
+
This is easily accessed using the `IsThisUsed::PotentialCruft` model class.
|
82
|
+
|
83
|
+
The fields are:
|
84
|
+
|
85
|
+
- `id` - Shockingly, this is the primary key.
|
86
|
+
- `owner_name` - This is the name of the Ruby class or module that owns the method.
|
87
|
+
- `method_name` - This is the name of the method.
|
88
|
+
- `method_type` - This is either "instance_method" or "class_method", which are the values of the corresponding
|
89
|
+
constants, `IsThisUsed::CruftTracker::INSTANCE_METHOD` and `IsThisUsed::CruftTracker::CLASS_METHOD`.
|
90
|
+
- `invocations` - The number of times the method has been invoked.
|
91
|
+
- `created_at` - The date/time we started tracking the method.
|
92
|
+
- `updated_at` - The last time this record was updated.
|
93
|
+
|
94
|
+
Looking at this, we can see that the `some_old_method` method has never been invoked. This is nice because it means that
|
95
|
+
you can track uses of methods without changing their behavior. A similar record is created for every method you annotate
|
96
|
+
with `is_this_used?`.
|
97
|
+
|
98
|
+
Assuming your production application eagerly loads classes, you should always have records for potentially crufty
|
99
|
+
methods, even if the class itself is never explicitly used.
|
100
|
+
|
101
|
+
So, having annotate the method, you can check this table after a while. If you see that there have been zero invocations
|
102
|
+
you have a reasonably good hint that the method may not actually be used. Of course, you should consider that there are
|
103
|
+
some processes that are not run frequently at all, so this gem isn't a panacea. Think before you delete!
|
104
|
+
|
105
|
+
In the case that a method _is_ actually invoked, the `invocations` value is incremented and a record is created in
|
106
|
+
the `potential_cruft_stacks` table for each unique invocation stacktrace. This can be used to determine which methods
|
107
|
+
and blocks are responsible for calling the method and are themselves being used. This is the structure of
|
108
|
+
the `potential_cruft_stacks` table:
|
109
|
+
|
110
|
+
- `id` - You might be surprised to learn this is the primary key.
|
111
|
+
- `potential_cruft_id` - A reference to the `potential_crufts` record for the not-actually-crufty method that was
|
112
|
+
invoked.
|
113
|
+
- `stack_hash` - This is an MD5 hash of the stack trace for the method's invocation. This is indexed for speedy lookups
|
114
|
+
of stacks.
|
115
|
+
- `stack` - This is a JSON field that stores an array of hashes (more on this in a sec) that is the stack trace for the
|
116
|
+
method invocation. You can potentially use this to figure out what other methods and blocks involved in calling the
|
117
|
+
not-actually-crufty method.
|
118
|
+
- `occurrences` - This is the number of times the method has been invoked with exactly the same stack.
|
119
|
+
- `created_at` - The date/time we first saw this stack.
|
120
|
+
- `updated_at` - The last time this saw this stack.
|
121
|
+
|
122
|
+
As a note, if any of the files referenced in the stack are edited sufficiently to change line numbers, the stack will be
|
123
|
+
different and a new record will be created.
|
124
|
+
|
125
|
+
The `stack` data looks like this:
|
126
|
+
|
127
|
+
```javascript
|
128
|
+
[
|
129
|
+
{
|
130
|
+
path: "/app/path/to/some_file.rb",
|
131
|
+
label: "some_method",
|
132
|
+
lineno: 2056,
|
133
|
+
base_label: "some_method",
|
134
|
+
},
|
135
|
+
{
|
136
|
+
path: "/app/another/path/to/a_file.rb",
|
137
|
+
label: "do_it",
|
138
|
+
lineno: 2125,
|
139
|
+
base_label: "do_it",
|
140
|
+
},
|
141
|
+
// ...
|
142
|
+
]
|
143
|
+
```
|
144
|
+
|
145
|
+
The `label` and `base_label` fields come from Ruby's `Thread::Backtrace::Location`. I'm not actually sure what the
|
146
|
+
difference is, as the docs simply say this about `base_label`: "Usually same as label, without decoration". 🤷 Anyhow,
|
147
|
+
it's there if you need it.
|
148
|
+
|
149
|
+
The `IsThisUsed::PotentialCruftStack` model is handy for accessing this data.
|
150
|
+
|
151
|
+
### `IsThisUsed::PotentialCruft`
|
152
|
+
|
153
|
+
This is a model representing the potential cruft. You can use its `potential_cruft_stacks` to get a list of all of the
|
154
|
+
invocations of the method, if any.
|
155
|
+
|
156
|
+
### `IsThisUsed::PotentialCruftStack`
|
157
|
+
|
158
|
+
This is a model representing potential cruft stacks. Its `potential_cruft` method provides an association back to the
|
159
|
+
owning potentially-crufty method.
|
160
|
+
|
161
|
+
## Dependencies
|
162
|
+
|
163
|
+
* ActiveRecord - ActiveRecord is used to persist information about potentially crufty methods. This gem should happily
|
164
|
+
work with AR 5.2, 6, and 6.1.
|
165
|
+
* MySQL - As of now, only MySQL is supported. PRs are welcome to add support for Postgres, etc.
|
49
166
|
|
50
167
|
## Development
|
51
168
|
|
52
|
-
|
53
|
-
|
169
|
+
This gem is _highly_ inspired by [PaperTrail](https://github.com/paper-trail-gem/paper_trail). What this means is that
|
170
|
+
the entire approach to development and a lot of testing setup and support code is essentially copy and pasted from
|
171
|
+
PaperTrail. A huge debt of gratitude is owed to the maintainers of PaperTrail. Thus, if anything below is too vague,
|
172
|
+
it'd probably be helpful to
|
173
|
+
see [what PaperTrail has to say about developing their gem](https://github.com/paper-trail-gem/paper_trail/blob/master/.github/CONTRIBUTING.md)
|
174
|
+
.
|
54
175
|
|
55
|
-
|
56
|
-
version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version,
|
57
|
-
push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
176
|
+
Anyhow, to get started:
|
58
177
|
|
59
|
-
|
178
|
+
```bash
|
179
|
+
gem install bundler
|
180
|
+
bundle
|
181
|
+
bundle exec appraisal install
|
182
|
+
bundle exec appraisal update # occasionally
|
183
|
+
```
|
60
184
|
|
61
|
-
|
185
|
+
Development may be a bit awkward because the test suite supports a few versions of Rails (5.2, 6, and 6.1) and contains
|
186
|
+
a dummy application that depends on MySQL.
|
62
187
|
|
63
|
-
|
188
|
+
Before running the tests you'll want to make sure you have a database.yml file:
|
64
189
|
|
65
|
-
|
190
|
+
```bash
|
191
|
+
cd spec/dummy_app
|
192
|
+
cp config/database.mysql.yml config/database.yml
|
193
|
+
```
|
194
|
+
|
195
|
+
Edit the database.yml as needed and fire up your MySQL server.
|
66
196
|
|
67
|
-
|
197
|
+
You can now run the test suite:
|
68
198
|
|
69
|
-
|
199
|
+
### Rails 5.2
|
70
200
|
|
71
201
|
bundle exec appraisal rails-5.2 rake
|
72
202
|
|
73
|
-
|
203
|
+
### Rails 6.0
|
74
204
|
|
75
205
|
bundle exec appraisal rails-6.0 rake
|
206
|
+
|
207
|
+
### Rails 6.1
|
208
|
+
|
209
|
+
bundle exec appraisal rails-6.1 rake
|
210
|
+
|
211
|
+
## Contributing
|
212
|
+
|
213
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/dhughes/is_this_used.
|
214
|
+
|
215
|
+
## Inspirations
|
216
|
+
|
217
|
+
Large quantities of the approach taken to testing and general setup were gratuitously "borrowed"
|
218
|
+
from [PaperTrail](https://github.com/paper-trail-gem/paper_trail). Thank you!
|
219
|
+
|
220
|
+
## License
|
221
|
+
|
222
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/gemfiles/rails_5.2.gemfile
CHANGED
data/gemfiles/rails_6.0.gemfile
CHANGED
@@ -0,0 +1,221 @@
|
|
1
|
+
PATH
|
2
|
+
remote: ..
|
3
|
+
specs:
|
4
|
+
is_this_used (0.1.4)
|
5
|
+
activerecord (>= 5.2)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actioncable (6.1.4.4)
|
11
|
+
actionpack (= 6.1.4.4)
|
12
|
+
activesupport (= 6.1.4.4)
|
13
|
+
nio4r (~> 2.0)
|
14
|
+
websocket-driver (>= 0.6.1)
|
15
|
+
actionmailbox (6.1.4.4)
|
16
|
+
actionpack (= 6.1.4.4)
|
17
|
+
activejob (= 6.1.4.4)
|
18
|
+
activerecord (= 6.1.4.4)
|
19
|
+
activestorage (= 6.1.4.4)
|
20
|
+
activesupport (= 6.1.4.4)
|
21
|
+
mail (>= 2.7.1)
|
22
|
+
actionmailer (6.1.4.4)
|
23
|
+
actionpack (= 6.1.4.4)
|
24
|
+
actionview (= 6.1.4.4)
|
25
|
+
activejob (= 6.1.4.4)
|
26
|
+
activesupport (= 6.1.4.4)
|
27
|
+
mail (~> 2.5, >= 2.5.4)
|
28
|
+
rails-dom-testing (~> 2.0)
|
29
|
+
actionpack (6.1.4.4)
|
30
|
+
actionview (= 6.1.4.4)
|
31
|
+
activesupport (= 6.1.4.4)
|
32
|
+
rack (~> 2.0, >= 2.0.9)
|
33
|
+
rack-test (>= 0.6.3)
|
34
|
+
rails-dom-testing (~> 2.0)
|
35
|
+
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
36
|
+
actiontext (6.1.4.4)
|
37
|
+
actionpack (= 6.1.4.4)
|
38
|
+
activerecord (= 6.1.4.4)
|
39
|
+
activestorage (= 6.1.4.4)
|
40
|
+
activesupport (= 6.1.4.4)
|
41
|
+
nokogiri (>= 1.8.5)
|
42
|
+
actionview (6.1.4.4)
|
43
|
+
activesupport (= 6.1.4.4)
|
44
|
+
builder (~> 3.1)
|
45
|
+
erubi (~> 1.4)
|
46
|
+
rails-dom-testing (~> 2.0)
|
47
|
+
rails-html-sanitizer (~> 1.1, >= 1.2.0)
|
48
|
+
activejob (6.1.4.4)
|
49
|
+
activesupport (= 6.1.4.4)
|
50
|
+
globalid (>= 0.3.6)
|
51
|
+
activemodel (6.1.4.4)
|
52
|
+
activesupport (= 6.1.4.4)
|
53
|
+
activerecord (6.1.4.4)
|
54
|
+
activemodel (= 6.1.4.4)
|
55
|
+
activesupport (= 6.1.4.4)
|
56
|
+
activestorage (6.1.4.4)
|
57
|
+
actionpack (= 6.1.4.4)
|
58
|
+
activejob (= 6.1.4.4)
|
59
|
+
activerecord (= 6.1.4.4)
|
60
|
+
activesupport (= 6.1.4.4)
|
61
|
+
marcel (~> 1.0.0)
|
62
|
+
mini_mime (>= 1.1.0)
|
63
|
+
activesupport (6.1.4.4)
|
64
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
65
|
+
i18n (>= 1.6, < 2)
|
66
|
+
minitest (>= 5.1)
|
67
|
+
tzinfo (~> 2.0)
|
68
|
+
zeitwerk (~> 2.3)
|
69
|
+
appraisal (2.4.1)
|
70
|
+
bundler
|
71
|
+
rake
|
72
|
+
thor (>= 0.14.0)
|
73
|
+
ast (2.4.2)
|
74
|
+
builder (3.2.4)
|
75
|
+
byebug (11.1.3)
|
76
|
+
coderay (1.1.3)
|
77
|
+
concurrent-ruby (1.1.9)
|
78
|
+
crass (1.0.6)
|
79
|
+
diff-lcs (1.5.0)
|
80
|
+
erubi (1.10.0)
|
81
|
+
generator_spec (0.9.4)
|
82
|
+
activesupport (>= 3.0.0)
|
83
|
+
railties (>= 3.0.0)
|
84
|
+
globalid (1.0.0)
|
85
|
+
activesupport (>= 5.0)
|
86
|
+
i18n (1.8.11)
|
87
|
+
concurrent-ruby (~> 1.0)
|
88
|
+
loofah (2.13.0)
|
89
|
+
crass (~> 1.0.2)
|
90
|
+
nokogiri (>= 1.5.9)
|
91
|
+
mail (2.7.1)
|
92
|
+
mini_mime (>= 0.1.1)
|
93
|
+
marcel (1.0.2)
|
94
|
+
method_source (1.0.0)
|
95
|
+
mini_mime (1.1.2)
|
96
|
+
minitest (5.15.0)
|
97
|
+
mysql2 (0.5.3)
|
98
|
+
nio4r (2.5.8)
|
99
|
+
nokogiri (1.13.1-x86_64-darwin)
|
100
|
+
racc (~> 1.4)
|
101
|
+
parallel (1.21.0)
|
102
|
+
parser (3.1.0.0)
|
103
|
+
ast (~> 2.4.1)
|
104
|
+
pry (0.13.1)
|
105
|
+
coderay (~> 1.1)
|
106
|
+
method_source (~> 1.0)
|
107
|
+
pry-byebug (3.9.0)
|
108
|
+
byebug (~> 11.0)
|
109
|
+
pry (~> 0.13.0)
|
110
|
+
racc (1.6.0)
|
111
|
+
rack (2.2.3)
|
112
|
+
rack-test (1.1.0)
|
113
|
+
rack (>= 1.0, < 3)
|
114
|
+
rails (6.1.4.4)
|
115
|
+
actioncable (= 6.1.4.4)
|
116
|
+
actionmailbox (= 6.1.4.4)
|
117
|
+
actionmailer (= 6.1.4.4)
|
118
|
+
actionpack (= 6.1.4.4)
|
119
|
+
actiontext (= 6.1.4.4)
|
120
|
+
actionview (= 6.1.4.4)
|
121
|
+
activejob (= 6.1.4.4)
|
122
|
+
activemodel (= 6.1.4.4)
|
123
|
+
activerecord (= 6.1.4.4)
|
124
|
+
activestorage (= 6.1.4.4)
|
125
|
+
activesupport (= 6.1.4.4)
|
126
|
+
bundler (>= 1.15.0)
|
127
|
+
railties (= 6.1.4.4)
|
128
|
+
sprockets-rails (>= 2.0.0)
|
129
|
+
rails-dom-testing (2.0.3)
|
130
|
+
activesupport (>= 4.2.0)
|
131
|
+
nokogiri (>= 1.6)
|
132
|
+
rails-html-sanitizer (1.4.2)
|
133
|
+
loofah (~> 2.3)
|
134
|
+
railties (6.1.4.4)
|
135
|
+
actionpack (= 6.1.4.4)
|
136
|
+
activesupport (= 6.1.4.4)
|
137
|
+
method_source
|
138
|
+
rake (>= 0.13)
|
139
|
+
thor (~> 1.0)
|
140
|
+
rainbow (3.1.1)
|
141
|
+
rake (10.5.0)
|
142
|
+
regexp_parser (2.2.0)
|
143
|
+
rexml (3.2.5)
|
144
|
+
rspec (3.10.0)
|
145
|
+
rspec-core (~> 3.10.0)
|
146
|
+
rspec-expectations (~> 3.10.0)
|
147
|
+
rspec-mocks (~> 3.10.0)
|
148
|
+
rspec-core (3.10.1)
|
149
|
+
rspec-support (~> 3.10.0)
|
150
|
+
rspec-expectations (3.10.2)
|
151
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
152
|
+
rspec-support (~> 3.10.0)
|
153
|
+
rspec-mocks (3.10.2)
|
154
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
155
|
+
rspec-support (~> 3.10.0)
|
156
|
+
rspec-rails (5.0.2)
|
157
|
+
actionpack (>= 5.2)
|
158
|
+
activesupport (>= 5.2)
|
159
|
+
railties (>= 5.2)
|
160
|
+
rspec-core (~> 3.10)
|
161
|
+
rspec-expectations (~> 3.10)
|
162
|
+
rspec-mocks (~> 3.10)
|
163
|
+
rspec-support (~> 3.10)
|
164
|
+
rspec-support (3.10.3)
|
165
|
+
rubocop (1.22.3)
|
166
|
+
parallel (~> 1.10)
|
167
|
+
parser (>= 3.0.0.0)
|
168
|
+
rainbow (>= 2.2.2, < 4.0)
|
169
|
+
regexp_parser (>= 1.8, < 3.0)
|
170
|
+
rexml
|
171
|
+
rubocop-ast (>= 1.12.0, < 2.0)
|
172
|
+
ruby-progressbar (~> 1.7)
|
173
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
174
|
+
rubocop-ast (1.15.1)
|
175
|
+
parser (>= 3.0.1.1)
|
176
|
+
rubocop-rails (2.12.4)
|
177
|
+
activesupport (>= 4.2.0)
|
178
|
+
rack (>= 1.1)
|
179
|
+
rubocop (>= 1.7.0, < 2.0)
|
180
|
+
rubocop-rake (0.6.0)
|
181
|
+
rubocop (~> 1.0)
|
182
|
+
rubocop-rspec (2.5.0)
|
183
|
+
rubocop (~> 1.19)
|
184
|
+
ruby-progressbar (1.11.0)
|
185
|
+
sprockets (4.0.2)
|
186
|
+
concurrent-ruby (~> 1.0)
|
187
|
+
rack (> 1, < 3)
|
188
|
+
sprockets-rails (3.4.2)
|
189
|
+
actionpack (>= 5.2)
|
190
|
+
activesupport (>= 5.2)
|
191
|
+
sprockets (>= 3.0.0)
|
192
|
+
thor (1.2.1)
|
193
|
+
tzinfo (2.0.4)
|
194
|
+
concurrent-ruby (~> 1.0)
|
195
|
+
unicode-display_width (2.1.0)
|
196
|
+
websocket-driver (0.7.5)
|
197
|
+
websocket-extensions (>= 0.1.0)
|
198
|
+
websocket-extensions (0.1.5)
|
199
|
+
zeitwerk (2.5.3)
|
200
|
+
|
201
|
+
PLATFORMS
|
202
|
+
ruby
|
203
|
+
|
204
|
+
DEPENDENCIES
|
205
|
+
appraisal (~> 2.4.1)
|
206
|
+
bundler (~> 1.17)
|
207
|
+
generator_spec (~> 0.9.4)
|
208
|
+
is_this_used!
|
209
|
+
mysql2 (~> 0.5.3)
|
210
|
+
pry-byebug (~> 3.9)
|
211
|
+
rails (~> 6.1.0)
|
212
|
+
rake (~> 10.0)
|
213
|
+
rspec (~> 3.0)
|
214
|
+
rspec-rails (~> 5.0.2)
|
215
|
+
rubocop (~> 1.22.2)
|
216
|
+
rubocop-rails (~> 2.12.4)
|
217
|
+
rubocop-rake (~> 0.6.0)
|
218
|
+
rubocop-rspec (~> 2.5.0)
|
219
|
+
|
220
|
+
BUNDLED WITH
|
221
|
+
1.17.2
|
@@ -2,8 +2,6 @@
|
|
2
2
|
|
3
3
|
module IsThisUsed
|
4
4
|
module CruftTracker
|
5
|
-
extend ActiveSupport::Concern
|
6
|
-
|
7
5
|
INSTANCE_METHOD = 'instance_method'
|
8
6
|
CLASS_METHOD = 'class_method'
|
9
7
|
|
@@ -39,7 +37,9 @@ module IsThisUsed
|
|
39
37
|
|
40
38
|
def self.filtered_stack
|
41
39
|
caller_locations.reject do |location|
|
42
|
-
location.path.match?(
|
40
|
+
location.path.match?(
|
41
|
+
%r{\/lib\/is_this_used\/(cruft_tracker.rb|util\/log_suppressor.rb)$}
|
42
|
+
)
|
43
43
|
end.map do |location|
|
44
44
|
{
|
45
45
|
path: location.path,
|
@@ -51,27 +51,44 @@ module IsThisUsed
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
target_method = target_method(method_name, method_type)
|
58
|
-
|
59
|
-
potential_cruft =
|
60
|
-
PotentialCruft.find_or_create_by(
|
61
|
-
owner_name: self.name,
|
62
|
-
method_name: method_name,
|
63
|
-
method_type: method_type
|
64
|
-
)
|
65
|
-
|
66
|
-
target_method.owner.define_method target_method.name do |*args|
|
67
|
-
CruftTracker::Recorder.record_invocation(potential_cruft)
|
54
|
+
def self.included(base)
|
55
|
+
base.extend ClassMethods
|
56
|
+
end
|
68
57
|
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
58
|
+
module ClassMethods
|
59
|
+
def is_this_used?(method_name, method_type: nil)
|
60
|
+
IsThisUsed::Util::LogSuppressor.suppress_logging do
|
61
|
+
method_type ||= determine_method_type(method_name)
|
62
|
+
target_method = target_method(method_name, method_type)
|
63
|
+
|
64
|
+
potential_cruft =
|
65
|
+
PotentialCruft.find_or_create_by(
|
66
|
+
owner_name: self.name,
|
67
|
+
method_name: method_name,
|
68
|
+
method_type: method_type
|
69
|
+
)
|
70
|
+
|
71
|
+
target_method.owner.define_method target_method.name do |*args|
|
72
|
+
IsThisUsed::Util::LogSuppressor.suppress_logging do
|
73
|
+
CruftTracker::Recorder.record_invocation(potential_cruft)
|
74
|
+
end
|
75
|
+
if method_type == INSTANCE_METHOD
|
76
|
+
target_method.bind(self).call(*args)
|
77
|
+
else
|
78
|
+
target_method.call(*args)
|
79
|
+
end
|
73
80
|
end
|
74
81
|
end
|
82
|
+
rescue ActiveRecord::StatementInvalid => e
|
83
|
+
raise unless e.cause.present? && e.cause.instance_of?(Mysql2::Error)
|
84
|
+
|
85
|
+
Rails.logger.warn(
|
86
|
+
'There was an error recording potential cruft. Does the potential_crufts table exist?'
|
87
|
+
)
|
88
|
+
rescue Mysql2::Error::ConnectionError
|
89
|
+
Rails.logger.warn(
|
90
|
+
'There was an error recording potential cruft due to being unable to connect to the database. This may be a non-issue in cases where the database is intentionally not available.'
|
91
|
+
)
|
75
92
|
end
|
76
93
|
|
77
94
|
def target_method(method_name, method_type)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module IsThisUsed
|
4
|
+
module Util
|
5
|
+
class LogSuppressor
|
6
|
+
def self.suppress_logging
|
7
|
+
initial_log_level = ActiveRecord::Base.logger.level
|
8
|
+
ActiveRecord::Base.logger.level = :error
|
9
|
+
yield
|
10
|
+
ActiveRecord::Base.logger.level = initial_log_level
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/is_this_used/version.rb
CHANGED
data/lib/is_this_used.rb
CHANGED
@@ -2,6 +2,7 @@ require 'is_this_used/version'
|
|
2
2
|
require 'is_this_used/cruft_tracker'
|
3
3
|
require 'is_this_used/models/potential_cruft'
|
4
4
|
require 'is_this_used/models/potential_cruft_stack'
|
5
|
+
require 'is_this_used/util/log_suppressor'
|
5
6
|
|
6
7
|
module IsThisUsed
|
7
8
|
class Error < StandardError; end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: is_this_used
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Doug Hughes
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-01-
|
11
|
+
date: 2022-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -228,6 +228,8 @@ files:
|
|
228
228
|
- gemfiles/rails_5.2.gemfile.lock
|
229
229
|
- gemfiles/rails_6.0.gemfile
|
230
230
|
- gemfiles/rails_6.0.gemfile.lock
|
231
|
+
- gemfiles/rails_6.1.gemfile
|
232
|
+
- gemfiles/rails_6.1.gemfile.lock
|
231
233
|
- is_this_used.gemspec
|
232
234
|
- lib/generators/is_this_used/migration_generator.rb
|
233
235
|
- lib/generators/is_this_used/templates/create_potential_cruft_stacks.rb.erb
|
@@ -236,6 +238,7 @@ files:
|
|
236
238
|
- lib/is_this_used/cruft_tracker.rb
|
237
239
|
- lib/is_this_used/models/potential_cruft.rb
|
238
240
|
- lib/is_this_used/models/potential_cruft_stack.rb
|
241
|
+
- lib/is_this_used/util/log_suppressor.rb
|
239
242
|
- lib/is_this_used/version.rb
|
240
243
|
- log/test.log
|
241
244
|
homepage: https://github.com/dhughes/is_this_used
|