dbdoc_engine 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.
Files changed (198) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +331 -0
  3. data/Rakefile +8 -0
  4. data/app/assets/builds/dbdoc_engine/application.css +5 -0
  5. data/app/assets/images/dbdoc_engine/arrowdown.svg +3 -0
  6. data/app/assets/images/dbdoc_engine/arrowhorizontal.svg +3 -0
  7. data/app/assets/images/dbdoc_engine/arrowleft.svg +3 -0
  8. data/app/assets/images/dbdoc_engine/changelog.svg +3 -0
  9. data/app/assets/images/dbdoc_engine/column_stats_dbdocs.svg +23 -0
  10. data/app/assets/images/dbdoc_engine/diagram.svg +3 -0
  11. data/app/assets/images/dbdoc_engine/double_arrow.svg +4 -0
  12. data/app/assets/images/dbdoc_engine/group_bu.svg +3 -0
  13. data/app/assets/images/dbdoc_engine/japan_circle.png +0 -0
  14. data/app/assets/images/dbdoc_engine/log_in_image.png +0 -0
  15. data/app/assets/images/dbdoc_engine/logo.svg +12 -0
  16. data/app/assets/images/dbdoc_engine/orange_changelog.svg +3 -0
  17. data/app/assets/images/dbdoc_engine/orange_fields.svg +23 -0
  18. data/app/assets/images/dbdoc_engine/orange_logo.svg +12 -0
  19. data/app/assets/images/dbdoc_engine/orange_table.svg +21 -0
  20. data/app/assets/images/dbdoc_engine/orange_updates.svg +43 -0
  21. data/app/assets/images/dbdoc_engine/orange_wiki.svg +3 -0
  22. data/app/assets/images/dbdoc_engine/search.svg +3 -0
  23. data/app/assets/images/dbdoc_engine/setting.svg +3 -0
  24. data/app/assets/images/dbdoc_engine/table_dbdocs.svg +21 -0
  25. data/app/assets/images/dbdoc_engine/uk_circle_transparent.png +0 -0
  26. data/app/assets/images/dbdoc_engine/update_stats_dbdocs.svg +43 -0
  27. data/app/assets/images/dbdoc_engine/wiki.svg +3 -0
  28. data/app/assets/stylesheets/dbdoc_engine/admin.css +176 -0
  29. data/app/assets/stylesheets/dbdoc_engine/admin_header.css +179 -0
  30. data/app/assets/stylesheets/dbdoc_engine/application.scss +1 -0
  31. data/app/assets/stylesheets/dbdoc_engine/changelog.css +173 -0
  32. data/app/assets/stylesheets/dbdoc_engine/dashboard.css +513 -0
  33. data/app/assets/stylesheets/dbdoc_engine/dbdoc_application.css +117 -0
  34. data/app/assets/stylesheets/dbdoc_engine/ecommerce.css +253 -0
  35. data/app/assets/stylesheets/dbdoc_engine/group_details.css +178 -0
  36. data/app/assets/stylesheets/dbdoc_engine/header.css +212 -0
  37. data/app/assets/stylesheets/dbdoc_engine/loading_spinner.css +127 -0
  38. data/app/assets/stylesheets/dbdoc_engine/login.css +213 -0
  39. data/app/assets/stylesheets/dbdoc_engine/schema_diagram.css +149 -0
  40. data/app/assets/stylesheets/dbdoc_engine/sidebar.css +296 -0
  41. data/app/assets/stylesheets/dbdoc_engine/table_details.css +417 -0
  42. data/app/controllers/dbdoc_engine/admin/base_controller.rb +23 -0
  43. data/app/controllers/dbdoc_engine/admin/dashboard_controller.rb +16 -0
  44. data/app/controllers/dbdoc_engine/admin/data_transfer_controller.rb +63 -0
  45. data/app/controllers/dbdoc_engine/admin/db_design_dynamic_tables_controller.rb +198 -0
  46. data/app/controllers/dbdoc_engine/admin/db_design_table_groups_controller.rb +107 -0
  47. data/app/controllers/dbdoc_engine/application_controller.rb +65 -0
  48. data/app/controllers/dbdoc_engine/concerns/internationalization.rb +57 -0
  49. data/app/controllers/dbdoc_engine/db_doc_sessions_controller.rb +33 -0
  50. data/app/controllers/dbdoc_engine/home_controller.rb +79 -0
  51. data/app/controllers/dbdoc_engine/schema_diagram_controller.rb +293 -0
  52. data/app/helper/dbdoc_engine/application_helper.rb +35 -0
  53. data/app/helpers/dbdoc_engine/application_helper.rb +4 -0
  54. data/app/helpers/dbdoc_engine/changelogs_helper.rb +27 -0
  55. data/app/helpers/dbdoc_engine/column_helper.rb +30 -0
  56. data/app/helpers/dbdoc_engine/db_design_dynamic_tables_helper.rb +15 -0
  57. data/app/helpers/dbdoc_engine/home_helper.rb +75 -0
  58. data/app/javascript/dbdoc_engine/application.js +12 -0
  59. data/app/javascript/dbdoc_engine/controllers/application.js +29 -0
  60. data/app/javascript/dbdoc_engine/controllers/auto_submit_controller.js +17 -0
  61. data/app/javascript/dbdoc_engine/controllers/chart_controller.js +58 -0
  62. data/app/javascript/dbdoc_engine/controllers/column-type_controller.js +149 -0
  63. data/app/javascript/dbdoc_engine/controllers/column_controller.js +362 -0
  64. data/app/javascript/dbdoc_engine/controllers/column_search_controller.js +42 -0
  65. data/app/javascript/dbdoc_engine/controllers/dbdoc_accordion_controller.js +42 -0
  66. data/app/javascript/dbdoc_engine/controllers/ecommerce_controller.js +73 -0
  67. data/app/javascript/dbdoc_engine/controllers/group_details_controller.js +88 -0
  68. data/app/javascript/dbdoc_engine/controllers/import_export_controller.js +200 -0
  69. data/app/javascript/dbdoc_engine/controllers/index.js +9 -0
  70. data/app/javascript/dbdoc_engine/controllers/language_controller.js +100 -0
  71. data/app/javascript/dbdoc_engine/controllers/loading_spinner_controller.js +48 -0
  72. data/app/javascript/dbdoc_engine/controllers/login_controller.js +75 -0
  73. data/app/javascript/dbdoc_engine/controllers/notification_controller.js +15 -0
  74. data/app/javascript/dbdoc_engine/controllers/schema_diagram_controller.js +1129 -0
  75. data/app/javascript/dbdoc_engine/controllers/select2_controller.js +67 -0
  76. data/app/javascript/dbdoc_engine/controllers/sidebar_controller.js +943 -0
  77. data/app/javascript/dbdoc_engine/controllers/table_details_controller.js +245 -0
  78. data/app/javascript/dbdoc_engine/controllers/table_group_validation_controller.js +148 -0
  79. data/app/javascript/dbdoc_engine/controllers/table_validation_controller.js +423 -0
  80. data/app/jobs/dbdoc_engine/application_job.rb +4 -0
  81. data/app/mailers/dbdoc_engine/application_mailer.rb +6 -0
  82. data/app/models/dbdoc_engine/application_record.rb +6 -0
  83. data/app/models/dbdoc_engine/concerns/soft_deletable.rb +30 -0
  84. data/app/models/dbdoc_engine/db_design_changelog.rb +44 -0
  85. data/app/models/dbdoc_engine/db_design_dynamic_column.rb +211 -0
  86. data/app/models/dbdoc_engine/db_design_dynamic_table.rb +124 -0
  87. data/app/models/dbdoc_engine/db_design_table_group.rb +88 -0
  88. data/app/models/dbdoc_engine/user.rb +21 -0
  89. data/app/queries/dbdoc_engine/admin_dashboard_queries.rb +71 -0
  90. data/app/queries/dbdoc_engine/db_design_changelog_queries.rb +68 -0
  91. data/app/queries/dbdoc_engine/db_design_dynamic_column_queries.rb +37 -0
  92. data/app/queries/dbdoc_engine/db_design_dynamic_table_commands.rb +106 -0
  93. data/app/queries/dbdoc_engine/db_design_dynamic_table_queries.rb +194 -0
  94. data/app/queries/dbdoc_engine/db_design_table_group_queries.rb +154 -0
  95. data/app/services/dbdoc_engine/db_design_dynamic_table_export_service.rb +38 -0
  96. data/app/services/dbdoc_engine/db_design_dynamic_table_handler_service.rb +49 -0
  97. data/app/services/dbdoc_engine/db_design_dynamic_tables_service.rb +21 -0
  98. data/app/services/dbdoc_engine/error_handler_service.rb +43 -0
  99. data/app/services/dbdoc_engine/schema_rb_import_service.rb +194 -0
  100. data/app/services/dbdoc_engine/schema_rb_parser_service.rb +339 -0
  101. data/app/services/dbdoc_engine/table_filter_service.rb +35 -0
  102. data/app/services/dbdoc_engine/table_groups_service.rb +199 -0
  103. data/app/services/dbdoc_engine/table_management_service.rb +192 -0
  104. data/app/views/dbdoc_engine/admin/dashboard/_action_badge.html.erb +11 -0
  105. data/app/views/dbdoc_engine/admin/dashboard/_changelog_rows.html.erb +22 -0
  106. data/app/views/dbdoc_engine/admin/dashboard/_changelog_table_headers.html.erb +8 -0
  107. data/app/views/dbdoc_engine/admin/dashboard/_filter_fields.html.erb +43 -0
  108. data/app/views/dbdoc_engine/admin/dashboard/index.html.erb +159 -0
  109. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_column_fields.html.erb +225 -0
  110. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_deleted_table_index.html.erb +110 -0
  111. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_foreign_key_fields.html.erb +51 -0
  112. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_form.html.erb +75 -0
  113. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_recent_activity.html.erb +39 -0
  114. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_table_columns.html.erb +127 -0
  115. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_table_index.html.erb +109 -0
  116. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/_table_information.html.erb +99 -0
  117. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/deleted_tables.html.erb +95 -0
  118. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/edit.html.erb +23 -0
  119. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/export_all_to_excel.xlsx.axlsx +240 -0
  120. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/export_to_excel.xlsx.axlsx +135 -0
  121. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/index.html.erb +109 -0
  122. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/new.html.erb +25 -0
  123. data/app/views/dbdoc_engine/admin/db_design_dynamic_tables/show_table_info.html.erb +125 -0
  124. data/app/views/dbdoc_engine/admin/db_design_table_groups/_deleted_table_groups_list.html.erb +75 -0
  125. data/app/views/dbdoc_engine/admin/db_design_table_groups/_form.html.erb +88 -0
  126. data/app/views/dbdoc_engine/admin/db_design_table_groups/_table_groups_list.html.erb +82 -0
  127. data/app/views/dbdoc_engine/admin/db_design_table_groups/deleted_groups.html.erb +60 -0
  128. data/app/views/dbdoc_engine/admin/db_design_table_groups/edit.html.erb +25 -0
  129. data/app/views/dbdoc_engine/admin/db_design_table_groups/index.html.erb +85 -0
  130. data/app/views/dbdoc_engine/admin/db_design_table_groups/new.html.erb +26 -0
  131. data/app/views/dbdoc_engine/db_doc_sessions/new.html.erb +59 -0
  132. data/app/views/dbdoc_engine/home/changelog_details.html.erb +80 -0
  133. data/app/views/dbdoc_engine/home/changelogs.html.erb +20 -0
  134. data/app/views/dbdoc_engine/home/group_details.html.erb +94 -0
  135. data/app/views/dbdoc_engine/home/index.html.erb +11 -0
  136. data/app/views/dbdoc_engine/home/partials/_action_badge.html.erb +11 -0
  137. data/app/views/dbdoc_engine/home/partials/_breadcrumb_navigation.html.erb +30 -0
  138. data/app/views/dbdoc_engine/home/partials/_changelog_rows.html.erb +35 -0
  139. data/app/views/dbdoc_engine/home/partials/_changelog_table_headers.html.erb +16 -0
  140. data/app/views/dbdoc_engine/home/partials/_column_headers.html.erb +23 -0
  141. data/app/views/dbdoc_engine/home/partials/_column_row.html.erb +157 -0
  142. data/app/views/dbdoc_engine/home/partials/_filter_form.html.erb +47 -0
  143. data/app/views/dbdoc_engine/home/partials/_group_section.html.erb +84 -0
  144. data/app/views/dbdoc_engine/home/partials/_pagination.html.erb +5 -0
  145. data/app/views/dbdoc_engine/home/partials/_stats_container.html.erb +46 -0
  146. data/app/views/dbdoc_engine/home/partials/_table_groups.html.erb +7 -0
  147. data/app/views/dbdoc_engine/home/partials/_table_information_section.html.erb +50 -0
  148. data/app/views/dbdoc_engine/home/partials/_table_section.html.erb +48 -0
  149. data/app/views/dbdoc_engine/home/table_details.html.erb +9 -0
  150. data/app/views/dbdoc_engine/schema_diagram/index.html.erb +102 -0
  151. data/app/views/dbdoc_engine/shared/_admin_header.html.erb +78 -0
  152. data/app/views/dbdoc_engine/shared/_header.html.erb +94 -0
  153. data/app/views/dbdoc_engine/shared/_js_translations.html.erb +3 -0
  154. data/app/views/dbdoc_engine/shared/_language_button.html.erb +14 -0
  155. data/app/views/dbdoc_engine/shared/_sidebar.html.erb +128 -0
  156. data/app/views/kaminari/dbdoc_engine/_first_page.html.erb +3 -0
  157. data/app/views/kaminari/dbdoc_engine/_gap.html.erb +3 -0
  158. data/app/views/kaminari/dbdoc_engine/_last_page.html.erb +3 -0
  159. data/app/views/kaminari/dbdoc_engine/_next_page.html.erb +3 -0
  160. data/app/views/kaminari/dbdoc_engine/_page.html.erb +9 -0
  161. data/app/views/kaminari/dbdoc_engine/_paginator.html.erb +17 -0
  162. data/app/views/kaminari/dbdoc_engine/_prev_page.html.erb +3 -0
  163. data/app/views/layouts/dbdoc_engine/application.html.erb +107 -0
  164. data/app/views/layouts/dbdoc_engine/header.html.erb +108 -0
  165. data/config/importmap.rb +11 -0
  166. data/config/locales/en.yml +307 -0
  167. data/config/locales/ja.yml +306 -0
  168. data/config/routes.rb +73 -0
  169. data/db/migrate/rails7/20250227060610_create_db_design_table_groups.rb +15 -0
  170. data/db/migrate/rails7/20250227094626_create_db_design_dynamic_tables.rb +19 -0
  171. data/db/migrate/rails7/20250228022732_create_db_design_dynamic_columns.rb +34 -0
  172. data/db/migrate/rails7/20250401051453_create_db_design_changelogs.rb +26 -0
  173. data/db/migrate/rails7/20250411040822_create_users.rb +14 -0
  174. data/db/migrate/rails7/20250421080851_add_missing_indexes_to_dbdoc_tables.rb +23 -0
  175. data/db/migrate/rails8/20250227060610_create_db_design_table_groups.rb +15 -0
  176. data/db/migrate/rails8/20250227094626_create_db_design_dynamic_tables.rb +19 -0
  177. data/db/migrate/rails8/20250228022732_create_db_design_dynamic_columns.rb +34 -0
  178. data/db/migrate/rails8/20250401051453_create_db_design_changelogs.rb +26 -0
  179. data/db/migrate/rails8/20250411040822_create_users.rb +14 -0
  180. data/db/migrate/rails8/20250421080851_add_missing_indexes_to_dbdoc_tables.rb +23 -0
  181. data/db/seeds.rb +28 -0
  182. data/lib/dbdoc_engine/engine.rb +57 -0
  183. data/lib/dbdoc_engine/version.rb +3 -0
  184. data/lib/dbdoc_engine.rb +9 -0
  185. data/lib/generators/dbdoc_engine/install/install_generator.rb +245 -0
  186. data/lib/generators/dbdoc_engine/uninstall/uninstall_generator.rb +196 -0
  187. data/lib/tasks/dbdoc_engine_tasks.rake +44 -0
  188. data/public/dbdoc_engine_assets/images/camel_chess_head.png +0 -0
  189. data/public/dbdoc_engine_assets/images/dblogo.svg +4 -0
  190. data/public/dbdoc_engine_assets/images/japan_circle.png +0 -0
  191. data/public/dbdoc_engine_assets/images/king_chess_head.png +0 -0
  192. data/public/dbdoc_engine_assets/images/login-bg.svg +44 -0
  193. data/public/dbdoc_engine_assets/images/logo.png +0 -0
  194. data/public/dbdoc_engine_assets/images/logo.svg +12 -0
  195. data/public/dbdoc_engine_assets/images/queen_chess_head.png +0 -0
  196. data/public/dbdoc_engine_assets/images/soldier_chess_headd.png +0 -0
  197. data/public/dbdoc_engine_assets/images/uk_circle_transparent.png +0 -0
  198. metadata +415 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ad5cf22e63a4897073d62ad296bdcc483188b40abd451443bcb1d241d2b35af4
