overrides_tracker 0.1.9 → 0.1.13
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/.circleci/config.yml +20 -0
- data/.gitignore +4 -1
- data/Gemfile +12 -3
- data/Gemfile.lock +109 -0
- data/README.md +98 -38
- data/Rakefile +3 -3
- data/bin/console +3 -3
- data/bin/overrides_tracker +39 -21
- data/lib/external/require_all.rb +252 -0
- data/lib/overrides_tracker/api.rb +47 -19
- data/lib/overrides_tracker/comparer.rb +313 -75
- data/lib/overrides_tracker/file_observer.rb +1 -1
- data/lib/overrides_tracker/hash_decorator.rb +41 -0
- data/lib/overrides_tracker/methods_collector.rb +114 -83
- data/lib/overrides_tracker/string_colorizer.rb +3 -5
- data/lib/overrides_tracker/util.rb +22 -25
- data/lib/overrides_tracker/version.rb +1 -1
- data/lib/overrides_tracker.rb +17 -38
- data/overrides_tracker/branch_name#last_commit_id.otf +1 -0
- data/overrides_tracker.gemspec +21 -21
- data/spec/overrides_tracker/api_spec.rb +227 -0
- data/spec/overrides_tracker/comparer_spec.rb +965 -0
- data/spec/overrides_tracker/file_observer_spec.rb +10 -0
- data/spec/overrides_tracker/hash_decorator_spec.rb +42 -0
- data/spec/overrides_tracker/methods_collector_spec.rb +336 -0
- data/spec/overrides_tracker/string_colorizer_spec.rb +73 -0
- data/spec/overrides_tracker/util_spec.rb +58 -0
- data/spec/overrides_tracker/version_spec.rb +9 -0
- data/spec/overrides_tracker_spec.rb +1 -5
- data/spec/result_files/master.otf +134 -0
- data/spec/spec_helper.rb +21 -5
- data/spec/test_classes/custom_class.rb +31 -0
- metadata +35 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 219f854619f81277c8acbec980e72ecd29baff6ce9977a5411dc75108c367a97
|
4
|
+
data.tar.gz: 6df617ee3d8c9859cd0e9e02e5209a5a19679cc7f5a7e657da3a53892ab049c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19c3852c01f26cd97c46e95367294a7246d277e9e0c47f8d5e3b65e80d0c899a5344bd82eafdadea51e784e88c745f6a4fac7115342135ba657d6d92f2c83002
|
7
|
+
data.tar.gz: f1a918217ab3df5971148dc95a95276ba5d2de07d973bd6a631a4789252cfce1f6985ac0c6f01466eaf439f1495dbbda1fc9bc2c5343979c718ed4ddc8b6dc6e
|
@@ -0,0 +1,20 @@
|
|
1
|
+
version: 2.1
|
2
|
+
orbs:
|
3
|
+
ruby: circleci/ruby@1.0.4
|
4
|
+
coveralls: coveralls/coveralls@1.0.6
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
docker:
|
8
|
+
- image: cimg/ruby:2.7.2-node
|
9
|
+
steps:
|
10
|
+
- checkout
|
11
|
+
- ruby/install-deps
|
12
|
+
- run:
|
13
|
+
name: Run tests
|
14
|
+
command: bundle exec rspec
|
15
|
+
|
16
|
+
workflows:
|
17
|
+
version: 2
|
18
|
+
deploy:
|
19
|
+
jobs:
|
20
|
+
- test
|
data/.gitignore
CHANGED
data/Gemfile
CHANGED
@@ -1,6 +1,15 @@
|
|
1
|
-
source
|
1
|
+
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
|
3
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
4
|
+
|
5
|
+
group :development do
|
6
|
+
gem 'coveralls_reborn', '~> 0.25.0', require: false
|
7
|
+
gem 'rspec'
|
8
|
+
gem 'rspec_junit_formatter'
|
9
|
+
gem 'rubocop', require: false
|
10
|
+
gem 'simplecov', require: false
|
11
|
+
gem 'simplecov-lcov', '~> 0.8.0'
|
12
|
+
end
|
4
13
|
|
5
14
|
# Specify your gem's dependencies in overrides_tracker.gemspec
|
6
15
|
gemspec
|
@@ -11,4 +20,4 @@ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('1.9')
|
|
11
20
|
else
|
12
21
|
gem 'vcr', '>= 2.9'
|
13
22
|
gem 'webmock', '>= 1.20'
|
14
|
-
end
|
23
|
+
end
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
overrides_tracker (0.1.11)
|
5
|
+
activesupport
|
6
|
+
method_source
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
activesupport (6.1.7)
|
12
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
13
|
+
i18n (>= 1.6, < 2)
|
14
|
+
minitest (>= 5.1)
|
15
|
+
tzinfo (~> 2.0)
|
16
|
+
zeitwerk (~> 2.3)
|
17
|
+
addressable (2.8.1)
|
18
|
+
public_suffix (>= 2.0.2, < 6.0)
|
19
|
+
ast (2.4.2)
|
20
|
+
concurrent-ruby (1.1.10)
|
21
|
+
coveralls_reborn (0.25.0)
|
22
|
+
simplecov (>= 0.18.1, < 0.22.0)
|
23
|
+
term-ansicolor (~> 1.6)
|
24
|
+
thor (>= 0.20.3, < 2.0)
|
25
|
+
tins (~> 1.16)
|
26
|
+
crack (0.4.5)
|
27
|
+
rexml
|
28
|
+
diff-lcs (1.5.0)
|
29
|
+
docile (1.4.0)
|
30
|
+
hashdiff (1.0.1)
|
31
|
+
i18n (1.12.0)
|
32
|
+
concurrent-ruby (~> 1.0)
|
33
|
+
json (2.6.3)
|
34
|
+
method_source (1.0.0)
|
35
|
+
minitest (5.16.3)
|
36
|
+
parallel (1.22.1)
|
37
|
+
parser (3.1.3.0)
|
38
|
+
ast (~> 2.4.1)
|
39
|
+
public_suffix (5.0.1)
|
40
|
+
rainbow (3.1.1)
|
41
|
+
regexp_parser (2.6.1)
|
42
|
+
rexml (3.2.5)
|
43
|
+
rspec (3.12.0)
|
44
|
+
rspec-core (~> 3.12.0)
|
45
|
+
rspec-expectations (~> 3.12.0)
|
46
|
+
rspec-mocks (~> 3.12.0)
|
47
|
+
rspec-core (3.12.0)
|
48
|
+
rspec-support (~> 3.12.0)
|
49
|
+
rspec-expectations (3.12.0)
|
50
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
51
|
+
rspec-support (~> 3.12.0)
|
52
|
+
rspec-mocks (3.12.1)
|
53
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
54
|
+
rspec-support (~> 3.12.0)
|
55
|
+
rspec-support (3.12.0)
|
56
|
+
rspec_junit_formatter (0.6.0)
|
57
|
+
rspec-core (>= 2, < 4, != 2.12.0)
|
58
|
+
rubocop (1.40.0)
|
59
|
+
json (~> 2.3)
|
60
|
+
parallel (~> 1.10)
|
61
|
+
parser (>= 3.1.2.1)
|
62
|
+
rainbow (>= 2.2.2, < 4.0)
|
63
|
+
regexp_parser (>= 1.8, < 3.0)
|
64
|
+
rexml (>= 3.2.5, < 4.0)
|
65
|
+
rubocop-ast (>= 1.23.0, < 2.0)
|
66
|
+
ruby-progressbar (~> 1.7)
|
67
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
68
|
+
rubocop-ast (1.24.0)
|
69
|
+
parser (>= 3.1.1.0)
|
70
|
+
ruby-progressbar (1.11.0)
|
71
|
+
simplecov (0.21.2)
|
72
|
+
docile (~> 1.1)
|
73
|
+
simplecov-html (~> 0.11)
|
74
|
+
simplecov_json_formatter (~> 0.1)
|
75
|
+
simplecov-html (0.12.3)
|
76
|
+
simplecov-lcov (0.8.0)
|
77
|
+
simplecov_json_formatter (0.1.4)
|
78
|
+
sync (0.5.0)
|
79
|
+
term-ansicolor (1.7.1)
|
80
|
+
tins (~> 1.0)
|
81
|
+
thor (1.2.1)
|
82
|
+
tins (1.32.1)
|
83
|
+
sync
|
84
|
+
tzinfo (2.0.5)
|
85
|
+
concurrent-ruby (~> 1.0)
|
86
|
+
unicode-display_width (2.3.0)
|
87
|
+
vcr (6.1.0)
|
88
|
+
webmock (3.18.1)
|
89
|
+
addressable (>= 2.8.0)
|
90
|
+
crack (>= 0.3.2)
|
91
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
92
|
+
zeitwerk (2.6.6)
|
93
|
+
|
94
|
+
PLATFORMS
|
95
|
+
ruby
|
96
|
+
|
97
|
+
DEPENDENCIES
|
98
|
+
coveralls_reborn (~> 0.25.0)
|
99
|
+
overrides_tracker!
|
100
|
+
rspec
|
101
|
+
rspec_junit_formatter
|
102
|
+
rubocop
|
103
|
+
simplecov
|
104
|
+
simplecov-lcov (~> 0.8.0)
|
105
|
+
vcr (>= 2.9)
|
106
|
+
webmock (>= 1.20)
|
107
|
+
|
108
|
+
BUNDLED WITH
|
109
|
+
2.1.4
|
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# Overrides Tracker
|
2
2
|
Overrides Tracker keeps track of all overriding methods in your project and allows for comparison across branches.
|
3
3
|
|
4
|
+
[](https://badge.fury.io/rb/overrides_tracker)
|
5
|
+
[](https://coveralls.io/github/SyborgStudios/overrides_tracker?branch=master)
|
6
|
+
[](https://dl.circleci.com/status-badge/redirect/gh/SyborgStudios/overrides_tracker/tree/master)
|
7
|
+
|
4
8
|
## Contact
|
5
9
|
|
6
10
|
*Code and Bug Reports*
|
@@ -16,7 +20,7 @@ Getting started
|
|
16
20
|
```ruby
|
17
21
|
gem 'overrides_tracker', group: [:test, :development]
|
18
22
|
```
|
19
|
-
2. Add `overrides_tracker/*.otf` to your .gitignore file because you
|
23
|
+
2. Add `overrides_tracker/*.otf` to your .gitignore file because you want to keep hold of your report file when switching branches.
|
20
24
|
|
21
25
|
3. Track you overrides by running:
|
22
26
|
```ruby
|
@@ -43,7 +47,7 @@ Getting started
|
|
43
47
|
Report saved to /PATH_TO_PROJECT/overrides_tracker/BRANCH_NAME#LAST_COMMIT_ID.otf
|
44
48
|
```
|
45
49
|
|
46
|
-
4. This will create a folder called overrides_tracker and
|
50
|
+
4. This will create a folder called overrides_tracker and a file containing all methods you override as well as your overrides in that branch.
|
47
51
|
|
48
52
|
5. Switch branch and follow steps 1-3 again. If you want to compare multiple branches you need to redo these steps for every branch.
|
49
53
|
|
@@ -59,68 +63,124 @@ Getting started
|
|
59
63
|
```
|
60
64
|
===========================================================================================
|
61
65
|
|
62
|
-
1)
|
66
|
+
1) Override: OrdinaryGem::AnotherTypicalClass#a_singleton_method_that_stays_the_same
|
63
67
|
|
64
|
-
|
68
|
+
...........................................................................................
|
65
69
|
|
66
|
-
|
67
|
-
|
68
|
-
.
|
69
|
-
.
|
70
|
+
main#cc5a31dc4833734a177f01bd161047f8c7909e16.otf
|
71
|
+
-------------------------------------------------------------------------------------------
|
70
72
|
|
71
|
-
|
73
|
+
Original:
|
72
74
|
|
73
|
-
|
75
|
+
def self.a_singleton_method_that_stays_the_same
|
76
|
+
"This is the implementation of a simple singleton method."
|
77
|
+
"This method will stay the same in the next version."
|
78
|
+
end
|
74
79
|
|
75
|
-
in: master#528a0206d8f7cfe08737193659f85e28ccb260eb.otf
|
76
|
-
YClass#a_singelton_method_override:
|
77
80
|
|
78
|
-
|
79
|
-
|
80
|
-
does_stuff_one_way
|
81
|
-
end
|
81
|
+
in BUNDLE_PATH/bundler/gems/ordinary-gem-e67e062189bb/lib/ordinary_gem/another_typical_class.rb:19
|
82
|
+
|
82
83
|
|
83
|
-
|
84
|
+
-------------------------------------------------------------------------------------------
|
84
85
|
|
85
86
|
Override:
|
86
|
-
|
87
|
-
|
87
|
+
|
88
|
+
def self.a_singleton_method_that_stays_the_same
|
89
|
+
"This is our override of a simple singleton method."
|
90
|
+
"This method should stay the same in the next version."
|
88
91
|
end
|
89
92
|
|
90
|
-
|
93
|
+
|
94
|
+
in: APP_PATH/app/models/ordinary_gem/another_typical_class_monkey_patch.rb:2
|
95
|
+
|
91
96
|
|
92
97
|
|
93
|
-
|
94
|
-
YClass#a_singelton_method_override:
|
98
|
+
...........................................................................................
|
95
99
|
|
96
|
-
|
97
|
-
|
98
|
-
|
100
|
+
attached-to-next-version#a7231014c006a4a5848eb4d92bb465eb5c89ee01.otf
|
101
|
+
-------------------------------------------------------------------------------------------
|
102
|
+
|
103
|
+
Original:
|
104
|
+
|
105
|
+
def self.a_singleton_method_that_stays_the_same
|
106
|
+
"This is the implementation of a simple singleton method."
|
107
|
+
"This method will stay the same in the next version."
|
99
108
|
end
|
100
109
|
|
101
|
-
|
110
|
+
|
111
|
+
in BUNDLE_PATH/bundler/gems/ordinary-gem-f92e5a1a70a6/lib/ordinary_gem/another_typical_class.rb:13
|
112
|
+
|
113
|
+
|
114
|
+
-------------------------------------------------------------------------------------------
|
102
115
|
|
103
116
|
Override:
|
104
|
-
|
105
|
-
|
117
|
+
|
118
|
+
def self.a_singleton_method_that_stays_the_same
|
119
|
+
"This is our override of a simple singleton method."
|
120
|
+
"This method should stay the same in the next version."
|
106
121
|
end
|
107
122
|
|
108
|
-
/PATH_TO_PROJECT/app/models/decorators/y_class_decorator.rb:13
|
109
123
|
|
124
|
+
in: APP_PATH/app/models/ordinary_gem/another_typical_class_monkey_patch.rb:2
|
125
|
+
|
126
|
+
|
127
|
+
|
128
|
+
...........................................................................................
|
129
|
+
|
130
|
+
main#1d279724b26c9491e6e5a01e9711b61a73e9f7e0.otf
|
131
|
+
Method not available
|
132
|
+
|
133
|
+
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
...........................................................................................
|
138
|
+
.
|
139
|
+
.
|
140
|
+
.
|
141
|
+
.
|
110
142
|
===========================================================================================
|
111
143
|
|
112
144
|
Summary:
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
15 source method bodies have changed
|
145
|
+
|
146
|
+
Investigated methods: 70
|
147
|
+
Diffences on overrides: 42
|
148
|
+
Diffences on added methods: 28
|
149
|
+
|
119
150
|
```
|
120
|
-
|
151
|
+
|
152
|
+
## Overrides.io integration
|
153
|
+
<img width="1000" alt="Bildschirmfoto 2023-01-10 um 21 39 42" src="https://user-images.githubusercontent.com/9799974/211657428-c2a7e272-ae86-4c1c-8e77-0a07acc1a4a0.png">
|
154
|
+
|
155
|
+
Overrides.io is a service that monitors code you override for changes. It notifies you whenever those changes occur.
|
156
|
+
Additionally it gives you a beautiful overview of all the methods you have overridden as well as your overrides side by side.
|
157
|
+
<p float="left">
|
158
|
+
<img width="500" alt="Bildschirmfoto 2023-01-10 um 21 39 15" src="https://user-images.githubusercontent.com/9799974/211658325-60c21057-1a07-4b55-a4d5-3d82470fb3ee.png">
|
159
|
+
<img width="500" alt="Bildschirmfoto 2023-01-10 um 21 39 28" src="https://user-images.githubusercontent.com/9799974/211658362-f50435dd-56c5-498b-9038-f702addb0717.png">
|
160
|
+
</p>
|
161
|
+
Overrides Tracker can easily be integrated into you CI/CD pipeline and configured to send the result files to overrides.io.
|
162
|
+
|
163
|
+
You basically just have to set OVERRIDES_API_TOKEN environment variable and call 'bundle exec overrides_tracker track'.
|
164
|
+
To push it to overrides.io locally you could also just call 'bundle exec overrides_tracker track YOUR_OVERRIDES_API_TOKEN'.
|
165
|
+
|
166
|
+
You can find a detailed description how to integrate it with CircleCI, GitHub Action and Jenkins here:
|
167
|
+
|
168
|
+
https://www.overrides.io/continuous_integration
|
169
|
+
|
170
|
+
## GEM support
|
171
|
+
|
172
|
+
Overrides Tracker can also be used on GEMs. It will autoload all classes in the lib and app folders.
|
173
|
+
|
174
|
+
Sometimes that is not enough:
|
175
|
+
|
176
|
+
If you need further requirements, you can just add a .overrides_tracker folder and add a requirements.rb file to it.
|
177
|
+
In that one you can just require the classes your gem depends on.
|
178
|
+
|
179
|
+
You can also use the ['require_all'](https://github.com/jarmo/require_all) way to include complete folders, filter files etc..
|
180
|
+
|
121
181
|
## Ruby version compatibility
|
122
182
|
|
123
|
-
|
183
|
+
Overrides Tracker is built in [Continuous Integration] on Ruby 2.3+.
|
124
184
|
|
125
185
|
## Code of Conduct
|
126
186
|
|
@@ -137,4 +197,4 @@ Everyone participating in this project's development, issue trackers and other c
|
|
137
197
|
|
138
198
|
## Copyright
|
139
199
|
|
140
|
-
Copyright (c)
|
200
|
+
Copyright (c) 2023 Simon Meyborg. See MIT-LICENSE for details.
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'overrides_tracker'
|
5
5
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +10,5 @@ require "overrides_tracker"
|
|
10
10
|
# require "pry"
|
11
11
|
# Pry.start
|
12
12
|
|
13
|
-
require
|
13
|
+
require 'irb'
|
14
14
|
IRB.start(__FILE__)
|
data/bin/overrides_tracker
CHANGED
@@ -1,35 +1,53 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
if ARGV[0] ==
|
3
|
-
|
4
|
-
puts 'Reading all methods...'
|
5
|
-
OVERRIDES_TRACKER_TRACKING_ENABLED = true
|
6
|
-
require Dir.pwd+'/config/environment.rb'
|
7
|
-
require 'overrides_tracker'
|
2
|
+
if ARGV[0] == 'track'
|
3
|
+
# We set this constant so monkey patching of the gem is only done when checking the overrides
|
8
4
|
|
9
|
-
|
10
|
-
|
5
|
+
OVERRIDES_TRACKER_TRACKING_ENABLED = true
|
6
|
+
require 'overrides_tracker'
|
11
7
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
app_environment_file = Dir.pwd + '/config/environment.rb'
|
9
|
+
if File.exist?(app_environment_file)
|
10
|
+
#We are in a Rails app
|
11
|
+
puts 'Reading all methods...'
|
12
|
+
require app_environment_file
|
13
|
+
else
|
14
|
+
#We are in a gem
|
15
|
+
puts 'Looking for .overrides_tracker/requierements.rb file for extra requirements...'
|
16
|
+
require 'external/require_all'
|
17
|
+
gem_requirements_file = Dir.pwd + '/.overrides_tracker/requirements.rb'
|
18
|
+
|
19
|
+
if File.exist?(gem_requirements_file)
|
20
|
+
puts 'Reading all methods...'
|
21
|
+
require gem_requirements_file
|
16
22
|
else
|
17
|
-
|
18
|
-
#puts ''
|
19
|
-
#puts 'Have no idea what overrides.io is about? Check it out at https://www.overrides.com'
|
23
|
+
puts 'Reading all methods...'
|
20
24
|
end
|
21
25
|
|
22
|
-
|
26
|
+
|
27
|
+
require_all 'lib/**/*.rb', base_dir: Dir.pwd
|
28
|
+
require_all 'app/**/*.rb', base_dir: Dir.pwd
|
29
|
+
end
|
30
|
+
|
31
|
+
OverridesTracker::MethodsCollector.instance.build_overrides_hash
|
32
|
+
OverridesTracker::MethodsCollector.instance.save_to_file
|
33
|
+
|
34
|
+
if ENV['OVERRIDES_API_TOKEN']
|
35
|
+
OverridesTracker::MethodsCollector.instance.report(ENV['OVERRIDES_API_TOKEN'])
|
36
|
+
elsif !ARGV[1].nil?
|
37
|
+
OverridesTracker::MethodsCollector.instance.report(ARGV[1])
|
38
|
+
end
|
39
|
+
|
40
|
+
elsif ARGV[0] == 'compare'
|
23
41
|
require 'overrides_tracker'
|
24
42
|
OverridesTracker::Comparer.compare
|
25
43
|
|
26
44
|
unless ENV['OVERRIDES_API_TOKEN']
|
27
45
|
puts ''
|
28
|
-
#puts 'Have you heard of overrides.io?'
|
29
|
-
#puts 'It integrates with your CI pipeline and notifies you whenever original methods are changing or disappearing.'
|
30
|
-
#puts 'Check it out at https://www.overrides.com'
|
31
|
-
end
|
32
|
-
elsif ARGV[0] ==
|
46
|
+
# puts 'Have you heard of overrides.io?'
|
47
|
+
# puts 'It integrates with your CI pipeline and notifies you whenever original methods are changing or disappearing.'
|
48
|
+
# puts 'Check it out at https://www.overrides.com'
|
49
|
+
end
|
50
|
+
elsif ARGV[0] == 'report'
|
33
51
|
require 'overrides_tracker'
|
34
52
|
|
35
53
|
if ENV['OVERRIDES_API_TOKEN']
|