panda_cms 0.6.0 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/builds/panda_cms.css +17 -0
  3. data/app/assets/config/panda_cms_manifest.js +1 -0
  4. data/app/components/panda_cms/code_component.rb +3 -1
  5. data/app/components/panda_cms/menu_component.html.erb +3 -0
  6. data/app/components/panda_cms/menu_component.rb +8 -1
  7. data/app/components/panda_cms/page_menu_component.html.erb +7 -5
  8. data/app/components/panda_cms/page_menu_component.rb +3 -1
  9. data/app/components/panda_cms/rich_text_component.html.erb +2 -2
  10. data/app/components/panda_cms/rich_text_component.rb +12 -4
  11. data/app/components/panda_cms/text_component.rb +1 -1
  12. data/app/controllers/panda_cms/admin/block_contents_controller.rb +1 -1
  13. data/app/javascript/panda_cms/@editorjs--editorjs.js +2577 -0
  14. data/app/javascript/panda_cms/controllers/editor_controller.js +247 -0
  15. data/app/javascript/panda_cms/controllers/index.js +10 -7
  16. data/app/javascript/panda_cms/editor/plain_text_editor.js +102 -0
  17. data/app/javascript/panda_cms/editor/resource_loader.js +69 -0
  18. data/app/javascript/panda_cms/editor/rich_text_editor.js +89 -0
  19. data/app/lib/panda_cms/demo_site_generator.rb +8 -9
  20. data/app/lib/panda_cms/editor_js/blocks/alert.rb +32 -0
  21. data/app/lib/panda_cms/editor_js/blocks/base.rb +28 -0
  22. data/app/lib/panda_cms/editor_js/blocks/header.rb +13 -0
  23. data/app/lib/panda_cms/editor_js/blocks/image.rb +34 -0
  24. data/app/lib/panda_cms/editor_js/blocks/list.rb +30 -0
  25. data/app/lib/panda_cms/editor_js/blocks/paragraph.rb +13 -0
  26. data/app/lib/panda_cms/editor_js/blocks/quote.rb +27 -0
  27. data/app/lib/panda_cms/editor_js/blocks/table.rb +48 -0
  28. data/app/lib/panda_cms/editor_js/renderer.rb +120 -0
  29. data/app/models/panda_cms/block_content.rb +12 -2
  30. data/app/views/panda_cms/admin/pages/edit.html.erb +10 -9
  31. data/app/views/panda_cms/shared/_header.html.erb +2 -3
  32. data/app/views/panda_cms/shared/_importmap.html.erb +13 -3
  33. data/config/importmap.rb +3 -1
  34. data/db/migrate/20240315125411_add_status_to_panda_cms_pages.rb +5 -3
  35. data/db/migrate/20241031205109_add_cached_content_to_panda_cms_block_contents.rb +5 -0
  36. data/db/seeds.rb +1 -0
  37. data/lib/panda_cms/engine.rb +44 -8
  38. data/lib/panda_cms/version.rb +1 -1
  39. metadata +89 -103
  40. data/app/javascript/panda_cms/panda_cms_editable.js +0 -248
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: panda_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Panda Software Limited
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-01 00:00:00.000000000 Z
11
+ date: 2024-11-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activestorage-office-previewer
@@ -42,30 +42,30 @@ dependencies:
42
42
  name: aws-sdk-s3
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: dry-configurable
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '1'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '1'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: faraday
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -100,98 +100,98 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '1.0'
103
+ version: '1'
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '1.0'
110
+ version: '1'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: groupdate
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '6.4'
117
+ version: '6'
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '6.4'
124
+ version: '6'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: htmlentities
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '4.3'
131
+ version: '4'
132
132
  type: :runtime
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '4.3'
138
+ version: '4'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: image_processing
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '1.13'
145
+ version: '1'
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '1.13'
152
+ version: '1'
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: importmap-rails
155
155
  requirement: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - ">="
157
+ - - "~>"
158
158
  - !ruby/object:Gem::Version
159
- version: '0'
159
+ version: '2'
160
160
  type: :runtime
161
161
  prerelease: false
162
162
  version_requirements: !ruby/object:Gem::Requirement
163
163
  requirements:
164
- - - ">="
164
+ - - "~>"
165
165
  - !ruby/object:Gem::Version
