database_consistency 1.7.16 → 1.7.18

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: 7810c3d79fabe92ab306c6bc2ba2fc28ddb845ae9421bdb9b63fcfdd623ef0d2
4
- data.tar.gz: 8389fdc6eaac992ea49819db6ac481123320b5763229d972e7bfac075a375548
3
+ metadata.gz: 83e68ed4220ec40c55d0e018d8b99da78f98354b9e550279dba9fda64859e011
4
+ data.tar.gz: d729674e108e0051fc41dec2aa92dbe05d645b9b7c0f6fc6f87fb3a61ab2c94e
5
5
  SHA512:
6
- metadata.gz: ed41b201b6748e86a6bdeefd62e3704f6a44caf62b7797c118800800c8644c4fdc7f25f6e16362f02e321f7ba64f7c0819fa9ed4d7e48eb4d04e03cf481fc069
7
- data.tar.gz: 6b1ae42b9a3ad7aae6a9d05e6b078641d4c14d35245635defa7a545fb3cd43eac6cda9c6babdcb2994cc992b140beed49acebceeb83480f0c76297c6e3e02924
6
+ metadata.gz: a87472873c4cfbfd797742a24229ef01693d610f78db20f15e012779e182bcaf5626743ee85b117bcda95289cf8155cf30a5c13f285b4a68373443a22b2bcc85
7
+ data.tar.gz: 8c52b06123f13a5932c3069e6a5cfb609a5008b8622eab6755d04661fd99b3e31482a91b575c760ab6f8f10013364e91eb9d9504df8c2e9b088194de235890d9
@@ -27,10 +27,16 @@ module DatabaseConsistency
27
27
  status: status,
28
28
  error_message: nil,
29
29
  error_slug: error_slug,
30
- class_name: association.class_name,
30
+ class_name: class_name,
31
31
  **report_attributes
32
32
  )
33
33
  end
34
+
35
+ def class_name
36
+ association.class_name
37
+ rescue NoMethodError
38
+ nil
39
+ end
34
40
  end
35
41
  end
36
42
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DatabaseConsistency
4
+ module Checkers
5
+ # This class checks that primary column type is "uuid" and the model class defines `self.implicit_order_column`
6
+ class ImplicitOrderingChecker < ColumnChecker
7
+ Report = ReportBuilder.define(DatabaseConsistency::Report)
8
+
9
+ private
10
+
11
+ TARGET_COLUMN_TYPE = 'uuid'
12
+
13
+ # We skip check when:
14
+ # - adapter is not PostgreSQL
15
+ # - column is not a primary key
16
+ # - column type is not "uuid"
17
+ def preconditions
18
+ ActiveRecord::VERSION::MAJOR >= 6 &&
19
+ Helper.postgresql? &&
20
+ primary_field? &&
21
+ column.sql_type.to_s.match(TARGET_COLUMN_TYPE)
22
+ end
23
+
24
+ # Table of possible statuses
25
+ # | defined `self.implicit_order_column` | status |
26
+ # | ----------------------------------- | ------ |
27
+ # | yes | ok |
28
+ # | no | fail |
29
+ def check
30
+ if implicit_order_column_defined?
31
+ report_template(:ok)
32
+ else
33
+ report_template(:fail, error_slug: :implicit_order_column_missing)
34
+ end
35
+ end
36
+
37
+ # @return [Boolean]
38
+ def primary_field?
39
+ column.name.to_s == model.primary_key.to_s
40
+ end
41
+
42
+ # @return [Boolean]
43
+ def implicit_order_column_defined?
44
+ model.implicit_order_column.present?
45
+ end
46
+ end
47
+ end
48
+ end
@@ -9,7 +9,8 @@ module DatabaseConsistency
9
9
  Checkers::LengthConstraintChecker,
10
10
  Checkers::PrimaryKeyTypeChecker,
11
11
  Checkers::EnumValueChecker,
12
- Checkers::ThreeStateBooleanChecker
12
+ Checkers::ThreeStateBooleanChecker,
13
+ Checkers::ImplicitOrderingChecker
13
14
  ].freeze
14
15
 
15
16
  private
@@ -7,7 +7,7 @@ module DatabaseConsistency
7
7
  attr_reader(*attrs)
8
8
 
9
9
  class_eval(<<~DEF, __FILE__, __LINE__ + 1)
