yeet_dba 1.0.0 → 1.0.2

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: 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: []