166
- version: '0'
166
+ version: '2'
167
167
  - !ruby/object:Gem::Dependency
168
168
  name: local_time
169
169
  requirement: !ruby/object:Gem::Requirement
170
170
  requirements:
171
171
  - - "~>"
172
172
  - !ruby/object:Gem::Version
173
- version: '3.0'
173
+ version: '3'
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - "~>"
179
179
  - !ruby/object:Gem::Version
180
- version: '3.0'
180
+ version: '3'
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: lookbook
183
183
  requirement: !ruby/object:Gem::Requirement
184
184
  requirements:
185
185
  - - "~>"
186
186
  - !ruby/object:Gem::Version
187
- version: '2.0'
187
+ version: '2'
188
188
  type: :runtime
189
189
  prerelease: false
190
190
  version_requirements: !ruby/object:Gem::Requirement
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: '2.0'
194
+ version: '2'
195
195
  - !ruby/object:Gem::Dependency
196
196
  name: oaken
197
197
  requirement: !ruby/object:Gem::Requirement
@@ -282,42 +282,42 @@ dependencies:
282
282
  requirements:
283
283
  - - "~>"
284
284
  - !ruby/object:Gem::Version
285
- version: '15.2'
285
+ version: '15'
286
286
  type: :runtime
287
287
  prerelease: false
288
288
  version_requirements: !ruby/object:Gem::Requirement
289
289
  requirements:
290
290
  - - "~>"
291
291
  - !ruby/object:Gem::Version
292
- version: '15.2'
292
+ version: '15'
293
293
  - !ruby/object:Gem::Dependency
294
294
  name: pg
295
295
  requirement: !ruby/object:Gem::Requirement
296
296
  requirements:
297
- - - ">="
297
+ - - "~>"
298
298
  - !ruby/object:Gem::Version
299
- version: '0'
299
+ version: '1.5'
300
300
  type: :runtime
301
301
  prerelease: false
302
302
  version_requirements: !ruby/object:Gem::Requirement
303
303
  requirements:
304
- - - ">="
304
+ - - "~>"
305
305
  - !ruby/object:Gem::Version
306
- version: '0'
306
+ version: '1.5'
307
307
  - !ruby/object:Gem::Dependency
308
- name: redcarpet
308
+ name: rails
309
309
  requirement: !ruby/object:Gem::Requirement
310
310
  requirements:
311
311
  - - ">="
312
312
  - !ruby/object:Gem::Version
313
- version: '0'
313
+ version: '7.1'
314
314
  type: :runtime
315
315
  prerelease: false
316
316
  version_requirements: !ruby/object:Gem::Requirement
317
317
  requirements:
318
318
  - - ">="
319
319
  - !ruby/object:Gem::Version
320
- version: '0'
320
+ version: '7.1'
321
321
  - !ruby/object:Gem::Dependency
322
322
  name: silencer
323
323
  requirement: !ruby/object:Gem::Requirement
@@ -336,30 +336,30 @@ dependencies:
336
336
  name: propshaft
337
337
  requirement: !ruby/object:Gem::Requirement
338
338
  requirements:
339
- - - ">="
339
+ - - "~>"
340
340
  - !ruby/object:Gem::Version
341
- version: '0'
341
+ version: '1.1'
342
342
  type: :runtime
343
343
  prerelease: false
344
344
  version_requirements: !ruby/object:Gem::Requirement
345
345
  requirements:
346
- - - ">="
346
+ - - "~>"
347
347
  - !ruby/object:Gem::Version
348
- version: '0'
348
+ version: '1.1'
349
349
  - !ruby/object:Gem::Dependency
350
350
  name: stimulus-rails
351
351
  requirement: !ruby/object:Gem::Requirement
352
352
  requirements:
353
- - - ">="
353
+ - - "~>"
354
354
  - !ruby/object:Gem::Version
355
- version: '0'
355
+ version: '1.3'
356
356
  type: :runtime
357
357
  prerelease: false
358
358
  version_requirements: !ruby/object:Gem::Requirement
359
359
  requirements:
360
- - - ">="
360
+ - - "~>"
361
361
  - !ruby/object:Gem::Version
362
- version: '0'
362
+ version: '1.3'
363
363
  - !ruby/object:Gem::Dependency
364
364
  name: tailwindcss-rails