4
+ data.tar.gz: 9888d8b12daf05eeb54a337237dbfa8a29f05d2b7ef1b82bc725f9428e77cbcb
5
+ SHA512:
6
+ metadata.gz: 88e5f52c5cc8672aede21cc46c0c379c8a1fee3bc380bc1d79aa6bf0b0cb569654ad37796d87ba99c0c678bf51179c82db88f433f90adea4cb0df87ca5bba6c9
7
+ data.tar.gz: 85ac752291498feae0667069603bec63a72dae67ef48de1ca05105d646f67c790f57cc6e86c58b1d8edc0febb0988082bf73fd1badff704b631f2b9ae7002265
data/README.md ADDED
@@ -0,0 +1,331 @@
1
+ # DbdocEngine
2
+
3
+ A mountable Rails engine for **database design documentation**. Provides a full-featured web interface to document, visualize, and collaborate on your database schema — tables, columns, relationships, constraints, and change history.
4
+
5
+ ---
6
+
7
+ ## Features
8
+
9
+ - **Table & Column Documentation** — Document every table and column with logical/physical names, data types, constraints (PK, FK, NOT NULL, unique, indexed), default values, and descriptions.
10
+ - **Table Groups** — Organize tables into color-coded logical groups (e.g., "User Management", "Orders", "Master Data").
11
+ - **Interactive Schema Diagram** — Auto-generated ER diagram with group-based highlighting and FK relationship lines.
12
+ - **Changelog & Audit Trail** — Every create, update, and delete is automatically logged with timestamp, user, and before/after values.
13
+ - **Excel Export** — Export full documentation as `.xlsx` (all tables or single table) with proper formatting and i18n support.
14
+ - **JSON Import/Export** — Backup and restore all documentation data as JSON.
15
+ - **Schema.rb Import** — Auto-import table/column definitions from your project's `schema.rb` or an uploaded file.
16
+ - **Role-Based Access Control** — Three roles: `user` (read-only), `admin` (edit), `superadmin` (full control including import/export/delete).
17
+ - **Soft Delete & Restore** — Safely delete and restore tables and groups.
18
+ - **i18n Support** — Full English and Japanese localization.
19
+ - **Modern Dashboard** — Stats overview, recent activity, action chart, and quick-access import/export tools.
20
+
21
+ ---
22
+
23
+ ## Requirements
24
+
25
+ | Dependency | Version |
26
+ |------------|---------|
27
+ | Ruby | >= 3.0 |
28
+ | Rails | >= 7.0, < 9.0 |
29
+ | PostgreSQL | >= 12 |
30
+
31
+ ---
32
+
33
+ ## Installation
34
+
35
+ ### 1. Add to Gemfile
36
+
37
+ ```ruby
38
+ gem "dbdoc_engine"
39
+ ```
40
+
41
+ ### 2. Install
42
+
43
+ ```bash
44
+ bundle install
45
+ bin/rails generate dbdoc_engine:install
46
+ ```
47
+
48
+ The installer will automatically:
49
+
50
+ 1. Copy the appropriate migrations (Rails 7 or Rails 8)
51
+ 2. Run `db:migrate` to create all DbdocEngine tables
52
+ 3. Seed three default users
53
+ 4. Mount the engine at `/dbdoc` in `config/routes.rb`
54
+ 5. Configure importmap pins in `config/importmap.rb`
55
+ 6. Add the JS import to `app/javascript/application.js`
56
+ 7. For Rails 7: install importmap/turbo/stimulus if missing, update `manifest.js`
57
+
58
+ ### 3. Start your server
59
+
60
+ ```bash
61
+ bin/rails server
62
+ ```
63
+
64
+ Visit **http://localhost:3000/dbdoc** and log in.
65
+
66
+ ---
67
+
68
+ ## Default Users
69
+
70
+ After installation, three users are created in the `dbdoc_engine_users` table (isolated from your app's `users` table):
71
+
72
+ | Username | Password | Role |
73
+ |----------|----------|------|
74
+ | `user` | `password123` | user (read-only) |
75
+ | `admin` | `password123` | admin (can edit) |
76
+ | `superadmin` | `password123` | superadmin (full control) |
77
+
78
+ > **Important:** Change the default passwords in production.
79
+
80
+ ---
81
+
82
+ ## Configuration
83
+
84
+ ### Mount Path
85
+
86
+ By default the engine is mounted at `/dbdoc`. To change it:
87
+
88
+ ```ruby
89
+ # config/routes.rb
90
+ Rails.application.routes.draw do
91
+ mount DbdocEngine::Engine => "/dbdoc"
92
+ end
93
+ ```
94
+
95
+ ### Locale
96
+
97
+ DbdocEngine supports English (`en`) and Japanese (`ja`). The locale can be switched from the UI or by appending `?locale=ja` to any URL.
98
+
99
+ ---
100
+
101
+ ## Roles & Permissions
102
+
103
+ | Role | View Docs | Edit Tables/Columns | Manage Groups | Delete | Import/Export |
104
+ |------|-----------|---------------------|---------------|--------|---------------|
105
+ | `user` | Yes | No | No | No | No |
106
+ | `admin` | Yes | Yes | Yes | No | No |
107
+ | `superadmin` | Yes | Yes | Yes | Yes | Yes |
108
+
109
+ ---
110
+
111
+ ## Database Tables
112
+
113
+ All tables are namespaced to avoid conflicts with your application:
114
+
115
+ | Table | Purpose |
116
+ |-------|---------|
117
+ | `db_design_table_groups` | Logical groups with color codes |
118
+ | `db_design_dynamic_tables` | Documented tables (logical + physical names) |
119
+ | `db_design_dynamic_columns` | Column definitions with full constraint metadata |
120
+ | `db_design_changelogs` | Audit log of all documentation changes |
121
+ | `dbdoc_engine_users` | Engine-specific authentication (does NOT touch your app's `users` table) |
122
+
123
+ ---
124
+
125
+ ## Routes Reference
126
+
127
+ ### Public Routes
128
+
129
+ | Method | Path | Description |
130
+ |--------|------|-------------|
131
+ | GET | `/dbdoc` | Documentation home |
132
+ | GET | `/dbdoc/login` | Login form |
133
+ | POST | `/dbdoc/login` | Authenticate |
134
+ | DELETE | `/dbdoc/logout` | Logout |
135
+ | GET | `/dbdoc/group_details/:id` | Group detail view |
136
+ | GET | `/dbdoc/table_details/:id` | Table detail view |
137
+ | GET | `/dbdoc/changelogs` | Change history |
138
+ | GET | `/dbdoc/schema_diagram` | Interactive ER diagram |
139
+
140
+ ### Admin Routes (requires login)
141
+
142
+ | Method | Path | Description |
143
+ |--------|------|-------------|
144
+ | GET | `/dbdoc/admin/dashboard` | Admin dashboard |
145
+ | CRUD | `/dbdoc/admin/db_design_dynamic_tables` | Table management |
146
+ | CRUD | `/dbdoc/admin/db_design_table_groups` | Group management |
147
+ | GET | `/dbdoc/admin/export_data` | Export documentation as JSON |
148
+ | POST | `/dbdoc/admin/import_data` | Import documentation from JSON |
149
+ | POST | `/dbdoc/admin/import_schema` | Import from schema.rb |
150
+ | GET | `/dbdoc/admin/.../export_to_excel` | Export single table as Excel |
151
+ | GET | `/dbdoc/admin/.../export_all_to_excel` | Export all tables as Excel |
152
+
153
+ ---
154
+
155
+ ## Architecture
156
+
157
+ ```
158
+ dbdoc_engine/
159
+ ├── app/
160
+ │ ├── controllers/dbdoc_engine/
161
+ │ │ ├── application_controller.rb # Auth, i18n, layout
162
+ │ │ ├── home_controller.rb # Public documentation pages
163
+ │ │ ├── schema_diagram_controller.rb # ER diagram + JSON API
164
+ │ │ ├── db_doc_sessions_controller.rb # Login/logout
165
+ │ │ └── admin/
166
+ │ │ ├── base_controller.rb # Admin authorization
167
+ │ │ ├── dashboard_controller.rb # Dashboard stats & chart
168
+ │ │ ├── db_design_dynamic_tables_controller.rb
169
+ │ │ ├── db_design_table_groups_controller.rb
170
+ │ │ └── data_transfer_controller.rb # Import/export
171
+ │ ├── models/dbdoc_engine/
172
+ │ │ ├── user.rb
173
+ │ │ ├── db_design_table_group.rb
174
+ │ │ ├── db_design_dynamic_table.rb
175
+ │ │ ├── db_design_dynamic_column.rb
176
+ │ │ ├── db_design_changelog.rb
177
+ │ │ └── concerns/soft_deletable.rb
178
+ │ ├── services/dbdoc_engine/
179
+ │ │ ├── schema_rb_parser_service.rb # Parse schema.rb DSL
180
+ │ │ └── schema_rb_import_service.rb # Bulk-import tables/columns
181
+ │ ├── queries/dbdoc_engine/ # Query objects (no N+1)
182
+ │ ├── helpers/dbdoc_engine/
183
+ │ ├── views/dbdoc_engine/ # ERB templates
184
+ │ ├── javascript/dbdoc_engine/ # Stimulus controllers
185
+ │ └── assets/
186
+ │ ├── stylesheets/dbdoc_engine/ # CSS
187
+ │ └── images/dbdoc_engine/ # Icons, logos
188
+ ├── config/
189
+ │ ├── routes.rb # Engine routes
190
+ │ ├── locales/
191
+ │ │ ├── en.yml # English translations
192
+ │ │ └── ja.yml # Japanese translations
193
+ │ └── importmap.rb
194
+ ├── db/
195
+ │ ├── migrate/
196
+ │ │ ├── rails7/ # Migrations for Rails 7.x
197
+ │ │ └── rails8/ # Migrations for Rails 8.x
198
+ │ └── seeds.rb # Default user seeds
199
+ └── lib/
200
+ ├── dbdoc_engine.rb
201
+ ├── dbdoc_engine/
202
+ │ ├── engine.rb
203
+ │ └── version.rb
204
+ ├── generators/dbdoc_engine/
205
+ │ ├── install/install_generator.rb # Install generator
206
+ │ └── uninstall/uninstall_generator.rb # Uninstall generator
207
+ └── tasks/dbdoc_engine_tasks.rake
208
+ ```
209
+
210
+ ---
211
+
212
+ ## Manual Setup (if not using the generator)
213
+
214
+ ### Routes
215
+
216
+ ```ruby
217
+ # config/routes.rb
218
+ Rails.application.routes.draw do
219
+ mount DbdocEngine::Engine => "/dbdoc"
220
+ end
221
+ ```
222
+
223
+ ### Importmap
224
+
225
+ ```ruby
226
+ # config/importmap.rb
227
+ if defined?(DbdocEngine)
228
+ pin_all_from DbdocEngine::Engine.root.join("app/javascript/dbdoc_engine"),
229
+ under: "dbdoc_engine",
230
+ to: "dbdoc_engine"
231
+ end
232
+ ```
233
+
234
+ ### JavaScript
235
+
236
+ ```javascript
237
+ // app/javascript/application.js
238
+ import "dbdoc_engine/application";
239
+ ```
240
+
241
+ ### Migrations
242
+
243
+ ```bash
244
+ bin/rails dbdoc_engine:install:migrations
245
+ bin/rails db:migrate
246
+ ```
247
+
248
+ ### Seeds
249
+
250
+ ```bash
251
+ bin/rails dbdoc_engine:install:seeds
252
+ bin/rails dbdoc_engine:db:seed
253
+ ```
254
+
255
+ ---
256
+
257
+ ## Uninstallation
258
+
259
+ To completely remove DbdocEngine from your project:
260
+
261
+ ```bash
262
+ bin/rails generate dbdoc_engine:uninstall
263
+ ```
264
+
265
+ The uninstaller will ask for confirmation before:
266
+
267
+ 1. **Dropping all DbdocEngine tables** (with a separate confirmation — you can choose to keep them)
268
+ 2. Removing the engine route from `config/routes.rb`
269
+ 3. Removing importmap pins from `config/importmap.rb`
270
+ 4. Removing the JS import from `app/javascript/application.js`
271
+ 5. Deleting the seed file `db/dbdoc_engine_seeds.rb`
272
+ 6. Cleaning up migration files and `schema_migrations` entries
273
+
274
+ After running the uninstaller, remove `gem "dbdoc_engine"` from your `Gemfile` and run `bundle install`.
275
+
276
+ ---
277
+
278
+ ## Import / Export
279
+
280
+ ### JSON Export & Import
281
+
282
+ From the Admin Dashboard, superadmins can:
283
+
284
+ - **Export** all documentation data (groups, tables, columns) as a single `.json` file
285
+ - **Import** a previously exported `.json` file to restore or migrate documentation
286
+
287
+ ### Schema.rb Import
288
+
289
+ Two options to quickly bootstrap documentation from an existing database:
290
+
291
+ - **This Project** — Reads the current project's `db/schema.rb` and imports all table/column definitions
292
+ - **Upload File** — Upload any `schema.rb` file (from another project) via drag-and-drop or file picker
293
+
294
+ The import uses bulk `insert_all!` for fast performance (1500+ columns in under 1 second).
295
+
296
+ ### Excel Export
297
+
298
+ Export documentation as a formatted `.xlsx` file:
299
+
300
+ - **All Tables** — Generates a workbook with a table index sheet and one detail sheet per table
301
+ - **Single Table** — Export a specific table's column definitions
302
+
303
+ All Excel content is fully internationalized (English/Japanese).
304
+
305
+ ---
306
+
307
+ ## Development
308
+
309
+ ### Running the test app
310
+
311
+ ```bash
312
+ cd dbdoc_engine
313
+ bundle install
314
+ cd test/dummy
315
+ bin/rails db:create db:migrate
316
+ bin/rails dbdoc_engine:db:seed
317
+ bin/rails server
318
+ ```
319
+
320
+ ### Running tests
321
+
322
+ ```bash
323
+ cd dbdoc_engine
324
+ bundle exec rspec
325
+ ```
326
+
327
+ ---
328
+
329
+ ## License
330
+
331
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/setup"
2
+
3
+ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
+ load "rails/tasks/engine.rake"
5
+
6
+ load "rails/tasks/statistics.rake"
7
+
8
+ require "bundler/gem_tasks"