10
- def initialize(#{attrs.map { |attr| "#{attr}:" }.join(', ')}, **opts)
10
+ def initialize(#{attrs.map { |attr| "#{attr}:" }.join(', ')}#{"," if attrs.any?} **opts)
11
11
  super(**opts) if opts.any?
12
12
  #{attrs.map { |attr| "@#{attr} = #{attr}" }.join("\n")}
13
13
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DatabaseConsistency
4
- VERSION = '1.7.16'
4
+ VERSION = '1.7.18'
5
5
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DatabaseConsistency
4
+ module Writers
5
+ module Simple
6
+ class ImplicitOrderColumnMissing < Base # :nodoc:
7
+ private
8
+
9
+ def template
10
+ 'implicit_order_column is recommended when using uuid column type for primary key'
11
+ end
12
+
13
+ def unique_attributes
14
+ {
15
+ table_or_model_name: report.table_or_model_name,
16
+ column_or_attribute_name: report.column_or_attribute_name
17
+ }
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -7,7 +7,7 @@ module DatabaseConsistency
7
7
  private
8
8
 
9
9
  def template
10
- 'refers to undefined model "%<class_name>s"'
10
+ 'refers to undefined model %<class_name>s'
11
11
  end
12
12
 
13
13
  def unique_attributes
@@ -12,6 +12,7 @@ module DatabaseConsistency
12
12
  enum_values_inconsistent_with_ar_enum: Simple::EnumValuesInconsistentWithArEnum,
13
13
  enum_values_inconsistent_with_inclusion: Simple::EnumValuesInconsistentWithInclusion,
14
14
  has_one_missing_unique_index: Simple::HasOneMissingUniqueIndex,
15
+ implicit_order_column_missing: Simple::ImplicitOrderColumnMissing,
15
16
  inconsistent_enum_type: Simple::InconsistentEnumType,
16
17
  inconsistent_types: Simple::InconsistentTypes,
17
18
  length_validator_greater_limit: Simple::LengthValidatorGreaterLimit,
@@ -42,6 +42,7 @@ require 'database_consistency/writers/simple/redundant_case_insensitive_option'
42
42
  require 'database_consistency/writers/simple/three_state_boolean'
43
43
  require 'database_consistency/writers/simple/missing_association_class'
44
44
  require 'database_consistency/writers/simple/missing_table'
45
+ require 'database_consistency/writers/simple/implicit_order_column_missing'
45
46
  require 'database_consistency/writers/simple_writer'
46
47
 
47
48
  require 'database_consistency/writers/autofix/helpers/migration'
@@ -80,6 +81,7 @@ require 'database_consistency/checkers/column_checkers/length_constraint_checker
80
81
  require 'database_consistency/checkers/column_checkers/primary_key_type_checker'
81
82
  require 'database_consistency/checkers/column_checkers/enum_value_checker'
82
83
  require 'database_consistency/checkers/column_checkers/three_state_boolean_checker'
84
+ require 'database_consistency/checkers/column_checkers/implicit_ordering_checker.rb'
83
85
 
84
86
  require 'database_consistency/checkers/validator_checkers/validator_checker'
85
87
  require 'database_consistency/checkers/validator_checkers/missing_unique_index_checker'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: database_consistency
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.16
4
+ version: 1.7.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeniy Demin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-16 00:00:00.000000000 Z
11
+ date: 2023-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -155,6 +155,7 @@ files:
155
155
  - lib/database_consistency/checkers/base_checker.rb
156
156
  - lib/database_consistency/checkers/column_checkers/column_checker.rb
157
157
  - lib/database_consistency/checkers/column_checkers/enum_value_checker.rb
158
+ - lib/database_consistency/checkers/column_checkers/implicit_ordering_checker.rb
158
159
  - lib/database_consistency/checkers/column_checkers/length_constraint_checker.rb
159
160
  - lib/database_consistency/checkers/column_checkers/null_constraint_checker.rb
160
161
  - lib/database_consistency/checkers/column_checkers/primary_key_type_checker.rb
@@ -217,6 +218,7 @@ files:
217
218
  - lib/database_consistency/writers/simple/enum_values_inconsistent_with_ar_enum.rb
218
219
  - lib/database_consistency/writers/simple/enum_values_inconsistent_with_inclusion.rb
219
220
  - lib/database_consistency/writers/simple/has_one_missing_unique_index.rb
221
+ - lib/database_consistency/writers/simple/implicit_order_column_missing.rb
220
222
  - lib/database_consistency/writers/simple/inconsistent_enum_type.rb
221
223
  - lib/database_consistency/writers/simple/inconsistent_types.rb
222
224
  - lib/database_consistency/writers/simple/length_validator_greater_limit.rb