rivet_cms 0.1.2.pre → 0.3.1

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 (127) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +63 -0
  3. data/COPYING +674 -0
  4. data/COPYING.LESSER +165 -0
  5. data/README.md +173 -10
  6. data/app/assets/builds/rivet_cms.css +2 -2
  7. data/app/assets/builds/rivet_cms.js +395 -9505
  8. data/app/assets/stylesheets/rivet_cms/application.tailwind.css +145 -22
  9. data/app/controllers/concerns/rivet_cms/inertia_props.rb +239 -0
  10. data/app/controllers/rivet_cms/api_docs_controller.rb +47 -0
  11. data/app/controllers/rivet_cms/api_tokens_controller.rb +43 -0
  12. data/app/controllers/rivet_cms/application_controller.rb +220 -2
  13. data/app/controllers/rivet_cms/auth_controller.rb +28 -0
  14. data/app/controllers/rivet_cms/components_controller.rb +93 -2
  15. data/app/controllers/rivet_cms/content_controller.rb +105 -0
  16. data/app/controllers/rivet_cms/content_manager_controller.rb +32 -0
  17. data/app/controllers/rivet_cms/content_types_controller.rb +118 -26
  18. data/app/controllers/rivet_cms/dashboard_controller.rb +55 -5
  19. data/app/controllers/rivet_cms/documents_controller.rb +204 -0
  20. data/app/controllers/rivet_cms/fields_controller.rb +77 -74
  21. data/app/controllers/rivet_cms/invitations_controller.rb +36 -0
  22. data/app/controllers/rivet_cms/media_assets_controller.rb +76 -0
  23. data/app/controllers/rivet_cms/sessions_controller.rb +122 -0
  24. data/app/controllers/rivet_cms/setup_controller.rb +60 -0
  25. data/app/controllers/rivet_cms/trash_controller.rb +68 -0
  26. data/app/controllers/rivet_cms/users_controller.rb +117 -0
  27. data/app/helpers/rivet_cms/application_helper.rb +13 -3
  28. data/app/helpers/rivet_cms/components_helper.rb +4 -0
  29. data/app/helpers/rivet_cms/content_types_helper.rb +4 -0
  30. data/app/helpers/rivet_cms/dashboard_helper.rb +4 -0
  31. data/app/jobs/rivet_cms/webhook_delivery_job.rb +35 -0
  32. data/app/models/concerns/rivet_cms/has_fields.rb +31 -0
  33. data/app/models/concerns/rivet_cms/organization_scoped.rb +17 -0
  34. data/app/models/concerns/rivet_cms/revision_owned.rb +36 -0
  35. data/app/models/concerns/rivet_cms/sluggable.rb +38 -0
  36. data/app/models/concerns/rivet_cms/soft_deletable.rb +42 -0
  37. data/app/models/concerns/rivet_cms/typed_value.rb +51 -0
  38. data/app/models/rivet_cms/api_token.rb +64 -0
  39. data/app/models/rivet_cms/category.rb +20 -0
  40. data/app/models/rivet_cms/component.rb +10 -0
  41. data/app/models/rivet_cms/component_instance.rb +27 -0
  42. data/app/models/rivet_cms/content_type.rb +36 -23
  43. data/app/models/rivet_cms/content_value.rb +19 -0
  44. data/app/models/rivet_cms/current.rb +6 -0
  45. data/app/models/rivet_cms/document.rb +71 -0
  46. data/app/models/rivet_cms/document_revision.rb +128 -0
  47. data/app/models/rivet_cms/entry.rb +73 -0
  48. data/app/models/rivet_cms/entry_collection.rb +41 -0
  49. data/app/models/rivet_cms/field.rb +207 -61
  50. data/app/models/rivet_cms/media_asset.rb +109 -0
  51. data/app/models/rivet_cms/organization.rb +46 -0
  52. data/app/models/rivet_cms/relation.rb +23 -0
  53. data/app/models/rivet_cms/user.rb +61 -0
  54. data/app/serializers/rivet_cms/revision_preloader.rb +146 -0
  55. data/app/serializers/rivet_cms/revision_serializer.rb +123 -0
  56. data/app/services/rivet_cms/content_query.rb +158 -0
  57. data/app/services/rivet_cms/content_validator.rb +150 -0
  58. data/app/services/rivet_cms/draft_writer.rb +74 -0
  59. data/app/services/rivet_cms/open_api_generator.rb +173 -221
  60. data/app/services/rivet_cms/revision_pruner.rb +64 -0
  61. data/app/services/rivet_cms/webhooks.rb +61 -0
  62. data/app/views/layouts/rivet_cms/application.html.erb +35 -42
  63. data/config/routes.rb +68 -45
  64. data/db/migrate/20251119193607_create_rivet_cms_organizations.rb +17 -0
  65. data/db/migrate/20251120050818_create_rivet_cms_content_types.rb +14 -0
  66. data/db/migrate/20251121020625_create_rivet_cms_components.rb +17 -0
  67. data/db/migrate/20251121040115_create_rivet_cms_categories.rb +17 -0
  68. data/db/migrate/20260119185946_create_content_system_tables.rb +97 -0
  69. data/db/migrate/20260722000001_create_rivet_cms_media_assets.rb +15 -0
  70. data/db/migrate/20260722000002_create_rivet_cms_api_tokens.rb +16 -0
  71. data/db/migrate/20260806000001_add_title_and_alt_to_rivet_cms_media_assets.rb +7 -0
  72. data/db/migrate/20260806000002_add_deleted_at_to_rivet_cms_content_types.rb +6 -0
  73. data/db/migrate/20260807000001_add_deleted_at_to_rivet_cms_documents.rb +6 -0
  74. data/db/migrate/20260808000001_create_rivet_cms_users.rb +15 -0
  75. data/db/seeds/README.md +70 -0
  76. data/db/seeds/templates/blog.rb +39 -0
  77. data/db/seeds/templates/events.rb +12 -0
  78. data/db/seeds/templates/faq.rb +9 -0
  79. data/db/seeds/templates/pages.rb +35 -0
  80. data/db/seeds/templates/site_settings.rb +22 -0
  81. data/db/seeds/templates/team.rb +11 -0
  82. data/db/seeds/templates/testimonials.rb +11 -0
  83. data/lib/generators/rivet_cms/install/install_generator.rb +13 -0
  84. data/lib/generators/rivet_cms/install/templates/initializer.rb +77 -0
  85. data/lib/rivet_cms/access_check.rb +12 -0
  86. data/lib/rivet_cms/audit.rb +43 -0
  87. data/lib/rivet_cms/engine.rb +28 -22
  88. data/lib/rivet_cms/hooks.rb +106 -0
  89. data/lib/rivet_cms/navigation.rb +111 -0
  90. data/lib/rivet_cms/safe_pattern.rb +40 -0
  91. data/lib/rivet_cms/seeds.rb +264 -0
  92. data/lib/rivet_cms/version.rb +1 -1
  93. data/lib/rivet_cms.rb +289 -32
  94. data/lib/tasks/rivet_cms_tasks.rake +18 -4
  95. metadata +138 -98
  96. data/MIT-LICENSE +0 -20
  97. data/app/assets/builds/rivet_cms.js.map +0 -7
  98. data/app/assets/stylesheets/rivet_cms/brand_colors.css +0 -168
  99. data/app/controllers/rivet_cms/api/docs_controller.rb +0 -38
  100. data/app/helpers/rivet_cms/brand_color_helper.rb +0 -71
  101. data/app/helpers/rivet_cms/flash_helper.rb +0 -37
  102. data/app/helpers/rivet_cms/sign_out_helper.rb +0 -11
  103. data/app/javascript/controllers/content_type_form_controller.js +0 -53
  104. data/app/javascript/controllers/field_layout_controller.js +0 -709
  105. data/app/javascript/rivet_cms.js +0 -29
  106. data/app/models/rivet_cms/content.rb +0 -4
  107. data/app/models/rivet_cms/field_values/base.rb +0 -11
  108. data/app/models/rivet_cms/field_values/boolean.rb +0 -4
  109. data/app/models/rivet_cms/field_values/integer.rb +0 -4
  110. data/app/models/rivet_cms/field_values/string.rb +0 -4
  111. data/app/models/rivet_cms/field_values/text.rb +0 -4
  112. data/app/views/rivet_cms/api/docs/show.html.erb +0 -47
  113. data/app/views/rivet_cms/content_types/_form.html.erb +0 -98
  114. data/app/views/rivet_cms/content_types/edit.html.erb +0 -27
  115. data/app/views/rivet_cms/content_types/index.html.erb +0 -151
  116. data/app/views/rivet_cms/content_types/new.html.erb +0 -19
  117. data/app/views/rivet_cms/content_types/show.html.erb +0 -147
  118. data/app/views/rivet_cms/dashboard/index.html.erb +0 -263
  119. data/app/views/rivet_cms/fields/_form.html.erb +0 -111
  120. data/app/views/rivet_cms/fields/edit.html.erb +0 -25
  121. data/app/views/rivet_cms/fields/index.html.erb +0 -126
  122. data/app/views/rivet_cms/fields/new.html.erb +0 -25
  123. data/app/views/rivet_cms/shared/_navigation.html.erb +0 -153
  124. data/config/i18n-tasks.yml +0 -178
  125. data/config/locales/en.yml +0 -14
  126. data/db/migrate/20250317194359_create_core_tables.rb +0 -90
  127. data/lib/rivet_cms/routes.rb +0 -49
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 876703a8ca3148fbd0c7c01cbee963fc854e37c1efbc94375205c7a22d7cc78b
4
- data.tar.gz: 369344dbf9c17af9ad639509a7cb78121314f1a26f80844ba16bce5b59d6311f
3
+ metadata.gz: 45a996115979c8c5f905e87303e0aa250f7057f4596b672746d420c2388a9c35
4
+ data.tar.gz: 430d485c3992bfa605993ccfaf041a41bed1ff1364a6e547dad17ec988052834
5
5
  SHA512:
