unique_validation_inspector 0.2.0 → 0.3.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
  SHA1:
3
- metadata.gz: 657d8b8f263904dcf7ddc6bd423c28de265fe5e0
4
- data.tar.gz: f1a2ddead37ddd750d97ed91c7831937263917f6
3
+ metadata.gz: 58622ad0fd72e028cbfaf0120a3f5ca17608df0d
4
+ data.tar.gz: c45ece8f05bf7446d2563caf9f7cc40745a7e0ab
5
5
  SHA512:
6
- metadata.gz: b1b2d0d481f3d1d0e156ee6de7a913363a98c76e05a4c7fc93078471ad25a3da2d651fcd3a0c73e838d0dd58916e14119b907a8578df96d2d576ae80d347fdb5
7
- data.tar.gz: 72ce6e1f88ffeef1d9ea43d68df50226e7885c0c7d83461d0acc0da75f5912d4c60dc1c7793d2ff64a8614b9a4980aff1c612f93fdb876c72babfc134d60b3d8
6
+ metadata.gz: 3b73b05f061e7c8f5cc7dbffae6364e3d418aedcb477b20699605651a02f6e365c57070c1bf3c393db3d7755f4f360152dc1d207768722004dcd7e0cf674520d
7
+ data.tar.gz: 596425f9a286607a3293029f128f6b198022cb1f398b3d12113ae2467fc718021711876b279cfe9202e0cb8da7974715c11bc62bd79f5fdd5d1f92dcc4f475cb
@@ -1,14 +1,30 @@
1
+ ## 0.3.0 (February 28, 2018)
2
+
3
+ #### Features
4
+
5
+ * Now we look for unique DB indexes only ([#4](https://github.com/soulfly/unique_validation_inspector/pull/4) by [@mrdougwright](https://github.com/mrdougwright))
6
+
7
+ #### Fixes
8
+
9
+ * Issue where DB indexes for validations with scope were not properly recognized ([#4](https://github.com/soulfly/unique_validation_inspector/pull/4) by [@mrdougwright](https://github.com/mrdougwright))
10
+
11
+ ## 0.2.0 (September 16, 2017)
12
+
13
+ #### Features
14
+
15
+ * Better output message format
16
+
1
17
  ## 0.1.3 (August 23, 2017)
2
18
 
3
19
  #### Fixes
4
20
 
5
- * No models are loaded on some apps (https://github.com/soulfly/unique_validation_inspector/pull/2)
21
+ * No models are loaded on some apps ([#2](https://github.com/soulfly/unique_validation_inspector/pull/2))
6
22
 
7
23
  ## 0.1.2 (August 14, 2017)
8
24
 
9
25
  #### Fixes
10
26
 
11
- * Task fails with abstract model with no table on db (https://github.com/soulfly/unique_validation_inspector/issues/1)
27
+ * Task fails with abstract model with no table on db ([#1](https://github.com/soulfly/unique_validation_inspector/issues/1))
12
28
 
13
29
  ## 0.1.1 (August 11, 2017)
14
30
 
data/README.md CHANGED
@@ -12,16 +12,18 @@ For example, you have **User** model and uniqueness validation for **facebook_id
12
12
  ```sql
13
13
  SELECT 1 AS one FROM `users` WHERE (`users`.`facebook_id ` = 1523123128921623) LIMIT 1
14
14
  ```
15
- If you do not have DB index for **facebook_id** field then your **Model.create**, **Model.save**, **Model.update** ... operations will be slower and slower with user base grow.
15
+ If you do not have DB index for **facebook_id** field then your **Model.create**, **Model.save**, **Model.update** ... operations will be slower and slower with user base grow.
16
16
 
17
17
  So this gem is here to notify you about it.
18
18
 
19
- Read [How I Reduced my DB Server Load by 80%](https://schneems.com/2017/07/18/how-i-reduced-my-db-server-load-by-80/) article to understand what kind of performance issues you may have without proper indexes.
19
+ Read [Rails: make sure you have proper DB indexes for your model’s unique validations](https://medium.com/@igorkhomenko/rails-make-sure-you-have-proper-db-indexes-for-your-models-unique-validations-ffd0364df26f) article to understand what kind of performance issues you may have without proper indexes.
20
+
21
+ Also read [How I Reduced my DB Server Load by 80%](https://schneems.com/2017/07/18/how-i-reduced-my-db-server-load-by-80/) article.
20
22
 
21
23
  ## Supported versions
22
- * Ruby 1.8.7, 1.9.2, 1.9.3, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 (trunk)
24
+ * Ruby 1.8.7, 1.9.2, 1.9.3, 2.0, 2.1, 2.2, 2.3, 2.4, 2.5
23
25
 
24
- * Rails 3.0.x, 3.1.x, 3.2.x, 4.0.x, 4.1.x, 5.0.x
26
+ * Rails 3.0.x, 3.1.x, 3.2.x, 4.0.x, 4.1.x, 5.0.x, 5.1.x, 5.2.x
25
27
 
26
28
  ## Installation
27
29
 
@@ -59,10 +61,15 @@ Model 'User':
59
61
  [:facebook_id] (scope 'application_id'). Index exists: true
60
62
  [:twitter_id] (scope 'application_id'). Index exists: false
61
63
  [:external_user_id] (scope 'application_id'). Index exists: false
62
- [:blob_id] (scope ''). Index exists: true
64
+ [:blob_id]. Index exists: true
63
65
  ```
64
66
  All things with **Index exists: false** are problematic and you should fix it by adding proper DB indexes.
65
67
 
68
+ Consider use one of the following solutions to resolve above issues:
69
+ * Add proper DB index.
70
+ * Move unique validation to DB level.
71
+ More info in the article https://medium.com/@igorkhomenko/rails-make-sure-you-have-proper-db-indexes-for-your-models-unique-validations-ffd0364df26f
72
+
66
73
  ## Copyright
67
74
 
68
75
  Copyright © 2017 Igor Khomenko. See LICENSE file for further details.
@@ -12,7 +12,6 @@ module UniqueValidationInspector
12
12
 
13
13
  def initialize(app)
14
14
  @app = app
15
-
16
15
  end
17
16
 
18
17
  def load_everything!
@@ -31,16 +30,23 @@ module UniqueValidationInspector
31
30
  validators = model.validators.select {|v| v.is_a?(ActiveRecord::Validations::UniquenessValidator) }
32
31
  {:model => model, :validators => validators}
33
32
  end
34
-
35
33
  end
36
34
 
37
- def defined_unique_indexes(table_name, fields, scope)
35
+ def defined_unique_indexes(table_name, field, scope)
38
36
  #https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html
39
-
40
37
  columns = []
41
- columns += fields
42
- columns.unshift(scope) if scope
43
- ActiveRecord::Base.connection.indexes(table_name.to_sym).any? { |i| [lambda { |i| i.columns == columns.map(&:to_s) }].all? { |check| check[i] } }
38
+ columns += field
39
+ columns = columns + Array(scope) if scope
40
+
41
+ unique_indexes(table_name).any? do |index_def|
42
+ columns.map(&:to_s) == index_def.columns
43
+ end
44
+ end
45
+
46
+ private
47
+
48
+ def unique_indexes(table_name)
49
+ ActiveRecord::Base.connection.indexes(table_name.to_sym).select{|i| i.unique }
44
50
  end
45
51
 
46
52
  end
@@ -1,3 +1,3 @@
1
1
  module UniqueValidationInspector
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "unique_validation_inspector"
8
8
  spec.version = UniqueValidationInspector::VERSION
9
9
  spec.authors = ["Igor Khomenko"]
10
- spec.email = ["igor@quickblox.com"]
10
+ spec.email = ["khomenkoigor@gmail.com"]
11
11
 
12
12
  spec.summary = "A Rake task that helps you find unique validations in models that do not have proper DB indexes."
13
13
  spec.description = "A Rake task investigates the application's models definition, then tells you unique validations that do not have DB indexes."
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unique_validation_inspector
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Khomenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-16 00:00:00.000000000 Z
11
+ date: 2018-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -83,7 +83,7 @@ dependencies:
83
83
  description: A Rake task investigates the application's models definition, then tells
84
84
  you unique validations that do not have DB indexes.
85
85
  email:
86
- - igor@quickblox.com
86
+ - khomenkoigor@gmail.com
87
87
  executables: []
88
88
  extensions: []
89
89
  extra_rdoc_files: []