365
365
  requirement: !ruby/object:Gem::Requirement
@@ -376,20 +376,6 @@ dependencies:
376
376
  version: '3'
377
377
  - !ruby/object:Gem::Dependency
378
378
  name: turbo-rails
379
- requirement: !ruby/object:Gem::Requirement
380
- requirements:
381
- - - ">="
382
- - !ruby/object:Gem::Version
383
- version: '0'
384
- type: :runtime
385
- prerelease: false
386
- version_requirements: !ruby/object:Gem::Requirement
387
- requirements:
388
- - - ">="
389
- - !ruby/object:Gem::Version
390
- version: '0'
391
- - !ruby/object:Gem::Dependency
392
- name: whois-parser
393
379
  requirement: !ruby/object:Gem::Requirement
394
380
  requirements:
395
381
  - - "~>"
@@ -403,35 +389,35 @@ dependencies:
403
389
  - !ruby/object:Gem::Version
404
390
  version: '2.0'
405
391
  - !ruby/object:Gem::Dependency
406
- name: annotate
392
+ name: view_component
407
393
  requirement: !ruby/object:Gem::Requirement
408
394
  requirements:
409
- - - ">="
395
+ - - "~>"
410
396
  - !ruby/object:Gem::Version
411
- version: '0'
412
- type: :development
397
+ version: '3'
398
+ type: :runtime
413
399
  prerelease: false
414
400
  version_requirements: !ruby/object:Gem::Requirement
415
401
  requirements:
416
- - - ">="
402
+ - - "~>"
417
403
  - !ruby/object:Gem::Version
418
- version: '0'
404
+ version: '3'
419
405
  - !ruby/object:Gem::Dependency
420
- name: better_errors
406
+ name: whois-parser
421
407
  requirement: !ruby/object:Gem::Requirement
422
408
  requirements:
423
- - - ">="
409
+ - - "~>"
424
410
  - !ruby/object:Gem::Version
425
- version: '0'
426
- type: :development
411
+ version: '2.0'
412
+ type: :runtime
427
413
  prerelease: false
428
414
  version_requirements: !ruby/object:Gem::Requirement
429
415
  requirements:
430
- - - ">="
416
+ - - "~>"
431
417
  - !ruby/object:Gem::Version
432
- version: '0'
418
+ version: '2.0'
433
419
  - !ruby/object:Gem::Dependency
434
- name: binding_of_caller
420
+ name: annotaterb
435
421
  requirement: !ruby/object:Gem::Requirement
436
422
  requirements:
437
423
  - - ">="
@@ -445,7 +431,7 @@ dependencies:
445
431
  - !ruby/object:Gem::Version
446
432
  version: '0'
447
433
  - !ruby/object:Gem::Dependency
448
- name: brakeman
434
+ name: better_errors
449
435
  requirement: !ruby/object:Gem::Requirement
450
436
  requirements:
451
437
  - - ">="
@@ -459,7 +445,7 @@ dependencies:
459
445
  - !ruby/object:Gem::Version
460
446
  version: '0'
461
447
  - !ruby/object:Gem::Dependency
462
- name: bundler-audit
448
+ name: binding_of_caller
463
449
  requirement: !ruby/object:Gem::Requirement
464
450
  requirements:
465
451
  - - ">="
@@ -473,7 +459,7 @@ dependencies:
473
459
  - !ruby/object:Gem::Version
474
460
  version: '0'
475
461
  - !ruby/object:Gem::Dependency
476
- name: capybara
462
+ name: brakeman
477
463
  requirement: !ruby/object:Gem::Requirement
478
464
  requirements:
479
465
  - - ">="
@@ -487,7 +473,7 @@ dependencies:
487
473
  - !ruby/object:Gem::Version
488
474
  version: '0'
489
475
  - !ruby/object:Gem::Dependency
490
- name: cuprite
476
+ name: bullet
491
477
  requirement: !ruby/object:Gem::Requirement
492
478
  requirements:
493
479
  - - ">="
@@ -501,7 +487,7 @@ dependencies:
501
487
  - !ruby/object:Gem::Version
502
488
  version: '0'
503
489
  - !ruby/object:Gem::Dependency
504
- name: danger
490
+ name: bundler-audit
505
491
  requirement: !ruby/object:Gem::Requirement
506
492
  requirements:
