journeybook 0.1.6.pre.alpha

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 (134) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +9 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.md +354 -0
  5. data/Rakefile +6 -0
  6. data/app/assets/images/journeybook/.keep +0 -0
  7. data/app/assets/images/journeybook/logo.svg +5 -0
  8. data/app/assets/javascripts/journeybook/sortable.js +96 -0
  9. data/app/assets/stylesheets/journeybook/application.css +1556 -0
  10. data/app/controllers/concerns/.keep +0 -0
  11. data/app/controllers/concerns/journeybook/public_pages.rb +31 -0
  12. data/app/controllers/journeybook/admin/ai_pages_controller.rb +65 -0
  13. data/app/controllers/journeybook/admin/ai_style_prompts_controller.rb +51 -0
  14. data/app/controllers/journeybook/admin/components_controller.rb +57 -0
  15. data/app/controllers/journeybook/admin/dashboard_controller.rb +13 -0
  16. data/app/controllers/journeybook/admin/media_assets_controller.rb +59 -0
  17. data/app/controllers/journeybook/admin/navigation_items_controller.rb +91 -0
  18. data/app/controllers/journeybook/admin/navigation_menus_controller.rb +59 -0
  19. data/app/controllers/journeybook/admin/pages_controller.rb +304 -0
  20. data/app/controllers/journeybook/admin/redirects_controller.rb +51 -0
  21. data/app/controllers/journeybook/admin/sites_controller.rb +51 -0
  22. data/app/controllers/journeybook/application_controller.rb +52 -0
  23. data/app/controllers/journeybook/form_submissions_controller.rb +55 -0
  24. data/app/helpers/journeybook/application_helper.rb +4 -0
  25. data/app/helpers/journeybook/navigation_helper.rb +11 -0
  26. data/app/javascript/journeybook/application.js +5 -0
  27. data/app/javascript/journeybook/component_search_controller.js +13 -0
  28. data/app/jobs/journeybook/application_job.rb +4 -0
  29. data/app/models/concerns/.keep +0 -0
  30. data/app/models/journeybook/ai_style_prompt.rb +6 -0
  31. data/app/models/journeybook/application_record.rb +5 -0
  32. data/app/models/journeybook/media_asset.rb +26 -0
  33. data/app/models/journeybook/navigation_item.rb +45 -0
  34. data/app/models/journeybook/navigation_menu.rb +23 -0
  35. data/app/models/journeybook/page.rb +96 -0
  36. data/app/models/journeybook/redirect.rb +31 -0
  37. data/app/models/journeybook/site.rb +62 -0
  38. data/app/services/journeybook/ai/markdown_generator.rb +15 -0
  39. data/app/services/journeybook/ai/openai_client.rb +54 -0
  40. data/app/services/journeybook/ai/prompt_builder.rb +154 -0
  41. data/app/services/journeybook/ai/template_validator.rb +17 -0
  42. data/app/services/journeybook/component_parser.rb +53 -0
  43. data/app/services/journeybook/component_renderer.rb +108 -0
  44. data/app/services/journeybook/component_tag_updater.rb +132 -0
  45. data/app/services/journeybook/component_validator.rb +111 -0
  46. data/app/services/journeybook/form_mailer.rb +69 -0
  47. data/app/services/journeybook/html_sanitizer.rb +46 -0
  48. data/app/services/journeybook/letter_opener_client.rb +14 -0
  49. data/app/services/journeybook/markdown_renderer.rb +29 -0
  50. data/app/services/journeybook/page_renderer.rb +58 -0
  51. data/app/services/journeybook/page_resolver.rb +55 -0
  52. data/app/services/journeybook/postmark_client.rb +48 -0
  53. data/app/services/journeybook/storage/s3_client.rb +96 -0
  54. data/app/views/journeybook/admin/ai_pages/_draft_form.html.erb +73 -0
  55. data/app/views/journeybook/admin/ai_pages/new.html.erb +43 -0
  56. data/app/views/journeybook/admin/ai_style_prompts/_form.html.erb +16 -0
  57. data/app/views/journeybook/admin/ai_style_prompts/edit.html.erb +2 -0
  58. data/app/views/journeybook/admin/ai_style_prompts/index.html.erb +26 -0
  59. data/app/views/journeybook/admin/ai_style_prompts/new.html.erb +2 -0
  60. data/app/views/journeybook/admin/components/_component.html.erb +17 -0
  61. data/app/views/journeybook/admin/components/_reference.html.erb +9 -0
  62. data/app/views/journeybook/admin/components/index.html.erb +46 -0
  63. data/app/views/journeybook/admin/components/preview.html.erb +13 -0
  64. data/app/views/journeybook/admin/dashboard/show.html.erb +34 -0
  65. data/app/views/journeybook/admin/media_assets/_reference.html.erb +16 -0
  66. data/app/views/journeybook/admin/media_assets/index.html.erb +43 -0
  67. data/app/views/journeybook/admin/media_assets/new.html.erb +41 -0
  68. data/app/views/journeybook/admin/navigation_items/_form.html.erb +46 -0
  69. data/app/views/journeybook/admin/navigation_items/edit.html.erb +2 -0
  70. data/app/views/journeybook/admin/navigation_items/new.html.erb +2 -0
  71. data/app/views/journeybook/admin/navigation_menus/_form.html.erb +10 -0
  72. data/app/views/journeybook/admin/navigation_menus/edit.html.erb +38 -0
  73. data/app/views/journeybook/admin/navigation_menus/index.html.erb +28 -0
  74. data/app/views/journeybook/admin/navigation_menus/new.html.erb +2 -0
  75. data/app/views/journeybook/admin/pages/_collection_field.html.erb +58 -0
  76. data/app/views/journeybook/admin/pages/_form.html.erb +77 -0
  77. data/app/views/journeybook/admin/pages/_image_picker_modal.html.erb +23 -0
  78. data/app/views/journeybook/admin/pages/_table.html.erb +37 -0
  79. data/app/views/journeybook/admin/pages/_url_field.html.erb +25 -0
  80. data/app/views/journeybook/admin/pages/edit.html.erb +547 -0
  81. data/app/views/journeybook/admin/pages/errors.html.erb +25 -0
  82. data/app/views/journeybook/admin/pages/index.html.erb +52 -0
  83. data/app/views/journeybook/admin/pages/new.html.erb +27 -0
  84. data/app/views/journeybook/admin/pages/new_component.html.erb +70 -0
  85. data/app/views/journeybook/admin/pages/public_preview.html.erb +27 -0
  86. data/app/views/journeybook/admin/pages/source.html.erb +23 -0
  87. data/app/views/journeybook/admin/redirects/_form.html.erb +9 -0
  88. data/app/views/journeybook/admin/redirects/edit.html.erb +2 -0
  89. data/app/views/journeybook/admin/redirects/index.html.erb +15 -0
  90. data/app/views/journeybook/admin/redirects/new.html.erb +2 -0
  91. data/app/views/journeybook/admin/shared/_drag_handle.html.erb +3 -0
  92. data/app/views/journeybook/admin/shared/_errors.html.erb +10 -0
  93. data/app/views/journeybook/admin/sites/_form.html.erb +12 -0
  94. data/app/views/journeybook/admin/sites/edit.html.erb +2 -0
  95. data/app/views/journeybook/admin/sites/index.html.erb +26 -0
  96. data/app/views/journeybook/admin/sites/new.html.erb +2 -0
  97. data/app/views/layouts/journeybook/application.html.erb +57 -0
  98. data/config/importmap.rb +3 -0
  99. data/config/routes.rb +39 -0
  100. data/db/migrate/20260627000001_create_journeybook_sites.rb +13 -0
  101. data/db/migrate/20260627000002_create_journeybook_pages.rb +23 -0
  102. data/db/migrate/20260627000003_create_journeybook_redirects.rb +13 -0
  103. data/db/migrate/20260628000004_add_context_fields_to_journeybook_sites.rb +38 -0
  104. data/db/migrate/20260628000005_create_journeybook_media_assets.rb +24 -0
  105. data/db/migrate/20260629000006_create_journeybook_navigation.rb +28 -0
  106. data/db/migrate/20260731000007_add_open_in_new_window_to_journeybook_navigation_items.rb +5 -0
  107. data/db/migrate/20260731000008_create_journeybook_ai_style_prompts.rb +12 -0
  108. data/db/migrate/20260801000009_add_blog_fields_to_journeybook_pages.rb +9 -0
  109. data/db/migrate/20260801000010_add_knowledge_base_fields_to_journeybook_pages.rb +8 -0
  110. data/db/migrate/20260801000011_add_position_to_journeybook_pages.rb +6 -0
  111. data/lib/generators/journeybook/install/install_generator.rb +72 -0
  112. data/lib/generators/journeybook/install/templates/add_blog_fields_to_journeybook_pages.rb +9 -0
  113. data/lib/generators/journeybook/install/templates/add_context_fields_to_journeybook_sites.rb +38 -0
  114. data/lib/generators/journeybook/install/templates/add_knowledge_base_fields_to_journeybook_pages.rb +8 -0
  115. data/lib/generators/journeybook/install/templates/add_open_in_new_window_to_journeybook_navigation_items.rb +5 -0
  116. data/lib/generators/journeybook/install/templates/add_position_to_journeybook_pages.rb +6 -0
  117. data/lib/generators/journeybook/install/templates/create_journeybook_ai_style_prompts.rb +12 -0
  118. data/lib/generators/journeybook/install/templates/create_journeybook_media_assets.rb +24 -0
  119. data/lib/generators/journeybook/install/templates/create_journeybook_navigation.rb +28 -0
  120. data/lib/generators/journeybook/install/templates/create_journeybook_pages.rb +33 -0
  121. data/lib/generators/journeybook/install/templates/create_journeybook_redirects.rb +13 -0
  122. data/lib/generators/journeybook/install/templates/create_journeybook_sites.rb +13 -0
  123. data/lib/generators/journeybook/install/templates/journeybook.rb +42 -0
  124. data/lib/generators/journeybook/install/templates/pages_controller.rb +3 -0
  125. data/lib/generators/journeybook/install/templates/show.html.erb +10 -0
  126. data/lib/journeybook/component_registry.rb +136 -0
  127. data/lib/journeybook/configuration.rb +55 -0
  128. data/lib/journeybook/engine.rb +19 -0
  129. data/lib/journeybook/page_template_registry.rb +67 -0
  130. data/lib/journeybook/public_page_constraint.rb +23 -0
  131. data/lib/journeybook/version.rb +3 -0
  132. data/lib/journeybook.rb +62 -0
  133. data/lib/tasks/journeybook_tasks.rake +8 -0
  134. metadata +266 -0
