comfy_middle_seat 3.2.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.
- checksums.yaml +7 -0
- data/.codeclimate.yml +4 -0
- data/.gitattributes +3 -0
- data/.github/dependabot.yml +7 -0
- data/.github/issue_template.md +19 -0
- data/.github/pull_request_template.md +6 -0
- data/.github/workflows/claude-code-review.yml +46 -0
- data/.github/workflows/claude.yml +148 -0
- data/.github/workflows/coveralls.yml +53 -0
- data/.github/workflows/rubyonrails.yml +94 -0
- data/.gitignore +25 -0
- data/.rubocop.yml +82 -0
- data/.travis.yml +44 -0
- data/CHANGELOG.md +147 -0
- data/CONTRIBUTING.md +42 -0
- data/Gemfile +44 -0
- data/LICENSE +20 -0
- data/README.md +158 -0
- data/Rakefile +206 -0
- data/app/assets/builds/.keep +0 -0
- data/app/assets/config/manifest.js +1 -0
- data/app/assets/fonts/comfy/admin/cms/lib/redactor-font.eot +0 -0
- data/app/assets/javascripts/comfy/admin/cms/application.js +27 -0
- data/app/assets/javascripts/comfy/admin/cms/base.js +48 -0
- data/app/assets/javascripts/comfy/admin/cms/categories.js +17 -0
- data/app/assets/javascripts/comfy/admin/cms/codemirror.js +43 -0
- data/app/assets/javascripts/comfy/admin/cms/custom.js +1 -0
- data/app/assets/javascripts/comfy/admin/cms/diff.js +12 -0
- data/app/assets/javascripts/comfy/admin/cms/file_link.js +96 -0
- data/app/assets/javascripts/comfy/admin/cms/file_upload.js +229 -0
- data/app/assets/javascripts/comfy/admin/cms/files_modal.js +97 -0
- data/app/assets/javascripts/comfy/admin/cms/page_fragments.js +22 -0
- data/app/assets/javascripts/comfy/admin/cms/slugify.js +34 -0
- data/app/assets/javascripts/comfy/admin/cms/sortable_list.js +49 -0
- data/app/assets/javascripts/comfy/admin/cms/timepicker.js +38 -0
- data/app/assets/javascripts/comfy/admin/cms/wysiwyg.js +91 -0
- data/app/assets/javascripts/comfy/vendor/diff/diff_match_patch.min.js +49 -0
- data/app/assets/javascripts/comfy/vendor/diff/pretty_text_diff.js +88 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr.min.js +2 -0
- data/app/assets/javascripts/comfy/vendor/fontawesome.js +5 -0
- data/app/assets/javascripts/comfy/vendor/redactor/definedlinks.js +50 -0
- data/app/assets/javascripts/comfy/vendor/redactor/filemanager.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ar.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/az.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ba.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/bg.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/by.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ca.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/cs.js +87 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/da.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/de.js +80 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/el.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/en.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/eo.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/es.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/es_AR.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/fa.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/fi.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/fr.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ge.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/gr.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/he.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/hr.js +78 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/hu.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/id.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/it.js +78 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ja.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/kn.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ko.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/lt.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/lv.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/mk.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/nb.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/nl.js +80 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/pl.js +78 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/pt-BR.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/pt.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ro.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ru.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sk.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sl.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sq.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sr-CIR.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sr-LAT.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sv.js +74 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/th.js +74 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/tr.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ua.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/uk.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/vi.js +74 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/zh-CN.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/zh-TW.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/imagemanager.js +68 -0
- data/app/assets/javascripts/comfy/vendor/redactor/table.js +348 -0
- data/app/assets/javascripts/comfy/vendor/redactor/video.js +82 -0
- data/app/assets/javascripts/comfy/vendor/redactor.js +9563 -0
- data/app/assets/stylesheets/comfy/admin/cms/application.sass +11 -0
- data/app/assets/stylesheets/comfy/admin/cms/base.sass +256 -0
- data/app/assets/stylesheets/comfy/admin/cms/codemirror_overrides.sass +19 -0
- data/app/assets/stylesheets/comfy/admin/cms/custom.sass +1 -0
- data/app/assets/stylesheets/comfy/admin/cms/redactor_overrides.sass +22 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_alert.scss +51 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_badge.scss +54 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_breadcrumb.scss +41 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_button-group.scss +163 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_buttons.scss +137 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_card.scss +289 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_carousel.scss +197 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_close.scss +41 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_code.scss +48 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_custom-forms.scss +507 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_dropdown.scss +191 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_forms.scss +330 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_functions.scss +86 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_grid.scss +52 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_images.scss +42 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_input-group.scss +193 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_jumbotron.scss +17 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_list-group.scss +149 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_media.scss +8 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_mixins.scss +47 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_modal.scss +229 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_nav.scss +120 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_navbar.scss +294 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_pagination.scss +73 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_popover.scss +171 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_print.scss +141 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_progress.scss +43 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_reboot.scss +483 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_root.scss +19 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_spinners.scss +55 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_tables.scss +185 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_toasts.scss +44 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_tooltip.scss +115 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_transitions.scss +20 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_type.scss +125 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_utilities.scss +17 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_variables.scss +1123 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap-grid.scss +29 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap-reboot.scss +12 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap.scss +44 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_alert.scss +13 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_background-variant.scss +21 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_badge.scss +17 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_border-radius.scss +63 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_box-shadow.scss +20 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_breakpoints.scss +123 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_buttons.scss +107 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_caret.scss +62 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_clearfix.scss +7 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_deprecate.scss +10 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_float.scss +14 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_forms.scss +192 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_gradients.scss +45 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_grid-framework.scss +66 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_grid.scss +51 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_hover.scss +37 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_image.scss +36 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_list-group.scss +21 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_lists.scss +7 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_nav-divider.scss +10 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_pagination.scss +22 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_reset-text.scss +17 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_resize.scss +6 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_screen-reader.scss +33 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_size.scss +7 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_table-row.scss +39 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-emphasis.scss +16 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-hide.scss +11 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-truncate.scss +8 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_transition.scss +16 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_visibility.scss +8 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_align.scss +8 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_background.scss +19 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_borders.scss +75 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_clearfix.scss +3 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_display.scss +26 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_embed.scss +39 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_flex.scss +51 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_float.scss +11 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_overflow.scss +5 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_position.scss +32 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_screenreaders.scss +11 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_shadows.scss +6 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_sizing.scss +20 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_spacing.scss +73 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_stretched-link.scss +19 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_text.scss +72 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_visibility.scss +13 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/vendor/_rfs.scss +204 -0
- data/app/assets/stylesheets/comfy/vendor/fontawesome.css +343 -0
- data/app/assets/stylesheets/comfy/vendor/redactor.css +948 -0
- data/app/controllers/application_controller.rb +5 -0
- data/app/controllers/comfy/admin/base_controller.rb +20 -0
- data/app/controllers/comfy/admin/cms/base_controller.rb +54 -0
- data/app/controllers/comfy/admin/cms/categories_controller.rb +38 -0
- data/app/controllers/comfy/admin/cms/files_controller.rb +140 -0
- data/app/controllers/comfy/admin/cms/layouts_controller.rb +69 -0
- data/app/controllers/comfy/admin/cms/pages_controller.rb +193 -0
- data/app/controllers/comfy/admin/cms/revisions/base_controller.rb +48 -0
- data/app/controllers/comfy/admin/cms/revisions/layout_controller.rb +16 -0
- data/app/controllers/comfy/admin/cms/revisions/page_controller.rb +28 -0
- data/app/controllers/comfy/admin/cms/revisions/snippet_controller.rb +16 -0
- data/app/controllers/comfy/admin/cms/revisions/translation_controller.rb +29 -0
- data/app/controllers/comfy/admin/cms/sites_controller.rb +68 -0
- data/app/controllers/comfy/admin/cms/snippets_controller.rb +66 -0
- data/app/controllers/comfy/admin/cms/translations_controller.rb +117 -0
- data/app/controllers/comfy/cms/assets_controller.rb +38 -0
- data/app/controllers/comfy/cms/base_controller.rb +35 -0
- data/app/controllers/comfy/cms/content_controller.rb +90 -0
- data/app/controllers/concerns/comfy/paginate.rb +11 -0
- data/app/controllers/concerns/comfy/reorder_action.rb +19 -0
- data/app/helpers/comfy/admin/cms_helper.rb +50 -0
- data/app/helpers/comfy/cms_helper.rb +71 -0
- data/app/models/comfy/cms/categorization.rb +23 -0
- data/app/models/comfy/cms/category.rb +22 -0
- data/app/models/comfy/cms/file.rb +65 -0
- data/app/models/comfy/cms/fragment.rb +65 -0
- data/app/models/comfy/cms/layout.rb +119 -0
- data/app/models/comfy/cms/page.rb +182 -0
- data/app/models/comfy/cms/revision.rb +10 -0
- data/app/models/comfy/cms/site.rb +93 -0
- data/app/models/comfy/cms/snippet.rb +43 -0
- data/app/models/comfy/cms/translation.rb +47 -0
- data/app/models/concerns/comfy/cms/with_categories.rb +51 -0
- data/app/models/concerns/comfy/cms/with_fragments.rb +123 -0
- data/app/views/comfy/admin/cms/categories/_categories.html.haml +4 -0
- data/app/views/comfy/admin/cms/categories/_edit.html.haml +7 -0
- data/app/views/comfy/admin/cms/categories/_form.html.haml +5 -0
- data/app/views/comfy/admin/cms/categories/_index.html.haml +28 -0
- data/app/views/comfy/admin/cms/categories/_show.html.haml +15 -0
- data/app/views/comfy/admin/cms/categories/create.js.erb +7 -0
- data/app/views/comfy/admin/cms/categories/destroy.js.erb +8 -0
- data/app/views/comfy/admin/cms/categories/edit.js.erb +3 -0
- data/app/views/comfy/admin/cms/categories/update.js.erb +6 -0
- data/app/views/comfy/admin/cms/files/_file.html.haml +31 -0
- data/app/views/comfy/admin/cms/files/_form.html.haml +26 -0
- data/app/views/comfy/admin/cms/files/_modal.html.haml +3 -0
- data/app/views/comfy/admin/cms/files/destroy.js.erb +4 -0
- data/app/views/comfy/admin/cms/files/edit.html.haml +5 -0
- data/app/views/comfy/admin/cms/files/index.html.haml +31 -0
- data/app/views/comfy/admin/cms/files/new.html.haml +5 -0
- data/app/views/comfy/admin/cms/fragments/_form_fragment_attachments.html.haml +23 -0
- data/app/views/comfy/admin/cms/fragments/_form_fragments.html.haml +38 -0
- data/app/views/comfy/admin/cms/layouts/_form.html.haml +20 -0
- data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +26 -0
- data/app/views/comfy/admin/cms/layouts/edit.html.haml +9 -0
- data/app/views/comfy/admin/cms/layouts/index.html.haml +10 -0
- data/app/views/comfy/admin/cms/layouts/new.html.haml +5 -0
- data/app/views/comfy/admin/cms/pages/_form.html.haml +31 -0
- data/app/views/comfy/admin/cms/pages/_index_branch.html.haml +44 -0
- data/app/views/comfy/admin/cms/pages/edit.html.haml +14 -0
- data/app/views/comfy/admin/cms/pages/index.html.haml +13 -0
- data/app/views/comfy/admin/cms/pages/new.html.haml +5 -0
- data/app/views/comfy/admin/cms/pages/toggle_branch.js.erb +19 -0
- data/app/views/comfy/admin/cms/revisions/_sidebar.html.haml +2 -0
- data/app/views/comfy/admin/cms/revisions/show.html.haml +36 -0
- data/app/views/comfy/admin/cms/sites/_form.html.haml +15 -0
- data/app/views/comfy/admin/cms/sites/edit.html.haml +5 -0
- data/app/views/comfy/admin/cms/sites/index.html.haml +28 -0
- data/app/views/comfy/admin/cms/sites/new.html.haml +5 -0
- data/app/views/comfy/admin/cms/snippets/_form.html.haml +19 -0
- data/app/views/comfy/admin/cms/snippets/edit.html.haml +9 -0
- data/app/views/comfy/admin/cms/snippets/index.html.haml +33 -0
- data/app/views/comfy/admin/cms/snippets/new.html.haml +5 -0
- data/app/views/comfy/admin/cms/translations/_form.html.haml +20 -0
- data/app/views/comfy/admin/cms/translations/_sidebar.html.haml +19 -0
- data/app/views/comfy/admin/cms/translations/edit.html.haml +10 -0
- data/app/views/comfy/admin/cms/translations/new.html.haml +5 -0
- data/app/views/kaminari/comfy/_first_page.html.haml +3 -0
- data/app/views/kaminari/comfy/_gap.html.haml +2 -0
- data/app/views/kaminari/comfy/_last_page.html.haml +3 -0
- data/app/views/kaminari/comfy/_next_page.html.haml +2 -0
- data/app/views/kaminari/comfy/_page.html.haml +2 -0
- data/app/views/kaminari/comfy/_paginator.html.haml +11 -0
- data/app/views/kaminari/comfy/_prev_page.html.haml +2 -0
- data/app/views/layouts/comfy/admin/cms/_body.html.haml +14 -0
- data/app/views/layouts/comfy/admin/cms/_flash.html.haml +4 -0
- data/app/views/layouts/comfy/admin/cms/_footer_js.html.haml +6 -0
- data/app/views/layouts/comfy/admin/cms/_head.html.haml +19 -0
- data/app/views/layouts/comfy/admin/cms/_left.html.haml +46 -0
- data/app/views/layouts/comfy/admin/cms/_right.html.haml +5 -0
- data/app/views/layouts/comfy/admin/cms.html.haml +4 -0
- data/bin/bundle +3 -0
- data/bin/rails +4 -0
- data/bin/rake +4 -0
- data/bin/setup +36 -0
- data/bin/update +31 -0
- data/bin/yarn +11 -0
- data/comfy_middle_seat.gemspec +35 -0
- data/config/application.rb +62 -0
- data/config/boot.rb +5 -0
- data/config/cable.yml +10 -0
- data/config/cms_routes.rb +8 -0
- data/config/database.yml +40 -0
- data/config/environment.rb +7 -0
- data/config/environments/development.rb +81 -0
- data/config/environments/production.rb +93 -0
- data/config/environments/test.rb +74 -0
- data/config/initializers/comfortable_media_surfer.rb +122 -0
- data/config/initializers/content_security_policy.rb +27 -0
- data/config/initializers/filter_parameter_logging.rb +10 -0
- data/config/initializers/inflections.rb +18 -0
- data/config/initializers/json.rb +11 -0
- data/config/initializers/new_framework_defaults_7_0.rb +144 -0
- data/config/initializers/new_framework_defaults_7_1.rb +225 -0
- data/config/initializers/permissions_policy.rb +15 -0
- data/config/locales/ar.yml +268 -0
- data/config/locales/ca.yml +268 -0
- data/config/locales/cs.yml +268 -0
- data/config/locales/da.yml +268 -0
- data/config/locales/de.yml +268 -0
- data/config/locales/en.yml +268 -0
- data/config/locales/es.yml +268 -0
- data/config/locales/fi.yml +268 -0
- data/config/locales/fr.yml +268 -0
- data/config/locales/gr.yml +268 -0
- data/config/locales/hr.yml +268 -0
- data/config/locales/it.yml +268 -0
- data/config/locales/ja.yml +268 -0
- data/config/locales/nb.yml +268 -0
- data/config/locales/nl.yml +268 -0
- data/config/locales/pl.yml +268 -0
- data/config/locales/pt-BR.yml +268 -0
- data/config/locales/ru.yml +268 -0
- data/config/locales/sk.yml +268 -0
- data/config/locales/sv.yml +268 -0
- data/config/locales/tr.yml +268 -0
- data/config/locales/uk.yml +268 -0
- data/config/locales/zh-CN.yml +268 -0
- data/config/locales/zh-TW.yml +268 -0
- data/config/puma.rb +43 -0
- data/config/storage.yml +35 -0
- data/config.ru +6 -0
- data/db/cms_seeds/sample-site/files/_default.jpg.yml +5 -0
- data/db/cms_seeds/sample-site/files/default.jpg +0 -0
- data/db/cms_seeds/sample-site/layouts/default/content.html +16 -0
- data/db/cms_seeds/sample-site/layouts/default/nested/content.html +14 -0
- data/db/cms_seeds/sample-site/pages/index/child_a/content.html +7 -0
- data/db/cms_seeds/sample-site/pages/index/child_b/child_a/content.html +6 -0
- data/db/cms_seeds/sample-site/pages/index/child_b/content.html +6 -0
- data/db/cms_seeds/sample-site/pages/index/cms logo.png +0 -0
- data/db/cms_seeds/sample-site/pages/index/content.es.html +6 -0
- data/db/cms_seeds/sample-site/pages/index/content.fr.html +6 -0
- data/db/cms_seeds/sample-site/pages/index/content.html +25 -0
- data/db/cms_seeds/sample-site/pages/index/footer.png +0 -0
- data/db/cms_seeds/sample-site/pages/index/header.png +0 -0
- data/db/cms_seeds/sample-site/snippets/default.html +8 -0
- data/db/migrate/00_create_active_storage_tables.active_storage.rb +50 -0
- data/db/migrate/01_create_cms.rb +142 -0
- data/db/migrate/02_add_markdown_to_snippets.rb +5 -0
- data/gemfiles/7.2.gemfile +36 -0
- data/gemfiles/8.0.gemfile +36 -0
- data/gemfiles/8.1.gemfile +36 -0
- data/lib/comfortable_media_surfer/access_control/admin_authentication.rb +22 -0
- data/lib/comfortable_media_surfer/access_control/admin_authorization.rb +10 -0
- data/lib/comfortable_media_surfer/access_control/public_authentication.rb +10 -0
- data/lib/comfortable_media_surfer/access_control/public_authorization.rb +10 -0
- data/lib/comfortable_media_surfer/configuration.rb +138 -0
- data/lib/comfortable_media_surfer/content/block.rb +12 -0
- data/lib/comfortable_media_surfer/content/params_parser.rb +149 -0
- data/lib/comfortable_media_surfer/content/renderer.rb +146 -0
- data/lib/comfortable_media_surfer/content/tag.rb +48 -0
- data/lib/comfortable_media_surfer/content/tags/asset.rb +57 -0
- data/lib/comfortable_media_surfer/content/tags/audio.rb +39 -0
- data/lib/comfortable_media_surfer/content/tags/breadcrumbs.rb +43 -0
- data/lib/comfortable_media_surfer/content/tags/checkbox.rb +27 -0
- data/lib/comfortable_media_surfer/content/tags/children.rb +52 -0
- data/lib/comfortable_media_surfer/content/tags/date.rb +19 -0
- data/lib/comfortable_media_surfer/content/tags/datetime.rb +42 -0
- data/lib/comfortable_media_surfer/content/tags/file.rb +70 -0
- data/lib/comfortable_media_surfer/content/tags/file_link.rb +58 -0
- data/lib/comfortable_media_surfer/content/tags/files.rb +41 -0
- data/lib/comfortable_media_surfer/content/tags/fragment.rb +64 -0
- data/lib/comfortable_media_surfer/content/tags/helper.rb +53 -0
- data/lib/comfortable_media_surfer/content/tags/image.rb +56 -0
- data/lib/comfortable_media_surfer/content/tags/markdown.rb +22 -0
- data/lib/comfortable_media_surfer/content/tags/mixins/file_content.rb +42 -0
- data/lib/comfortable_media_surfer/content/tags/number.rb +18 -0
- data/lib/comfortable_media_surfer/content/tags/page_file_link.rb +86 -0
- data/lib/comfortable_media_surfer/content/tags/partial.rb +47 -0
- data/lib/comfortable_media_surfer/content/tags/siblings.rb +66 -0
- data/lib/comfortable_media_surfer/content/tags/snippet.rb +36 -0
- data/lib/comfortable_media_surfer/content/tags/template.rb +42 -0
- data/lib/comfortable_media_surfer/content/tags/text.rb +18 -0
- data/lib/comfortable_media_surfer/content/tags/textarea.rb +19 -0
- data/lib/comfortable_media_surfer/content/tags/wysiwyg.rb +19 -0
- data/lib/comfortable_media_surfer/content/tags.rb +29 -0
- data/lib/comfortable_media_surfer/content.rb +11 -0
- data/lib/comfortable_media_surfer/engine.rb +24 -0
- data/lib/comfortable_media_surfer/error.rb +24 -0
- data/lib/comfortable_media_surfer/extensions/acts_as_tree.rb +114 -0
- data/lib/comfortable_media_surfer/extensions/has_revisions.rb +68 -0
- data/lib/comfortable_media_surfer/extensions.rb +8 -0
- data/lib/comfortable_media_surfer/form_builder.rb +43 -0
- data/lib/comfortable_media_surfer/render_methods.rb +106 -0
- data/lib/comfortable_media_surfer/routing.rb +87 -0
- data/lib/comfortable_media_surfer/seeds/file/exporter.rb +37 -0
- data/lib/comfortable_media_surfer/seeds/file/importer.rb +55 -0
- data/lib/comfortable_media_surfer/seeds/layout/exporter.rb +38 -0
- data/lib/comfortable_media_surfer/seeds/layout/importer.rb +60 -0
- data/lib/comfortable_media_surfer/seeds/page/exporter.rb +88 -0
- data/lib/comfortable_media_surfer/seeds/page/importer.rb +245 -0
- data/lib/comfortable_media_surfer/seeds/snippet/exporter.rb +32 -0
- data/lib/comfortable_media_surfer/seeds/snippet/importer.rb +47 -0
- data/lib/comfortable_media_surfer/seeds.rb +110 -0
- data/lib/comfortable_media_surfer/version.rb +3 -0
- data/lib/comfortable_media_surfer/view_hooks.rb +33 -0
- data/lib/comfortable_media_surfer.rb +56 -0
- data/lib/comfy_middle_seat/version.rb +5 -0
- data/lib/comfy_middle_seat.rb +3 -0
- data/lib/generators/comfy/cms/README +21 -0
- data/lib/generators/comfy/cms/assets_generator.rb +16 -0
- data/lib/generators/comfy/cms/cms_generator.rb +69 -0
- data/lib/generators/comfy/cms/controllers_generator.rb +15 -0
- data/lib/generators/comfy/cms/models_generator.rb +15 -0
- data/lib/generators/comfy/cms/views_generator.rb +15 -0
- data/lib/generators/comfy/scaffold/scaffold_generator.rb +79 -0
- data/lib/generators/comfy/scaffold/templates/controller.rb.tt +62 -0
- data/lib/generators/comfy/scaffold/templates/migration.rb.tt +11 -0
- data/lib/generators/comfy/scaffold/templates/model.rb.tt +21 -0
- data/lib/generators/comfy/scaffold/templates/tests/controller.rb.tt +115 -0
- data/lib/generators/comfy/scaffold/templates/tests/fixture.yml.tt +4 -0
- data/lib/generators/comfy/scaffold/templates/tests/model.rb.tt +26 -0
- data/lib/generators/comfy/scaffold/templates/views/_form.haml.tt +7 -0
- data/lib/generators/comfy/scaffold/templates/views/edit.haml.tt +5 -0
- data/lib/generators/comfy/scaffold/templates/views/index.haml.tt +21 -0
- data/lib/generators/comfy/scaffold/templates/views/new.haml.tt +5 -0
- data/lib/generators/comfy/scaffold/templates/views/show.haml.tt +4 -0
- data/lib/tasks/cms_assets.rake +19 -0
- data/lib/tasks/cms_seeds.rake +40 -0
- data/package-lock.json +989 -0
- data/package.json +23 -0
- data/public/favicon.ico +0 -0
- data/rakelib/create_release.rake +82 -0
- metadata +665 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 385ae2594717984eee4d7a568cb9bde9443f709965748fe601812be607f13dea
|
|
4
|
+
data.tar.gz: 879f3f1d267b529b30ad012d57c61bfbd64e4cb877b062b44e022eac015502de
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 430cebb413df49b32fb311c6a7bc1462ea52cf5c7056f7c35c6c24ad4ff9740f3344f35a860eb2eb0d3d94671c5385d82be0d916e6ac7309df974e2897d74aa6
|
|
7
|
+
data.tar.gz: 7ea323b71050068057948cde56b61fc0ae986d3235a9ef990fd0e01feae6390f7f73ea29bf8533bfe806e88999773faa310cd354d1582eb5e949f82df55f1f37
|
data/.codeclimate.yml
ADDED
data/.gitattributes
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
### Expected behavior
|
|
2
|
+
Tell us what should happen
|
|
3
|
+
|
|
4
|
+
### Actual behavior
|
|
5
|
+
Tell us what does happen
|
|
6
|
+
|
|
7
|
+
### Steps to reproduce
|
|
8
|
+
Things that help:
|
|
9
|
+
|
|
10
|
+
* Describe the issue in detail.
|
|
11
|
+
* Add relevant code snippets.
|
|
12
|
+
* Create a failing test case.
|
|
13
|
+
|
|
14
|
+
### System configuration
|
|
15
|
+
**Rails version**:
|
|
16
|
+
|
|
17
|
+
**CMS version**:
|
|
18
|
+
|
|
19
|
+
**Ruby version**:
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
name: Claude Code Review
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
types: [opened, synchronize, ready_for_review, reopened]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
claude-review:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
pull-requests: write
|
|
13
|
+
issues: write
|
|
14
|
+
id-token: write
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- name: Checkout repository
|
|
18
|
+
uses: actions/checkout@v6
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 1
|
|
21
|
+
|
|
22
|
+
- name: Run Claude Code Review
|
|
23
|
+
id: claude-review
|
|
24
|
+
uses: anthropics/claude-code-action@v1
|
|
25
|
+
env:
|
|
26
|
+
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
27
|
+
with:
|
|
28
|
+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
29
|
+
prompt: |
|
|
30
|
+
REPO: ${{ github.repository }}
|
|
31
|
+
PR NUMBER: ${{ github.event.pull_request.number }}
|
|
32
|
+
|
|
33
|
+
Please review this pull request with a focus on:
|
|
34
|
+
- Code quality and best practices
|
|
35
|
+
- Potential bugs or issues
|
|
36
|
+
- Security implications
|
|
37
|
+
- Performance considerations
|
|
38
|
+
|
|
39
|
+
Note: The PR branch is already checked out in the current working directory.
|
|
40
|
+
|
|
41
|
+
Use `gh pr comment` for top-level feedback.
|
|
42
|
+
Use `mcp__github_inline_comment__create_inline_comment` to highlight specific code issues.
|
|
43
|
+
Only post GitHub comments - don't submit review text as messages.
|
|
44
|
+
|
|
45
|
+
claude_args: |
|
|
46
|
+
--allowedTools "mcp__github_inline_comment__create_inline_comment,Bash(gh pr comment:*),Bash(gh pr diff:*),Bash(gh pr view:*)"
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
name: Claude Code
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
issue_comment:
|
|
5
|
+
types: [created]
|
|
6
|
+
pull_request_review_comment:
|
|
7
|
+
types: [created]
|
|
8
|
+
issues:
|
|
9
|
+
types: [opened, assigned]
|
|
10
|
+
pull_request_review:
|
|
11
|
+
types: [submitted]
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
authorize_claude_actor:
|
|
15
|
+
if: |
|
|
16
|
+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
17
|
+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
|
18
|
+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
|
19
|
+
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
outputs:
|
|
24
|
+
authorized: ${{ steps.permission-gate.outputs.authorized }}
|
|
25
|
+
steps:
|
|
26
|
+
- name: Verify actor can run Claude
|
|
27
|
+
id: permission-gate
|
|
28
|
+
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9
|
|
29
|
+
with:
|
|
30
|
+
script: |
|
|
31
|
+
const owner = context.repo.owner;
|
|
32
|
+
const repo = context.repo.repo;
|
|
33
|
+
const permissionByLogin = new Map();
|
|
34
|
+
|
|
35
|
+
function claudeRequester() {
|
|
36
|
+
if (
|
|
37
|
+
context.eventName === 'issue_comment' ||
|
|
38
|
+
context.eventName === 'pull_request_review_comment'
|
|
39
|
+
) {
|
|
40
|
+
return context.payload.comment?.user?.login;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
if (context.eventName === 'pull_request_review') {
|
|
44
|
+
return context.payload.review?.user?.login;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
if (context.eventName === 'issues') {
|
|
48
|
+
return context.payload.issue?.user?.login;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
async function hasWriteAccessFor(username) {
|
|
55
|
+
if (!username) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (permissionByLogin.has(username)) {
|
|
60
|
+
return permissionByLogin.get(username);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
let hasWriteAccess = false;
|
|
64
|
+
try {
|
|
65
|
+
const { data: permission } = await github.rest.repos.getCollaboratorPermissionLevel({
|
|
66
|
+
owner,
|
|
67
|
+
repo,
|
|
68
|
+
username
|
|
69
|
+
});
|
|
70
|
+
hasWriteAccess = ['admin', 'write'].includes(permission.permission);
|
|
71
|
+
} catch (error) {
|
|
72
|
+
core.warning(
|
|
73
|
+
`Unable to verify ${username} write permission for Claude; ` +
|
|
74
|
+
`treating the Claude request as untrusted: ${error.message || error}`
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
permissionByLogin.set(username, hasWriteAccess);
|
|
79
|
+
return hasWriteAccess;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const actor = context.actor;
|
|
83
|
+
const requester = claudeRequester();
|
|
84
|
+
|
|
85
|
+
if (!requester) {
|
|
86
|
+
core.setOutput('authorized', 'false');
|
|
87
|
+
core.setFailed('Unable to run Claude because the requester could not be determined.');
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (!(await hasWriteAccessFor(actor))) {
|
|
92
|
+
core.setOutput('authorized', 'false');
|
|
93
|
+
core.setFailed(`Unable to run Claude because ${actor} does not have write/admin repository permission.`);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (!(await hasWriteAccessFor(requester))) {
|
|
98
|
+
core.setOutput('authorized', 'false');
|
|
99
|
+
core.setFailed(
|
|
100
|
+
`Unable to run Claude because requester ${requester} does not have write/admin repository permission.`
|
|
101
|
+
);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
core.setOutput('authorized', 'true');
|
|
106
|
+
core.info(`Authorized ${actor} and Claude requester ${requester} to run Claude.`);
|
|
107
|
+
|
|
108
|
+
claude:
|
|
109
|
+
needs: authorize_claude_actor
|
|
110
|
+
if: needs.authorize_claude_actor.outputs.authorized == 'true'
|
|
111
|
+
runs-on: ubuntu-latest
|
|
112
|
+
permissions:
|
|
113
|
+
contents: read
|
|
114
|
+
pull-requests: read
|
|
115
|
+
issues: read
|
|
116
|
+
id-token: write
|
|
117
|
+
actions: read # Required for Claude to read CI results on PRs
|
|
118
|
+
checks: read
|
|
119
|
+
statuses: read
|
|
120
|
+
steps:
|
|
121
|
+
- name: Checkout repository
|
|
122
|
+
uses: actions/checkout@v4
|
|
123
|
+
with:
|
|
124
|
+
fetch-depth: 1
|
|
125
|
+
|
|
126
|
+
- name: Run Claude Code
|
|
127
|
+
id: claude
|
|
128
|
+
uses: anthropics/claude-code-action@v1
|
|
129
|
+
env:
|
|
130
|
+
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
131
|
+
with:
|
|
132
|
+
github_token: ${{ github.token }}
|
|
133
|
+
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
|
134
|
+
|
|
135
|
+
# This is an optional setting that allows Claude to read CI results on PRs
|
|
136
|
+
additional_permissions: |
|
|
137
|
+
actions: read
|
|
138
|
+
checks: read
|
|
139
|
+
statuses: read
|
|
140
|
+
|
|
141
|
+
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
|
|
142
|
+
# prompt: 'Update the pull request description to include a summary of changes.'
|
|
143
|
+
|
|
144
|
+
# Optional: Add claude_args to customize behavior and configuration
|
|
145
|
+
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
|
146
|
+
# or https://code.claude.com/docs/en/cli-reference for available options
|
|
147
|
+
# claude_args: '--allowed-tools Bash(gh pr:*)'
|
|
148
|
+
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: "Coveralls"
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- main
|
|
6
|
+
- master
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
coveralls:
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
ruby-version:
|
|
14
|
+
- "3.4"
|
|
15
|
+
rails-version:
|
|
16
|
+
- "8.1"
|
|
17
|
+
continue-on-error: [true]
|
|
18
|
+
name: ${{ format('Coverage (Ruby {0}, Rails {1})', matrix.ruby-version, matrix.rails-version) }}
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
continue-on-error: ${{ matrix.continue-on-error }}
|
|
21
|
+
env:
|
|
22
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.rails-version }}.gemfile
|
|
23
|
+
RAILS_ENV: test
|
|
24
|
+
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
|
|
25
|
+
|
|
26
|
+
steps:
|
|
27
|
+
- name: Checkout source
|
|
28
|
+
uses: actions/checkout@v2
|
|
29
|
+
|
|
30
|
+
- name: Install Node.js
|
|
31
|
+
uses: actions/setup-node@v4
|
|
32
|
+
with:
|
|
33
|
+
cache: npm
|
|
34
|
+
- run: npm ci
|
|
35
|
+
|
|
36
|
+
- name: Install Ruby ${{ matrix.ruby-version }}
|
|
37
|
+
uses: ruby/setup-ruby@v1
|
|
38
|
+
with:
|
|
39
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
40
|
+
bundler-cache: true
|
|
41
|
+
|
|
42
|
+
- name: Update CMS gem
|
|
43
|
+
run: bundle update comfy_middle_seat
|
|
44
|
+
|
|
45
|
+
- name: Compile assets
|
|
46
|
+
run: bin/bundle exec rails comfy:compile_assets
|
|
47
|
+
|
|
48
|
+
- name: Run tests, report coverage
|
|
49
|
+
run: |
|
|
50
|
+
bin/bundle exec rails db:drop
|
|
51
|
+
bin/bundle exec rails db:create
|
|
52
|
+
bin/bundle exec rails db:migrate
|
|
53
|
+
bin/bundle exec rake test:serial
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
name: "Rails CI"
|
|
2
|
+
on:
|
|
3
|
+
push:
|
|
4
|
+
branches:
|
|
5
|
+
- main
|
|
6
|
+
- master
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
build_test_lint_audit:
|
|
11
|
+
strategy:
|
|
12
|
+
matrix:
|
|
13
|
+
ruby-version:
|
|
14
|
+
- "3.3"
|
|
15
|
+
- "3.4"
|
|
16
|
+
- "4.0"
|
|
17
|
+
rails-version:
|
|
18
|
+
- "7.2"
|
|
19
|
+
- "8.0"
|
|
20
|
+
- "8.1"
|
|
21
|
+
name: ${{ format('Tests (Ruby {0}, Rails {1})', matrix.ruby-version, matrix.rails-version) }}
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
env:
|
|
24
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.rails-version }}.gemfile
|
|
25
|
+
RAILS_ENV: test
|
|
26
|
+
SKIP_COV: true
|
|
27
|
+
steps:
|
|
28
|
+
- name: Checkout source
|
|
29
|
+
uses: actions/checkout@v2
|
|
30
|
+
|
|
31
|
+
- name: Install Node.js
|
|
32
|
+
uses: actions/setup-node@v4
|
|
33
|
+
with:
|
|
34
|
+
cache: npm
|
|
35
|
+
- run: npm ci
|
|
36
|
+
|
|
37
|
+
- name: Install Ruby ${{ matrix.ruby-version }}
|
|
38
|
+
uses: ruby/setup-ruby@v1
|
|
39
|
+
with:
|
|
40
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
41
|
+
bundler-cache: true
|
|
42
|
+
|
|
43
|
+
- name: Update CMS gem
|
|
44
|
+
run: bundle update comfy_middle_seat
|
|
45
|
+
|
|
46
|
+
- name: Compile assets
|
|
47
|
+
run: bin/bundle exec rails comfy:compile_assets
|
|
48
|
+
|
|
49
|
+
- name: Run tests
|
|
50
|
+
run: |
|
|
51
|
+
bin/bundle exec rails db:drop
|
|
52
|
+
bin/bundle exec rails db:create
|
|
53
|
+
bin/bundle exec rails db:migrate
|
|
54
|
+
bin/bundle exec rake test
|
|
55
|
+
|
|
56
|
+
- name: Lint the code
|
|
57
|
+
run: bin/bundle exec rubocop --parallel
|
|
58
|
+
|
|
59
|
+
- name: Audit for security
|
|
60
|
+
run: |
|
|
61
|
+
bin/bundle exec brakeman -q -w3
|
|
62
|
+
bin/bundle exec bundler-audit --update --gemfile-lock gemfiles/${{ matrix.rails-version }}.gemfile.lock
|
|
63
|
+
|
|
64
|
+
system_tests:
|
|
65
|
+
name: System tests (Ruby 4.0, Rails 8.1)
|
|
66
|
+
runs-on: ubuntu-latest
|
|
67
|
+
env:
|
|
68
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/8.1.gemfile
|
|
69
|
+
RAILS_ENV: test
|
|
70
|
+
SKIP_COV: true
|
|
71
|
+
steps:
|
|
72
|
+
- name: Checkout source
|
|
73
|
+
uses: actions/checkout@v4
|
|
74
|
+
|
|
75
|
+
- name: Install Node.js
|
|
76
|
+
uses: actions/setup-node@v4
|
|
77
|
+
with:
|
|
78
|
+
cache: npm
|
|
79
|
+
- run: npm ci
|
|
80
|
+
|
|
81
|
+
- name: Install Ruby 4.0
|
|
82
|
+
uses: ruby/setup-ruby@v1
|
|
83
|
+
with:
|
|
84
|
+
ruby-version: "4.0"
|
|
85
|
+
bundler-cache: true
|
|
86
|
+
|
|
87
|
+
- name: Compile assets
|
|
88
|
+
run: npm run build && npm run build:css
|
|
89
|
+
|
|
90
|
+
- name: Prepare database
|
|
91
|
+
run: bin/bundle exec rails db:prepare
|
|
92
|
+
|
|
93
|
+
- name: Run system tests
|
|
94
|
+
run: bin/bundle exec rake test:system
|
data/.gitignore
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
.bundle
|
|
2
|
+
db/*.sqlite3*
|
|
3
|
+
log/*
|
|
4
|
+
tmp/**/*
|
|
5
|
+
.DS_Store
|
|
6
|
+
db/schema.rb
|
|
7
|
+
db/development_structure.sql
|
|
8
|
+
db/test.sqlite3-journal
|
|
9
|
+
pkg
|
|
10
|
+
rdoc
|
|
11
|
+
/tmp
|
|
12
|
+
public/system/
|
|
13
|
+
Gemfile.lock
|
|
14
|
+
.rvmrc
|
|
15
|
+
.ruby-version
|
|
16
|
+
.ruby-gemset
|
|
17
|
+
/.sass-cache
|
|
18
|
+
coverage/
|
|
19
|
+
/storage
|
|
20
|
+
db/cms_fixtures/test-site/
|
|
21
|
+
.idea
|
|
22
|
+
|
|
23
|
+
/node_modules
|
|
24
|
+
/app/assets/builds/*
|
|
25
|
+
!/app/assets/builds/.keep
|
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
require:
|
|
2
|
+
# - rubocop-rails
|
|
3
|
+
# - rubocop-minitest
|
|
4
|
+
|
|
5
|
+
AllCops:
|
|
6
|
+
TargetRubyVersion: 3.2
|
|
7
|
+
NewCops: enable
|
|
8
|
+
SuggestExtensions: false
|
|
9
|
+
Exclude:
|
|
10
|
+
- bin/*
|
|
11
|
+
- db/schema.rb
|
|
12
|
+
- db/migrate/**/*
|
|
13
|
+
- test/fixtures/**/*
|
|
14
|
+
- tmp/**/*
|
|
15
|
+
- vendor/bundle/**/*
|
|
16
|
+
|
|
17
|
+
# -- Layout --------------------------------------------------------------------
|
|
18
|
+
Layout/FirstArrayElementIndentation:
|
|
19
|
+
EnforcedStyle: consistent
|
|
20
|
+
|
|
21
|
+
Layout/LineLength:
|
|
22
|
+
Max: 148
|
|
23
|
+
|
|
24
|
+
Layout/MultilineMethodCallIndentation:
|
|
25
|
+
EnforcedStyle: indented
|
|
26
|
+
|
|
27
|
+
Layout/AccessModifierIndentation:
|
|
28
|
+
EnforcedStyle: outdent
|
|
29
|
+
|
|
30
|
+
# -- Metrics -------------------------------------------------------------------
|
|
31
|
+
Metrics/AbcSize:
|
|
32
|
+
Enabled: false
|
|
33
|
+
|
|
34
|
+
Metrics/BlockLength:
|
|
35
|
+
Max: 45
|
|
36
|
+
|
|
37
|
+
Metrics/ClassLength:
|
|
38
|
+
Enabled: false
|
|
39
|
+
|
|
40
|
+
Metrics/CyclomaticComplexity:
|
|
41
|
+
Max: 12
|
|
42
|
+
|
|
43
|
+
Metrics/MethodLength:
|
|
44
|
+
Enabled: false
|
|
45
|
+
|
|
46
|
+
Metrics/PerceivedComplexity:
|
|
47
|
+
Max: 15
|
|
48
|
+
|
|
49
|
+
# -- Naming --------------------------------------------------------------------
|
|
50
|
+
Naming/MethodParameterName:
|
|
51
|
+
Enabled: false
|
|
52
|
+
|
|
53
|
+
Naming/PredicateMethod:
|
|
54
|
+
Enabled: false
|
|
55
|
+
|
|
56
|
+
# -- Style ---------------------------------------------------------------------
|
|
57
|
+
Style/ClassAndModuleChildren:
|
|
58
|
+
Enabled: false
|
|
59
|
+
|
|
60
|
+
Style/Documentation:
|
|
61
|
+
Enabled: false
|
|
62
|
+
|
|
63
|
+
Style/DocumentDynamicEvalDefinition:
|
|
64
|
+
Enabled: false
|
|
65
|
+
|
|
66
|
+
Style/HashSyntax:
|
|
67
|
+
Enabled: false
|
|
68
|
+
|
|
69
|
+
Style/IfUnlessModifier:
|
|
70
|
+
Enabled: false
|
|
71
|
+
|
|
72
|
+
Style/Lambda:
|
|
73
|
+
EnforcedStyle: literal
|
|
74
|
+
|
|
75
|
+
Style/OptionalBooleanParameter:
|
|
76
|
+
Enabled: false
|
|
77
|
+
|
|
78
|
+
Style/SafeNavigation:
|
|
79
|
+
Enabled: false
|
|
80
|
+
|
|
81
|
+
Style/RegexpLiteral:
|
|
82
|
+
EnforcedStyle: percent_r
|
data/.travis.yml
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
dist: xenial
|
|
2
|
+
services:
|
|
3
|
+
- xvfb
|
|
4
|
+
addons:
|
|
5
|
+
sources:
|
|
6
|
+
- google-chrome
|
|
7
|
+
apt:
|
|
8
|
+
packages:
|
|
9
|
+
- google-chrome-stable
|
|
10
|
+
|
|
11
|
+
language: ruby
|
|
12
|
+
rvm:
|
|
13
|
+
- 2.3.8
|
|
14
|
+
- 2.4.9
|
|
15
|
+
- 2.5.7
|
|
16
|
+
- 2.6.5
|
|
17
|
+
gemfile:
|
|
18
|
+
- test/gemfiles/5.2.gemfile
|
|
19
|
+
jobs:
|
|
20
|
+
include:
|
|
21
|
+
- rvm: 2.5.7
|
|
22
|
+
gemfile: test/gemfiles/6.0.gemfile
|
|
23
|
+
- rvm: 2.6.5
|
|
24
|
+
gemfile: test/gemfiles/6.0.gemfile
|
|
25
|
+
branches:
|
|
26
|
+
only:
|
|
27
|
+
- master
|
|
28
|
+
before_install:
|
|
29
|
+
- gem update --system
|
|
30
|
+
- gem update bundler
|
|
31
|
+
before_script:
|
|
32
|
+
- wget http://chromedriver.storage.googleapis.com/2.36/chromedriver_linux64.zip
|
|
33
|
+
- unzip chromedriver_linux64.zip
|
|
34
|
+
- sudo apt-get install libnss3
|
|
35
|
+
- sudo apt-get --only-upgrade install google-chrome-stable
|
|
36
|
+
- sudo cp chromedriver /usr/local/bin/.
|
|
37
|
+
- sudo chmod +x /usr/local/bin/chromedriver
|
|
38
|
+
- export DISPLAY=:99.0
|
|
39
|
+
- sleep 3
|
|
40
|
+
script:
|
|
41
|
+
- bundle exec rake db:migrate
|
|
42
|
+
- bundle exec rake test
|
|
43
|
+
- SKIP_COV=true bundle exec rake test:system
|
|
44
|
+
- bundle exec rubocop
|
data/CHANGELOG.md
ADDED
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project's source code will be documented in this file. Items under `Unreleased` are upcoming features that will be out in the next version.
|
|
4
|
+
|
|
5
|
+
## Contributors
|
|
6
|
+
|
|
7
|
+
Please follow the recommendations outlined at [keepachangelog.com](https://keepachangelog.com). Please use the existing headings and styling as a guide, and add a link for the version diff at the bottom of the file. Also, please update the `Unreleased` link to compare it to the latest release version.
|
|
8
|
+
|
|
9
|
+
For all changes prior to the inception of this project, see the [Release History](https://github.com/comfy/comfortable-mexican-sofa/releases) of ComfortableMexicanSofa.
|
|
10
|
+
|
|
11
|
+
## Versions
|
|
12
|
+
|
|
13
|
+
## [Unreleased]
|
|
14
|
+
|
|
15
|
+
## [v3.1.7] - 2026-02-20
|
|
16
|
+
|
|
17
|
+
### Fixed
|
|
18
|
+
|
|
19
|
+
- Fix wrong number of arguments for `to_s` in date tags from [PR 58](https://github.com/shakacode/comfortable-media-surfer/pull/58)
|
|
20
|
+
|
|
21
|
+
### Changed
|
|
22
|
+
|
|
23
|
+
- Update rubocop requirement from ~> 1.81.1 to ~> 1.84.0
|
|
24
|
+
|
|
25
|
+
## [v3.1.6] - 2026-02-19
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- Claude code workflow
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- problem creating root/home page from [P5 45](https://github.com/shakacode/comfortable-media-surfer/pull/45)
|
|
34
|
+
|
|
35
|
+
## [v3.1.5] - 2026-01-08
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- Rails 8.1 compatibility
|
|
40
|
+
|
|
41
|
+
### Fixed
|
|
42
|
+
|
|
43
|
+
- Strip possible spaces around exclude page slugs, from [PR 42](https://github.com/shakacode/comfortable-media-surfer/pull/42)
|
|
44
|
+
|
|
45
|
+
### Changed
|
|
46
|
+
|
|
47
|
+
- gem updates for propshaft, brakeman, rubocop, haml-rails
|
|
48
|
+
|
|
49
|
+
## [v3.1.4] - 2025-07-14
|
|
50
|
+
|
|
51
|
+
### Fixed
|
|
52
|
+
|
|
53
|
+
- removed obsolete JQuery reference
|
|
54
|
+
|
|
55
|
+
### Changed
|
|
56
|
+
|
|
57
|
+
- updated gem versions
|
|
58
|
+
- update README for migration from Occams
|
|
59
|
+
|
|
60
|
+
## [v3.1.3] - 2025-05-29
|
|
61
|
+
|
|
62
|
+
### Fixed
|
|
63
|
+
|
|
64
|
+
- Fixed file descriptor leak during seeds import
|
|
65
|
+
- Fixed ‘Deep nesting of tags’ error for pages containing more than MAX_DEPTH tags
|
|
66
|
+
- Fixed importing pages with the same slug but different parents
|
|
67
|
+
|
|
68
|
+
## [v3.1.2] - 2025-05-26
|
|
69
|
+
|
|
70
|
+
### Fixed
|
|
71
|
+
|
|
72
|
+
- Fixed Expand/Collapse error in Admin/Pages.
|
|
73
|
+
- Include sassc-rails to gemspec, since it is deprecated after rails 7.0.8
|
|
74
|
+
- Update documentation to reflect recent changes
|
|
75
|
+
|
|
76
|
+
### Added
|
|
77
|
+
|
|
78
|
+
- added migration for Markdown snippets
|
|
79
|
+
|
|
80
|
+
## [v3.1.1] - 2025-02-08
|
|
81
|
+
|
|
82
|
+
### Fixed
|
|
83
|
+
|
|
84
|
+
- Fixed scss: use scss imports, not css ones that cannot be resolved by the browser
|
|
85
|
+
|
|
86
|
+
### Added
|
|
87
|
+
|
|
88
|
+
- Added rake task to compile assets, corresponding post install message
|
|
89
|
+
- Added import Rails from UJS
|
|
90
|
+
- Added missing jQuery import
|
|
91
|
+
|
|
92
|
+
### Removed
|
|
93
|
+
|
|
94
|
+
- Removed yarn, as not needed
|
|
95
|
+
|
|
96
|
+
## [v3.1.0] - 2024-12-31 (gem yanked, pending resolution of [Issue 8](https://github.com/shakacode/comfortable-media-surfer/issues/8)
|
|
97
|
+
|
|
98
|
+
### Added
|
|
99
|
+
|
|
100
|
+
- Added compatibility and support for Rails 8
|
|
101
|
+
- Added compatibility and support for propshaft (sprockets is still supported) - installing the gem now requires NodeJS to be installed. In addition, the `comfy:compile_assets` task needs to be run after installing the gem.
|
|
102
|
+
|
|
103
|
+
### Removed
|
|
104
|
+
|
|
105
|
+
- Removed sassc sprockets
|
|
106
|
+
- Rails 6.x compatibility dropped, since it is not being maintained as of October 2024
|
|
107
|
+
|
|
108
|
+
### Changed
|
|
109
|
+
|
|
110
|
+
- Updated README links to point to the Surfer wiki
|
|
111
|
+
|
|
112
|
+
## [v3.0.0] - 2024-11-30
|
|
113
|
+
|
|
114
|
+
First release of `comfortable_media_surfer`. This new gem is a revival of [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa) which had been dormant for nearly 5 years.
|
|
115
|
+
|
|
116
|
+
### Fixed
|
|
117
|
+
|
|
118
|
+
- Fixed all broken tests to now pass on Rails 6.x and 7.x
|
|
119
|
+
- Code syntax per Rubocop linting
|
|
120
|
+
|
|
121
|
+
### Added
|
|
122
|
+
|
|
123
|
+
- Rails 7 compatibility, including many config and code changes. See the [PR](https://github.com/shakacode/comfortable-media-surfer/pull/1/files) for full details
|
|
124
|
+
- Added github actions workflows for CI build and test coverage
|
|
125
|
+
- Added CMS tags for navigation: children, siblings, breadcrumbs, with tests
|
|
126
|
+
- Added CMS tag for embedded audio, with tests
|
|
127
|
+
- Added CMS tag for image, with tests
|
|
128
|
+
- Added ability to write CMS snippets in Markdown, with tests
|
|
129
|
+
|
|
130
|
+
### Removed
|
|
131
|
+
|
|
132
|
+
- Rails 5 compatibility dropped, as it is EOL
|
|
133
|
+
|
|
134
|
+
### Changed
|
|
135
|
+
|
|
136
|
+
- Rebranded **ComfortableMexicanSofa** as **ComfortableMediaSurfer** in order to publish new gem (database table names and schema have not changed).
|
|
137
|
+
|
|
138
|
+
[Unreleased]: https://github.com/shakacode/comfortable-media-surfer/compare/v3.1.7...master
|
|
139
|
+
[v3.1.7]: https://github.com/shakacode/comfortable-media-surfer/compare/v3.1.6...v3.1.7
|
|
140
|
+
[v3.1.6]: https://github.com/shakacode/comfortable-media-surfer/compare/v3.1.5...v3.1.6
|
|
141
|
+
[v3.1.5]: https://github.com/shakacode/comfortable-media-surfer/compare/v3.1.4...v3.1.5
|
|
142
|
+
[v3.1.4]: https://github.com/shakacode/comfortable-media-surfer/compare/v3.1.3...v3.1.4
|
|
143
|
+
[v3.1.3]: https://github.com/shakacode/comfortable-media-surfer/compare/v3.1.2...v3.1.3
|
|
144
|
+
[v3.1.2]: https://github.com/shakacode/comfortable-media-surfer/compare/v3.1.1...v3.1.2
|
|
145
|
+
[v3.1.1]: https://github.com/shakacode/comfortable-media-surfer/compare/v3.1.0...v3.1.1
|
|
146
|
+
[v3.1.0]: https://github.com/shakacode/comfortable-media-surfer/compare/v3.0.0...v3.1.0
|
|
147
|
+
[v3.0.0]: https://github.com/shakacode/comfortable-media-surfer/compare/v2.0.19...v3.0.0
|