507
493
  - - ">="
@@ -515,7 +501,7 @@ dependencies:
515
501
  - !ruby/object:Gem::Version
516
502
  version: '0'
517
503
  - !ruby/object:Gem::Dependency
518
- name: danger-reek
504
+ name: capybara
519
505
  requirement: !ruby/object:Gem::Requirement
520
506
  requirements:
521
507
  - - ">="
@@ -529,7 +515,7 @@ dependencies:
529
515
  - !ruby/object:Gem::Version
530
516
  version: '0'
531
517
  - !ruby/object:Gem::Dependency
532
- name: danger-rubocop
518
+ name: cuprite
533
519
  requirement: !ruby/object:Gem::Requirement
534
520
  requirements:
535
521
  - - ">="
@@ -543,7 +529,7 @@ dependencies:
543
529
  - !ruby/object:Gem::Version
544
530
  version: '0'
545
531
  - !ruby/object:Gem::Dependency
546
- name: danger-simplecov_json
532
+ name: danger
547
533
  requirement: !ruby/object:Gem::Requirement
548
534
  requirements:
549
535
  - - ">="
@@ -557,7 +543,7 @@ dependencies:
557
543
  - !ruby/object:Gem::Version
558
544
  version: '0'
559
545
  - !ruby/object:Gem::Dependency
560
- name: danger-todoist
546
+ name: danger-reek
561
547
  requirement: !ruby/object:Gem::Requirement
562
548
  requirements:
563
549
  - - ">="
@@ -571,7 +557,7 @@ dependencies:
571
557
  - !ruby/object:Gem::Version
572
558
  version: '0'
573
559
  - !ruby/object:Gem::Dependency
574
- name: erb_lint
560
+ name: danger-rubocop
575
561
  requirement: !ruby/object:Gem::Requirement
576
562
  requirements:
577
563
  - - ">="
@@ -585,7 +571,7 @@ dependencies:
585
571
  - !ruby/object:Gem::Version
586
572
  version: '0'
587
573
  - !ruby/object:Gem::Dependency
588
- name: factory_bot_rails
574
+ name: danger-simplecov_json
589
575
  requirement: !ruby/object:Gem::Requirement
590
576
  requirements:
591
577
  - - ">="
@@ -599,7 +585,7 @@ dependencies:
599
585
  - !ruby/object:Gem::Version
600
586
  version: '0'
601
587
  - !ruby/object:Gem::Dependency
602
- name: faker
588
+ name: danger-todoist
603
589
  requirement: !ruby/object:Gem::Requirement
604
590
  requirements:
605
591
  - - ">="
@@ -613,7 +599,7 @@ dependencies:
613
599
  - !ruby/object:Gem::Version
614
600
  version: '0'
615
601
  - !ruby/object:Gem::Dependency
616
- name: fasterer
602
+ name: erb_lint
617
603
  requirement: !ruby/object:Gem::Requirement
618
604
  requirements:
619
605
  - - ">="
@@ -627,7 +613,7 @@ dependencies:
627
613
  - !ruby/object:Gem::Version
628
614
  version: '0'
629
615
  - !ruby/object:Gem::Dependency
630
- name: htmlbeautifier
616
+ name: factory_bot_rails
631
617
  requirement: !ruby/object:Gem::Requirement
632
618
  requirements:
633
619
  - - ">="
@@ -641,7 +627,7 @@ dependencies:
641
627
  - !ruby/object:Gem::Version
642
628
  version: '0'
643
629
  - !ruby/object:Gem::Dependency
644
- name: lefthook
630
+ name: faker
645
631
  requirement: !ruby/object:Gem::Requirement
646
632
  requirements:
647
633
  - - ">="
@@ -655,7 +641,7 @@ dependencies:
655
641
  - !ruby/object:Gem::Version
656
642
  version: '0'
657
643
  - !ruby/object:Gem::Dependency
658
- name: listen
644
+ name: fasterer
659
645
  requirement: !ruby/object:Gem::Requirement
660
646
  requirements:
661
647
  - - ">="
@@ -669,7 +655,7 @@ dependencies:
669
655
  - !ruby/object:Gem::Version
670
656
  version: '0'
671
657
  - !ruby/object:Gem::Dependency
672
- name: msgpack
658
+ name: listen
673
659
  requirement: !ruby/object:Gem::Requirement
