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