overrides_tracker 0.1.9 → 0.1.13
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/overrides_tracker.svg)](https://badge.fury.io/rb/overrides_tracker)
|
5
|
+
[![Coverage Status](https://coveralls.io/repos/github/SyborgStudios/overrides_tracker/badge.svg?branch=master)](https://coveralls.io/github/SyborgStudios/overrides_tracker?branch=master)
|
6
|
+
[![CircleCI](https://dl.circleci.com/status-badge/img/gh/SyborgStudios/overrides_tracker/tree/master.svg?style=svg)](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']
|