674
660
  requirements:
675
661
  - - ">="
@@ -696,20 +682,6 @@ dependencies:
696
682
  - - ">="
697
683
  - !ruby/object:Gem::Version
698
684
  version: '0'
699
- - !ruby/object:Gem::Dependency
700
- name: rails-route-checker
701
- requirement: !ruby/object:Gem::Requirement
702
- requirements:
703
- - - ">="
704
- - !ruby/object:Gem::Version
705
- version: '0'
706
- type: :development
707
- prerelease: false
708
- version_requirements: !ruby/object:Gem::Requirement
709
- requirements:
710
- - - ">="
711
- - !ruby/object:Gem::Version
712
- version: '0'
713
685
  - !ruby/object:Gem::Dependency
714
686
  name: rspec-rails
715
687
  requirement: !ruby/object:Gem::Requirement
@@ -943,19 +915,32 @@ files:
943
915
  - app/helpers/panda_cms/application_helper.rb
944
916
  - app/helpers/panda_cms/pages_helper.rb
945
917
  - app/helpers/panda_cms/theme_helper.rb
918
+ - app/javascript/panda_cms/@editorjs--editorjs.js
946
919
  - app/javascript/panda_cms/@hotwired--stimulus.js
947
920
  - app/javascript/panda_cms/@hotwired--turbo.js
948
921
  - app/javascript/panda_cms/@rails--actioncable--src.js
949
922
  - app/javascript/panda_cms/application_panda_cms.js
950
923
  - app/javascript/panda_cms/controllers/dashboard_controller.js
924
+ - app/javascript/panda_cms/controllers/editor_controller.js
951
925
  - app/javascript/panda_cms/controllers/index.js
952
926
  - app/javascript/panda_cms/controllers/slug_controller.js
953
- - app/javascript/panda_cms/panda_cms_editable.js
927
+ - app/javascript/panda_cms/editor/plain_text_editor.js
928
+ - app/javascript/panda_cms/editor/resource_loader.js
929
+ - app/javascript/panda_cms/editor/rich_text_editor.js
954
930
  - app/javascript/panda_cms/tailwindcss-stimulus-components.js
955
931
  - app/jobs/panda_cms/application_job.rb
956
932
  - app/jobs/panda_cms/record_visit_job.rb
957
933
  - app/lib/panda_cms/bulk_editor.rb
958
934
  - app/lib/panda_cms/demo_site_generator.rb
935
+ - app/lib/panda_cms/editor_js/blocks/alert.rb
936
+ - app/lib/panda_cms/editor_js/blocks/base.rb
937
+ - app/lib/panda_cms/editor_js/blocks/header.rb
938
+ - app/lib/panda_cms/editor_js/blocks/image.rb
939
+ - app/lib/panda_cms/editor_js/blocks/list.rb
940
+ - app/lib/panda_cms/editor_js/blocks/paragraph.rb
941
+ - app/lib/panda_cms/editor_js/blocks/quote.rb
942
+ - app/lib/panda_cms/editor_js/blocks/table.rb
943
+ - app/lib/panda_cms/editor_js/renderer.rb
959
944
  - app/lib/panda_cms/slug.rb
960
945
  - app/mailers/panda_cms/application_mailer.rb
961
946
  - app/mailers/panda_cms/form_mailer.rb
@@ -1055,6 +1040,7 @@ files:
1055
1040
  - db/migrate/20240820081917_change_form_submissions_to_submission_count.rb
1056
1041
  - db/migrate/20240904200605_create_action_text_tables.action_text.rb
1057
1042
  - db/migrate/20240923234535_add_depth_to_panda_cms_menus.rb
1043
+ - db/migrate/20241031205109_add_cached_content_to_panda_cms_block_contents.rb
1058
1044
  - db/seeds.rb
1059
1045
  - lib/generators/panda_cms/install_generator.rb
1060
1046
  - lib/panda_cms.rb
@@ -1105,7 +1091,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1105
1091
  - !ruby/object:Gem::Version
1106
1092
  version: '0'
1107
1093
  requirements: []
1108
- rubygems_version: 3.5.18
1094
+ rubygems_version: 3.5.23
1109
1095
  signing_key:
1110
1096
  specification_version: 4
1111
1097
  summary: Better websites on Rails.