metadata ADDED
@@ -0,0 +1,266 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: journeybook
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.6.pre.alpha
5
+ platform: ruby
6
+ authors:
7
+ - talent journey
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: commonmarker
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '1.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: '1.1'
26
+ - !ruby/object:Gem::Dependency
27
+ name: aws-sdk-s3
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '1.150'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.150'
40
+ - !ruby/object:Gem::Dependency
41
+ name: importmap-rails
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rails
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: '8.0'
61
+ - - "<"
62
+ - !ruby/object:Gem::Version
63
+ version: '9.0'
64
+ type: :runtime
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '8.0'
71
+ - - "<"
72
+ - !ruby/object:Gem::Version
73
+ version: '9.0'
74
+ - !ruby/object:Gem::Dependency
75
+ name: rouge
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '4.0'
81
+ type: :runtime
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '4.0'
88
+ - !ruby/object:Gem::Dependency
89
+ name: stimulus-rails
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ version: '1.3'
95
+ type: :runtime
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: '1.3'
102
+ description: Journeybook is a mountable Rails engine for reusable, code-defined CMS
103
+ content rendering.
104
+ email:
105
+ - opensource@talent-journey.com
106
+ executables: []
107
+ extensions: []
108
+ extra_rdoc_files: []
109
+ files:
110
+ - CHANGELOG.md
111
+ - MIT-LICENSE
112
+ - README.md
113
+ - Rakefile
114
+ - app/assets/images/journeybook/.keep
115
+ - app/assets/images/journeybook/logo.svg
116
+ - app/assets/javascripts/journeybook/sortable.js
117
+ - app/assets/stylesheets/journeybook/application.css
118
+ - app/controllers/concerns/.keep
119
+ - app/controllers/concerns/journeybook/public_pages.rb
120
+ - app/controllers/journeybook/admin/ai_pages_controller.rb
121
+ - app/controllers/journeybook/admin/ai_style_prompts_controller.rb
122
+ - app/controllers/journeybook/admin/components_controller.rb
123
+ - app/controllers/journeybook/admin/dashboard_controller.rb
124
+ - app/controllers/journeybook/admin/media_assets_controller.rb
125
+ - app/controllers/journeybook/admin/navigation_items_controller.rb
126
+ - app/controllers/journeybook/admin/navigation_menus_controller.rb
127
+ - app/controllers/journeybook/admin/pages_controller.rb
128
+ - app/controllers/journeybook/admin/redirects_controller.rb
129
+ - app/controllers/journeybook/admin/sites_controller.rb
130
+ - app/controllers/journeybook/application_controller.rb
131
+ - app/controllers/journeybook/form_submissions_controller.rb
132
+ - app/helpers/journeybook/application_helper.rb
133
+ - app/helpers/journeybook/navigation_helper.rb
134
+ - app/javascript/journeybook/application.js
135
+ - app/javascript/journeybook/component_search_controller.js
136
+ - app/jobs/journeybook/application_job.rb
137
+ - app/models/concerns/.keep
138
+ - app/models/journeybook/ai_style_prompt.rb
139
+ - app/models/journeybook/application_record.rb
140
+ - app/models/journeybook/media_asset.rb
141
+ - app/models/journeybook/navigation_item.rb
142
+ - app/models/journeybook/navigation_menu.rb
143
+ - app/models/journeybook/page.rb
144
+ - app/models/journeybook/redirect.rb
145
+ - app/models/journeybook/site.rb
146
+ - app/services/journeybook/ai/markdown_generator.rb
147
+ - app/services/journeybook/ai/openai_client.rb
148
+ - app/services/journeybook/ai/prompt_builder.rb
149
+ - app/services/journeybook/ai/template_validator.rb
150
+ - app/services/journeybook/component_parser.rb
151
+ - app/services/journeybook/component_renderer.rb
152
+ - app/services/journeybook/component_tag_updater.rb
153
+ - app/services/journeybook/component_validator.rb
154
+ - app/services/journeybook/form_mailer.rb
155
+ - app/services/journeybook/html_sanitizer.rb
156
+ - app/services/journeybook/letter_opener_client.rb
157
+ - app/services/journeybook/markdown_renderer.rb
158
+ - app/services/journeybook/page_renderer.rb
159
+ - app/services/journeybook/page_resolver.rb
160
+ - app/services/journeybook/postmark_client.rb
161
+ - app/services/journeybook/storage/s3_client.rb
162
+ - app/views/journeybook/admin/ai_pages/_draft_form.html.erb
163
+ - app/views/journeybook/admin/ai_pages/new.html.erb
164
+ - app/views/journeybook/admin/ai_style_prompts/_form.html.erb
165
+ - app/views/journeybook/admin/ai_style_prompts/edit.html.erb
166
+ - app/views/journeybook/admin/ai_style_prompts/index.html.erb
167
+ - app/views/journeybook/admin/ai_style_prompts/new.html.erb
168
+ - app/views/journeybook/admin/components/_component.html.erb
169
+ - app/views/journeybook/admin/components/_reference.html.erb
170
+ - app/views/journeybook/admin/components/index.html.erb
171
+ - app/views/journeybook/admin/components/preview.html.erb
172
+ - app/views/journeybook/admin/dashboard/show.html.erb
173
+ - app/views/journeybook/admin/media_assets/_reference.html.erb
174
+ - app/views/journeybook/admin/media_assets/index.html.erb
175
+ - app/views/journeybook/admin/media_assets/new.html.erb
176
+ - app/views/journeybook/admin/navigation_items/_form.html.erb
177
+ - app/views/journeybook/admin/navigation_items/edit.html.erb
178
+ - app/views/journeybook/admin/navigation_items/new.html.erb
179
+ - app/views/journeybook/admin/navigation_menus/_form.html.erb
180
+ - app/views/journeybook/admin/navigation_menus/edit.html.erb
181
+ - app/views/journeybook/admin/navigation_menus/index.html.erb
182
+ - app/views/journeybook/admin/navigation_menus/new.html.erb
183
+ - app/views/journeybook/admin/pages/_collection_field.html.erb
184
+ - app/views/journeybook/admin/pages/_form.html.erb
185
+ - app/views/journeybook/admin/pages/_image_picker_modal.html.erb
186
+ - app/views/journeybook/admin/pages/_table.html.erb
187
+ - app/views/journeybook/admin/pages/_url_field.html.erb
188
+ - app/views/journeybook/admin/pages/edit.html.erb
189
+ - app/views/journeybook/admin/pages/errors.html.erb
190
+ - app/views/journeybook/admin/pages/index.html.erb
191
+ - app/views/journeybook/admin/pages/new.html.erb
192
+ - app/views/journeybook/admin/pages/new_component.html.erb
193
+ - app/views/journeybook/admin/pages/public_preview.html.erb
194
+ - app/views/journeybook/admin/pages/source.html.erb
195
+ - app/views/journeybook/admin/redirects/_form.html.erb
196
+ - app/views/journeybook/admin/redirects/edit.html.erb
197
+ - app/views/journeybook/admin/redirects/index.html.erb
198
+ - app/views/journeybook/admin/redirects/new.html.erb
199
+ - app/views/journeybook/admin/shared/_drag_handle.html.erb
200
+ - app/views/journeybook/admin/shared/_errors.html.erb
201
+ - app/views/journeybook/admin/sites/_form.html.erb
202
+ - app/views/journeybook/admin/sites/edit.html.erb
203
+ - app/views/journeybook/admin/sites/index.html.erb
204
+ - app/views/journeybook/admin/sites/new.html.erb
205
+ - app/views/layouts/journeybook/application.html.erb
206
+ - config/importmap.rb
207
+ - config/routes.rb
208
+ - db/migrate/20260627000001_create_journeybook_sites.rb
209
+ - db/migrate/20260627000002_create_journeybook_pages.rb
210
+ - db/migrate/20260627000003_create_journeybook_redirects.rb
211
+ - db/migrate/20260628000004_add_context_fields_to_journeybook_sites.rb
212
+ - db/migrate/20260628000005_create_journeybook_media_assets.rb
213
+ - db/migrate/20260629000006_create_journeybook_navigation.rb
214
+ - db/migrate/20260731000007_add_open_in_new_window_to_journeybook_navigation_items.rb
215
+ - db/migrate/20260731000008_create_journeybook_ai_style_prompts.rb
216
+ - db/migrate/20260801000009_add_blog_fields_to_journeybook_pages.rb
217
+ - db/migrate/20260801000010_add_knowledge_base_fields_to_journeybook_pages.rb
218
+ - db/migrate/20260801000011_add_position_to_journeybook_pages.rb
219
+ - lib/generators/journeybook/install/install_generator.rb
220
+ - lib/generators/journeybook/install/templates/add_blog_fields_to_journeybook_pages.rb
221
+ - lib/generators/journeybook/install/templates/add_context_fields_to_journeybook_sites.rb
222
+ - lib/generators/journeybook/install/templates/add_knowledge_base_fields_to_journeybook_pages.rb
223
+ - lib/generators/journeybook/install/templates/add_open_in_new_window_to_journeybook_navigation_items.rb
224
+ - lib/generators/journeybook/install/templates/add_position_to_journeybook_pages.rb
225
+ - lib/generators/journeybook/install/templates/create_journeybook_ai_style_prompts.rb
226
+ - lib/generators/journeybook/install/templates/create_journeybook_media_assets.rb
227
+ - lib/generators/journeybook/install/templates/create_journeybook_navigation.rb
228
+ - lib/generators/journeybook/install/templates/create_journeybook_pages.rb
229
+ - lib/generators/journeybook/install/templates/create_journeybook_redirects.rb
230
+ - lib/generators/journeybook/install/templates/create_journeybook_sites.rb
231
+ - lib/generators/journeybook/install/templates/journeybook.rb
232
+ - lib/generators/journeybook/install/templates/pages_controller.rb
233
+ - lib/generators/journeybook/install/templates/show.html.erb
234
+ - lib/journeybook.rb
235
+ - lib/journeybook/component_registry.rb
236
+ - lib/journeybook/configuration.rb
237
+ - lib/journeybook/engine.rb
238
+ - lib/journeybook/page_template_registry.rb
239
+ - lib/journeybook/public_page_constraint.rb
240
+ - lib/journeybook/version.rb
241
+ - lib/tasks/journeybook_tasks.rake
242
+ homepage: https://github.com/talent-journey/journeybook
243
+ licenses:
244
+ - MIT
245
+ metadata:
246
+ bug_tracker_uri: https://github.com/talent-journey/journeybook/issues
247
+ changelog_uri: https://github.com/talent-journey/journeybook/blob/main/CHANGELOG.md
248
+ rubygems_mfa_required: 'true'
249
+ rdoc_options: []
250
+ require_paths:
251
+ - lib
252
+ required_ruby_version: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - ">="
255
+ - !ruby/object:Gem::Version
256
+ version: '3.4'
257
+ required_rubygems_version: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - ">="
260
+ - !ruby/object:Gem::Version
261
+ version: '0'
262
+ requirements: []
263
+ rubygems_version: 4.0.15
264
+ specification_version: 4
265
+ summary: Markdown-first CMS primitives for Rails applications.
266
+ test_files: []