rubocop-flexport 0.5.0 → 0.6.0

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: e7bfc3b432b328659f2ac2dd842e48c05028482c7538fcd2f03a33dbbee4b561
4
- data.tar.gz: b9fade3c98f628825b648b184fba3c6317c94476f2c4de1791bdf2aab7e7b372
3
+ metadata.gz: 163dbf64bd5550b4f890d2125230be59ba2c1d87e5bf59c513ae206f171852f7
4
+ data.tar.gz: f7a597e3f5f770d217ea3be631a95cc8b3b16c73e683ef67b775e5195b95ebcd
5
5
  SHA512:
6
- metadata.gz: 3a7687a4bf47c4f476006a00c7852d5c008daeb88693949b2ff182e28f46c6344fba487ed6e86cda52fc454a7cc5266ae33b47b98829494c96c8e902746c8faa
7
- data.tar.gz: 01561c084ee90550946391998f5a28bf0959a2758ece148762714ccb28bb6db2300c8829c13776544a969fab377b136b47b864a8fab76d50461f0d4af9d821f3
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 %<engine>s engine. ' \
146
- 'Only access engine via %<engine>s::Api.'
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
- '%<engine>s engine disallowed because ' \
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 other engines is disallowed in this file because ' \
154
- 'it\'s in the %<engine>s engine, which ' \
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
- engine = extract_engine(node)
172
- return unless engine
173
- return if valid_engine_access?(node, engine)
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(node, engine))
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
- engine = extract_model_engine(class_name_node)
184
- next if engine.nil?
185
- next if valid_engine_access?(node, engine)
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(node, engine))
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(_node, engine)
198
- if strongly_protected_engine?(engine)
199
- format(STRONGLY_PROTECTED_MSG, engine: engine)
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(STRONGLY_PROTECTED_CURRENT_MSG, engine: current_engine)
203
+ format(
204
+ STRONGLY_PROTECTED_CURRENT_MSG,
205
+ accessed_engine: accessed_engine,
206
+ current_engine: current_engine
207
+ )
202
208
  else
203
- format(MSG, engine: engine)
209
+ format(MSG, accessed_engine: accessed_engine)
204
210
  end
205
211
  end
206
212
 
207
- def extract_engine(node)
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, engine)
243
- return true if in_engine_file?(engine)
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?(engine)
262
+ return false if strongly_protected_engine?(accessed_engine)
248
263
 
249
- valid_engine_api_access?(node, engine)
264
+ valid_engine_api_access?(node, accessed_engine)
250
265
  end
251
266
 
252
- def valid_engine_api_access?(node, engine)
267
+ def valid_engine_api_access?(node, accessed_engine)
253
268
  (
254
- in_legacy_dependent_file?(engine) ||
269
+ in_legacy_dependent_file?(accessed_engine) ||
255
270
  through_api?(node) ||
256
- whitelisted?(node, engine)
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?(engine)
295
- current_engine == engine
309
+ def in_engine_file?(accessed_engine)
310
+ current_engine == accessed_engine
296
311
  end
297
312
 
298
- def in_legacy_dependent_file?(engine)
299
- legacy_dependents = read_api_file(engine, :legacy_dependents)
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|
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Flexport
5
- VERSION = '0.5.0'
5
+ VERSION = '0.6.0'
6
6
  end
7
7
  end
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.5.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-01-30 00:00:00.000000000 Z
11
+ date: 2020-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport