droppable_table 0.1.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/.rubocop.yml +58 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +5 -0
- data/CLAUDE.md +154 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/LICENSE.txt +21 -0
- data/README.md +146 -0
- data/Rakefile +12 -0
- data/bin/console +11 -0
- data/bin/droppable_table +7 -0
- data/bin/setup +8 -0
- data/config/known_gems.yml +34 -0
- data/config/rails_internal_tables.yml +19 -0
- data/droppable_table.yml.sample +19 -0
- data/lib/droppable_table/analyzer.rb +230 -0
- data/lib/droppable_table/cli.rb +87 -0
- data/lib/droppable_table/config.rb +80 -0
- data/lib/droppable_table/model_collector.rb +131 -0
- data/lib/droppable_table/schema_parser.rb +57 -0
- data/lib/droppable_table/version.rb +5 -0
- data/lib/droppable_table.rb +15 -0
- data/sig/droppable_table.rbs +103 -0
- metadata +141 -0
@@ -0,0 +1,103 @@
|
|
1
|
+
module DroppableTable
|
2
|
+
VERSION: String
|
3
|
+
|
4
|
+
class RailsNotFoundError < StandardError
|
5
|
+
end
|
6
|
+
|
7
|
+
class MigrationPendingError < StandardError
|
8
|
+
end
|
9
|
+
|
10
|
+
class SchemaNotFoundError < StandardError
|
11
|
+
end
|
12
|
+
|
13
|
+
class Analyzer
|
14
|
+
attr_reader config: Config
|
15
|
+
attr_reader schema_tables: Hash[String, Array[String]]
|
16
|
+
attr_reader model_tables: Hash[String, Array[String]]
|
17
|
+
attr_reader sti_base_tables: Set[String]
|
18
|
+
attr_reader habtm_tables: Set[String]
|
19
|
+
attr_reader droppable_tables: Array[String]
|
20
|
+
|
21
|
+
def initialize: (Config config) -> void
|
22
|
+
def analyze: () -> void
|
23
|
+
def report: (?format: :text | :json) -> String
|
24
|
+
|
25
|
+
private
|
26
|
+
def check_migration_status: () -> void
|
27
|
+
def detect_schema_format: () -> (:ruby | :sql)
|
28
|
+
def collect_schema_tables: () -> void
|
29
|
+
def load_models_and_collect_tables: () -> void
|
30
|
+
def identify_droppable_tables: () -> void
|
31
|
+
def find_schema_files: () -> Array[String]
|
32
|
+
def extract_database_name: (String path) -> String
|
33
|
+
def text_report: () -> String
|
34
|
+
def json_report: () -> Hash[Symbol, untyped]
|
35
|
+
end
|
36
|
+
|
37
|
+
class Config
|
38
|
+
DEFAULT_CONFIG_FILE: String
|
39
|
+
RAILS_INTERNAL_TABLES_FILE: String
|
40
|
+
KNOWN_GEMS_FILE: String
|
41
|
+
|
42
|
+
attr_reader excluded_tables: Set[String]
|
43
|
+
attr_reader excluded_gems: Set[String]
|
44
|
+
attr_reader strict_mode: Hash[String, untyped]
|
45
|
+
attr_reader config_file_path: String
|
46
|
+
|
47
|
+
def initialize: (?String? config_file_path) -> void
|
48
|
+
def rails_internal_tables: () -> Array[String]
|
49
|
+
def known_gem_tables: () -> Hash[String, Array[String]]
|
50
|
+
def all_excluded_tables: () -> Set[String]
|
51
|
+
def strict_mode_enabled?: () -> bool
|
52
|
+
def baseline_file: () -> String
|
53
|
+
|
54
|
+
private
|
55
|
+
def load_default_config: () -> void
|
56
|
+
def load_user_config: () -> void
|
57
|
+
def load_yaml_file: (String path) -> untyped
|
58
|
+
def gem_excluded_tables: () -> Set[String]
|
59
|
+
end
|
60
|
+
|
61
|
+
class ModelCollector
|
62
|
+
attr_reader model_tables: Hash[String, Array[String]]
|
63
|
+
attr_reader sti_base_tables: Set[String]
|
64
|
+
attr_reader habtm_tables: Set[String]
|
65
|
+
|
66
|
+
def initialize: () -> void
|
67
|
+
def collect: () -> void
|
68
|
+
|
69
|
+
private
|
70
|
+
def find_rails_root: () -> String
|
71
|
+
def load_rails_environment: (String rails_root) -> void
|
72
|
+
def collect_all_models: () -> Array[Class]
|
73
|
+
def collect_models_from_app: () -> Array[Class]
|
74
|
+
def collect_models_from_engines: () -> Array[Class]
|
75
|
+
def process_model: (Class model) -> void
|
76
|
+
def extract_database_name: (Class model) -> String
|
77
|
+
def extract_table_name: (Class model) -> String
|
78
|
+
def collect_sti_base_tables: (Class model) -> void
|
79
|
+
def collect_habtm_tables: (Class model) -> void
|
80
|
+
end
|
81
|
+
|
82
|
+
class SchemaParser
|
83
|
+
attr_reader schema_path: String
|
84
|
+
attr_reader tables: Array[String]
|
85
|
+
|
86
|
+
def initialize: (String schema_path) -> void
|
87
|
+
def parse: () -> Array[String]
|
88
|
+
|
89
|
+
private
|
90
|
+
def parse_ruby_schema: () -> Array[String]
|
91
|
+
def parse_sql_schema: () -> Array[String]
|
92
|
+
end
|
93
|
+
|
94
|
+
class CLI < Thor
|
95
|
+
def analyze: () -> void
|
96
|
+
def version: () -> void
|
97
|
+
def self.exit_on_failure?: () -> bool
|
98
|
+
|
99
|
+
private
|
100
|
+
def handle_strict_mode: (Analyzer analyzer, Config config) -> void
|
101
|
+
def error_exit: (String message) -> void
|
102
|
+
end
|
103
|
+
end
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: droppable_table
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- konpyu
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-07-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: railties
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '6.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '6.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rails
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '6.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '6.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: sqlite3
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.4'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.4'
|
83
|
+
description: Analyzes Rails schema files and ActiveRecord models to identify tables
|
84
|
+
that exist in schema but have no corresponding models, helping with database cleanup.
|
85
|
+
email:
|
86
|
+
- konpyu@gmail.com
|
87
|
+
executables:
|
88
|
+
- droppable_table
|
89
|
+
extensions: []
|
90
|
+
extra_rdoc_files: []
|
91
|
+
files:
|
92
|
+
- ".rubocop.yml"
|
93
|
+
- ".ruby-version"
|
94
|
+
- CHANGELOG.md
|
95
|
+
- CLAUDE.md
|
96
|
+
- CODE_OF_CONDUCT.md
|
97
|
+
- LICENSE.txt
|
98
|
+
- README.md
|
99
|
+
- Rakefile
|
100
|
+
- bin/console
|
101
|
+
- bin/droppable_table
|
102
|
+
- bin/setup
|
103
|
+
- config/known_gems.yml
|
104
|
+
- config/rails_internal_tables.yml
|
105
|
+
- droppable_table.yml.sample
|
106
|
+
- lib/droppable_table.rb
|
107
|
+
- lib/droppable_table/analyzer.rb
|
108
|
+
- lib/droppable_table/cli.rb
|
109
|
+
- lib/droppable_table/config.rb
|
110
|
+
- lib/droppable_table/model_collector.rb
|
111
|
+
- lib/droppable_table/schema_parser.rb
|
112
|
+
- lib/droppable_table/version.rb
|
113
|
+
- sig/droppable_table.rbs
|
114
|
+
homepage: https://github.com/konpyu/droppable_table
|
115
|
+
licenses:
|
116
|
+
- MIT
|
117
|
+
metadata:
|
118
|
+
homepage_uri: https://github.com/konpyu/droppable_table
|
119
|
+
source_code_uri: https://github.com/konpyu/droppable_table
|
120
|
+
changelog_uri: https://github.com/konpyu/droppable_table/blob/main/CHANGELOG.md
|
121
|
+
rubygems_mfa_required: 'true'
|
122
|
+
post_install_message:
|
123
|
+
rdoc_options: []
|
124
|
+
require_paths:
|
125
|
+
- lib
|
126
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: 3.0.0
|
131
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
132
|
+
requirements:
|
133
|
+
- - ">="
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
requirements: []
|
137
|
+
rubygems_version: 3.5.22
|
138
|
+
signing_key:
|
139
|
+
specification_version: 4
|
140
|
+
summary: A gem to identify potentially droppable tables in Rails applications
|
141
|
+
test_files: []
|