schema_reaper 1.0.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 +7 -0
- data/.rspec +3 -0
- data/.rubocop.yml +56 -0
- data/.schema_reaper.yml.example +43 -0
- data/CHANGELOG.md +45 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/LICENSE.txt +21 -0
- data/README.md +136 -0
- data/Rakefile +12 -0
- data/exe/schema_reaper +6 -0
- data/lib/schema_reaper/analyzers/always_null_column.rb +43 -0
- data/lib/schema_reaper/analyzers/base.rb +54 -0
- data/lib/schema_reaper/analyzers/dead_column.rb +72 -0
- data/lib/schema_reaper/analyzers/dead_table.rb +60 -0
- data/lib/schema_reaper/analyzers/duplicate_index.rb +41 -0
- data/lib/schema_reaper/analyzers/missing_fk_index.rb +43 -0
- data/lib/schema_reaper/analyzers/registry.rb +20 -0
- data/lib/schema_reaper/analyzers/single_value_column.rb +46 -0
- data/lib/schema_reaper/analyzers/unused_index.rb +43 -0
- data/lib/schema_reaper/baseline.rb +35 -0
- data/lib/schema_reaper/cli.rb +68 -0
- data/lib/schema_reaper/config.rb +78 -0
- data/lib/schema_reaper/finding.rb +28 -0
- data/lib/schema_reaper/gem_awareness.rb +80 -0
- data/lib/schema_reaper/history.rb +60 -0
- data/lib/schema_reaper/introspect/postgres.rb +134 -0
- data/lib/schema_reaper/migration_generator.rb +67 -0
- data/lib/schema_reaper/railtie.rb +21 -0
- data/lib/schema_reaper/reporters/bytes.rb +22 -0
- data/lib/schema_reaper/reporters/json.rb +31 -0
- data/lib/schema_reaper/reporters/markdown.rb +41 -0
- data/lib/schema_reaper/reporters/sarif.rb +67 -0
- data/lib/schema_reaper/reporters/table.rb +45 -0
- data/lib/schema_reaper/runner.rb +64 -0
- data/lib/schema_reaper/runtime.rb +111 -0
- data/lib/schema_reaper/schema.rb +34 -0
- data/lib/schema_reaper/static/scanner.rb +88 -0
- data/lib/schema_reaper/tasks/schema_reaper.rake +26 -0
- data/lib/schema_reaper/version.rb +5 -0
- data/lib/schema_reaper.rb +44 -0
- data/schema_reaper.gemspec +47 -0
- data/sig/schema_reaper.rbs +4 -0
- metadata +167 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require_relative "lib/schema_reaper/version"
|
|
4
|
+
|
|
5
|
+
Gem::Specification.new do |spec|
|
|
6
|
+
spec.name = "schema_reaper"
|
|
7
|
+
spec.version = SchemaReaper::VERSION
|
|
8
|
+
spec.authors = ["aksshatt"]
|
|
9
|
+
spec.email = ["akshatpegwar5@gmail.com"]
|
|
10
|
+
|
|
11
|
+
spec.summary = "Find dead columns, unused indexes and schema dead-weight in Rails/ActiveRecord apps."
|
|
12
|
+
spec.description = <<~DESC
|
|
13
|
+
schema_reaper scans your PostgreSQL schema, its planner statistics and your
|
|
14
|
+
codebase to surface columns, indexes and tables that are no longer used:
|
|
15
|
+
dead columns and tables, unused and duplicate indexes, missing foreign-key
|
|
16
|
+
indexes, always-NULL and single-value columns. Findings are scored by
|
|
17
|
+
confidence (fusing an optional runtime attribute-access signal), carry a
|
|
18
|
+
reclaimable-bytes estimate, and come with staged, reversible migrations.
|
|
19
|
+
Ships table/json/markdown/sarif reporters, a CI baseline gate and a trend
|
|
20
|
+
log.
|
|
21
|
+
DESC
|
|
22
|
+
spec.homepage = "https://github.com/aksshatt/schema_reaper"
|
|
23
|
+
spec.license = "MIT"
|
|
24
|
+
spec.required_ruby_version = ">= 3.1.0"
|
|
25
|
+
|
|
26
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
|
27
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
|
28
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
|
29
|
+
spec.metadata["changelog_uri"] = "#{spec.homepage}/blob/main/CHANGELOG.md"
|
|
30
|
+
spec.metadata["rubygems_mfa_required"] = "true"
|
|
31
|
+
|
|
32
|
+
spec.files = Dir.chdir(__dir__) do
|
|
33
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
|
34
|
+
(File.expand_path(f) == __FILE__) ||
|
|
35
|
+
f.start_with?(*%w[bin/ test/ spec/ features/ .git .github Gemfile])
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
spec.bindir = "exe"
|
|
39
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
|
40
|
+
spec.require_paths = ["lib"]
|
|
41
|
+
|
|
42
|
+
spec.add_dependency "prism", ">= 0.19", "< 2.0"
|
|
43
|
+
spec.add_dependency "thor", "~> 1.3"
|
|
44
|
+
|
|
45
|
+
spec.add_development_dependency "activerecord", ">= 6.1", "< 9.0"
|
|
46
|
+
spec.add_development_dependency "pg", "~> 1.5"
|
|
47
|
+
end
|
metadata
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: schema_reaper
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 1.0.0
|
|
5
|
+
platform: ruby
|
|
6
|
+
authors:
|
|
7
|
+
- aksshatt
|
|
8
|
+
autorequire:
|
|
9
|
+
bindir: exe
|
|
10
|
+
cert_chain: []
|
|
11
|
+
date: 2026-09-04 00:00:00.000000000 Z
|
|
12
|
+
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: prism
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0.19'
|
|
20
|
+
- - "<"
|
|
21
|
+
- !ruby/object:Gem::Version
|
|
22
|
+
version: '2.0'
|
|
23
|
+
type: :runtime
|
|
24
|
+
prerelease: false
|
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
26
|
+
requirements:
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
version: '0.19'
|
|
30
|
+
- - "<"
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '2.0'
|
|
33
|
+
- !ruby/object:Gem::Dependency
|
|
34
|
+
name: thor
|
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - "~>"
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: '1.3'
|
|
40
|
+
type: :runtime
|
|
41
|
+
prerelease: false
|
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - "~>"
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: '1.3'
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: activerecord
|
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: '6.1'
|
|
54
|
+
- - "<"
|
|
55
|
+
- !ruby/object:Gem::Version
|
|
56
|
+
version: '9.0'
|
|
57
|
+
type: :development
|
|
58
|
+
prerelease: false
|
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
60
|
+
requirements:
|
|
61
|
+
- - ">="
|
|
62
|
+
- !ruby/object:Gem::Version
|
|
63
|
+
version: '6.1'
|
|
64
|
+
- - "<"
|
|
65
|
+
- !ruby/object:Gem::Version
|
|
66
|
+
version: '9.0'
|
|
67
|
+
- !ruby/object:Gem::Dependency
|
|
68
|
+
name: pg
|
|
69
|
+
requirement: !ruby/object:Gem::Requirement
|
|
70
|
+
requirements:
|
|
71
|
+
- - "~>"
|
|
72
|
+
- !ruby/object:Gem::Version
|
|
73
|
+
version: '1.5'
|
|
74
|
+
type: :development
|
|
75
|
+
prerelease: false
|
|
76
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
77
|
+
requirements:
|
|
78
|
+
- - "~>"
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
version: '1.5'
|
|
81
|
+
description: |
|
|
82
|
+
schema_reaper scans your PostgreSQL schema, its planner statistics and your
|
|
83
|
+
codebase to surface columns, indexes and tables that are no longer used:
|
|
84
|
+
dead columns and tables, unused and duplicate indexes, missing foreign-key
|
|
85
|
+
indexes, always-NULL and single-value columns. Findings are scored by
|
|
86
|
+
confidence (fusing an optional runtime attribute-access signal), carry a
|
|
87
|
+
reclaimable-bytes estimate, and come with staged, reversible migrations.
|
|
88
|
+
Ships table/json/markdown/sarif reporters, a CI baseline gate and a trend
|
|
89
|
+
log.
|
|
90
|
+
email:
|
|
91
|
+
- akshatpegwar5@gmail.com
|
|
92
|
+
executables:
|
|
93
|
+
- schema_reaper
|
|
94
|
+
extensions: []
|
|
95
|
+
extra_rdoc_files: []
|
|
96
|
+
files:
|
|
97
|
+
- ".rspec"
|
|
98
|
+
- ".rubocop.yml"
|
|
99
|
+
- ".schema_reaper.yml.example"
|
|
100
|
+
- CHANGELOG.md
|
|
101
|
+
- CODE_OF_CONDUCT.md
|
|
102
|
+
- LICENSE.txt
|
|
103
|
+
- README.md
|
|
104
|
+
- Rakefile
|
|
105
|
+
- exe/schema_reaper
|
|
106
|
+
- lib/schema_reaper.rb
|
|
107
|
+
- lib/schema_reaper/analyzers/always_null_column.rb
|
|
108
|
+
- lib/schema_reaper/analyzers/base.rb
|
|
109
|
+
- lib/schema_reaper/analyzers/dead_column.rb
|
|
110
|
+
- lib/schema_reaper/analyzers/dead_table.rb
|
|
111
|
+
- lib/schema_reaper/analyzers/duplicate_index.rb
|
|
112
|
+
- lib/schema_reaper/analyzers/missing_fk_index.rb
|
|
113
|
+
- lib/schema_reaper/analyzers/registry.rb
|
|
114
|
+
- lib/schema_reaper/analyzers/single_value_column.rb
|
|
115
|
+
- lib/schema_reaper/analyzers/unused_index.rb
|
|
116
|
+
- lib/schema_reaper/baseline.rb
|
|
117
|
+
- lib/schema_reaper/cli.rb
|
|
118
|
+
- lib/schema_reaper/config.rb
|
|
119
|
+
- lib/schema_reaper/finding.rb
|
|
120
|
+
- lib/schema_reaper/gem_awareness.rb
|
|
121
|
+
- lib/schema_reaper/history.rb
|
|
122
|
+
- lib/schema_reaper/introspect/postgres.rb
|
|
123
|
+
- lib/schema_reaper/migration_generator.rb
|
|
124
|
+
- lib/schema_reaper/railtie.rb
|
|
125
|
+
- lib/schema_reaper/reporters/bytes.rb
|
|
126
|
+
- lib/schema_reaper/reporters/json.rb
|
|
127
|
+
- lib/schema_reaper/reporters/markdown.rb
|
|
128
|
+
- lib/schema_reaper/reporters/sarif.rb
|
|
129
|
+
- lib/schema_reaper/reporters/table.rb
|
|
130
|
+
- lib/schema_reaper/runner.rb
|
|
131
|
+
- lib/schema_reaper/runtime.rb
|
|
132
|
+
- lib/schema_reaper/schema.rb
|
|
133
|
+
- lib/schema_reaper/static/scanner.rb
|
|
134
|
+
- lib/schema_reaper/tasks/schema_reaper.rake
|
|
135
|
+
- lib/schema_reaper/version.rb
|
|
136
|
+
- schema_reaper.gemspec
|
|
137
|
+
- sig/schema_reaper.rbs
|
|
138
|
+
homepage: https://github.com/aksshatt/schema_reaper
|
|
139
|
+
licenses:
|
|
140
|
+
- MIT
|
|
141
|
+
metadata:
|
|
142
|
+
allowed_push_host: https://rubygems.org
|
|
143
|
+
homepage_uri: https://github.com/aksshatt/schema_reaper
|
|
144
|
+
source_code_uri: https://github.com/aksshatt/schema_reaper
|
|
145
|
+
changelog_uri: https://github.com/aksshatt/schema_reaper/blob/main/CHANGELOG.md
|
|
146
|
+
rubygems_mfa_required: 'true'
|
|
147
|
+
post_install_message:
|
|
148
|
+
rdoc_options: []
|
|
149
|
+
require_paths:
|
|
150
|
+
- lib
|
|
151
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
|
+
requirements:
|
|
153
|
+
- - ">="
|
|
154
|
+
- !ruby/object:Gem::Version
|
|
155
|
+
version: 3.1.0
|
|
156
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
|
+
requirements:
|
|
158
|
+
- - ">="
|
|
159
|
+
- !ruby/object:Gem::Version
|
|
160
|
+
version: '0'
|
|
161
|
+
requirements: []
|
|
162
|
+
rubygems_version: 3.4.10
|
|
163
|
+
signing_key:
|
|
164
|
+
specification_version: 4
|
|
165
|
+
summary: Find dead columns, unused indexes and schema dead-weight in Rails/ActiveRecord
|
|
166
|
+
apps.
|
|
167
|
+
test_files: []
|