lcms-engine 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +1 -1
- data/.dockerignore +25 -0
- data/.env.docker +1 -1
- data/.eslintignore +2 -1
- data/.eslintrc +23 -73
- data/.nvmrc +1 -1
- data/.overcommit.yml +8 -2
- data/.prettierrc +7 -0
- data/.rubocop.yml +12 -8
- data/.ruby-version +1 -1
- data/.stylelintignore +9 -0
- data/.stylelintrc +8 -0
- data/CHANGELOG.md +50 -1
- data/Dockerfile +3 -3
- data/Gemfile.lock +408 -322
- data/README.md +20 -17
- data/app/assets/config/lcms_engine_manifest.js +4 -2
- data/app/assets/javascripts/lcms/engine/admin/{application.js → lcms_engine_application.js} +1 -3
- data/app/assets/javascripts/lcms/engine/initializers/foundation.js +1 -1
- data/app/assets/javascripts/lcms/engine/{application.js → lcms_engine_application.js} +0 -0
- data/app/assets/stylesheets/lcms/engine/admin/collections.scss +2 -1
- data/app/assets/stylesheets/lcms/engine/admin/components.scss +60 -19
- data/app/assets/stylesheets/lcms/engine/admin/curriculums.scss +12 -10
- data/app/assets/stylesheets/lcms/engine/admin/lessons.scss +21 -15
- data/app/assets/stylesheets/lcms/engine/admin/materials.scss +25 -17
- data/app/assets/stylesheets/lcms/engine/admin/resources.scss +8 -7
- data/app/assets/stylesheets/lcms/engine/admin/standards.scss +4 -1
- data/app/assets/stylesheets/lcms/engine/admin/users.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/base/_colors.scss +8 -10
- data/app/assets/stylesheets/lcms/engine/base/_ld-colors.scss +10 -10
- data/app/assets/stylesheets/lcms/engine/components/_assoc-picker.scss +4 -5
- data/app/assets/stylesheets/lcms/engine/components/lesson/_activity.scss +6 -2
- data/app/assets/stylesheets/lcms/engine/components/lesson/_callout.scss +19 -5
- data/app/assets/stylesheets/lcms/engine/components/lesson/_columns.scss +4 -3
- data/app/assets/stylesheets/lcms/engine/components/lesson/_curriculum-map.scss +16 -7
- data/app/assets/stylesheets/lcms/engine/components/lesson/_def.scss +2 -2
- data/app/assets/stylesheets/lcms/engine/components/lesson/_expand.scss +9 -9
- data/app/assets/stylesheets/lcms/engine/components/lesson/_foundational-divider.scss +0 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_group.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_icons.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_image-wrap.scss +2 -2
- data/app/assets/stylesheets/lcms/engine/components/lesson/_inset.scss +7 -2
- data/app/assets/stylesheets/lcms/engine/components/lesson/_materials.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_multiple-choice.scss +4 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_override.scss +28 -9
- data/app/assets/stylesheets/lcms/engine/components/lesson/_pd.scss +7 -7
- data/app/assets/stylesheets/lcms/engine/components/lesson/_pv.scss +5 -4
- data/app/assets/stylesheets/lcms/engine/components/lesson/_section.scss +10 -3
- data/app/assets/stylesheets/lcms/engine/components/lesson/_selection-control.scss +14 -8
- data/app/assets/stylesheets/lcms/engine/components/lesson/_sidebar.scss +25 -10
- data/app/assets/stylesheets/lcms/engine/components/lesson/_title.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/components/lesson/_unit-map.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/material/_material.scss +3 -3
- data/app/assets/stylesheets/lcms/engine/components/material/_overlay.scss +12 -4
- data/app/assets/stylesheets/lcms/engine/components/material/_preview.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/support/_survey.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/layout/_footer.scss +29 -11
- data/app/assets/stylesheets/lcms/engine/layout/_header.scss +5 -5
- data/app/assets/stylesheets/lcms/engine/layout/_navigation.scss +4 -6
- data/app/assets/stylesheets/lcms/engine/layout/_page.scss +2 -2
- data/app/assets/stylesheets/lcms/engine/{admin.scss → lcms_engine_admin.scss} +26 -15
- data/app/assets/stylesheets/lcms/engine/lcms_engine_application.scss +9 -0
- data/app/assets/stylesheets/lcms/engine/pdf.scss +5 -26
- data/app/assets/stylesheets/lcms/engine/pdf_plain.scss +5 -23
- data/app/assets/stylesheets/lcms/engine/print/_base.scss +41 -12
- data/app/assets/stylesheets/lcms/engine/print/_cover.scss +12 -12
- data/app/assets/stylesheets/lcms/engine/print/_footer.scss +8 -3
- data/app/assets/stylesheets/lcms/engine/print/_gdoc-base.scss +10 -37
- data/app/assets/stylesheets/lcms/engine/print/_helpers.scss +5 -2
- data/app/assets/stylesheets/lcms/engine/print/_lesson-base.scss +2 -14
- data/app/assets/stylesheets/lcms/engine/print/_material-base.scss +1 -3
- data/app/assets/stylesheets/lcms/engine/print/_print.scss +15 -8
- data/app/assets/stylesheets/lcms/engine/print/_toc.scss +24 -9
- data/app/assets/stylesheets/lcms/engine/print/gdoc/_base-typography.scss +24 -6
- data/app/assets/stylesheets/lcms/engine/print/gdoc/_base.scss +10 -3
- data/app/assets/stylesheets/lcms/engine/print/gdoc/_colors.scss +3 -3
- data/app/assets/stylesheets/lcms/engine/print/gdoc/_header.scss +2 -2
- data/app/assets/stylesheets/lcms/engine/print/gdoc/_helpers.scss +1 -0
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_activity.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_agenda.scss +8 -2
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_callout.scss +16 -6
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_def.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_dialogue.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_expand.scss +5 -2
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_image-wrap.scss +5 -3
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_image.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_optbreak.scss +1 -0
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_section.scss +4 -1
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_smp.scss +1 -0
- data/app/assets/stylesheets/lcms/engine/print/gdoc/lesson/_tables.scss +11 -3
- data/app/assets/stylesheets/lcms/engine/print/gdoc/material/_header.scss +5 -2
- data/app/assets/stylesheets/lcms/engine/print/lesson/_base-typography.scss +33 -9
- data/app/assets/stylesheets/lcms/engine/print/lesson/_group.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/print/lesson/_image.scss +3 -1
- data/app/assets/stylesheets/lcms/engine/print/lesson/_materials.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/print/lesson/_pd.scss +8 -4
- data/app/assets/stylesheets/lcms/engine/print/lesson/_section.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/print/material/_header.scss +4 -1
- data/app/assets/stylesheets/lcms/engine/themes/_material.scss +11 -11
- data/app/assets/stylesheets/lcms/engine/utils/_colorcodes.scss +15 -5
- data/app/assets/stylesheets/lcms/engine/utils/_functions.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/utils/_helpers.scss +23 -11
- data/app/assets/stylesheets/lcms/engine/utils/_placeholders.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/utils/_variables.scss +11 -11
- data/app/assets/stylesheets/lcms/engine/vendors/{mathjax.css → mathjax.scss} +0 -0
- data/app/assets/stylesheets/lcms/engine/vendors/react-tagsinput.css +48 -0
- data/app/controllers/concerns/lcms/engine/reimportable.rb +12 -2
- data/app/controllers/lcms/engine/admin/access_codes_controller.rb +8 -3
- data/app/controllers/lcms/engine/admin/admin_controller.rb +6 -40
- data/app/controllers/lcms/engine/admin/association_picker_controller.rb +4 -1
- data/app/controllers/lcms/engine/admin/batch_reimports_controller.rb +2 -2
- data/app/controllers/lcms/engine/admin/curriculums_controller.rb +21 -2
- data/app/controllers/lcms/engine/admin/documents_controller.rb +41 -14
- data/app/controllers/lcms/engine/admin/materials_controller.rb +32 -13
- data/app/controllers/lcms/engine/admin/resource_bulk_edits_controller.rb +2 -2
- data/app/controllers/lcms/engine/admin/resources_controller.rb +9 -7
- data/app/controllers/lcms/engine/admin/settings_controller.rb +1 -1
- data/app/controllers/lcms/engine/admin/standards_controller.rb +7 -2
- data/app/controllers/lcms/engine/admin/users_controller.rb +15 -7
- data/app/controllers/lcms/engine/application_controller.rb +1 -1
- data/app/controllers/lcms/engine/resources_controller.rb +5 -5
- data/app/controllers/lcms/engine/welcome_controller.rb +11 -0
- data/app/entities/lcms/engine/grades.rb +17 -6
- data/app/entities/lcms/engine/hierarchical_position.rb +1 -2
- data/app/entities/lcms/engine/media_embed.rb +2 -2
- data/app/entities/lcms/engine/pagination.rb +14 -10
- data/app/entities/lcms/engine/roman_numerals.rb +2 -2
- data/app/exceptions/lcms/engine/document_error.rb +8 -0
- data/app/exceptions/lcms/engine/material_error.rb +8 -0
- data/app/forms/lcms/engine/document_form.rb +19 -14
- data/app/forms/lcms/engine/material_form.rb +3 -2
- data/app/helpers/admin/components_helper.rb +3 -3
- data/app/helpers/lcms/engine/path_helper.rb +32 -0
- data/app/helpers/lcms/engine/resource_helper.rb +1 -1
- data/app/helpers/lcms/engine/view_helper.rb +1 -9
- data/app/interactors/lcms/engine/explore_curriculum_interactor.rb +2 -2
- data/app/javascript/components/admin/ImportStatus.jsx +90 -56
- data/app/javascript/components/admin/Initializer.jsx +33 -35
- data/app/javascript/components/admin/MultiSelectedOperation.jsx +43 -18
- data/app/javascript/components/admin/association-picker/AssociationPicker.jsx +68 -47
- data/app/javascript/components/admin/association-picker/AssociationPickerItem.jsx +18 -7
- data/app/javascript/components/admin/association-picker/AssociationPickerResults.jsx +42 -17
- data/app/javascript/components/admin/association-picker/AssociationPickerWindow.jsx +47 -27
- data/app/javascript/components/admin/curriculum/CurriculumEditor.jsx +54 -32
- data/app/javascript/components/admin/curriculum/DirectoryPicker.jsx +80 -53
- data/app/javascript/components/admin/picker/PickerButton.jsx +16 -11
- data/app/javascript/components/admin/picker/pickerModal.jsx +6 -6
- data/app/javascript/components/admin/picker/pickerWindowWrapper.jsx +61 -40
- data/app/javascript/components/admin/resource-picker/ResourcePicker.jsx +54 -39
- data/app/javascript/components/admin/resource-picker/ResourcePickerResource.jsx +14 -3
- data/app/javascript/components/admin/resource-picker/ResourcePickerWindow.jsx +50 -21
- data/app/javascript/components/paginate/PageView.jsx +20 -8
- data/app/javascript/components/paginate/PaginationBoxView.jsx +78 -66
- data/app/javascript/components/paginate/PaginationListView.jsx +59 -45
- data/app/javascript/packs/lcms_engine_admin.js +15 -0
- data/app/javascript/packs/{application.js → lcms_engine_application.js} +5 -4
- data/app/javascript/packs/server_rendering.js +1 -0
- data/app/javascript/vendor/jstree/jstree.min.js +6 -0
- data/app/javascript/vendor/jstree/themes/default/32px.png +0 -0
- data/app/javascript/vendor/jstree/themes/default/40px.png +0 -0
- data/app/javascript/vendor/jstree/themes/default/style.css +1106 -0
- data/app/javascript/vendor/jstree/themes/default/style.min.css +1 -0
- data/app/javascript/vendor/jstree/themes/default/throbber.gif +0 -0
- data/app/javascript/vendor/jstree/themes/default-dark/32px.png +0 -0
- data/app/javascript/vendor/jstree/themes/default-dark/40px.png +0 -0
- data/app/javascript/vendor/jstree/themes/default-dark/style.css +1150 -0
- data/app/javascript/vendor/jstree/themes/default-dark/style.min.css +1 -0
- data/app/javascript/vendor/jstree/themes/default-dark/throbber.gif +0 -0
- data/app/jobs/concerns/lcms/engine/nested_resque_job.rb +1 -4
- data/app/jobs/lcms/engine/document_generate_gdoc_job.rb +2 -2
- data/app/jobs/lcms/engine/document_generate_job.rb +2 -2
- data/app/jobs/lcms/engine/document_generate_pdf_job.rb +5 -5
- data/app/jobs/lcms/engine/document_parse_job.rb +1 -1
- data/app/jobs/lcms/engine/material_generate_pdf_job.rb +4 -4
- data/app/models/concerns/lcms/engine/navigable.rb +6 -10
- data/app/models/concerns/lcms/engine/searchable.rb +7 -0
- data/app/models/lcms/engine/document.rb +1 -1
- data/app/models/lcms/engine/download.rb +1 -1
- data/app/models/lcms/engine/resource.rb +1 -1
- data/app/models/lcms/engine/search/document.rb +4 -3
- data/app/models/lcms/engine/search/repository.rb +1 -1
- data/app/presenters/lcms/engine/content_presenter.rb +1 -1
- data/app/presenters/lcms/engine/curriculum_presenter.rb +21 -18
- data/app/presenters/lcms/engine/document_presenter.rb +5 -3
- data/app/presenters/lcms/engine/resource_presenter.rb +6 -3
- data/app/queries/lcms/engine/admin_documents_query.rb +2 -2
- data/app/queries/lcms/engine/admin_materials_query.rb +11 -2
- data/app/queries/lcms/engine/base_query.rb +1 -1
- data/app/serializers/lcms/engine/previews_material_serializer.rb +1 -0
- data/app/services/lcms/engine/document_build_service.rb +6 -0
- data/app/services/lcms/engine/document_generator.rb +2 -2
- data/app/services/lcms/engine/google/drive_service.rb +7 -15
- data/app/services/lcms/engine/google/script_service.rb +7 -3
- data/app/services/lcms/engine/html_sanitizer.rb +6 -6
- data/app/services/lcms/engine/lessons_gdoc_bundler.rb +1 -1
- data/app/services/lcms/engine/lti_exporter.rb +1 -1
- data/app/services/lcms/engine/material_build_service.rb +6 -2
- data/app/services/lcms/engine/material_preview_generator.rb +3 -3
- data/app/services/lcms/engine/react_materials_resolver.rb +3 -2
- data/app/services/lcms/engine/s3_service.rb +14 -2
- data/app/tasks/resource_tasks.rb +2 -2
- data/app/views/layouts/lcms/engine/admin.html.erb +3 -3
- data/app/views/layouts/lcms/engine/application.html.erb +2 -2
- data/app/views/layouts/lcms/engine/lti.html.erb +1 -1
- data/app/views/lcms/engine/admin/access_codes/_form.html.erb +1 -1
- data/app/views/lcms/engine/admin/access_codes/index.html.erb +3 -3
- data/app/views/lcms/engine/admin/batch_reimports/_search_form.html.erb +2 -2
- data/app/views/lcms/engine/admin/curriculums/edit.html.erb +5 -5
- data/app/views/lcms/engine/admin/documents/_materials_links.html.erb +2 -2
- data/app/views/lcms/engine/admin/documents/_reimport.html.erb +1 -1
- data/app/views/lcms/engine/admin/documents/_search_form.html.erb +2 -2
- data/app/views/lcms/engine/admin/documents/import.html.erb +1 -1
- data/app/views/lcms/engine/admin/documents/index.html.erb +7 -5
- data/app/views/lcms/engine/admin/documents/new.html.erb +6 -2
- data/app/views/lcms/engine/admin/materials/_reimport.html.erb +1 -1
- data/app/views/lcms/engine/admin/materials/_search_form.html.erb +2 -2
- data/app/views/lcms/engine/admin/materials/import.html.erb +1 -1
- data/app/views/lcms/engine/admin/materials/index.html.erb +26 -22
- data/app/views/lcms/engine/admin/materials/new.html.erb +5 -1
- data/app/views/lcms/engine/admin/resource_bulk_edits/new.html.erb +2 -2
- data/app/views/lcms/engine/admin/resources/_fields.html.erb +4 -0
- data/app/views/lcms/engine/admin/resources/_form.html.erb +1 -1
- data/app/views/lcms/engine/admin/resources/_search_form.html.erb +2 -2
- data/app/views/lcms/engine/admin/resources/index.html.erb +7 -5
- data/app/views/lcms/engine/admin/shared/_header.html.erb +12 -12
- data/app/views/lcms/engine/admin/standards/_form.html.erb +3 -1
- data/app/views/lcms/engine/admin/standards/_search_form.html.erb +1 -1
- data/app/views/lcms/engine/admin/users/_form.html.erb +1 -1
- data/app/views/lcms/engine/admin/users/_search_form.html.erb +1 -1
- data/app/views/lcms/engine/admin/users/index.html.erb +6 -6
- data/app/views/lcms/engine/documents/gdoc/_agenda.html.erb +1 -1
- data/app/views/lcms/engine/documents/show.html.erb +1 -1
- data/app/views/lcms/engine/materials/show.html.erb +1 -1
- data/app/views/lcms/engine/pages/not_found.html.erb +5 -0
- data/app/views/lcms/engine/resources/_download.html.erb +2 -2
- data/app/views/lcms/engine/resources/_unit_bundles.html.erb +2 -2
- data/app/views/lcms/engine/resources/generic.html.erb +0 -4
- data/app/views/lcms/engine/resources/media.html.erb +0 -4
- data/app/views/lcms/engine/resources/show.html.erb +0 -2
- data/config/initializers/airbrake.rb +62 -10
- data/config/initializers/bitly.rb +1 -1
- data/config/initializers/carrier_wave.rb +6 -4
- data/config/initializers/ckeditor.rb +6 -0
- data/config/initializers/elasticsearch.rb +1 -1
- data/config/initializers/resque.rb +2 -2
- data/config/locales/admin/en.yml +1 -2
- data/config/locales/ui/en.yml +1 -0
- data/config/routes.rb +5 -2
- data/db/migrate/.keep +0 -0
- data/db/schema.rb +280 -312
- data/db/seeds.rb +0 -1
- data/docker-compose.ror4.yml +32 -0
- data/docker-compose.yml +6 -3
- data/docs/env-variables.md +40 -40
- data/docs/google-cloud-platform-setup.md +45 -17
- data/docs/how-to-build-and-publish.md +1 -0
- data/lcms-engine.gemspec +28 -20
- data/lib/doc_template/document.rb +3 -4
- data/lib/doc_template/document_toc.rb +2 -2
- data/lib/doc_template/objects/activity_metadata.rb +1 -1
- data/lib/doc_template/objects/agenda_metadata.rb +1 -1
- data/lib/doc_template/objects/metadata_helpers.rb +1 -1
- data/lib/doc_template/objects/toc_helpers.rb +4 -4
- data/lib/doc_template/objects/toc_metadata.rb +4 -6
- data/lib/doc_template/tables/base.rb +3 -2
- data/lib/doc_template/tags/activity_metadata_type_tag.rb +1 -1
- data/lib/doc_template/tags/answer_space_tag.rb +2 -2
- data/lib/doc_template/tags/base_tag.rb +5 -5
- data/lib/doc_template/tags/block_tag.rb +1 -1
- data/lib/doc_template/tags/columns_tag.rb +1 -1
- data/lib/doc_template/tags/def_tag.rb +1 -1
- data/lib/doc_template/tags/expand_tag.rb +1 -0
- data/lib/doc_template/tags/heading_tag.rb +1 -1
- data/lib/doc_template/tags/inset_tag.rb +2 -2
- data/lib/doc_template/tags/latex_tag.rb +1 -1
- data/lib/doc_template/tags/page_break_tag.rb +1 -1
- data/lib/doc_template/tags/pd_tag.rb +4 -4
- data/lib/doc_template/tags/section_tag.rb +2 -2
- data/lib/doc_template/tags/standard_tag.rb +3 -3
- data/lib/doc_template/tags/table_preserve_alignment_tag.rb +1 -1
- data/lib/doc_template/tags/table_tag.rb +1 -1
- data/lib/doc_template/template.rb +1 -1
- data/lib/doc_template.rb +9 -9
- data/lib/document_exporter/gdoc/base.rb +6 -3
- data/lib/document_exporter/pdf/base.rb +1 -1
- data/lib/document_exporter/pdf/document.rb +2 -2
- data/lib/document_exporter/pdf/material.rb +2 -2
- data/lib/document_exporter/pdf/student_material.rb +2 -2
- data/lib/document_exporter/pdf/teacher_material.rb +2 -2
- data/lib/document_renderer/part.rb +4 -6
- data/lib/elasticsearch/persistence/repository/response/results.rb +1 -1
- data/lib/lcms/engine/engine.rb +10 -9
- data/lib/lcms/engine/version.rb +1 -1
- data/lib/lcms/engine.rb +0 -1
- data/lib/lt/lcms/metadata/base_service.rb +2 -1
- data/lib/lt/lcms/metadata/context.rb +58 -54
- data/lib/lt/lcms/metadata/service.rb +6 -3
- data/lib/resque_job.rb +3 -6
- data/lib/standard_importer.rb +4 -4
- data/lib/tasks/cloud66.rake +8 -6
- data/lib/tasks/document.rake +7 -7
- data/lib/tasks/google.rake +29 -14
- data/lib/tasks/lcms/engine_tasks.rake +1 -1
- data/package.json +31 -9
- data/postcss.config.js +12 -0
- data/spec/controllers/admin/association_picker_controller_spec.rb +6 -8
- data/spec/controllers/admin/curriculums_controller_spec.rb +23 -0
- data/spec/controllers/admin/documents_controller_spec.rb +25 -3
- data/spec/controllers/admin/materials_controller_spec.rb +17 -4
- data/spec/controllers/admin/resource_bulk_edit_controller_spec.rb +1 -1
- data/spec/controllers/admin/resources_controller_spec.rb +3 -3
- data/spec/controllers/admin/settings_controller_spec.rb +1 -1
- data/spec/controllers/admin/standards_controller_spec.rb +1 -1
- data/spec/controllers/admin/welcome_controller_spec.rb +12 -10
- data/spec/controllers/resources_controller_spec.rb +3 -3
- data/spec/controllers/welcome_controller_spec.rb +38 -0
- data/spec/dummy/.env.docker +5 -0
- data/spec/dummy/.traceroute.yaml +0 -2
- data/spec/dummy/bin/webpack +18 -0
- data/spec/dummy/bin/webpack-dev-server +18 -0
- data/spec/dummy/config/application.rb +1 -1
- data/spec/dummy/config/environments/production.rb +1 -1
- data/spec/dummy/config/environments/test.rb +1 -1
- data/spec/dummy/config/initializers/assets.rb +6 -0
- data/spec/dummy/config/lcms-admin.yml +3 -7
- data/spec/dummy/config/puma.rb +3 -3
- data/spec/dummy/config/routes.rb +6 -0
- data/spec/dummy/db/schema.rb +5 -5
- data/spec/entities/grades_spec.rb +12 -0
- data/spec/factories/documents.rb +1 -0
- data/spec/factories/downloads.rb +1 -1
- data/spec/factories/resources.rb +2 -2
- data/spec/features/admin/lessons/add_lesson_spec.rb +3 -3
- data/spec/features/admin/materials/add_material_spec.rb +5 -3
- data/spec/features/admin/users_spec.rb +2 -2
- data/spec/forms/document_form_spec.rb +11 -1
- data/spec/{controllers/admin/admin_controller_spec.rb → helpers/path_helper_spec.rb} +6 -6
- data/spec/lib/doc_template/objects/activity_metadata_spec.rb +1 -1
- data/spec/lib/doc_template/objects/agenda_metadata_spec.rb +2 -0
- data/spec/lib/doc_template/objects/toc_metadata_spec.rb +1 -1
- data/spec/lib/doc_template/tables/shared_examples/remove_table.rb +1 -1
- data/spec/lib/doc_template/tags/page_break_tag_spec.rb +1 -1
- data/spec/lib/doc_template/tags/pd_tag_spec.rb +1 -1
- data/spec/models/document_spec.rb +1 -1
- data/spec/models/standard_spec.rb +2 -0
- data/spec/queries/lcms/engine/admin_materials_query_spec.rb +34 -0
- data/spec/rails_helper.rb +8 -2
- data/spec/services/document_build_service_spec.rb +4 -11
- data/spec/services/s3_service_spec.rb +31 -0
- data/spec/support/concerns/navigable.rb +2 -0
- data/spec/support/routes.rb +4 -0
- data/spec/support/shared_examples/content_tag.rb +4 -4
- data/templates/routes.rb +0 -1
- data/yarn.lock +3447 -2993
- metadata +208 -303
- data/app/assets/stylesheets/lcms/engine/application.scss +0 -36
- data/app/assets/stylesheets/lcms/engine/vendors/jquery.tagsinput.css +0 -1
- data/app/exceptions/components_api_error.rb +0 -4
- data/app/exceptions/document_error.rb +0 -4
- data/app/exceptions/material_error.rb +0 -4
- data/app/javascript/packs/admin.js +0 -14
- data/app/models/lcms/engine/component.rb +0 -88
- data/app/presenters/lcms/engine/social_media_presenter.rb +0 -83
- data/app/views/lcms/engine/shared/_social_sharing.html.erb +0 -22
- data/db/migrate/20200217160930_change_document_parts_to_polymorphic.rb +0 -36
- data/db/migrate/20200218144849_drop_material_parts_table.rb +0 -7
- data/db/migrate/20200422130652_add_reimported_at_to_documents.rb +0 -7
- data/db/migrate/20200429130353_drop_pages.rb +0 -13
- data/db/seeds/pages.seeds.rb +0 -26
- data/lib/document_exporter.rb +0 -6
- data/lib/lcms/engine/migration.rb +0 -16
- data/spec/models/component_spec.rb +0 -60
- data/vendor/assets/javascripts/jquery.tagsinput.js +0 -1
data/lib/tasks/cloud66.rake
CHANGED
@@ -20,29 +20,31 @@ namespace :cloud66 do # rubocop:disable Metrics/BlockLength
|
|
20
20
|
end
|
21
21
|
|
22
22
|
namespace :swap do
|
23
|
-
|
23
|
+
def swap_file
|
24
|
+
Rails.root.join 'export-swap.sql'
|
25
|
+
end
|
24
26
|
|
25
27
|
desc 'Exports tables to be synced'
|
26
28
|
task export: :environment do
|
27
29
|
cmd = <<-BASH
|
28
|
-
pg_dump -U #{ENV
|
30
|
+
pg_dump -U #{ENV.fetch('POSTGRESQL_USERNAME', nil)} #{ENV.fetch('POSTGRESQL_DATABASE', nil)} \
|
29
31
|
--no-owner \
|
30
32
|
--table=users \
|
31
33
|
--table=access_codes \
|
32
|
-
--file=#{
|
34
|
+
--file=#{swap_file}
|
33
35
|
BASH
|
34
36
|
system cmd
|
35
37
|
end
|
36
38
|
|
37
39
|
desc 'Deletes existing tables and creates new one'
|
38
40
|
task import: :environment do
|
39
|
-
raise 'No data file. Please execute `cloud66:swap:export` prior loading the data.' unless File.exist?(
|
41
|
+
raise 'No data file. Please execute `cloud66:swap:export` prior loading the data.' unless File.exist?(swap_file)
|
40
42
|
|
41
|
-
cmd = "psql -U #{ENV
|
43
|
+
cmd = "psql -U #{ENV.fetch('POSTGRESQL_USERNAME', nil)} #{ENV.fetch('POSTGRESQL_DATABASE', nil)}"
|
42
44
|
# Drops old tables
|
43
45
|
system "#{cmd} -c 'drop table access_codes, users;'"
|
44
46
|
# Create new and load the data
|
45
|
-
system "#{cmd} < #{
|
47
|
+
system "#{cmd} < #{swap_file}"
|
46
48
|
end
|
47
49
|
end
|
48
50
|
end
|
data/lib/tasks/document.rake
CHANGED
@@ -12,21 +12,21 @@ namespace :document do
|
|
12
12
|
hierarchy = {}
|
13
13
|
|
14
14
|
documents.each do |document|
|
15
|
-
grade_key =
|
15
|
+
grade_key = "grade-#{document.metadata['grade']}"
|
16
16
|
hierarchy[grade_key] ||= {}
|
17
17
|
grade = hierarchy[grade_key]
|
18
18
|
|
19
19
|
grade['subject'] ||= 'math'
|
20
20
|
grade['modules'] ||= {}
|
21
21
|
|
22
|
-
module_key =
|
22
|
+
module_key = "module-#{document.metadata['unit']}"
|
23
23
|
grade['modules'][module_key] ||= {}
|
24
24
|
module_ = grade['modules'][module_key]
|
25
25
|
|
26
26
|
module_['name'] ||= '[name]'
|
27
27
|
module_['topics'] ||= {}
|
28
28
|
|
29
|
-
topic_key =
|
29
|
+
topic_key = "topic-#{document.metadata['topic']}"
|
30
30
|
module_['topics'][topic_key] ||= {}
|
31
31
|
topic = module_['topics'][topic_key]
|
32
32
|
|
@@ -39,10 +39,10 @@ namespace :document do
|
|
39
39
|
topic['lessons'].push(
|
40
40
|
'file_name' => file_name,
|
41
41
|
'identifier' => 'ENY-' \
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
"G#{grade_key.split('-').last}-" \
|
43
|
+
"M#{module_key.split('-').last}-" \
|
44
|
+
"T#{topic_key.split('-').last}-" \
|
45
|
+
"L#{lesson_number}",
|
46
46
|
'name' => document.metadata['title_text'],
|
47
47
|
'standards' => document.metadata['standard'],
|
48
48
|
'description' => Nokogiri::HTML(document.metadata['description']).text,
|
data/lib/tasks/google.rake
CHANGED
@@ -4,22 +4,37 @@ require 'googleauth'
|
|
4
4
|
require 'googleauth/stores/file_token_store'
|
5
5
|
require 'lt/google/api/auth/cli'
|
6
6
|
|
7
|
-
OOB_URI = 'urn:ietf:wg:oauth:2.0:oob'
|
8
|
-
|
9
7
|
namespace :google do
|
10
|
-
desc '
|
11
|
-
task setup_auth: :environment do
|
8
|
+
desc 'Set up google credentials. Specify `domain` argument which will be used as a base for redirect URI'
|
9
|
+
task :setup_auth, [:domain] => [:environment] do |_task, args|
|
12
10
|
service = ::Lt::Google::Api::Auth::Cli.new
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
puts
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
else
|
22
|
-
puts 'No need in action, everything is already set up'
|
11
|
+
|
12
|
+
# Check if there is existing auth token
|
13
|
+
if service.credentials.present?
|
14
|
+
puts <<~TEXT
|
15
|
+
Auth token already exists. Do you want to request new one?
|
16
|
+
Type Y for Yes, N for No
|
17
|
+
TEXT
|
18
|
+
next unless $stdin.gets.to_s.strip.downcase == 'y'
|
23
19
|
end
|
20
|
+
|
21
|
+
authorizer = service.authorizer
|
22
|
+
url = authorizer.get_authorization_url(base_url: args[:domain])
|
23
|
+
|
24
|
+
puts <<~TEXT
|
25
|
+
Open this URL in your browser:
|
26
|
+
>>>>>
|
27
|
+
#{url}
|
28
|
+
>>>>>
|
29
|
+
Copy auth code and paste it below.
|
30
|
+
TEXT
|
31
|
+
|
32
|
+
code = $stdin.gets.to_s.strip
|
33
|
+
|
34
|
+
authorizer.get_and_store_credentials_from_code(
|
35
|
+
user_id: ::Lt::Google::Api::Auth::Cli::USER_ID,
|
36
|
+
code: code,
|
37
|
+
base_url: args[:domain]
|
38
|
+
)
|
24
39
|
end
|
25
40
|
end
|
@@ -70,7 +70,7 @@ def enhance_assets_precompile
|
|
70
70
|
end
|
71
71
|
|
72
72
|
# Compile packs after we've compiled all other assets during precompilation
|
73
|
-
skip_webpacker_precompile = %w(no false n f).include?(ENV
|
73
|
+
skip_webpacker_precompile = %w(no false n f).include?(ENV.fetch('WEBPACKER_PRECOMPILE', nil))
|
74
74
|
|
75
75
|
unless skip_webpacker_precompile
|
76
76
|
if Rake::Task.task_defined?('assets:precompile')
|
data/package.json
CHANGED
@@ -5,30 +5,52 @@
|
|
5
5
|
"dependencies": {
|
6
6
|
"@babel/core": "^7.6.0",
|
7
7
|
"@babel/preset-react": "^7.0.0",
|
8
|
-
"@rails/webpacker": "~4",
|
8
|
+
"@rails/webpacker": "~5.4.3",
|
9
9
|
"babel-plugin-transform-react-remove-prop-types": "^0.4.24",
|
10
10
|
"classnames": "^2.2.6",
|
11
|
+
"foundation-sites": "^6.7.4",
|
12
|
+
"jquery": "^3.6.0",
|
13
|
+
"lodash": "^4.17.21",
|
11
14
|
"prop-types": "^15.7.2",
|
12
15
|
"react": "^16.9.0",
|
13
16
|
"react-dom": "^16.9.0",
|
14
|
-
"
|
17
|
+
"react-tagsinput": "^3.19.0",
|
18
|
+
"react_ujs": "^2.6.0",
|
19
|
+
"webpack": "^4.46.0",
|
20
|
+
"webpack-cli": "^3.3.12"
|
15
21
|
},
|
16
22
|
"devDependencies": {
|
17
|
-
"eslint": "^
|
18
|
-
"eslint
|
19
|
-
"eslint-
|
20
|
-
"
|
21
|
-
"
|
23
|
+
"babel-eslint": "^10.1.0",
|
24
|
+
"eslint": "^7.23.0",
|
25
|
+
"eslint-config-prettier": "^8.1.0",
|
26
|
+
"eslint-config-react-app": "^6.0.0",
|
27
|
+
"eslint-plugin-flowtype": "^5.6.0",
|
28
|
+
"eslint-plugin-import": "^2.22.1",
|
29
|
+
"eslint-plugin-jsx-a11y": "^6.4.1",
|
30
|
+
"eslint-plugin-prettier": "^3.3.1",
|
31
|
+
"eslint-plugin-react": "^7.23.1",
|
32
|
+
"eslint-plugin-react-hooks": "^4.2.0",
|
33
|
+
"prettier": "^2.2.1",
|
34
|
+
"stylelint": "^13.12.0",
|
35
|
+
"stylelint-config-prettier": "^8.0.2",
|
36
|
+
"stylelint-config-sass-guidelines": "^8.0.0",
|
37
|
+
"stylelint-prettier": "^1.2.0",
|
38
|
+
"stylelint-selector-bem-pattern": "^2.1.0",
|
39
|
+
"webpack-dev-server": "^3"
|
22
40
|
},
|
23
41
|
"scripts": {
|
24
|
-
"lint
|
42
|
+
"lint": "eslint --ext .js --ext .jsx app/javascript && stylelint 'app/assets/stylesheets/**/*.{css,scss}' --quiet",
|
43
|
+
"lint:js": "eslint --ext .js --ext .jsx app/javascript",
|
44
|
+
"lint:js:fix": "eslint --ext .js --ext .jsx app/javascript --quiet --fix",
|
45
|
+
"lint:scss": "stylelint 'app/assets/stylesheets/**/*.{css,scss}' --quiet",
|
46
|
+
"lint:scss:fix": "stylelint 'app/assets/stylesheets/**/*.{css,scss}' --quiet --fix"
|
25
47
|
},
|
26
48
|
"repository": {
|
27
49
|
"type": "git",
|
28
50
|
"url": "git+https://github.com/learningtapestry/lcms-engine.git"
|
29
51
|
},
|
30
52
|
"engines": {
|
31
|
-
"node": ">=
|
53
|
+
"node": ">=14.17.0",
|
32
54
|
"yarn": ">=1.17.1"
|
33
55
|
},
|
34
56
|
"author": "Alexander Kuznetsov <paranoic.san@gmail.com>",
|
data/postcss.config.js
ADDED
@@ -3,19 +3,17 @@
|
|
3
3
|
require 'rails_helper'
|
4
4
|
|
5
5
|
describe Lcms::Engine::Admin::AssociationPickerController do
|
6
|
-
ASSOCIATIONS = %w(content_sources tags grades topics reading_assignment_authors
|
7
|
-
reading_assignment_texts standards).freeze
|
8
|
-
|
9
6
|
let(:user) { create :admin }
|
10
7
|
|
11
8
|
before { sign_in user }
|
12
9
|
|
13
10
|
describe '#index' do
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
11
|
+
%w(content_sources tags grades topics reading_assignment_authors reading_assignment_texts standards)
|
12
|
+
.each do |assoc|
|
13
|
+
it "list #{assoc} association items" do
|
14
|
+
get :index, params: { association: assoc, format: :json }
|
15
|
+
expect(response).to be_successful
|
16
|
+
end
|
18
17
|
end
|
19
|
-
end
|
20
18
|
end
|
21
19
|
end
|
@@ -12,4 +12,27 @@ describe Lcms::Engine::Admin::CurriculumsController do
|
|
12
12
|
|
13
13
|
it { is_expected.to be_successful }
|
14
14
|
end
|
15
|
+
|
16
|
+
describe '#children' do
|
17
|
+
let(:id) { resource.id }
|
18
|
+
let(:resource) { create(:resource, :module) }
|
19
|
+
let!(:children) { create_list(:resource, 3, parent: resource) }
|
20
|
+
|
21
|
+
subject { get :children, params: { id: id } }
|
22
|
+
|
23
|
+
it 'returns children of the requested resource' do
|
24
|
+
JSON.parse(subject.body).each do |data|
|
25
|
+
child = ::Lcms::Engine::Resource.find(data['id'])
|
26
|
+
expect(child.parent_id).to eq id
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context 'when # is requested' do
|
31
|
+
let(:id) { '#' }
|
32
|
+
|
33
|
+
it 'returns root resources' do
|
34
|
+
expect(JSON.parse(subject.body).first['id']).to eq resource.id
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
15
38
|
end
|
@@ -9,7 +9,9 @@ describe Lcms::Engine::Admin::DocumentsController do
|
|
9
9
|
|
10
10
|
describe '#create' do
|
11
11
|
let(:document) { create :document }
|
12
|
-
let(:form)
|
12
|
+
let(:form) do
|
13
|
+
instance_double('Lcms::Engine::DocumentForm', document: document, save: valid, service_errors: [])
|
14
|
+
end
|
13
15
|
let(:link) { 'link' }
|
14
16
|
let(:params) { { link: link, link_fs: 'link_fs', reimport: '1' } }
|
15
17
|
let(:valid) { true }
|
@@ -25,7 +27,7 @@ describe Lcms::Engine::Admin::DocumentsController do
|
|
25
27
|
|
26
28
|
it 'redirects to document' do
|
27
29
|
subject
|
28
|
-
expect(response).to redirect_to
|
30
|
+
expect(response).to redirect_to document_path(document)
|
29
31
|
end
|
30
32
|
|
31
33
|
# TODO: Rails upgrade - move to system spec
|
@@ -51,7 +53,7 @@ describe Lcms::Engine::Admin::DocumentsController do
|
|
51
53
|
|
52
54
|
it 'calls batch reimport' do
|
53
55
|
expect(Lcms::Engine::DocumentGenerator).to \
|
54
|
-
receive_message_chain(:document_parse_job, :perform_later).and_return(
|
56
|
+
receive_message_chain(:document_parse_job, :perform_later).and_return(double('response', job_id: 0))
|
55
57
|
subject
|
56
58
|
end
|
57
59
|
|
@@ -69,6 +71,18 @@ describe Lcms::Engine::Admin::DocumentsController do
|
|
69
71
|
end
|
70
72
|
end
|
71
73
|
end
|
74
|
+
|
75
|
+
context 'when asynchronous import was requested' do
|
76
|
+
let(:link) { 'https://google.com/somefile' }
|
77
|
+
let(:params) { { async: '1', link: link } }
|
78
|
+
|
79
|
+
before { allow(controller).to receive(:bulk_import) }
|
80
|
+
|
81
|
+
it 'calls bulk import for that particular document' do
|
82
|
+
expect(controller).to receive(:bulk_import).with(Array.wrap(link))
|
83
|
+
subject
|
84
|
+
end
|
85
|
+
end
|
72
86
|
end
|
73
87
|
|
74
88
|
describe '#destroy' do
|
@@ -79,6 +93,14 @@ describe Lcms::Engine::Admin::DocumentsController do
|
|
79
93
|
it 'deletes the document' do
|
80
94
|
expect { subject }.to change(Lcms::Engine::Document, :count).by(-1)
|
81
95
|
end
|
96
|
+
|
97
|
+
context 'when there was custom filter' do
|
98
|
+
let(:query) { { course: 'value' } }
|
99
|
+
|
100
|
+
subject { delete :destroy, params: { id: document.id, query: query } }
|
101
|
+
|
102
|
+
it { is_expected.to redirect_to "/lcms-engine/admin/documents?#{{ query: query }.to_param}" }
|
103
|
+
end
|
82
104
|
end
|
83
105
|
|
84
106
|
describe '#new' do
|
@@ -3,6 +3,8 @@
|
|
3
3
|
require 'rails_helper'
|
4
4
|
|
5
5
|
describe Lcms::Engine::Admin::MaterialsController do
|
6
|
+
include Lcms::Engine::PathHelper
|
7
|
+
|
6
8
|
let(:user) { create :admin }
|
7
9
|
|
8
10
|
before { sign_in user }
|
@@ -25,7 +27,7 @@ describe Lcms::Engine::Admin::MaterialsController do
|
|
25
27
|
|
26
28
|
it 'redirects to material' do
|
27
29
|
subject
|
28
|
-
expect(response).to redirect_to
|
30
|
+
expect(response).to redirect_to material_path(material)
|
29
31
|
end
|
30
32
|
|
31
33
|
context 'when there is an error' do
|
@@ -51,7 +53,7 @@ describe Lcms::Engine::Admin::MaterialsController do
|
|
51
53
|
|
52
54
|
it 'calls batch reimport' do
|
53
55
|
expect(Lcms::Engine::DocumentGenerator).to \
|
54
|
-
receive_message_chain(:material_parse_job, :perform_later).and_return(
|
56
|
+
receive_message_chain(:material_parse_job, :perform_later).and_return(double('response', job_id: 0))
|
55
57
|
subject
|
56
58
|
end
|
57
59
|
|
@@ -69,6 +71,17 @@ describe Lcms::Engine::Admin::MaterialsController do
|
|
69
71
|
end
|
70
72
|
end
|
71
73
|
end
|
74
|
+
|
75
|
+
context 'when asynchronous import was requested' do
|
76
|
+
let(:params) { { async: '1', link: link } }
|
77
|
+
|
78
|
+
before { allow(controller).to receive(:bulk_import) }
|
79
|
+
|
80
|
+
it 'calls bulk import for that particular document' do
|
81
|
+
expect(controller).to receive(:bulk_import).with(Array.wrap(link))
|
82
|
+
subject
|
83
|
+
end
|
84
|
+
end
|
72
85
|
end
|
73
86
|
|
74
87
|
describe '#destroy' do
|
@@ -79,11 +92,11 @@ describe Lcms::Engine::Admin::MaterialsController do
|
|
79
92
|
it { expect { subject }.to change { Lcms::Engine::Material.count }.by(-1) }
|
80
93
|
|
81
94
|
context 'when there was custom filter' do
|
82
|
-
let(:query) { '
|
95
|
+
let(:query) { { course: 'value' } }
|
83
96
|
|
84
97
|
subject { delete :destroy, params: { id: material.id, query: query } }
|
85
98
|
|
86
|
-
it { is_expected.to redirect_to
|
99
|
+
it { is_expected.to redirect_to "/lcms-engine/admin/materials?#{{ query: query }.to_param}" }
|
87
100
|
end
|
88
101
|
end
|
89
102
|
|
@@ -22,7 +22,7 @@ describe Lcms::Engine::Admin::ResourceBulkEditsController do
|
|
22
22
|
grades = resources.flat_map { |r| r.grades.list }
|
23
23
|
expect(grades).to_not include('grade 11')
|
24
24
|
post :create, params: { ids: ids, resource: { grades: ['grade 11'] } }
|
25
|
-
expect(response).to redirect_to(
|
25
|
+
expect(response).to redirect_to(lcms_engine(admin_resources_path))
|
26
26
|
resources.each do |r|
|
27
27
|
expect(r.reload.grades.list).to include('grade 11')
|
28
28
|
end
|
@@ -11,13 +11,13 @@ describe Lcms::Engine::Admin::ResourcesController do
|
|
11
11
|
describe '#edit' do
|
12
12
|
subject { get :edit, params: { id: resource.to_param } }
|
13
13
|
|
14
|
-
it { is_expected.to
|
14
|
+
it { is_expected.to be_successful }
|
15
15
|
end
|
16
16
|
|
17
17
|
describe '#index' do
|
18
18
|
subject { get :index }
|
19
19
|
|
20
|
-
it { is_expected.to
|
20
|
+
it { is_expected.to be_successful }
|
21
21
|
end
|
22
22
|
|
23
23
|
describe '#update' do
|
@@ -27,7 +27,7 @@ describe Lcms::Engine::Admin::ResourcesController do
|
|
27
27
|
subject { post :update, params: { id: resource.to_param, resource: params } }
|
28
28
|
|
29
29
|
context 'with valid params' do
|
30
|
-
it { is_expected.to redirect_to admin_resources_path }
|
30
|
+
it { is_expected.to redirect_to lcms_engine(admin_resources_path) }
|
31
31
|
|
32
32
|
it 'passes notice' do
|
33
33
|
subject
|
@@ -11,6 +11,6 @@ describe Lcms::Engine::Admin::SettingsController do
|
|
11
11
|
expect(Lcms::Engine::Settings[:editing_enabled]).to be true
|
12
12
|
patch :toggle_editing_enabled
|
13
13
|
expect(Lcms::Engine::Settings[:editing_enabled]).to be false
|
14
|
-
expect(response).to redirect_to(
|
14
|
+
expect(response).to redirect_to(lcms_engine(admin_resources_path))
|
15
15
|
end
|
16
16
|
end
|
@@ -60,7 +60,7 @@ describe Lcms::Engine::Admin::StandardsController do
|
|
60
60
|
subject { post :update, params: { id: standard.to_param, standard: params } }
|
61
61
|
|
62
62
|
context 'with valid params' do
|
63
|
-
it { is_expected.to redirect_to admin_standards_path }
|
63
|
+
it { is_expected.to redirect_to lcms_engine(admin_standards_path) }
|
64
64
|
|
65
65
|
it 'passes notice' do
|
66
66
|
subject
|
@@ -5,17 +5,19 @@ require 'rails_helper'
|
|
5
5
|
describe Lcms::Engine::Admin::WelcomeController do
|
6
6
|
let(:user) { create :admin }
|
7
7
|
|
8
|
-
describe '
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
describe 'allow admin' do
|
14
|
-
before do
|
15
|
-
sign_in user
|
16
|
-
get :index
|
8
|
+
describe 'GET index' do
|
9
|
+
context 'requires admin user' do
|
10
|
+
before { get :index }
|
11
|
+
it { expect(response).to redirect_to lcms_engine(new_user_session_path) }
|
17
12
|
end
|
18
13
|
|
19
|
-
|
14
|
+
context 'allow admin' do
|
15
|
+
before do
|
16
|
+
sign_in user
|
17
|
+
get :index
|
18
|
+
end
|
19
|
+
|
20
|
+
it { expect(response).to be_successful }
|
21
|
+
end
|
20
22
|
end
|
21
23
|
end
|
@@ -49,19 +49,19 @@ xdescribe Lcms::Engine::ResourcesController do
|
|
49
49
|
context 'with id' do
|
50
50
|
before { get :show, id: resource.id }
|
51
51
|
|
52
|
-
it { expect(response).to redirect_to("
|
52
|
+
it { expect(response).to redirect_to("/lcms-engine#{resource.slug}") }
|
53
53
|
end
|
54
54
|
|
55
55
|
context 'grade' do
|
56
56
|
let(:resource) { create(:resource, :grade) }
|
57
57
|
before { get :show, slug: resource.slug }
|
58
|
-
it { expect(response).to redirect_to explore_curriculum_index_path(p: resource.slug, e: 1) }
|
58
|
+
it { expect(response).to redirect_to lcms_engine(explore_curriculum_index_path(p: resource.slug, e: 1)) }
|
59
59
|
end
|
60
60
|
|
61
61
|
context 'module' do
|
62
62
|
let(:resource) { create(:resource, :module) }
|
63
63
|
before { get :show, slug: resource.slug }
|
64
|
-
it { expect(response).to redirect_to explore_curriculum_index_path(p: resource.slug, e: 1) }
|
64
|
+
it { expect(response).to redirect_to lcms_engine(explore_curriculum_index_path(p: resource.slug, e: 1)) }
|
65
65
|
end
|
66
66
|
end
|
67
67
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails_helper'
|
4
|
+
|
5
|
+
describe Lcms::Engine::WelcomeController do
|
6
|
+
#
|
7
|
+
# In the Host application should be a proxy which will redirect
|
8
|
+
# request inside mounted engine
|
9
|
+
#
|
10
|
+
describe 'GET oauth2callback' do
|
11
|
+
let(:code) { Faker::Lorem.words.join }
|
12
|
+
|
13
|
+
before { request.env['HTTP_REFERER'] = Lcms::Engine::WelcomeController::OAUTH_REFERER }
|
14
|
+
|
15
|
+
subject { get :oauth2callback, params: { code: code } }
|
16
|
+
|
17
|
+
it 'skips authorization' do
|
18
|
+
subject
|
19
|
+
expect(response).to be_successful
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'renders passed in params as JSON' do
|
23
|
+
subject
|
24
|
+
result = JSON.parse(response.body)
|
25
|
+
expect(result['text']).to eq Lcms::Engine::WelcomeController::OAUTH_MESSAGE
|
26
|
+
expect(result['code']).to eq code
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'when referer is not a Google service' do
|
30
|
+
before { request.env['HTTP_REFERER'] = 'test.com' }
|
31
|
+
|
32
|
+
it 'returns 404' do
|
33
|
+
subject
|
34
|
+
expect(response).to have_http_status(404)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/spec/dummy/.traceroute.yaml
CHANGED
@@ -6,11 +6,9 @@ ignore_unreachable_actions:
|
|
6
6
|
- lcms_engine
|
7
7
|
- rails_info
|
8
8
|
- rails_mailers
|
9
|
-
- whoami$
|
10
9
|
ignore_unused_routes:
|
11
10
|
- ^lcms/engine/admin/access_codes#edit # accessed via `edit_admin_access_code_path`
|
12
11
|
- ^lcms/engine/admin\/reading_assignment_texts # accessed via `association_picker_field` helper
|
13
12
|
- ^devise
|
14
13
|
- ^lcms/engine/pages#forthcoming # Used by `LinkTag`
|
15
14
|
- ^pdfjs_viewer
|
16
|
-
- whoami$
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
|
4
|
+
ENV["NODE_ENV"] ||= "development"
|
5
|
+
|
6
|
+
require "pathname"
|
7
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
8
|
+
Pathname.new(__FILE__).realpath)
|
9
|
+
|
10
|
+
require "bundler/setup"
|
11
|
+
|
12
|
+
require "webpacker"
|
13
|
+
require "webpacker/webpack_runner"
|
14
|
+
|
15
|
+
APP_ROOT = File.expand_path("..", __dir__)
|
16
|
+
Dir.chdir(APP_ROOT) do
|
17
|
+
Webpacker::WebpackRunner.run(ARGV)
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
|
4
|
+
ENV["NODE_ENV"] ||= "development"
|
5
|
+
|
6
|
+
require "pathname"
|
7
|
+
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
|
8
|
+
Pathname.new(__FILE__).realpath)
|
9
|
+
|
10
|
+
require "bundler/setup"
|
11
|
+
|
12
|
+
require "webpacker"
|
13
|
+
require "webpacker/dev_server_runner"
|
14
|
+
|
15
|
+
APP_ROOT = File.expand_path("..", __dir__)
|
16
|
+
Dir.chdir(APP_ROOT) do
|
17
|
+
Webpacker::DevServerRunner.run(ARGV)
|
18
|
+
end
|
@@ -17,7 +17,7 @@ require 'lcms/engine'
|
|
17
17
|
module Dummy
|
18
18
|
class Application < Rails::Application
|
19
19
|
# Initialize configuration defaults for originally generated Rails version.
|
20
|
-
config.load_defaults
|
20
|
+
config.load_defaults 6.1
|
21
21
|
|
22
22
|
# Settings in config/environments/* take precedence over those specified here.
|
23
23
|
# Application configuration can go into files in config/initializers
|
@@ -87,7 +87,7 @@ Rails.application.configure do
|
|
87
87
|
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')
|
88
88
|
|
89
89
|
if ENV['RAILS_LOG_TO_STDOUT'].present?
|
90
|
-
logger = ActiveSupport::Logger.new(
|
90
|
+
logger = ActiveSupport::Logger.new($stdout)
|
91
91
|
logger.formatter = config.log_formatter
|
92
92
|
config.logger = ActiveSupport::TaggedLogging.new(logger)
|
93
93
|
end
|
@@ -7,7 +7,7 @@ Rails.application.configure do
|
|
7
7
|
# test suite. You never need to work with it otherwise. Remember that
|
8
8
|
# your test database is "scratch space" for the test suite and is wiped
|
9
9
|
# and recreated between test runs. Don't rely on the data there!
|
10
|
-
config.cache_classes =
|
10
|
+
config.cache_classes = false
|
11
11
|
|
12
12
|
# Do not eager load code on boot. This avoids loading your whole application
|
13
13
|
# just for the purpose of running a single test. If you are using a tool that
|
@@ -14,3 +14,9 @@ Rails.application.config.assets.version = '1.0'
|
|
14
14
|
# application.js, application.css, and all non-JS/CSS in the app/assets
|
15
15
|
# folder are already added.
|
16
16
|
# Rails.application.config.assets.precompile += %w( admin.js admin.css )
|
17
|
+
|
18
|
+
# To prevent Sass errors
|
19
|
+
# See https://github.com/rails/sprockets/issues/581
|
20
|
+
Rails.application.config.assets.configure do |env|
|
21
|
+
env.export_concurrent = false
|
22
|
+
end
|