develoz-rails 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 (172) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +31 -0
  3. data/.github/workflows/release.yml +459 -0
  4. data/.rubocop.yml +52 -0
  5. data/.sisyphus/notepads/develoz-rails-template/learnings.md +855 -0
  6. data/.tool-versions +2 -0
  7. data/CHANGELOG.md +28 -0
  8. data/CONTRIBUTING.md +120 -0
  9. data/README.md +76 -0
  10. data/Rakefile +18 -0
  11. data/config/generators.yml +105 -0
  12. data/docs/guide/installation.md +574 -0
  13. data/exe/develoz +6 -0
  14. data/install +98 -0
  15. data/lib/develoz/canonical_fetcher.rb +56 -0
  16. data/lib/develoz/cli.rb +84 -0
  17. data/lib/develoz/generators/base.rb +134 -0
  18. data/lib/develoz/manifest.rb +44 -0
  19. data/lib/develoz/options.rb +55 -0
  20. data/lib/develoz/version.rb +5 -0
  21. data/lib/develoz/version_resolver.rb +103 -0
  22. data/lib/develoz.rb +15 -0
  23. data/lib/generators/develoz/active_resource/active_resource_generator.rb +25 -0
  24. data/lib/generators/develoz/active_resource/templates/application_resource.rb.tt +7 -0
  25. data/lib/generators/develoz/active_resource/templates/example_resource.rb.tt +5 -0
  26. data/lib/generators/develoz/admin/admin_generator.rb +44 -0
  27. data/lib/generators/develoz/admin/templates/admin_base_controller.rb.tt +7 -0
  28. data/lib/generators/develoz/admin/templates/admin_layout.html.erb.tt +38 -0
  29. data/lib/generators/develoz/admin/templates/dashboard_controller.rb.tt +7 -0
  30. data/lib/generators/develoz/admin/templates/dashboard_index.html.erb.tt +2 -0
  31. data/lib/generators/develoz/admin/templates/routes.rb.tt +3 -0
  32. data/lib/generators/develoz/agents_docs/agents_docs_generator.rb +50 -0
  33. data/lib/generators/develoz/agents_docs/templates/.github/pull_request_template.md.tt +13 -0
  34. data/lib/generators/develoz/agents_docs/templates/AGENTS.md.tt +36 -0
  35. data/lib/generators/develoz/agents_docs/templates/docs/development.md.tt +121 -0
  36. data/lib/generators/develoz/agents_docs/templates/docs/performance.md.tt +46 -0
  37. data/lib/generators/develoz/agents_docs/templates/docs/testing.md.tt +92 -0
  38. data/lib/generators/develoz/agents_docs/templates/spec/cassettes/Example_API/fetches_data_from_an_external_API.yml.tt +23 -0
  39. data/lib/generators/develoz/agents_docs/templates/spec/requests/example_api_spec.rb.tt +14 -0
  40. data/lib/generators/develoz/agents_docs/templates/spec/support/faraday.rb.tt +19 -0
  41. data/lib/generators/develoz/agents_docs/templates/spec/support/vcr.rb.tt +11 -0
  42. data/lib/generators/develoz/api/api_generator.rb +55 -0
  43. data/lib/generators/develoz/api/templates/app/blueprints/example_blueprint.rb.tt +6 -0
  44. data/lib/generators/develoz/api/templates/app/controllers/api/v1/base_controller.rb.tt +96 -0
  45. data/lib/generators/develoz/api/templates/config/initializers/blueprinter.rb.tt +16 -0
  46. data/lib/generators/develoz/api/templates/config/initializers/rswag_api.rb.tt +15 -0
  47. data/lib/generators/develoz/api/templates/config/initializers/rswag_ui.rb.tt +17 -0
  48. data/lib/generators/develoz/api/templates/spec/requests/api/v1/examples_spec.rb.tt +25 -0
  49. data/lib/generators/develoz/auth/auth_generator.rb +82 -0
  50. data/lib/generators/develoz/auth/templates/app/controllers/concerns/authentication.rb.tt +53 -0
  51. data/lib/generators/develoz/auth/templates/app/controllers/passwords_controller.rb.tt +35 -0
  52. data/lib/generators/develoz/auth/templates/app/controllers/sessions_controller.rb.tt +22 -0
  53. data/lib/generators/develoz/auth/templates/app/mailers/passwords_mailer.rb.tt +8 -0
  54. data/lib/generators/develoz/auth/templates/app/models/current.rb.tt +5 -0
  55. data/lib/generators/develoz/auth/templates/app/models/user.rb.tt +7 -0
  56. data/lib/generators/develoz/auth/templates/app/views/passwords/edit.html.erb.tt +9 -0
  57. data/lib/generators/develoz/auth/templates/app/views/passwords_mailer/reset.html.erb.tt +6 -0
  58. data/lib/generators/develoz/auth/templates/app/views/sessions/new.html.erb.tt +11 -0
  59. data/lib/generators/develoz/auth/templates/db/migrate/create_users.rb.tt +13 -0
  60. data/lib/generators/develoz/auth/templates/spec/requests/passwords_spec.rb.tt +60 -0
  61. data/lib/generators/develoz/auth/templates/spec/requests/sessions_spec.rb.tt +37 -0
  62. data/lib/generators/develoz/ci/ci_generator.rb +66 -0
  63. data/lib/generators/develoz/ci/templates/.github/workflows/ci.yml.tt +18 -0
  64. data/lib/generators/develoz/ci/templates/.haml-lint.yml.tt +12 -0
  65. data/lib/generators/develoz/ci/templates/.markdownlint.json.tt +10 -0
  66. data/lib/generators/develoz/ci/templates/.reek.yml.tt +28 -0
  67. data/lib/generators/develoz/ci/templates/.rubocop.yml.tt +22 -0
  68. data/lib/generators/develoz/ci/templates/.stylelintrc.json.tt +4 -0
  69. data/lib/generators/develoz/ci/templates/.yamllint.tt +14 -0
  70. data/lib/generators/develoz/ci/templates/Rakefile.tt +73 -0
  71. data/lib/generators/develoz/ci/templates/bin/ci.tt +6 -0
  72. data/lib/generators/develoz/ci/templates/biome.json.tt +41 -0
  73. data/lib/generators/develoz/ci/templates/config/ci.rb.tt +23 -0
  74. data/lib/generators/develoz/concerns/concerns_generator.rb +48 -0
  75. data/lib/generators/develoz/concerns/templates/app/models/concerns/configurable.rb.tt +120 -0
  76. data/lib/generators/develoz/concerns/templates/app/models/concerns/optimized_finders.rb.tt +93 -0
  77. data/lib/generators/develoz/concerns/templates/app/models/concerns/searchable_concern.rb.tt +31 -0
  78. data/lib/generators/develoz/concerns/templates/app/models/concerns/transitionable.rb.tt +144 -0
  79. data/lib/generators/develoz/concerns/templates/app/models/configuration.rb.tt +104 -0
  80. data/lib/generators/develoz/concerns/templates/db/migrate/add_status_transitions.rb.tt +30 -0
  81. data/lib/generators/develoz/concerns/templates/db/migrate/create_configurations.rb.tt +25 -0
  82. data/lib/generators/develoz/concerns/templates/spec/models/concerns/configurable_spec.rb.tt +172 -0
  83. data/lib/generators/develoz/concerns/templates/spec/models/concerns/optimized_finders_spec.rb.tt +200 -0
  84. data/lib/generators/develoz/concerns/templates/spec/models/concerns/searchable_concern_spec.rb.tt +84 -0
  85. data/lib/generators/develoz/concerns/templates/spec/models/concerns/transitionable_spec.rb.tt +234 -0
  86. data/lib/generators/develoz/concerns/templates/spec/models/configuration_spec.rb.tt +223 -0
  87. data/lib/generators/develoz/database/database_generator.rb +44 -0
  88. data/lib/generators/develoz/database/templates/config/database.yml.tt +53 -0
  89. data/lib/generators/develoz/database/templates/config/initializers/pg_search.rb.tt +5 -0
  90. data/lib/generators/develoz/database/templates/db/migrate/create_pg_extensions.rb.tt +13 -0
  91. data/lib/generators/develoz/db_backup/db_backup_generator.rb +47 -0
  92. data/lib/generators/develoz/db_backup/templates/backup_rake.tt +48 -0
  93. data/lib/generators/develoz/db_backup/templates/bin_db_backup.tt +25 -0
  94. data/lib/generators/develoz/db_backup/templates/compose_service.tt +14 -0
  95. data/lib/generators/develoz/doc_specs/doc_specs_generator.rb +33 -0
  96. data/lib/generators/develoz/doc_specs/templates/bin/generate-docs.tt +392 -0
  97. data/lib/generators/develoz/doc_specs/templates/lib/tasks/docs_check.rake.tt +8 -0
  98. data/lib/generators/develoz/doc_specs/templates/spec/support/doc_screenshot_helper.rb.tt +17 -0
  99. data/lib/generators/develoz/doc_specs/templates/spec/system/example_doc_spec.rb.tt +38 -0
  100. data/lib/generators/develoz/docker/docker_generator.rb +54 -0
  101. data/lib/generators/develoz/docker/templates/bin_dev.tt +5 -0
  102. data/lib/generators/develoz/docker/templates/bin_docker_entrypoint.tt +8 -0
  103. data/lib/generators/develoz/docker/templates/bin_run.tt +152 -0
  104. data/lib/generators/develoz/docker/templates/bin_setup.tt +15 -0
  105. data/lib/generators/develoz/docker/templates/docker-compose.yml.tt +59 -0
  106. data/lib/generators/develoz/docker/templates/dockerfile_dev.tt +24 -0
  107. data/lib/generators/develoz/docs_render/docs_render_generator.rb +46 -0
  108. data/lib/generators/develoz/docs_render/templates/app/assets/stylesheets/documentation.scss.tt +145 -0
  109. data/lib/generators/develoz/docs_render/templates/app/controllers/docs_controller.rb.tt +7 -0
  110. data/lib/generators/develoz/docs_render/templates/app/javascript/docs.js.tt +15 -0
  111. data/lib/generators/develoz/docs_render/templates/app/models/document.rb.tt +189 -0
  112. data/lib/generators/develoz/docs_render/templates/app/views/docs/show.html.erb.tt +7 -0
  113. data/lib/generators/develoz/docs_render/templates/config/initializers/redcarpet_rouge.rb.tt +16 -0
  114. data/lib/generators/develoz/frontend_core/frontend_core_generator.rb +40 -0
  115. data/lib/generators/develoz/frontend_core/templates/.annotaterb.yml.tt +16 -0
  116. data/lib/generators/develoz/frontend_core/templates/config/importmap.rb.tt +12 -0
  117. data/lib/generators/develoz/frontend_core/templates/config/initializers/pagy.rb.tt +10 -0
  118. data/lib/generators/develoz/install/install_generator.rb +51 -0
  119. data/lib/generators/develoz/kamal/kamal_generator.rb +59 -0
  120. data/lib/generators/develoz/kamal/templates/accessories_postgres.yml.tt +14 -0
  121. data/lib/generators/develoz/kamal/templates/deploy.yml.tt +43 -0
  122. data/lib/generators/develoz/kamal/templates/dockerfile_prod.tt +54 -0
  123. data/lib/generators/develoz/kamal/templates/kamal_secrets.tt +22 -0
  124. data/lib/generators/develoz/maintenance/maintenance_generator.rb +29 -0
  125. data/lib/generators/develoz/maintenance/templates/app/tasks/maintenance/example_task.rb.tt +20 -0
  126. data/lib/generators/develoz/maintenance/templates/lib/tasks/maintenance_counters.rake.tt +27 -0
  127. data/lib/generators/develoz/push/push_generator.rb +61 -0
  128. data/lib/generators/develoz/push/templates/app/javascript/pwa/subscription.js.tt +57 -0
  129. data/lib/generators/develoz/push/templates/app/models/push_subscription.rb.tt +14 -0
  130. data/lib/generators/develoz/push/templates/app/services/push_notification_service.rb.tt +36 -0
  131. data/lib/generators/develoz/push/templates/app/views/pwa/sw_push_handlers.js.tt +49 -0
  132. data/lib/generators/develoz/push/templates/constants_env.tt +5 -0
  133. data/lib/generators/develoz/push/templates/db/migrate/create_push_subscriptions.rb.tt +15 -0
  134. data/lib/generators/develoz/pwa/pwa_generator.rb +46 -0
  135. data/lib/generators/develoz/pwa/templates/app/controllers/pwa_controller.rb.tt +17 -0
  136. data/lib/generators/develoz/pwa/templates/app/javascript/pwa/registration.js.tt +25 -0
  137. data/lib/generators/develoz/pwa/templates/app/views/pwa/manifest.json.erb.tt +24 -0
  138. data/lib/generators/develoz/pwa/templates/app/views/pwa/offline.html.erb.tt +51 -0
  139. data/lib/generators/develoz/pwa/templates/app/views/pwa/service-worker.js.tt +109 -0
  140. data/lib/generators/develoz/pwa/templates/routes.rb.tt +3 -0
  141. data/lib/generators/develoz/solid/solid_generator.rb +52 -0
  142. data/lib/generators/develoz/solid/templates/app/jobs/application_job.rb.tt +7 -0
  143. data/lib/generators/develoz/solid/templates/config/cable.yml.tt +10 -0
  144. data/lib/generators/develoz/solid/templates/config/cache.yml.tt +16 -0
  145. data/lib/generators/develoz/solid/templates/config/initializers/mission_control.rb.tt +8 -0
  146. data/lib/generators/develoz/solid/templates/config/initializers/solid.rb.tt +7 -0
  147. data/lib/generators/develoz/solid/templates/config/queue.yml.tt +18 -0
  148. data/lib/generators/develoz/solid/templates/config/recurring.yml.tt +20 -0
  149. data/lib/generators/develoz/strict_loading/strict_loading_generator.rb +17 -0
  150. data/lib/generators/develoz/strict_loading/templates/config/initializers/strict_loading.rb.tt +13 -0
  151. data/lib/generators/develoz/testing/templates/rspec.tt +2 -0
  152. data/lib/generators/develoz/testing/templates/rspec_parallel.tt +2 -0
  153. data/lib/generators/develoz/testing/templates/spec/rails_helper.rb.tt +32 -0
  154. data/lib/generators/develoz/testing/templates/spec/spec_helper.rb.tt +31 -0
  155. data/lib/generators/develoz/testing/testing_generator.rb +39 -0
  156. data/lib/generators/develoz/tooling/templates/constants.rb.tt +17 -0
  157. data/lib/generators/develoz/tooling/templates/env.example.tt +4 -0
  158. data/lib/generators/develoz/tooling/templates/vscode/extensions.json.tt +8 -0
  159. data/lib/generators/develoz/tooling/templates/vscode/settings.json.tt +26 -0
  160. data/lib/generators/develoz/tooling/templates/vscode/tasks.json.tt +26 -0
  161. data/lib/generators/develoz/tooling/tooling_generator.rb +33 -0
  162. data/lib/generators/develoz/ui/templates/bin/setup_develoz_ui.tt +20 -0
  163. data/lib/generators/develoz/ui/ui_generator.rb +57 -0
  164. data/lib/generators/develoz/versioning/templates/app/helpers/application_helper.rb.tt +7 -0
  165. data/lib/generators/develoz/versioning/templates/app/views/shared/_app_version.html.erb.tt +3 -0
  166. data/lib/generators/develoz/versioning/templates/spec/helpers/application_helper_spec.rb.tt +11 -0
  167. data/lib/generators/develoz/versioning/versioning_generator.rb +48 -0
  168. data/lib/tasks/canonical.rake +27 -0
  169. data/templates/.keep +0 -0
  170. data/templates/CANONICAL_SOURCES.md +93 -0
  171. data/templates/pull_request_template.md.tt +13 -0
  172. metadata +383 -0
