rubocop-dev_doc 0.1.0 → 0.3.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/config/default.yml +318 -33
- data/lib/dev_doc/test/best_practice_lints.rb +31 -0
- data/lib/dev_doc/test/lints/cron_schedule.rb +345 -0
- data/lib/dev_doc/test/lints/duplicate_snapshot.rb +197 -0
- data/lib/dev_doc/test/lints/no_file_excludes.rb +128 -0
- data/lib/rubocop/cop/dev_doc/auth/current_user_branching.rb +203 -0
- data/lib/rubocop/cop/dev_doc/auth/load_resource_current_user_guard.rb +230 -0
- data/lib/rubocop/cop/dev_doc/migration/amount_column_in_cents.rb +92 -0
- data/lib/rubocop/cop/dev_doc/migration/avoid_bypassing_validation.rb +86 -0
- data/lib/rubocop/cop/dev_doc/migration/avoid_column_default.rb +68 -13
- data/lib/rubocop/cop/dev_doc/migration/avoid_conditional_schema_changes.rb +89 -0
- data/lib/rubocop/cop/dev_doc/migration/avoid_json_column.rb +18 -3
- data/lib/rubocop/cop/dev_doc/migration/avoid_non_null.rb +121 -0
- data/lib/rubocop/cop/dev_doc/migration/no_create_join_table.rb +53 -0
- data/lib/rubocop/cop/dev_doc/migration/require_primary_key.rb +55 -0
- data/lib/rubocop/cop/dev_doc/migration/require_timestamps.rb +4 -13
- data/lib/rubocop/cop/dev_doc/rails/application_record_transaction.rb +56 -0
- data/lib/rubocop/cop/dev_doc/rails/avoid_rails_callbacks.rb +135 -0
- data/lib/rubocop/cop/dev_doc/rails/bang_save_in_transaction.rb +127 -0
- data/lib/rubocop/cop/dev_doc/rails/enum_column_not_null.rb +99 -0
- data/lib/rubocop/cop/dev_doc/rails/enum_must_be_symbolized.rb +83 -0
- data/lib/rubocop/cop/dev_doc/rails/no_block_predicate_on_relation.rb +236 -0
- data/lib/rubocop/cop/dev_doc/rails/no_deliver_later_in_transaction.rb +22 -5
- data/lib/rubocop/cop/dev_doc/rails/strong_parameters_expect.rb +137 -0
- data/lib/rubocop/cop/dev_doc/route/no_custom_actions.rb +171 -0
- data/lib/rubocop/cop/dev_doc/route/resource_name_number.rb +77 -0
- data/lib/rubocop/cop/dev_doc/route/resources_require_only.rb +29 -15
- data/lib/rubocop/cop/dev_doc/style/avoid_head_response.rb +56 -22
- data/lib/rubocop/cop/dev_doc/style/avoid_options_hash.rb +102 -0
- data/lib/rubocop/cop/dev_doc/style/avoid_send.rb +42 -10
- data/lib/rubocop/cop/dev_doc/style/minimize_variable_scope.rb +158 -0
- data/lib/rubocop/cop/dev_doc/style/no_unscoped_method_definitions.rb +129 -0
- data/lib/rubocop/cop/dev_doc/style/repeated_bracket_read.rb +150 -0
- data/lib/rubocop/cop/dev_doc/style/repeated_safe_navigation_receiver.rb +118 -0
- data/lib/rubocop/cop/dev_doc/style/string_symbol_comparison.rb +91 -0
- data/lib/rubocop/cop/dev_doc/test/avoid_glib_travel_freeze.rb +53 -0
- data/lib/rubocop/cop/dev_doc/test/avoid_unit_test.rb +66 -0
- data/lib/rubocop/cop/dev_doc/test/response_assert_equal.rb +179 -0
- data/lib/rubocop/dev_doc/version.rb +1 -1
- data/lib/rubocop-dev_doc.rb +1 -0
- metadata +73 -10
- data/lib/rubocop/cop/dev_doc/migration/avoid_update_column.rb +0 -53
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
module RuboCop
|
|
2
|
-
module Cop
|
|
3
|
-
module DevDoc
|
|
4
|
-
module Migration
|
|
5
|
-
# Avoid `update_column`, `update_columns`, and `update_all` in migrations.
|
|
6
|
-
#
|
|
7
|
-
# ## Rationale
|
|
8
|
-
# Avoid bypassing validation unless absolutely necessary. These methods
|
|
9
|
-
# skip validations and callbacks, which hides data integrity issues
|
|
10
|
-
# rather than surfacing them.
|
|
11
|
-
#
|
|
12
|
-
# Even in migrations, check the code to see if there is any blatant
|
|
13
|
-
# reason why existing records may be invalid. If there is, fix those
|
|
14
|
-
# records first rather than bypassing validation.
|
|
15
|
-
#
|
|
16
|
-
# ❌ Bypasses validation — hides data integrity issues
|
|
17
|
-
# Faq.where(purpose: nil).update_all(purpose: :intro)
|
|
18
|
-
#
|
|
19
|
-
# ✔️ Runs validation — surfaces problems early
|
|
20
|
-
# Faq.where(purpose: nil).find_each do |faq|
|
|
21
|
-
# faq.purpose = :intro
|
|
22
|
-
# faq.save!
|
|
23
|
-
# end
|
|
24
|
-
#
|
|
25
|
-
# NOTE: The broader principle ("avoid bypassing validation") also covers
|
|
26
|
-
# things this cop does not catch, e.g. `save(validate: false)`,
|
|
27
|
-
# `insert_all`, `upsert_all`, `delete_all`. Apply the same judgement to
|
|
28
|
-
# those patterns.
|
|
29
|
-
#
|
|
30
|
-
# @example
|
|
31
|
-
# # bad
|
|
32
|
-
# Faq.where(purpose: nil).update_all(purpose: :intro)
|
|
33
|
-
#
|
|
34
|
-
# # bad
|
|
35
|
-
# user.update_column(:status, 'active')
|
|
36
|
-
#
|
|
37
|
-
# # good
|
|
38
|
-
# Faq.where(purpose: nil).find_each do |faq|
|
|
39
|
-
# faq.purpose = :intro
|
|
40
|
-
# faq.save!
|
|
41
|
-
# end
|
|
42
|
-
class AvoidUpdateColumn < Base
|
|
43
|
-
MSG = 'Avoid `%<method>s` in migrations; it bypasses validations. Use `save!` instead.'.freeze
|
|
44
|
-
RESTRICT_ON_SEND = %i[update_column update_columns update_all].freeze
|
|
45
|
-
|
|
46
|
-
def on_send(node)
|
|
47
|
-
add_offense(node.loc.selector, message: format(MSG, method: node.method_name))
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|