6
- metadata.gz: b19547659ff8ee822a41c7a4e28d4de0e8f9a8767e2576e4334f5bde2245e6b10c7d677fa1ae238ffac55b7d68d0eff0575eef87c26504ccbf9bc5dd4feae965
7
- data.tar.gz: 8447100f98fa858d23667c2d686c357fa630a08d974a6595c9da4833eb4c2e8313cbcd2453ca5df686eddd6f6c6bd493fb2afd5cf9fea0f0f9282744c254d17d
6
+ metadata.gz: 72e400f54ba22b01182598ed8d0c94671dc8133a2bc1caa7f8444e3c620234f11fc91914dcbff38c398e742ef8630baa5185dcd8de8014635918abc2975cc25d
7
+ data.tar.gz: fe96d646e8b1c1a15a8eb694e41948bc6ba73d2b68f32f5758e7ca608601fe9c3b4e6de5fa9fb29f2c5db175a28b774141d735983ab6c5417b9c6596aab6910b
data/CHANGELOG.md ADDED
@@ -0,0 +1,63 @@
1
+ # Changelog
2
+
3
+ All notable changes to RivetCMS are documented here. While the version is
4
+ below 1.0, minor releases may include breaking changes; each one is listed
5
+ under a Breaking heading.
6
+
7
+ ## 0.3.1 - 2026-08-09
8
+
9
+ ### Fixed
10
+ - Migrations aborted on PostgreSQL and MySQL. Two issues SQLite tolerated but
11
+ stricter databases did not: the components table declared a foreign key to
12
+ `rivet_cms_categories` before that table existed (now added afterward), and
13
+ the fields table set a default on a JSON column, which MySQL rejects (the
14
+ default now lives on the model). Migrations are exercised against Postgres
15
+ and MySQL in CI.
16
+
17
+ ## 0.3.0 - 2026-08-09
18
+
19
+ ### Added
20
+ - Built-in authentication: with no `config.authenticate` set, RivetCMS runs
21
+ its own sign-in. First-run creates the admin account, and a Users page
22
+ invites and deactivates accounts. Invitations are copyable sign-in links
23
+ (signed, expiring, no mailer required). Every signed-in user can do
24
+ everything; roles are not part of CE. Apps that configure their own
25
+ authentication are unchanged and see none of this.
26
+ - Login throttling per IP and per account, and a setup code (logged) that
27
+ protects first-run account creation outside development.
28
+
29
+ ### Changed
30
+ - Licensed under LGPL-3.0-or-later.
31
+
32
+ ### Breaking
33
+ - With no authentication configured, the admin now presents a login screen
34
+ instead of being open. Configuring `config.authenticate` keeps the previous
35
+ behavior.
36
+
37
+ ## 0.2.0 - 2026-08-08
38
+
39
+ Everything between the initial scaffold and built-in authentication.
40
+
41
+ ### Added
42
+ - Deletion is recoverable end to end: content types and entries soft-delete
43
+ into trashes (per type, plus a global Trash page with search, type filter,
44
+ and a sidebar badge). Every revision and value is kept; restoring brings it
45
+ all back. Permanent deletion lives only inside the trash, requires typing
46
+ the name for a content type, and returns you to the page you deleted from.
47
+ - Delivery API: OpenAPI document, published/preview API token scopes,
48
+ filters, sort, pagination, populate, and sparse fields; Ruby content
49
+ helpers (`RivetCms.entries/.entry/.single`) with the same semantics.
50
+ - Media library: drag-and-drop upload with sniffed-type checking, title/alt/
51
+ description, search and kind filters, thumbnails for images and (with
52
+ optional poppler/ffmpeg) PDFs and video.
53
+ - Editor: rich text (TipTap), markdown, date/datetime, decimal, enumeration,
54
+ regex-validated strings; entry slugs validated and auto-cleaned; branded
55
+ confirm dialogs throughout; cross-type Content page; redesigned dashboard.
56
+ - Field layout builder with drag ordering, half-width pairing, and reusable
57
+ components organized in categories.
58
+
59
+ ### Changed
60
+ - Entry and content type slugs enforce lowercase-alphanumeric-with-hyphens
61
+ (existing records are grandfathered until edited).
62
+ - Admin theme moved to the steel/ink design system (Archivo + JetBrains
63
+ Mono), replacing the indigo default.