data/.tool-versions ADDED
@@ -0,0 +1,2 @@
1
+ ruby 4.0.5
2
+ nodejs 24.15.0
data/CHANGELOG.md ADDED
@@ -0,0 +1,28 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to
7
+ [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
8
+
9
+ ## [Unreleased]
10
+
11
+ ## [0.1.0] - 2026-07-15
12
+
13
+ ### Added
14
+
15
+ - Initial `develoz` CLI with interactive and `--yes` application generation.
16
+ - Ruby and Rails version resolution for new Rails 8.1 applications.
17
+ - Core generators for tooling, testing, the Solid stack, CI, PostgreSQL,
18
+ shared concerns, strict loading, maintenance tasks, frontend conventions,
19
+ documentation, and application versioning.
20
+ - Opt-in generators for APIs, authentication, PWA support, push
21
+ notifications, Active Resource, admin interfaces, Develoz UI, Kamal,
22
+ Docker, and database backups.
23
+ - Pagy pagination by default with a `--skip-pagy` opt-out.
24
+ - Canonical fixture fidelity tests and a full RSpec, coverage, and RuboCop CI
25
+ workflow.
26
+
27
+ [Unreleased]: https://github.com/develoz-com/rails-template/compare/v0.1.0...HEAD
28
+ [0.1.0]: https://github.com/develoz-com/rails-template/releases/tag/v0.1.0
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,120 @@
1
+ # Contributing
2
+
3
+ Contributions should preserve the generator's two main guarantees: a fresh
4
+ application is reproducible, and generated files remain faithful to their
5
+ canonical sources.
6
+
7
+ ## Development setup
8
+
9
+ The repository uses [asdf](https://asdf-vm.com/) and pins Ruby 4.0.5 and
10
+ Node.js 24.15.0 in `.tool-versions`.
11
+
12
+ From the repository root:
13
+
14
+ ```bash
15
+ asdf install
16
+ ruby --version
17
+ bundle install
18
+ ```
19
+
20
+ The Ruby version output should start with `ruby 4.0.5`. `bin/setup` is also
21
+ available as a wrapper around `bundle install`.
22
+
23
+ Run a focused spec while developing, then run the complete checks before
24
+ submitting a change:
25
+
26
+ ```bash
27
+ bundle exec rspec spec/path/to/spec.rb
28
+ ./bin/ci
29
+ ```
30
+
31
+ `./bin/ci` runs the full RSpec suite followed by RuboCop and exits on the first
32
+ failure. RSpec also enforces 100% line and branch coverage through SimpleCov,
33
+ so the coverage gate is part of every full CI run.
34
+
35
+ ## Canonical fixtures
36
+
37
+ Canonical fixtures are byte-for-byte copies of files from source repositories.
38
+ Templates may adapt those files with documented substitutions, while fidelity
39
+ specs compare rendered output with the committed fixture using
40
+ `match_canonical`.
41
+
42
+ To refresh the configured sources:
43
+
44
+ ```bash
45
+ bundle exec rake develoz:fetch_canonical
46
+ ```
47
+
48
+ Private sources require authentication through `GH_TOKEN` or `gh auth token`.
49
+ The complete source-to-template map is in
50
+ `templates/CANONICAL_SOURCES.md`.
51
+
52
+ When adding or updating a canonical template:
53
+
54
+ 1. Add or update its source mapping in `lib/tasks/canonical.rake`.
55
+ 2. Run `bundle exec rake develoz:fetch_canonical` rather than editing the
56
+ downloaded fixture by hand.
57
+ 3. Store the source under `spec/fixtures/canonical/<owner>-<repo>/`.
58
+ 4. Add the `.tt` template and record any substitutions in
59
+ `templates/CANONICAL_SOURCES.md`.
60
+ 5. Add or update a spec in `spec/fidelity/` that uses `match_canonical`.
61
+ 6. Run `./bin/ci` and include the refreshed fixture with the change.
62
+
63
+ ## Adding a generator
64
+
65
+ Use an existing generator with similar behavior as the starting point. A
66
+ generator named `example` follows this layout:
67
+
68
+ ```text
69
+ lib/generators/develoz/example/
70
+ example_generator.rb
71
+ templates/
72
+ ```
73
+
74
+ The class must be named `Develoz::Generators::ExampleGenerator`, inherit from
75
+ `Develoz::Generators::Base`, and set its `source_root` to the adjacent
76
+ `templates` directory. Generator lifecycle methods are public; implementation
77
+ helpers are private. Use the base class helpers for idempotent Gemfile, route,
78
+ environment, and file changes.
79
+
80
+ To register and verify a new generator:
81
+
82
+ 1. Add its implementation and `.tt` templates under
83
+ `lib/generators/develoz/<name>/`.
84
+ 2. Register it in `config/generators.yml` with `always: true` for core behavior
85
+ or a `requires` list for opt-in behavior.
86
+ 3. For an opt-in generator, add the option to `Develoz::CLI::OPT_IN_FLAGS`,
87
+ `Develoz::CLI::FLAG_LABELS`, the Thor options, and the install generator's
88
+ class options and `OPTION_FLAGS`.
89
+ 4. Add a focused spec at
90
+ `spec/develoz/generators/<name>_generator_spec.rb`, including idempotency
91
+ coverage where the generator changes existing files.
92
+ 5. Extend `spec/develoz/generators/install_generator_spec.rb` and
93
+ `spec/e2e/greenfield_spec.rb` when the manifest or public CLI behavior
94
+ changes.
95
+ 6. Add canonical fixture and fidelity coverage when templates derive from an
96
+ external source.
97
+ 7. Run `./bin/ci`.
98
+
99
+ ## Release process
100
+
101
+ One-time setup uses RubyGems trusted publishing, so no token secret is needed:
102
+
103
+ 1. Create a GitHub environment named `rubygems` with no secrets.
104
+ 2. Add a pending trusted publisher for the `develoz-rails` gem on RubyGems with
105
+ owner `develoz-com`, repository `rails-template`, workflow `release.yml`, and
106
+ environment `rubygems`.
107
+
108
+ For each release:
109
+
110
+ 1. Bump the version in `lib/develoz/version.rb` and add the user-facing changes
111
+ to the `Unreleased` section of `CHANGELOG.md`.
112
+ 2. Merge the changes and ensure CI is green.
113
+ 3. Publish a stable GitHub Release with tag `vX.Y.Z` at the current `main`
114
+ commit. Keep `main` unchanged until the release workflow finishes.
115
+ 4. Let the workflow validate the release, publish the gem, and finalize and
116
+ commit `CHANGELOG.md` to `main`.
117
+
118
+ Prereleases aren't supported. Never move or recreate a published tag. If gem
119
+ publication succeeds but changelog finalization fails, rerun the same failed
120
+ workflow rather than creating another release.
data/README.md ADDED
@@ -0,0 +1,76 @@
1
+ # Develoz Rails
2
+
3
+ Develoz Rails is an opinionated application generator for Rails 8.1. It wraps
4
+ `rails new` with a tested Develoz baseline and lets each application opt into
5
+ product, deployment, and operations features as needed.
6
+
7
+ The generated baseline includes PostgreSQL, RSpec, the Solid stack, shared
8
+ model concerns, strict loading, maintenance tasks, frontend conventions,
9
+ documentation tooling, CI configuration, and application versioning.
10
+
11
+ ## Quickstart
12
+
13
+ Generate a Rails app in one step:
14
+
15
+ ```bash
16
+ curl -fsSL https://raw.githubusercontent.com/develoz-com/rails-template/main/install | bash -s -- my_app
17
+ ```
18
+
19
+ Or install the gem and run interactively:
20
+
21
+ ```bash
22
+ gem install develoz-rails
23
+ develoz new my_app
24
+ ```
25
+
26
+ For an unattended run with specific features:
27
+
28
+ ```bash
29
+ curl -fsSL https://raw.githubusercontent.com/develoz-com/rails-template/main/install | bash -s -- my_app --yes --auth --ui --docker
30
+ ```
31
+
32
+ ```bash
33
+ develoz new my_app --yes --auth --ui --docker
34
+ ```
35
+
36
+ Use `--ruby=VERSION` or `--rails=VERSION` to select explicit toolchain
37
+ versions. Run `develoz help new` for the complete command reference.
38
+
39
+ For prerequisites and detailed setup, see the
40
+ [installation guide](docs/guide/installation.md).
41
+
42
+ ## Feature matrix
43
+
44
+ Core features are installed in every generated application.
45
+
46
+ | Mode | Feature | Switch | What it adds |
47
+ | --- | --- | --- | --- |
48
+ | Core | Tooling | Always on | Editor settings, environment files, and shared application constants |
49
+ | Core | Testing | Always on | RSpec, FactoryBot, Capybara, Selenium, parallel tests, and coverage |
50
+ | Core | Solid stack | Always on | Solid Queue, Solid Cache, Solid Cable, and Mission Control Jobs |
51
+ | Core | CI and quality | Always on | CI workflow plus Ruby, security, frontend, and documentation checks |
52
+ | Core | Database | Always on | PostgreSQL configuration and `pg_search` |
53
+ | Core | Shared concerns | Always on | Search, optimized finder, transition, and configuration concerns |
54
+ | Core | Strict loading | Always on | Strict loading by default for Active Record models |
55
+ | Core | Maintenance | Always on | Maintenance Tasks integration and task examples |
56
+ | Core | Frontend | Always on | Importmap, Hotwire, AnnotateRb, and Pagy; use `--skip-pagy` to omit Pagy |
57
+ | Core | Documentation renderer | Always on | Markdown documentation model, controller, view, assets, and route |
58
+ | Core | Documentation specs | Always on | Documentation generation, checks, screenshots, and an example system spec |
59
+ | Core | Agent documentation | Always on | `AGENTS.md`, development guides, PR template, and external API test support |
60
+ | Core | Versioning | Always on | Application version constant, helper, and display partial |
61
+ | Opt-in | REST API | `--api` | Blueprinter, RSwag, API base controller, routes, and request spec |
62
+ | Opt-in | Authentication | `--auth` | Native Rails authentication models, controllers, views, routes, and specs |
63
+ | Opt-in | Progressive Web App | `--pwa` | Web manifest, service worker, offline page, registration, and routes |
64
+ | Opt-in | Push notifications | `--push` | Web Push subscriptions and notification support; also enables PWA support |
65
+ | Opt-in | Active Resource | `--active-resource` | Active Resource dependency and application resource classes |
66
+ | Opt-in | Admin | `--admin` | Admin base controller, layout, dashboard, and routes |
67
+ | Opt-in | Develoz UI | `--ui` | Develoz UI integration and controller pins |
68
+ | Opt-in | Kamal | `--kamal` | Kamal deployment configuration, secrets, and production Dockerfile |
69
+ | Opt-in | Docker | `--docker` | Local Docker Compose workflow, development image, and helper scripts |
70
+ | Opt-in | Database backups | `--db-backup` | Backup script, rake task, retention settings, and backup ignore rules |
71
+
72
+ ## Project documentation
73
+
74
+ - [Installation guide](docs/guide/installation.md)
75
+ - [Changelog](CHANGELOG.md)
76
+ - [Contributing](CONTRIBUTING.md)
data/Rakefile ADDED
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+
6
+ RSpec::Core::RakeTask.new(:spec)
7
+
8
+ desc "Run RuboCop linter"
9
+ task :rubocop do
10
+ sh "bundle exec rubocop"
11
+ end
12
+
13
+ desc "Run CI checks (rspec + rubocop + coverage gate)"
14
+ task :ci do
15
+ sh "bin/ci"
16
+ end
17
+
18
+ task default: :spec
@@ -0,0 +1,105 @@
1
+ ---
2
+ # Always-core generators (included regardless of flags)
3
+ tooling:
4
+ description: "Tooling setup (linting, formatting, CI)"
5
+ always: true
6
+
7
+ testing:
8
+ description: "Testing framework and helpers"
9
+ always: true
10
+
11
+ solid:
12
+ description: "Solid Stack integration (Stimulus, Turbo, Hotwire)"
13
+ always: true
14
+
15
+ ci:
16
+ description: "CI/CD pipeline configuration"
17
+ always: true
18
+
19
+ database:
20
+ description: "Database configuration and migrations"
21
+ always: true
22
+
23
+ concerns:
24
+ description: "Shared concerns and mixins"
25
+ always: true
26
+
27
+ strict_loading:
28
+ description: "Strict loading configuration"
29
+ always: true
30
+
31
+ maintenance:
32
+ description: "Maintenance tasks and utilities"
33
+ always: true
34
+
35
+ frontend_core:
36
+ description: "Core frontend setup (Tailwind, Importmap, Pagy)"
37
+ always: true
38
+
39
+ docs_render:
40
+ description: "Documentation rendering setup"
41
+ always: true
42
+
43
+ doc_specs:
44
+ description: "Documentation specs"
45
+ always: true
46
+
47
+ agents_docs:
48
+ description: "AGENTS.md documentation"
49
+ always: true
50
+
51
+ versioning:
52
+ description: "App versioning scheme"
53
+ always: true
54
+
55
+ # Opt-in generators (included only when flags are true)
56
+ api:
57
+ description: "REST API setup (Blueprinter, RSWAG)"
58
+ requires:
59
+ - api
60
+
61
+ auth:
62
+ description: "Authentication setup (Devise, JWT)"
63
+ requires:
64
+ - auth
65
+
66
+ ui:
67
+ description: "UI component library"
68
+ requires:
69
+ - ui
70
+
71
+ admin:
72
+ description: "Admin panel setup"
73
+ requires:
74
+ - admin
75
+
76
+ pwa:
77
+ description: "Progressive Web App setup"
78
+ requires:
79
+ - pwa
80
+
81
+ push:
82
+ description: "Push notifications setup"
83
+ requires:
84
+ - pwa
85
+ - push
86
+
87
+ active_resource:
88
+ description: "ActiveResource integration"
89
+ requires:
90
+ - active_resource
91
+
92
+ docker:
93
+ description: "Docker and Docker Compose setup"
94
+ requires:
95
+ - docker
96
+
97
+ kamal:
98
+ description: "Kamal deployment configuration"
99
+ requires:
100
+ - kamal
101
+
102
+ db_backup:
103
+ description: "Database backup utilities"
104
+ requires:
105
+ - db_backup