rubocop-flexport 0.5.0 → 0.6.0
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/lib/rubocop/cop/flexport/engine_api_boundary.rb +45 -30
- data/lib/rubocop/flexport/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 163dbf64bd5550b4f890d2125230be59ba2c1d87e5bf59c513ae206f171852f7
|
4
|
+
data.tar.gz: f7a597e3f5f770d217ea3be631a95cc8b3b16c73e683ef67b775e5195b95ebcd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0444612966a40c981dad3f31b02738232d186a112fc06ba167f93f93630346e72ea14ab3bae765c3336bc17797885d604d87ab30935880941d7c7163b47df34c'
|
7
|
+
data.tar.gz: 056f32d4e6da4c4eeabaa41340fa096fc87592a8fe3bf4358357b733a380f667ed21112104bb1e6fec26d66bdb14e71223e6085c0c31e784ebfa16e6947d1652
|
@@ -142,18 +142,20 @@ module RuboCop
|
|
142
142
|
include EngineApi
|
143
143
|
include EngineNodeContext
|
144
144
|
|
145
|
-
MSG = 'Direct access of %<
|
146
|
-
'Only access engine via %<
|
145
|
+
MSG = 'Direct access of %<accessed_engine>s engine. ' \
|
146
|
+
'Only access engine via %<accessed_engine>s::Api.'
|
147
147
|
|
148
148
|
STRONGLY_PROTECTED_MSG = 'All direct access of ' \
|
149
|
-
'%<
|
149
|
+
'%<accessed_engine>s engine disallowed because ' \
|
150
150
|
'it is in StronglyProtectedEngines list.'
|
151
151
|
|
152
152
|
STRONGLY_PROTECTED_CURRENT_MSG = 'Direct ' \
|
153
|
-
'access of
|
154
|
-
'it\'s in the %<
|
153
|
+
'access of %<accessed_engine>s is disallowed in this file ' \
|
154
|
+
'because it\'s in the %<current_engine>s engine, which ' \
|
155
155
|
'is in the StronglyProtectedEngines list.'
|
156
156
|
|
157
|
+
MAIN_APP_NAME = 'MainApp::EngineApi'
|
158
|
+
|
157
159
|
def_node_matcher :rails_association_hash_args, <<-PATTERN
|
158
160
|
(send _ {:belongs_to :has_one :has_many} sym $hash)
|
159
161
|
PATTERN
|
@@ -168,11 +170,11 @@ module RuboCop
|
|
168
170
|
# We don't want to warn on these cases either.
|
169
171
|
return if sending_method_to_namespace_itself?(node)
|
170
172
|
|
171
|
-
|
172
|
-
return unless
|
173
|
-
return if valid_engine_access?(node,
|
173
|
+
accessed_engine = extract_accessed_engine(node)
|
174
|
+
return unless accessed_engine
|
175
|
+
return if valid_engine_access?(node, accessed_engine)
|
174
176
|
|
175
|
-
add_offense(node, message: message(
|
177
|
+
add_offense(node, message: message(accessed_engine))
|
176
178
|
end
|
177
179
|
|
178
180
|
def on_send(node)
|
@@ -180,11 +182,11 @@ module RuboCop
|
|
180
182
|
class_name_node = extract_class_name_node(assocation_hash_args)
|
181
183
|
next if class_name_node.nil?
|
182
184
|
|
183
|
-
|
184
|
-
next if
|
185
|
-
next if valid_engine_access?(node,
|
185
|
+
accessed_engine = extract_model_engine(class_name_node)
|
186
|
+
next if accessed_engine.nil?
|
187
|
+
next if valid_engine_access?(node, accessed_engine)
|
186
188
|
|
187
|
-
add_offense(class_name_node, message: message(
|
189
|
+
add_offense(class_name_node, message: message(accessed_engine))
|
188
190
|
end
|
189
191
|
end
|
190
192
|
|
@@ -194,22 +196,35 @@ module RuboCop
|
|
194
196
|
|
195
197
|
private
|
196
198
|
|
197
|
-
def message(
|
198
|
-
if strongly_protected_engine?(
|
199
|
-
format(STRONGLY_PROTECTED_MSG,
|
199
|
+
def message(accessed_engine)
|
200
|
+
if strongly_protected_engine?(accessed_engine)
|
201
|
+
format(STRONGLY_PROTECTED_MSG, accessed_engine: accessed_engine)
|
200
202
|
elsif strongly_protected_engine?(current_engine)
|
201
|
-
format(
|
203
|
+
format(
|
204
|
+
STRONGLY_PROTECTED_CURRENT_MSG,
|
205
|
+
accessed_engine: accessed_engine,
|
206
|
+
current_engine: current_engine
|
207
|
+
)
|
202
208
|
else
|
203
|
-
format(MSG,
|
209
|
+
format(MSG, accessed_engine: accessed_engine)
|
204
210
|
end
|
205
211
|
end
|
206
212
|
|
207
|
-
def
|
213
|
+
def extract_accessed_engine(node)
|
214
|
+
return MAIN_APP_NAME if disallowed_main_app_access?(node)
|
208
215
|
return nil unless protected_engines.include?(node.const_name)
|
209
216
|
|
210
217
|
node.const_name
|
211
218
|
end
|
212
219
|
|
220
|
+
def disallowed_main_app_access?(node)
|
221
|
+
strongly_protected_engine?(current_engine) && main_app_access?(node)
|
222
|
+
end
|
223
|
+
|
224
|
+
def main_app_access?(node)
|
225
|
+
node.const_name.start_with?(MAIN_APP_NAME)
|
226
|
+
end
|
227
|
+
|
213
228
|
def engines_path
|
214
229
|
path = cop_config['EnginesPath']
|
215
230
|
path += '/' unless path.end_with?('/')
|
@@ -239,21 +254,21 @@ module RuboCop
|
|
239
254
|
node.parent.send_type?
|
240
255
|
end
|
241
256
|
|
242
|
-
def valid_engine_access?(node,
|
243
|
-
return true if in_engine_file?(
|
257
|
+
def valid_engine_access?(node, accessed_engine)
|
258
|
+
return true if in_engine_file?(accessed_engine)
|
244
259
|
return true if engine_specific_override?(node)
|
245
260
|
|
246
261
|
return false if strongly_protected_engine?(current_engine)
|
247
|
-
return false if strongly_protected_engine?(
|
262
|
+
return false if strongly_protected_engine?(accessed_engine)
|
248
263
|
|
249
|
-
valid_engine_api_access?(node,
|
264
|
+
valid_engine_api_access?(node, accessed_engine)
|
250
265
|
end
|
251
266
|
|
252
|
-
def valid_engine_api_access?(node,
|
267
|
+
def valid_engine_api_access?(node, accessed_engine)
|
253
268
|
(
|
254
|
-
in_legacy_dependent_file?(
|
269
|
+
in_legacy_dependent_file?(accessed_engine) ||
|
255
270
|
through_api?(node) ||
|
256
|
-
whitelisted?(node,
|
271
|
+
whitelisted?(node, accessed_engine)
|
257
272
|
)
|
258
273
|
end
|
259
274
|
|
@@ -291,12 +306,12 @@ module RuboCop
|
|
291
306
|
end
|
292
307
|
end
|
293
308
|
|
294
|
-
def in_engine_file?(
|
295
|
-
current_engine ==
|
309
|
+
def in_engine_file?(accessed_engine)
|
310
|
+
current_engine == accessed_engine
|
296
311
|
end
|
297
312
|
|
298
|
-
def in_legacy_dependent_file?(
|
299
|
-
legacy_dependents = read_api_file(
|
313
|
+
def in_legacy_dependent_file?(accessed_engine)
|
314
|
+
legacy_dependents = read_api_file(accessed_engine, :legacy_dependents)
|
300
315
|
# The file names are strings so we need to remove the escaped quotes
|
301
316
|
# on either side from the source code.
|
302
317
|
legacy_dependents = legacy_dependents.map do |source|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-flexport
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Flexport Engineering
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-02-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|