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 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