lcms-engine 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/CHANGELOG.md +11 -15
- data/Dockerfile +0 -1
- data/README.md +13 -4
- data/app/assets/javascripts/lcms/engine/admin/application.js +2 -6
- data/app/assets/javascripts/lcms/engine/application.js +2 -2
- data/app/assets/javascripts/lcms/engine/initializers/{google_analytics.js → analytics.js} +0 -0
- data/app/assets/javascripts/lcms/engine/initializers/lessons.js +1 -1
- data/app/assets/stylesheets/lcms/engine/admin.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/application.scss +4 -3
- data/app/assets/stylesheets/lcms/engine/components/_curriculum-cards.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/_curriculum-map.scss +4 -4
- data/app/assets/stylesheets/lcms/engine/components/_media-resources.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/_panel-dsc.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/components/_resource.scss +6 -6
- data/app/assets/stylesheets/lcms/engine/pages/_home.scss +4 -4
- data/app/assets/stylesheets/lcms/engine/pdf.scss +1 -1
- data/app/assets/stylesheets/lcms/engine/themes/_settings.scss +419 -116
- data/app/assets/stylesheets/lcms/engine/utils/_mixins.scss +2 -2
- data/app/assets/stylesheets/lcms/engine/vendors/foundation_and_overrides-pdf.scss +0 -1
- data/app/assets/stylesheets/lcms/engine/vendors/foundation_and_overrides.scss +13 -2
- data/app/controllers/lcms/engine/admin/admin_controller.rb +0 -2
- data/app/controllers/lcms/engine/admin/association_picker_controller.rb +10 -9
- data/app/controllers/lcms/engine/admin/documents_controller.rb +17 -14
- data/app/controllers/lcms/engine/admin/materials_controller.rb +19 -23
- data/app/controllers/lcms/engine/admin/resource_picker_controller.rb +2 -2
- data/app/controllers/lcms/engine/admin/resources_controller.rb +45 -79
- data/app/controllers/lcms/engine/admin/sketch_compilers_controller.rb +2 -2
- data/app/controllers/lcms/engine/application_controller.rb +0 -15
- data/app/entities/lcms/engine/pagination.rb +14 -5
- data/app/forms/lcms/engine/material_form.rb +0 -1
- data/app/helpers/lcms/engine/application_helper.rb +2 -6
- data/app/helpers/lcms/engine/view_helper.rb +1 -3
- data/app/interactors/lcms/engine/explore_curriculum_interactor.rb +1 -1
- data/app/javascript/components/admin/ImportStatus.jsx +1 -1
- data/app/javascript/components/admin/association-picker/AssociationPickerResults.jsx +1 -1
- data/app/javascript/components/admin/picker/pickerWindowWrapper.jsx +0 -1
- data/app/models/lcms/engine/access_code.rb +1 -1
- data/app/models/lcms/engine/application_record.rb +9 -0
- data/app/models/lcms/engine/author.rb +1 -1
- data/app/models/lcms/engine/copyright_attribution.rb +1 -1
- data/app/models/lcms/engine/curriculum.rb +1 -1
- data/app/models/lcms/engine/document.rb +3 -3
- data/app/models/lcms/engine/document_bundle.rb +2 -2
- data/app/models/lcms/engine/document_part.rb +1 -1
- data/app/models/lcms/engine/download.rb +3 -3
- data/app/models/lcms/engine/download_category.rb +1 -1
- data/app/models/lcms/engine/leadership_post.rb +1 -1
- data/app/models/lcms/engine/material.rb +2 -2
- data/app/models/lcms/engine/material_part.rb +1 -1
- data/app/models/lcms/engine/page.rb +1 -1
- data/app/models/lcms/engine/reading_assignment_author.rb +1 -1
- data/app/models/lcms/engine/reading_assignment_text.rb +1 -1
- data/app/models/lcms/engine/resource.rb +4 -12
- data/app/models/lcms/engine/resource_additional_resource.rb +1 -1
- data/app/models/lcms/engine/resource_download.rb +1 -1
- data/app/models/lcms/engine/resource_reading_assignment.rb +1 -1
- data/app/models/lcms/engine/resource_related_resource.rb +1 -1
- data/app/models/lcms/engine/resource_standard.rb +1 -1
- data/app/models/lcms/engine/search/elastic_search_document.rb +1 -1
- data/app/models/lcms/engine/settings.rb +1 -1
- data/app/models/lcms/engine/social_thumbnail.rb +1 -1
- data/app/models/lcms/engine/staff_member.rb +1 -1
- data/app/models/lcms/engine/standard.rb +1 -1
- data/app/models/lcms/engine/standard_link.rb +1 -1
- data/app/models/lcms/engine/user.rb +3 -3
- data/app/presenters/lcms/engine/content_presenter.rb +1 -1
- data/app/queries/lcms/engine/admin_documents_query.rb +1 -1
- data/app/queries/lcms/engine/admin_materials_query.rb +1 -1
- data/app/serializers/lcms/engine/association_item_serializer.rb +0 -1
- data/app/serializers/lcms/engine/curriculum_resource_serializer.rb +0 -2
- data/app/serializers/lcms/engine/document_material_serializer.rb +0 -1
- data/app/serializers/lcms/engine/material_serializer.rb +0 -1
- data/app/serializers/lcms/engine/previews_material_serializer.rb +0 -1
- data/app/serializers/lcms/engine/resource_details_serializer.rb +0 -2
- data/app/serializers/lcms/engine/resource_instruction_serializer.rb +0 -2
- data/app/serializers/lcms/engine/resource_picker_serializer.rb +0 -2
- data/app/serializers/lcms/engine/resource_serializer.rb +0 -2
- data/app/serializers/lcms/engine/search_document_serializer.rb +0 -2
- data/app/services/lcms/engine/document_build_service.rb +1 -0
- data/app/services/lcms/engine/html_sanitizer.rb +2 -2
- data/app/services/lcms/engine/s3_service.rb +1 -1
- data/app/uploaders/social_thumbnail_uploader.rb +0 -4
- data/app/views/layouts/lcms/engine/admin.html.erb +1 -1
- data/app/views/lcms/engine/admin/access_codes/index.html.erb +10 -8
- data/app/views/lcms/engine/admin/documents/index.html.erb +2 -2
- data/app/views/lcms/engine/admin/materials/index.html.erb +2 -2
- data/app/views/lcms/engine/admin/pages/index.html.erb +3 -3
- data/app/views/lcms/engine/admin/standards/index.html.erb +9 -7
- data/app/views/lcms/engine/admin/users/index.html.erb +16 -14
- data/app/views/lcms/engine/resources/_children_list.html.erb +1 -1
- data/app/views/lcms/engine/shared/_social_sharing_menu.html.erb +4 -4
- data/config/initializers/carrier_wave.rb +0 -1
- data/config/locales/admin/en.yml +0 -2
- data/db/migrate/20200422130652_add_reimported_at_to_documents.rb +7 -0
- data/lcms-engine.gemspec +73 -87
- data/lib/doc_template/document.rb +2 -2
- data/lib/doc_template/tables/activity.rb +2 -1
- data/lib/doc_template/tables/base.rb +0 -4
- data/lib/doc_template/tables/section.rb +2 -1
- data/lib/doc_template/tags/link_tag.rb +1 -1
- data/lib/doc_template/xpath_functions.rb +1 -3
- data/lib/document_exporter/base.rb +1 -2
- data/lib/document_exporter/docx.rb +0 -1
- data/lib/generators/lcms/engine/install/install_generator.rb +1 -4
- data/lib/generators/lcms/engine/install/templates/config/lcms.yml +1 -1
- data/lib/lcms/engine/engine.rb +0 -16
- data/lib/lcms/engine/migration.rb +2 -0
- data/lib/lcms/engine/version.rb +1 -1
- data/lib/lt/lcms/metadata/context.rb +7 -5
- data/spec/controllers/admin/admin_controller_spec.rb +1 -1
- data/spec/controllers/admin/association_picker_controller_spec.rb +2 -2
- data/spec/controllers/admin/curriculums_controller_spec.rb +1 -2
- data/spec/controllers/admin/documents_controller_spec.rb +12 -41
- data/spec/controllers/admin/materials_controller_spec.rb +7 -67
- data/spec/controllers/admin/pages_controller_spec.rb +2 -2
- data/spec/controllers/admin/resource_bulk_edit_controller_spec.rb +3 -3
- data/spec/controllers/admin/sketch_compilers_controller_spec.rb +5 -4
- data/spec/controllers/admin/standards_controller_spec.rb +12 -9
- data/spec/controllers/admin/users_controller_spec.rb +2 -2
- data/spec/controllers/admin/welcome_controller_spec.rb +1 -1
- data/spec/controllers/documents_controller_spec.rb +3 -3
- data/spec/controllers/enhance_instruction_controller_spec.rb +1 -1
- data/spec/controllers/explore_curriculum_controller_spec.rb +2 -2
- data/spec/controllers/find_lessons_controller_spec.rb +1 -1
- data/spec/controllers/pages_controller_spec.rb +9 -12
- data/spec/controllers/resources_controller_spec.rb +2 -2
- data/spec/controllers/search_controller_spec.rb +1 -1
- data/spec/dummy/bin/spring +2 -2
- data/spec/dummy/config/application.rb +3 -3
- data/spec/dummy/config/environments/test.rb +2 -5
- data/spec/dummy/config/lcms-admin.yml +3 -3
- data/spec/dummy/config/webpack/development.js +5 -0
- data/spec/dummy/config/webpack/environment.js +3 -0
- data/spec/dummy/config/webpack/production.js +5 -0
- data/spec/dummy/config/webpack/test.js +5 -0
- data/spec/dummy/config/webpacker.yml +96 -0
- data/spec/dummy/db/schema.rb +251 -275
- data/spec/factories/document_bundles.rb +1 -1
- data/spec/factories/standard_links.rb +2 -0
- data/spec/factories/taggings.rb +1 -0
- data/spec/models/document_bundle_spec.rb +0 -6
- data/spec/models/resource_spec.rb +0 -33
- data/spec/rails_helper.rb +0 -1
- data/spec/requests/admin/curriculum_spec.rb +17 -0
- data/spec/services/document_build_service_spec.rb +76 -62
- data/spec/services/html_sanitizer_spec.rb +0 -34
- data/spec/support/capybara.rb +1 -3
- data/spec/support/concerns/searchable.rb +2 -0
- data/spec/support/database_cleaner.rb +5 -16
- data/spec/support/devise.rb +2 -0
- data/yarn.lock +442 -530
- metadata +183 -439
- data/Gemfile.lock +0 -752
- data/config/initializers/active_record.rb +0 -3
- data/spec/controllers/admin/resources_controller_spec.rb +0 -84
- data/spec/fixtures/tables/activity-metadata-3activities.html +0 -1
- data/spec/fixtures/tables/document-metadata-2paragpraphs.html +0 -97
- data/spec/fixtures/tables/document-metadata-2spans.html +0 -96
- data/spec/fixtures/tables/document-metadata.html +0 -96
- data/spec/lib/doc_template/tables/activity_spec.rb +0 -28
- data/spec/lib/doc_template/tables/metadata_spec.rb +0 -40
- data/spec/lib/doc_template/tables/shared_examples/remove_table.rb +0 -11
- data/spec/support/fixture_helper.rb +0 -16
@@ -3,15 +3,16 @@
|
|
3
3
|
module Lcms
|
4
4
|
module Engine
|
5
5
|
class Pagination
|
6
|
+
PARAMS_DEFAULT = { page: 1, per_page: 20, order: :asc }.freeze
|
7
|
+
|
6
8
|
def initialize(params)
|
7
|
-
@params = params
|
9
|
+
@params = handle_params params
|
8
10
|
end
|
9
11
|
|
10
12
|
def params(strict: false)
|
11
13
|
@pagination_params ||= begin
|
12
|
-
|
13
|
-
|
14
|
-
pagination = default_params.merge(expected_params)
|
14
|
+
expected_params = @params.slice(*PARAMS_DEFAULT.keys).symbolize_keys
|
15
|
+
pagination = PARAMS_DEFAULT.merge(expected_params)
|
15
16
|
|
16
17
|
pagination[:page] = pagination[:page].to_i
|
17
18
|
pagination[:per_page] = pagination[:per_page].to_i
|
@@ -37,7 +38,15 @@ module Lcms
|
|
37
38
|
total_hits: resources.total_entries
|
38
39
|
}
|
39
40
|
options[:each_serializer] = serializer
|
40
|
-
ActiveModel::
|
41
|
+
ActiveModel::Serializer::CollectionSerializer.new(resources, options).as_json
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def handle_params(params)
|
47
|
+
return params unless params.is_a?(ActionController::Parameters)
|
48
|
+
|
49
|
+
params.permit(*PARAMS_DEFAULT.keys).to_h
|
41
50
|
end
|
42
51
|
end
|
43
52
|
end
|
@@ -8,12 +8,8 @@ module Lcms
|
|
8
8
|
include ViewHelper
|
9
9
|
include ::Webpacker::Helper
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
entries = names
|
14
|
-
.map { |name| Lcms::Engine.webpacker.manifest.lookup!(name, type: :javascript) }
|
15
|
-
.flatten
|
16
|
-
javascript_include_tag(*entries, **options)
|
11
|
+
def current_webpacker_instance
|
12
|
+
Lcms::Engine.webpacker
|
17
13
|
end
|
18
14
|
end
|
19
15
|
end
|
@@ -3,9 +3,7 @@
|
|
3
3
|
module Lcms
|
4
4
|
module Engine
|
5
5
|
module ViewHelper # rubocop:disable Metrics/ModuleLength
|
6
|
-
ENABLE_BASE64_CACHING = ActiveRecord::
|
7
|
-
ENV.fetch('ENABLE_BASE64_CACHING', true)
|
8
|
-
)
|
6
|
+
ENABLE_BASE64_CACHING = ActiveRecord::Type::Boolean.new.cast ENV.fetch('ENABLE_BASE64_CACHING', true)
|
9
7
|
|
10
8
|
def add_class_for_path(link_path, klass, klass_prefix = nil)
|
11
9
|
[
|
@@ -75,7 +75,7 @@ class ImportStatus extends React.Component {
|
|
75
75
|
}
|
76
76
|
|
77
77
|
spinner() {
|
78
|
-
return <span className="o-adm-materials__spinner button primary u-margin-bottom--zero"><i className="
|
78
|
+
return <span className="o-adm-materials__spinner button primary u-margin-bottom--zero"><i className="fas fa-spin fa-spinner" /></span>
|
79
79
|
}
|
80
80
|
|
81
81
|
render() {
|
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
module Lcms
|
4
4
|
module Engine
|
5
|
-
class Document <
|
5
|
+
class Document < ApplicationRecord
|
6
6
|
include Partable
|
7
7
|
GOOGLE_URL_PREFIX = 'https://docs.google.com/document/d'
|
8
8
|
|
9
|
-
belongs_to :resource
|
9
|
+
belongs_to :resource, optional: true
|
10
10
|
has_many :document_parts, as: :renderer, dependent: :delete_all
|
11
11
|
has_and_belongs_to_many :materials
|
12
12
|
|
@@ -55,7 +55,7 @@ module Lcms
|
|
55
55
|
.joins('LEFT JOIN materials as m on m.id = links.key::integer')
|
56
56
|
.where('((links.value -> ?)::text IS NULL) OR ((links.value -> ?)::text IS NULL)', 'gdoc', 'url')
|
57
57
|
.where.not("m.metadata ->> 'type' = ?", 'pdf')
|
58
|
-
.
|
58
|
+
.distinct
|
59
59
|
}
|
60
60
|
|
61
61
|
scope :with_updated_materials, lambda {
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Lcms
|
4
4
|
module Engine
|
5
|
-
class DocumentBundle <
|
5
|
+
class DocumentBundle < ApplicationRecord
|
6
6
|
CATEGORIES = %w(full tm sm).freeze
|
7
7
|
CONTENT_TYPES = %w(pdf gdoc).freeze
|
8
8
|
|
@@ -10,7 +10,7 @@ module Lcms
|
|
10
10
|
|
11
11
|
mount_uploader :file, DocumentBundleUploader
|
12
12
|
|
13
|
-
validates :
|
13
|
+
validates :category, presence: true
|
14
14
|
validates :category, inclusion: { in: CATEGORIES }
|
15
15
|
validates :content_type, inclusion: { in: CONTENT_TYPES }
|
16
16
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Lcms
|
4
4
|
module Engine
|
5
|
-
class Download <
|
5
|
+
class Download < ApplicationRecord
|
6
6
|
CONTENT_TYPES = {
|
7
7
|
zip: 'application/zip',
|
8
8
|
pdf: 'application/pdf',
|
@@ -17,8 +17,8 @@ module Lcms
|
|
17
17
|
alias_attribute :file, :filename
|
18
18
|
|
19
19
|
validates :title, presence: true
|
20
|
-
validates :file, presence: true, if:
|
21
|
-
validates :url, presence: true, if:
|
20
|
+
validates :file, presence: true, if: -> { url.nil? }
|
21
|
+
validates :url, presence: true, if: -> { file.nil? }
|
22
22
|
|
23
23
|
before_save :update_metadata
|
24
24
|
|
@@ -4,7 +4,7 @@ require 'pg_search'
|
|
4
4
|
|
5
5
|
module Lcms
|
6
6
|
module Engine
|
7
|
-
class Material <
|
7
|
+
class Material < ApplicationRecord
|
8
8
|
include PgSearch::Model
|
9
9
|
include Partable
|
10
10
|
|
@@ -12,7 +12,7 @@ module Lcms
|
|
12
12
|
validates :identifier, uniqueness: true
|
13
13
|
|
14
14
|
has_many :document_parts, as: :renderer, dependent: :delete_all
|
15
|
-
has_and_belongs_to_many :documents
|
15
|
+
has_and_belongs_to_many :documents, optional: true
|
16
16
|
|
17
17
|
store_accessor :metadata
|
18
18
|
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Lcms
|
4
4
|
module Engine
|
5
|
-
class Resource <
|
5
|
+
class Resource < ApplicationRecord
|
6
6
|
enum resource_type: {
|
7
7
|
resource: 1,
|
8
8
|
podcast: 2,
|
@@ -26,10 +26,10 @@ module Lcms
|
|
26
26
|
acts_as_taggable_on :content_sources, :download_types, :resource_types, :tags, :topics
|
27
27
|
has_closure_tree order: :level_position, dependent: :destroy, numeric_order: true
|
28
28
|
|
29
|
-
belongs_to :parent, class_name: 'Lcms::Engine::Resource', foreign_key: 'parent_id'
|
29
|
+
belongs_to :parent, class_name: 'Lcms::Engine::Resource', foreign_key: 'parent_id', optional: true
|
30
30
|
|
31
|
-
belongs_to :author
|
32
|
-
belongs_to :curriculum
|
31
|
+
belongs_to :author, optional: true
|
32
|
+
belongs_to :curriculum, optional: true
|
33
33
|
|
34
34
|
# Additional resources
|
35
35
|
has_many :resource_additional_resources, dependent: :destroy
|
@@ -271,14 +271,6 @@ module Lcms
|
|
271
271
|
unit? && document_bundles.any?
|
272
272
|
end
|
273
273
|
|
274
|
-
def add_grade_author(author)
|
275
|
-
grade = grade? ? self : ancestors.detect(&:grade?)
|
276
|
-
raise 'Grade not found for this resource' unless grade
|
277
|
-
|
278
|
-
grade.author_id = author.is_a?(Integer) ? author : author.id
|
279
|
-
grade.save
|
280
|
-
end
|
281
|
-
|
282
274
|
def self_and_ancestors_not_persisted
|
283
275
|
# during create we can't call self_and_ancestors directly on the resource
|
284
276
|
# because this query uses the associations on resources_hierarchies
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
module Lcms
|
4
4
|
module Engine
|
5
|
-
class ResourceAdditionalResource <
|
5
|
+
class ResourceAdditionalResource < ApplicationRecord
|
6
6
|
belongs_to :resource
|
7
7
|
belongs_to :additional_resource, class_name: 'Resource', foreign_key: 'additional_resource_id'
|
8
8
|
end
|
@@ -43,7 +43,7 @@ module Lcms
|
|
43
43
|
repository.search query
|
44
44
|
end
|
45
45
|
|
46
|
-
# this is necessary for the ActiveModel::
|
46
|
+
# this is necessary for the ActiveModel::Serializer::CollectionSerializer#as_json method to work
|
47
47
|
# (used on the Pagination#serialize_with_pagination)
|
48
48
|
# NOTE: https://github.com/rails-api/active_model_serializers/issues/891
|
49
49
|
def read_attribute_for_serialization(key)
|