yeet_dba 1.0.0 → 1.0.2

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: a4ebeaa010c0aac25fec89ae37bfa612bba92ac059f409d555a41c62a591e9ac
4
- data.tar.gz: 2a1936a44bb7ec4f776420be9517c08604fc6ca5f0f7f4855adf8458cd6cda61
3
+ metadata.gz: 29f529969da12bc9f86d807332f3989a6cf190462e37e95bbc4339d7b21cfd0f
4
+ data.tar.gz: a8377c2eb1f4d3fb5926e40e06aa89f97e639c07da5d0c751b29cddc364981f4
5
5
  SHA512:
6
- metadata.gz: aca3b09485598e836fcd99c4a8dde0986dfa2a602b69c15fe2f45e06472e050868be0200760eec6c77779a4f0891912b8626f65890028d041ac406960266a9c8
7
- data.tar.gz: 06e42dba1df5abdc3aa4e2f5a0c0e8fc998838d820378cb6df994c6a247448740c09fac9e31b153a234e1b2139ad01a67d632d2f9e9c33de4fb701e5b357adf7
6
+ metadata.gz: c5b1d4c28966966993cb7fc5a7bf76e4290937ea8fcc64cda38933d912a25f123f85628168373de325e20442b8a6b0e7e7ae3401e74e91b44af12c8851fb90a5
7
+ data.tar.gz: f04bfc0c9ec7c06f496da8f49e632fa73f8fa8bb9f4e31bd2af0b1177edb7043c234f01002b5cd3fc406a48e48d8e90aa84e1a62c32ab1cd0b024392b77b207d
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.2.0
@@ -0,0 +1,3 @@
1
+ ---
2
+ exclude_tables:
3
+ - table_to_be_ignored
data/CHANGELOG.md CHANGED
@@ -1,29 +1,41 @@
1
- # 1.0.1 (unreleased, master)
2
-
3
- ## Minor changes
4
-
5
- # 1.0.0
6
-
7
- ## Minor changes
8
-
9
- Improved test coverage
10
-
11
- # 0.1.2
12
-
13
- ## Major changes
14
-
15
- Added rake task to find invalid data
16
- Added rake task to nullify and delete invalid data
17
-
18
- ## Minor changes
19
-
20
- Add rubocop
21
- Add rspec tests
22
-
23
- # 0.1.1
24
-
25
- Patch bug with skipping invalid columns that have orphaned data
26
-
27
- # 0.1.0
28
-
29
- Initial release
1
+ # 1.0.2 (unreleased, master)
2
+
3
+ ## Minor changes
4
+
5
+ Support Rails 7
6
+ Bump ruby versions
7
+ Bump bundler versions
8
+
9
+ # 1.0.1
10
+
11
+ ## Minor changes
12
+
13
+ Support Rails 6
14
+ Update gems and remove pry
15
+ Fix bug in `find_orphaned_rows` rake task for [Issue #10](https://github.com/KevinColemanInc/yeet_dba/issues/10)
16
+
17
+ # 1.0.0
18
+
19
+ ## Minor changes
20
+
21
+ Improved test coverage
22
+
23
+ # 0.1.2
24
+
25
+ ## Major changes
26
+
27
+ Added rake task to find invalid data
28
+ Added rake task to nullify and delete invalid data
29
+
30
+ ## Minor changes
31
+
32
+ Add rubocop
33
+ Add rspec tests
34
+
35
+ # 0.1.1
36
+
37
+ Patch bug with skipping invalid columns that have orphaned data
38
+
39
+ # 0.1.0
40
+
41
+ Initial release
data/Gemfile CHANGED
@@ -11,5 +11,3 @@ gem 'railties'
11
11
  gem 'rspec-rails'
12
12
  gem 'sqlite3'
13
13
  gem 'test-unit'
14
-
15
- gem 'pry', require: true
data/Gemfile.lock CHANGED
@@ -1,84 +1,81 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yeet_dba (0.2.1)
5
- actionpack (>= 3.0, < 6.0)
6
- activerecord (>= 3.0, < 6.0)
7
- railties (>= 3.0, < 6.0)
4
+ yeet_dba (1.0.2)
5
+ actionpack (>= 3.0, < 8.0)
6
+ activerecord (>= 3.0, < 8.0)
7
+ railties (>= 3.0, < 8.0)
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
11
11
  specs:
12
- actionpack (5.2.3)
13
- actionview (= 5.2.3)
14
- activesupport (= 5.2.3)
12
+ actionpack (6.0.0)
13
+ actionview (= 6.0.0)
14
+ activesupport (= 6.0.0)
15
15
  rack (~> 2.0)
16
16
  rack-test (>= 0.6.3)
17
17
  rails-dom-testing (~> 2.0)
18
- rails-html-sanitizer (~> 1.0, >= 1.0.2)
19
- actionview (5.2.3)
20
- activesupport (= 5.2.3)
18
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
19
+ actionview (6.0.0)
20
+ activesupport (= 6.0.0)
21
21
  builder (~> 3.1)
22
22
  erubi (~> 1.4)
23
23
  rails-dom-testing (~> 2.0)
24
- rails-html-sanitizer (~> 1.0, >= 1.0.3)
25
- activemodel (5.2.3)
26
- activesupport (= 5.2.3)
27
- activerecord (5.2.3)
28
- activemodel (= 5.2.3)
29
- activesupport (= 5.2.3)
30
- arel (>= 9.0)
31
- activesupport (5.2.3)
24
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
25
+ activemodel (6.0.0)
26
+ activesupport (= 6.0.0)
27
+ activerecord (6.0.0)
28
+ activemodel (= 6.0.0)
29
+ activesupport (= 6.0.0)
30
+ activesupport (6.0.0)
32
31
  concurrent-ruby (~> 1.0, >= 1.0.2)
33
32
  i18n (>= 0.7, < 2)
34
33
  minitest (~> 5.1)
35
34
  tzinfo (~> 1.1)
36
- arel (9.0.0)
35
+ zeitwerk (~> 2.1, >= 2.1.8)
37
36
  builder (3.2.3)
38
- coderay (1.1.2)
39
37
  concurrent-ruby (1.1.5)
40
- crass (1.0.4)
38
+ crass (1.0.5)
41
39
  diff-lcs (1.3)
42
40
  erubi (1.8.0)
43
41
  i18n (1.6.0)
44
42
  concurrent-ruby (~> 1.0)
45
- loofah (2.2.3)
43
+ loofah (2.3.1)
46
44
  crass (~> 1.0.2)
47
45
  nokogiri (>= 1.5.9)
48
46
  method_source (0.9.2)
49
- mini_portile2 (2.4.0)
47
+ mini_portile2 (2.6.1)
50
48
  minitest (5.11.3)
51
- nokogiri (1.10.2)
52
- mini_portile2 (~> 2.4.0)
53
- power_assert (1.1.4)
54
- pry (0.12.2)
55
- coderay (~> 1.1.0)
56
- method_source (~> 0.9.0)
57
- rack (2.0.6)
49
+ nokogiri (1.12.5)
50
+ mini_portile2 (~> 2.6.1)
51
+ racc (~> 1.4)
52
+ power_assert (1.1.5)
53
+ racc (1.5.2)
54
+ rack (2.2.3)
58
55
  rack-test (1.1.0)
59
56
  rack (>= 1.0, < 3)
60
57
  rails-dom-testing (2.0.3)
61
58
  activesupport (>= 4.2.0)
62
59
  nokogiri (>= 1.6)
63
- rails-html-sanitizer (1.0.4)
60
+ rails-html-sanitizer (1.2.0)
64
61
  loofah (~> 2.2, >= 2.2.2)
65
- railties (5.2.3)
66
- actionpack (= 5.2.3)
67
- activesupport (= 5.2.3)
62
+ railties (6.0.0)
63
+ actionpack (= 6.0.0)
64
+ activesupport (= 6.0.0)
68
65
  method_source
69
66
  rake (>= 0.8.7)
70
- thor (>= 0.19.0, < 2.0)
71
- rake (10.5.0)
67
+ thor (>= 0.20.3, < 2.0)
68
+ rake (13.0.1)
72
69
  rspec (3.8.0)
73
70
  rspec-core (~> 3.8.0)
74
71
  rspec-expectations (~> 3.8.0)
75
72
  rspec-mocks (~> 3.8.0)
76
- rspec-core (3.8.0)
73
+ rspec-core (3.8.2)
77
74
  rspec-support (~> 3.8.0)
78
- rspec-expectations (3.8.2)
75
+ rspec-expectations (3.8.4)
79
76
  diff-lcs (>= 1.2.0, < 2.0)
80
77
  rspec-support (~> 3.8.0)
81
- rspec-mocks (3.8.0)
78
+ rspec-mocks (3.8.1)
82
79
  diff-lcs (>= 1.2.0, < 2.0)
83
80
  rspec-support (~> 3.8.0)
84
81
  rspec-rails (3.8.2)
@@ -89,14 +86,15 @@ GEM
89
86
  rspec-expectations (~> 3.8.0)
90
87
  rspec-mocks (~> 3.8.0)
91
88
  rspec-support (~> 3.8.0)
92
- rspec-support (3.8.0)
93
- sqlite3 (1.4.0)
94
- test-unit (3.3.1)
89
+ rspec-support (3.8.2)
90
+ sqlite3 (1.4.1)
91
+ test-unit (3.3.3)
95
92
  power_assert
96
93
  thor (0.20.3)
97
94
  thread_safe (0.3.6)
98
95
  tzinfo (1.2.5)
99
96
  thread_safe (~> 0.1)
97
+ zeitwerk (2.1.10)
100
98
 
101
99
  PLATFORMS
102
100
  ruby
@@ -104,10 +102,9 @@ PLATFORMS
104
102
  DEPENDENCIES
105
103
  actionpack
106
104
  activerecord
107
- bundler (~> 1.17)
108
- pry
105
+ bundler (~> 2.1)
109
106
  railties
110
- rake (~> 10.0)
107
+ rake (~> 13.0)
111
108
  rspec (~> 3.0)
112
109
  rspec-rails
113
110
  sqlite3
@@ -115,4 +112,4 @@ DEPENDENCIES
115
112
  yeet_dba!
116
113
 
117
114
  BUNDLED WITH
118
- 1.17.3
115
+ 2.1.4
data/README.md CHANGED
@@ -21,7 +21,7 @@ But this doesn't work if you don't nullify the `company_id` when the company is
21
21
 
22
22
  ### But what is the difference between yeet_db and [lol_dba](https://github.com/plentz/lol_dba)?
23
23
 
24
- lol_dba will only add indexes for RoR models. yeet_dba looks at every table (including join tables) to add foreign key constraints, which also add indexes.
24
+ lol_dba will only add indexes for RoR models. yeet_dba looks at every table (including join tables) to add foreign key constraints.
25
25
 
26
26
  ## Installation
27
27
 
@@ -63,6 +63,16 @@ SELECT "notifications".* FROM "notifications" left join active_storage_attachmen
63
63
 
64
64
  ```
65
65
 
66
+ If you need to ignore certain tables from being checked simply add a `.yeet_dba.yml` in the Rails.root directory.
67
+
68
+ ```
69
+ ---
70
+ exclude_tables:
71
+ - table_to_be_ignored
72
+ ```
73
+
74
+ For a sample configuration file check `.yeet_dba.example.yml`.
75
+
66
76
  ### 2. Fix invalid rows
67
77
 
68
78
  You can either manually repair your data via rails console or direct SQL queries, or you can run a rake task to resolve failures.
@@ -154,4 +164,3 @@ Foreign Key by Ary Prasetyo from the Noun Project
154
164
  ## Author
155
165
 
156
166
  Kevin Coleman, [https://kcoleman.me/](https://kcoleman.me)
157
-
@@ -17,7 +17,11 @@ module YeetDba
17
17
  end
18
18
 
19
19
  def association_table_name
20
- association_klass&.table_name || tables.detect { |table| table == guessed_table_name }
20
+ if association_klass&.ancestors&.include?(ActiveRecord::Base)
21
+ association_klass&.table_name
22
+ else
23
+ tables.detect { |table| table == guessed_table_name }
24
+ end
21
25
  end
22
26
 
23
27
  def association_name
@@ -21,7 +21,23 @@ module YeetDba
21
21
  end
22
22
 
23
23
  def self.tables
24
- ActiveRecord::Base.connection.tables
24
+ ActiveRecord::Base.connection.tables - self.ignored_tables
25
+ end
26
+
27
+ def self.ignored_tables
28
+ config['exclude_tables'] || []
29
+ end
30
+
31
+ def self.config
32
+ @config ||= begin
33
+ config_file = Pathname.new(Rails.root).join('.yeet_dba.yml')
34
+
35
+ if File.exist?(config_file)
36
+ YAML.load(File.read(config_file))
37
+ else
38
+ {}
39
+ end
40
+ end
25
41
  end
26
42
  end
27
43
  end
@@ -11,7 +11,7 @@ namespace :yeet_dba do
11
11
  puts "🚨Houston, we have a problem 🚨. We found #{columns.length} invalid column#{columns.length == 1 ? '' : 's'}."
12
12
  puts
13
13
  columns.each do |invalid_column|
14
- puts "-> #{invalid_column.table}.#{invalid_column.column}"
14
+ puts "-> #{invalid_column.table_name}.#{invalid_column.column}"
15
15
  puts "Invalid rows: #{invalid_column.orphaned_rows_count}"
16
16
  puts "Foreign table: #{invalid_column.association_table_name}"
17
17
  puts
@@ -1,5 +1,3 @@
1
- require 'pry'
2
-
3
1
  module YeetDba
4
2
  class VerifyData
5
3
  attr_accessor :column
@@ -29,9 +27,13 @@ module YeetDba
29
27
  model = column.model
30
28
 
31
29
  # Check to see there could be rows with bad data
32
- model.joins("left join #{association_table} as association_table on association_table.id = #{table_name}.#{column_name}")
33
- .where.not(column_name => nil)
34
- .where('association_table.id is null')
30
+ if model
31
+ model.joins("left join #{association_table} as association_table on association_table.id = #{table_name}.#{column_name}")
32
+ .where.not(column_name => nil)
33
+ .where('association_table.id is null')
34
+ else
35
+ []
36
+ end
35
37
  end
36
38
  end
37
39
  end
@@ -1,3 +1,3 @@
1
- module YeetDba
2
- VERSION = '1.0.0'.freeze
3
- end
1
+ module YeetDba
2
+ VERSION = '1.0.2'.freeze
3
+ end
data/yeet_dba.gemspec CHANGED
@@ -34,12 +34,12 @@ Gem::Specification.new do |spec|
34
34
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
35
35
  spec.require_paths = ['lib']
36
36
 
37
- spec.add_development_dependency 'bundler', '~> 1.17'
38
- spec.add_development_dependency 'rake', '~> 10.0'
37
+ spec.add_development_dependency 'bundler', '~> 2.1'
38
+ spec.add_development_dependency 'rake', '~> 13.0'
39
39
  spec.add_development_dependency 'rspec', '~> 3.0'
40
40
 
41
41
  spec.required_ruby_version = '>= 2.4.0'
42
- spec.add_dependency 'actionpack', '>= 3.0', '< 6.0'
43
- spec.add_dependency 'activerecord', '>= 3.0', '< 6.0'
44
- spec.add_dependency 'railties', '>= 3.0', '< 6.0'
42
+ spec.add_dependency 'actionpack', '>= 3.0', '< 8.0'
43
+ spec.add_dependency 'activerecord', '>= 3.0', '< 8.0'
44
+ spec.add_dependency 'railties', '>= 3.0', '< 8.0'
45
45
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yeet_dba
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Coleman
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-04-14 00:00:00.000000000 Z
11
+ date: 2023-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.17'
19
+ version: '2.1'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.17'
26
+ version: '2.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '13.0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '13.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rspec
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -61,7 +61,7 @@ dependencies:
61
61
  version: '3.0'
62
62
  - - "<"
63
63
  - !ruby/object:Gem::Version
64
- version: '6.0'
64
+ version: '8.0'
65
65
  type: :runtime
66
66
  prerelease: false
67
67
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,7 +71,7 @@ dependencies:
71
71
  version: '3.0'
72
72
  - - "<"
73
73
  - !ruby/object:Gem::Version
74
- version: '6.0'
74
+ version: '8.0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: activerecord
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -81,7 +81,7 @@ dependencies:
81
81
  version: '3.0'
82
82
  - - "<"
83
83
  - !ruby/object:Gem::Version
84
- version: '6.0'
84
+ version: '8.0'
85
85
  type: :runtime
86
86
  prerelease: false
87
87
  version_requirements: !ruby/object:Gem::Requirement
@@ -91,7 +91,7 @@ dependencies:
91
91
  version: '3.0'
92
92
  - - "<"
93
93
  - !ruby/object:Gem::Version
94
- version: '6.0'
94
+ version: '8.0'
95
95
  - !ruby/object:Gem::Dependency
96
96
  name: railties
97
97
  requirement: !ruby/object:Gem::Requirement
@@ -101,7 +101,7 @@ dependencies:
101
101
  version: '3.0'
102
102
  - - "<"
103
103
  - !ruby/object:Gem::Version
104
- version: '6.0'
104
+ version: '8.0'
105
105
  type: :runtime
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
@@ -111,7 +111,7 @@ dependencies:
111
111
  version: '3.0'
112
112
  - - "<"
113
113
  - !ruby/object:Gem::Version
114
- version: '6.0'
114
+ version: '8.0'
115
115
  description: This scan every ActiveRecord model looking for relationships ('has_many',
116
116
  'belongs_to', etc.) and adds foreign key constraints.
117
117
  email:
@@ -124,7 +124,9 @@ files:
124
124
  - ".gitignore"
125
125
  - ".rspec"
126
126
  - ".rubocop"
127
+ - ".ruby-version"
127
128
  - ".travis.yml"
129
+ - ".yeet_dba.example.yml"
128
130
  - CHANGELOG.md
129
131
  - CODE_OF_CONDUCT.md
130
132
  - Gemfile
@@ -159,7 +161,7 @@ metadata:
159
161
  homepage_uri: http://rubygems.org/gems/yeet_dba
160
162
  source_code_uri: https://github.com/kevincolemaninc/yeet_dba
161
163
  changelog_uri: https://github.com/kevincolemaninc/yeet_dba/master/CHANGELOG.md
162
- post_install_message:
164
+ post_install_message:
163
165
  rdoc_options: []
164
166
  require_paths:
165
167
  - lib
@@ -174,8 +176,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
176
  - !ruby/object:Gem::Version
175
177
  version: '0'
176
178
  requirements: []
177
- rubygems_version: 3.0.3
178
- signing_key:
179
+ rubygems_version: 3.4.1
180
+ signing_key:
179
181
  specification_version: 4
180
182
  summary: Generates foreign key constraint migrations for rails databases
181
183
  test_files: []