diff --git a/.circleci/config.yml b/.circleci/config.yml index 74c8fcfc..0513acc4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,15 +1,16 @@ version: 2.1 orbs: samvera: samvera/circleci-orb@0.3.1 + browser-tools: circleci/browser-tools@1.4 jobs: build: parameters: ruby_version: type: string - default: '2.7.5' + default: '3.1.2' bundler_version: type: string - default: '2.0.1' + default: '2.3.22' solr_port: type: string default: '8985' @@ -18,7 +19,7 @@ jobs: default: '4' mysql_version: type: string - default: '5.7.22' + default: '8.0.33' environment: BUNDLE_PATH: vendor/bundle BUNDLE_JOBS: 4 @@ -31,16 +32,17 @@ jobs: DATABASE_PORT: 3306 DATABASE_USERNAME: root docker: - - image: circleci/ruby:<< parameters.ruby_version >>-node-browsers-legacy + - image: cimg/ruby:<< parameters.ruby_version >>-browsers - image: solr:7-alpine command: bin/solr -cloud -noprompt -f -p <> - image: circleci/redis:<> - - image: circleci/mysql:<> + - image: cimg/mysql:<> working_directory: ~/project parallelism: 4 steps: - checkout - + - browser-tools/install-chrome + - browser-tools/install-chromedriver - samvera/bundle: ruby_version: << parameters.ruby_version >> bundler_version: << parameters.bundler_version >> @@ -77,6 +79,10 @@ jobs: name: Wait for MySQL, if necessary. command: dockerize -wait tcp://${DATABASE_HOST}:${DATABASE_PORT} -timeout 1m + - run: + name: Run migrations + command: bundle exec rails db:migrate RAILS_ENV=test + - samvera/parallel_rspec - run: @@ -95,7 +101,7 @@ jobs: coverage: docker: - - image: circleci/ruby:2.7.5 + - image: cimg/ruby:3.1.2 working_directory: ~/project parallelism: 1 steps: @@ -119,8 +125,8 @@ workflows: ci: jobs: - build: - name: ruby2-7-5 + name: ruby3-1-2 - coverage: name: codeclimate requires: - - ruby2-7-5 + - ruby3-1-2 diff --git a/.rubocop.yml b/.rubocop.yml index 367ab20b..29f9156b 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -2,7 +2,7 @@ inherit_gem: bixby: bixby_default.yml AllCops: - TargetRubyVersion: 2.7 + TargetRubyVersion: 3.1 Exclude: - 'bin/**/*' - 'db/**/*' @@ -21,6 +21,9 @@ Lint/EmptyWhen: Exclude: - app/models/marc_indexer.rb +Lint/MissingSuper: + Enabled: false + Metrics/AbcSize: Exclude: - 'app/models/marc_indexer.rb' @@ -44,6 +47,7 @@ Metrics/CyclomaticComplexity: Metrics/MethodLength: Exclude: + - 'app/components/blacklight/search_bar_component.rb' - 'app/models/marc_indexer.rb' - 'app/values/uv_configuration.rb' diff --git a/.ruby-version b/.ruby-version index a603bb50..ef538c28 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -2.7.5 +3.1.2 diff --git a/Gemfile b/Gemfile index 746355b2..1ffcfefa 100644 --- a/Gemfile +++ b/Gemfile @@ -6,17 +6,17 @@ git_source(:github) do |repo_name| "https://github.com/#{repo_name}.git" end -ruby '~> 2.7.5' +ruby '3.1.2' gem 'administrate', '~> 0.17.0' # Use ActiveModel has_secure_password # Needed for support of OpenSSH keys gem 'bcrypt_pbkdf' # Blacklight 7, because Blacklight 6 did not successfully deploy to production -gem 'blacklight', ">= 7" -gem 'blacklight-access_controls', git: 'https://github.com/projectblacklight/blacklight-access_controls', ref: '21e04f5' +gem 'blacklight', "7.33.1" +gem 'blacklight-access_controls', git: 'https://github.com/projectblacklight/blacklight-access_controls', branch: 'rails7_ruby3_blacklight8_upgrade' +gem 'blacklight_advanced_search' gem 'blacklight-marc', '>= 7.0.0.rc1' -gem 'blacklight_advanced_search', '~>7.0' gem 'blacklight_range_limit' gem 'bootstrap', '~> 4.0' gem 'bootstrap-select-rails', '>= 1.13' @@ -39,12 +39,12 @@ gem 'omniauth-shibboleth', '~> 1.3' # Use Puma as the app server gem 'puma' # Bundle edge Rails instead: gem 'rails', github: 'rails/rails' -gem 'rails', '~> 5.2.0' +gem 'rails', '~> 7.0', '>= 7.0.7.2' # Use Redis adapter to run Action Cable in production # gem 'redis', '~> 3.0' gem 'rsolr', '>= 1.0' # Use SCSS for stylesheets -gem 'sass-rails', '~> 5.0' +gem "sassc-rails", "~> 2.1" gem 'simple_form' # See https://github.com/rails/execjs#readme for more supported runtimes # gem 'therubyracer', platforms: :ruby @@ -71,17 +71,15 @@ group :development do gem 'web-console', '>= 3.3.0' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring gem 'spring' - gem 'spring-watcher-listen', '~> 2.0.0' - gem 'xray-rails' + gem "xray-rails", git: "https://github.com/brentd/xray-rails.git", branch: "bugs/ruby-3.0.0" end group :development, :test do # bixby = rubocop rules for Hyrax apps - gem 'bixby', '~> 3.0.1' + gem 'bixby' # Call 'byebug' anywhere in the code to stop execution and get a debugger console gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] gem 'capybara' - gem 'coveralls', require: false gem 'factory_bot_rails', '~> 4.11.1' gem 'ffaker' gem 'pry' unless ENV['CI'] @@ -90,6 +88,7 @@ group :development, :test do gem 'rspec-its' gem 'rspec-rails', '~> 5.0' gem 'selenium-webdriver' + gem 'simplecov', require: false gem 'solr_wrapper', '>= 0.3' gem 'webdrivers', '5.3.0' end diff --git a/Gemfile.lock b/Gemfile.lock index 6d357675..a052b194 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,11 @@ +GIT + remote: https://github.com/brentd/xray-rails.git + revision: f121814718c9907b20058dc9357b80a53afab821 + branch: bugs/ruby-3.0.0 + specs: + xray-rails (0.3.2) + rails (>= 3.1.0) + GIT remote: https://github.com/emory-libraries/cap-ec2.git revision: aa48832ed4a33944b8e5498b43af0a9c4866fca1 @@ -10,59 +18,83 @@ GIT GIT remote: https://github.com/projectblacklight/blacklight-access_controls - revision: 21e04f53217b7d6a0c90faf6393286635cf525f0 - ref: 21e04f5 + revision: 0148cf32414b0fd4c39c3652aaae32193c207e4b + branch: rails7_ruby3_blacklight8_upgrade specs: - blacklight-access_controls (6.0.0) - blacklight (> 6.0, < 8) + blacklight-access_controls (6.0.1) + blacklight (> 6.0, < 9) cancancan (>= 1.8) deprecation (~> 1.0) GEM remote: https://rubygems.org/ specs: - actioncable (5.2.8.1) - actionpack (= 5.2.8.1) + actioncable (7.0.7.2) + actionpack (= 7.0.7.2) + activesupport (= 7.0.7.2) nio4r (~> 2.0) websocket-driver (>= 0.6.1) - actionmailer (5.2.8.1) - actionpack (= 5.2.8.1) - actionview (= 5.2.8.1) - activejob (= 5.2.8.1) + actionmailbox (7.0.7.2) + actionpack (= 7.0.7.2) + activejob (= 7.0.7.2) + activerecord (= 7.0.7.2) + activestorage (= 7.0.7.2) + activesupport (= 7.0.7.2) + mail (>= 2.7.1) + net-imap + net-pop + net-smtp + actionmailer (7.0.7.2) + actionpack (= 7.0.7.2) + actionview (= 7.0.7.2) + activejob (= 7.0.7.2) + activesupport (= 7.0.7.2) mail (~> 2.5, >= 2.5.4) + net-imap + net-pop + net-smtp rails-dom-testing (~> 2.0) - actionpack (5.2.8.1) - actionview (= 5.2.8.1) - activesupport (= 5.2.8.1) - rack (~> 2.0, >= 2.0.8) + actionpack (7.0.7.2) + actionview (= 7.0.7.2) + activesupport (= 7.0.7.2) + rack (~> 2.0, >= 2.2.4) rack-test (>= 0.6.3) rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.0.2) - actionview (5.2.8.1) - activesupport (= 5.2.8.1) + rails-html-sanitizer (~> 1.0, >= 1.2.0) + actiontext (7.0.7.2) + actionpack (= 7.0.7.2) + activerecord (= 7.0.7.2) + activestorage (= 7.0.7.2) + activesupport (= 7.0.7.2) + globalid (>= 0.6.0) + nokogiri (>= 1.8.5) + actionview (7.0.7.2) + activesupport (= 7.0.7.2) builder (~> 3.1) erubi (~> 1.4) rails-dom-testing (~> 2.0) - rails-html-sanitizer (~> 1.0, >= 1.0.3) - activejob (5.2.8.1) - activesupport (= 5.2.8.1) + rails-html-sanitizer (~> 1.1, >= 1.2.0) + activejob (7.0.7.2) + activesupport (= 7.0.7.2) globalid (>= 0.3.6) - activemodel (5.2.8.1) - activesupport (= 5.2.8.1) - activerecord (5.2.8.1) - activemodel (= 5.2.8.1) - activesupport (= 5.2.8.1) - arel (>= 9.0) - activestorage (5.2.8.1) - actionpack (= 5.2.8.1) - activerecord (= 5.2.8.1) - marcel (~> 1.0.0) - activesupport (5.2.8.1) + activemodel (7.0.7.2) + activesupport (= 7.0.7.2) + activerecord (7.0.7.2) + activemodel (= 7.0.7.2) + activesupport (= 7.0.7.2) + activestorage (7.0.7.2) + actionpack (= 7.0.7.2) + activejob (= 7.0.7.2) + activerecord (= 7.0.7.2) + activesupport (= 7.0.7.2) + marcel (~> 1.0) + mini_mime (>= 1.1.0) + activesupport (7.0.7.2) concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) - minitest (~> 5.1) - tzinfo (~> 1.1) - addressable (2.8.1) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + addressable (2.8.5) public_suffix (>= 2.0.2, < 6.0) administrate (0.17.0) actionpack (>= 5.0) @@ -74,514 +106,916 @@ GEM momentjs-rails (~> 2.8) sassc-rails (~> 2.1) selectize-rails (~> 0.6) - airbrussh (1.4.1) + airbrussh (1.4.2) sshkit (>= 1.6.1, != 1.7.0) - arel (9.0.0) ast (2.4.2) - autoprefixer-rails (9.7.2) - execjs - aws-eventstream (1.0.3) - aws-partitions (1.244.0) - aws-sdk (3.0.1) + autoprefixer-rails (10.4.15.0) + execjs (~> 2) + aws-eventstream (1.2.0) + aws-partitions (1.822.0) + aws-sdk (3.1.0) aws-sdk-resources (~> 3) - aws-sdk-acm (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-accessanalyzer (1.39.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-account (1.17.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-acm (1.60.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-acmpca (1.60.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-alexaforbusiness (1.64.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-amplify (1.49.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-amplifybackend (1.26.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-amplifyuibuilder (1.18.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-apigateway (1.87.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-apigatewaymanagementapi (1.37.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-apigatewayv2 (1.50.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-appconfig (1.35.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-appconfigdata (1.13.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-appfabric (1.3.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-appflow (1.50.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-appintegrationsservice (1.21.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-applicationautoscaling (1.75.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-applicationcostprofiler (1.16.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-applicationdiscoveryservice (1.55.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-applicationinsights (1.39.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-appmesh (1.54.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-appregistry (1.25.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-apprunner (1.28.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-appstream (1.76.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-appsync (1.65.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-arczonalshift (1.6.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-athena (1.74.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-auditmanager (1.37.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-augmentedairuntime (1.30.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-autoscaling (1.97.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-autoscalingplans (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-backup (1.58.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-backupgateway (1.13.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-backupstorage (1.7.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-batch (1.76.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-acmpca (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-billingconductor (1.14.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-alexaforbusiness (1.31.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-braket (1.26.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-amplify (1.14.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-budgets (1.58.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-apigateway (1.36.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-chime (1.77.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-apigatewaymanagementapi (1.11.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-chimesdkidentity (1.18.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-apigatewayv2 (1.14.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-chimesdkmediapipelines (1.13.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-applicationautoscaling (1.33.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-chimesdkmeetings (1.24.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-applicationdiscoveryservice (1.23.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-chimesdkmessaging (1.24.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-applicationinsights (1.4.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-chimesdkvoice (1.12.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-appmesh (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cleanrooms (1.10.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-appstream (1.38.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloud9 (1.58.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-appsync (1.22.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudcontrolapi (1.16.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-athena (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-clouddirectory (1.49.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-autoscaling (1.30.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudformation (1.88.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-autoscalingplans (1.20.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudfront (1.82.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-backup (1.10.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudhsm (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-batch (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudhsmv2 (1.49.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-budgets (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudsearch (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-chime (1.17.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudsearchdomain (1.37.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloud9 (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudtrail (1.68.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-clouddirectory (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudtraildata (1.5.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudformation (1.29.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudwatch (1.80.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudfront (1.23.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudwatchevents (1.65.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudhsm (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudwatchevidently (1.17.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudhsmv2 (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudwatchlogs (1.69.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudsearch (1.17.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cloudwatchrum (1.14.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudsearchdomain (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codeartifact (1.33.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudtrail (1.20.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codebuild (1.95.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudwatch (1.30.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codecatalyst (1.10.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sdk-codecommit (1.59.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudwatchevents (1.25.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codedeploy (1.57.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudwatchlogs (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codeguruprofiler (1.31.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-codebuild (1.44.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codegurureviewer (1.40.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-codecommit (1.30.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codegurusecurity (1.5.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-codedeploy (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codepipeline (1.61.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-codepipeline (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codestar (1.45.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-codestar (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codestarconnections (1.32.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-codestarnotifications (1.0.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-codestarnotifications (1.27.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cognitoidentity (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cognitoidentity (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cognitoidentityprovider (1.29.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cognitoidentityprovider (1.81.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-cognitosync (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-cognitosync (1.43.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-comprehend (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-comprehend (1.73.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-comprehendmedical (1.11.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-comprehendmedical (1.46.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-configservice (1.40.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-computeoptimizer (1.48.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-connect (1.22.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-configservice (1.97.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-connectparticipant (1.0.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-connect (1.125.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-core (3.81.0) - aws-eventstream (~> 1.0, >= 1.0.2) - aws-partitions (~> 1, >= 1.239.0) + aws-sdk-connectcampaignservice (1.9.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - jmespath (~> 1.0) - aws-sdk-costandusagereportservice (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-connectcases (1.11.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-costexplorer (1.33.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-connectcontactlens (1.18.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-databasemigrationservice (1.30.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-connectparticipant (1.35.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-dataexchange (1.0.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-connectwisdomservice (1.19.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-datapipeline (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-controltower (1.7.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-datasync (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-core (3.181.0) + aws-eventstream (~> 1, >= 1.0.2) + aws-partitions (~> 1, >= 1.651.0) + aws-sigv4 (~> 1.5) + jmespath (~> 1, >= 1.6.1) + aws-sdk-costandusagereportservice (1.49.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-dax (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-costexplorer (1.90.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-devicefarm (1.29.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-customerprofiles (1.36.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-directconnect (1.26.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-databasemigrationservice (1.86.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-directoryservice (1.22.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-dataexchange (1.38.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-dlm (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-datapipeline (1.43.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-docdb (1.12.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-datasync (1.65.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-dynamodb (1.39.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-dax (1.46.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-dynamodbstreams (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-detective (1.40.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-ec2 (1.120.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-devicefarm (1.59.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-ec2instanceconnect (1.3.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-devopsguru (1.36.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-ecr (1.23.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-directconnect (1.65.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-ecs (1.53.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-directoryservice (1.59.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-efs (1.23.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-dlm (1.61.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-eks (1.28.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-docdb (1.53.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticache (1.29.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-docdbelastic (1.6.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticbeanstalk (1.26.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-drs (1.21.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticloadbalancing (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-dynamodb (1.93.1) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticloadbalancingv2 (1.38.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-dynamodbstreams (1.49.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-elasticsearchservice (1.28.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ebs (1.34.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-elastictranscoder (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ec2 (1.405.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-emr (1.24.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ec2instanceconnect (1.32.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-eventbridge (1.3.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ecr (1.64.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-firehose (1.24.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ecrpublic (1.21.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-fms (1.20.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ecs (1.129.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-forecastqueryservice (1.1.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-efs (1.65.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-forecastservice (1.2.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-eks (1.89.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-fsx (1.13.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticache (1.91.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-gamelift (1.26.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticbeanstalk (1.59.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-glacier (1.26.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticinference (1.30.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-globalaccelerator (1.13.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticloadbalancing (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-glue (1.47.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticloadbalancingv2 (1.91.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-greengrass (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elasticsearchservice (1.76.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-groundstation (1.4.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-elastictranscoder (1.45.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-guardduty (1.25.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-emr (1.75.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-health (1.20.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-emrcontainers (1.26.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-iam (1.32.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-emrserverless (1.14.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-importexport (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-entityresolution (1.0.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-eventbridge (1.50.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-finspace (1.20.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-finspacedata (1.24.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-firehose (1.57.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-fis (1.21.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-fms (1.62.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-forecastqueryservice (1.29.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-forecastservice (1.45.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-frauddetector (1.45.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-fsx (1.76.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-gamelift (1.70.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-gamesparks (1.9.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-glacier (1.54.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-globalaccelerator (1.50.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-glue (1.155.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-gluedatabrew (1.30.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-greengrass (1.58.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-greengrassv2 (1.30.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-groundstation (1.39.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-guardduty (1.78.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-health (1.56.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-healthlake (1.21.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-honeycode (1.24.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iam (1.86.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-identitystore (1.30.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-imagebuilder (1.51.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-importexport (1.40.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv2 (~> 1.0) - aws-sdk-inspector (1.23.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-inspector (1.50.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-inspector2 (1.20.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-internetmonitor (1.9.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iot (1.110.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iot1clickdevicesservice (1.44.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iot1clickprojects (1.44.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotanalytics (1.56.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotdataplane (1.50.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotdeviceadvisor (1.25.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotevents (1.40.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-ioteventsdata (1.34.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotfleethub (1.18.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotfleetwise (1.13.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotjobsdataplane (1.43.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotroborunner (1.6.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotsecuretunneling (1.28.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotsitewise (1.55.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iotthingsgraph (1.31.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-iottwinmaker (1.16.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-iot (1.40.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-iotwireless (1.38.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-iot1clickdevicesservice (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ivs (1.39.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-iot1clickprojects (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ivschat (1.14.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-iotanalytics (1.26.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-ivsrealtime (1.9.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-iotdataplane (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kafka (1.62.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-iotevents (1.6.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kafkaconnect (1.15.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-ioteventsdata (1.5.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kendra (1.72.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-iotjobsdataplane (1.17.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kendraranking (1.6.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-iotthingsgraph (1.4.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-keyspaces (1.12.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-kafka (1.15.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kinesis (1.50.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-kinesis (1.20.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kinesisanalytics (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-kinesisanalytics (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kinesisanalyticsv2 (1.48.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-kinesisanalyticsv2 (1.11.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kinesisvideo (1.53.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-kinesisvideo (1.20.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kinesisvideoarchivedmedia (1.52.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-kinesisvideoarchivedmedia (1.20.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kinesisvideomedia (1.44.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-kinesisvideomedia (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kinesisvideosignalingchannels (1.26.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-kms (1.25.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kinesisvideowebrtcstorage (1.7.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-lakeformation (1.1.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-kms (1.71.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-lambda (1.32.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lakeformation (1.40.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-lambdapreview (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lambda (1.104.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-lex (1.22.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lambdapreview (1.40.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-lexmodelbuildingservice (1.23.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lex (1.52.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-licensemanager (1.10.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lexmodelbuildingservice (1.64.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-lightsail (1.26.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lexmodelsv2 (1.41.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-machinelearning (1.17.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lexruntimev2 (1.24.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-macie (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-licensemanager (1.49.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-managedblockchain (1.7.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-licensemanagerlinuxsubscriptions (1.6.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-marketplacecatalog (1.0.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-licensemanagerusersubscriptions (1.8.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-marketplacecommerceanalytics (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lightsail (1.81.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-marketplaceentitlementservice (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-locationservice (1.36.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-marketplacemetering (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lookoutequipment (1.22.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-mediaconnect (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lookoutforvision (1.24.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-mediaconvert (1.39.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-lookoutmetrics (1.29.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-medialive (1.38.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-machinelearning (1.44.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-mediapackage (1.24.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-macie (1.45.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-mediapackagevod (1.7.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-macie2 (1.59.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-mediastore (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mainframemodernization (1.10.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-mediastoredata (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-managedblockchain (1.43.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-mediatailor (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-managedblockchainquery (1.0.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-migrationhub (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-managedgrafana (1.21.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-migrationhubconfig (1.0.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-marketplacecatalog (1.32.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-mobile (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-marketplacecommerceanalytics (1.48.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-mq (1.23.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-marketplaceentitlementservice (1.42.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-mturk (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-marketplacemetering (1.51.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-neptune (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mediaconnect (1.53.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-opsworks (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mediaconvert (1.116.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-opsworkscm (1.26.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-medialive (1.108.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-organizations (1.34.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mediapackage (1.65.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-personalize (1.8.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mediapackagev2 (1.5.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-personalizeevents (1.4.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mediapackagevod (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-personalizeruntime (1.5.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mediastore (1.48.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-pi (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mediastoredata (1.45.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-pinpoint (1.31.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mediatailor (1.69.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-pinpointemail (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-medicalimaging (1.0.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-pinpointsmsvoice (1.13.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-memorydb (1.18.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-polly (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mgn (1.24.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-pricing (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-migrationhub (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-qldb (1.1.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-migrationhubconfig (1.27.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-qldbsession (1.1.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-migrationhuborchestrator (1.7.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-quicksight (1.14.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-migrationhubrefactorspaces (1.18.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-ram (1.12.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-migrationhubstrategyrecommendations (1.14.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-rds (1.71.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mobile (1.42.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-rdsdataservice (1.13.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mq (1.55.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-redshift (1.33.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mturk (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-rekognition (1.32.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-mwaa (1.26.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-resourcegroups (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-neptune (1.55.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-resourcegroupstaggingapi (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-neptunedata (1.2.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-resources (3.61.0) + aws-sdk-networkfirewall (1.34.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-networkmanager (1.35.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-nimblestudio (1.23.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-oam (1.6.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-omics (1.14.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-opensearchserverless (1.8.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-opensearchservice (1.26.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-opsworks (1.48.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-opsworkscm (1.59.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-organizations (1.80.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-osis (1.6.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-outposts (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-panorama (1.17.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-paymentcryptography (1.4.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-paymentcryptographydata (1.5.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-pcaconnectorad (1.0.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-personalize (1.53.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-personalizeevents (1.35.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-personalizeruntime (1.40.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-pi (1.49.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-pinpoint (1.79.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-pinpointemail (1.42.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-pinpointsmsvoice (1.39.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-pinpointsmsvoicev2 (1.7.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-pipes (1.8.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-polly (1.75.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-pricing (1.49.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-privatenetworks (1.10.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-prometheusservice (1.23.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-proton (1.30.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-qldb (1.33.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-qldbsession (1.29.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-quicksight (1.90.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-ram (1.49.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-rds (1.193.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-rdsdataservice (1.45.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-recyclebin (1.13.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-redshift (1.97.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-redshiftdataapiservice (1.31.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-redshiftserverless (1.12.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-rekognition (1.86.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-resiliencehub (1.19.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-resourceexplorer2 (1.9.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-resourcegroups (1.53.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-resourcegroupstaggingapi (1.54.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-resources (3.170.0) + aws-sdk-accessanalyzer (~> 1) + aws-sdk-account (~> 1) aws-sdk-acm (~> 1) aws-sdk-acmpca (~> 1) aws-sdk-alexaforbusiness (~> 1) aws-sdk-amplify (~> 1) + aws-sdk-amplifybackend (~> 1) + aws-sdk-amplifyuibuilder (~> 1) aws-sdk-apigateway (~> 1) aws-sdk-apigatewaymanagementapi (~> 1) aws-sdk-apigatewayv2 (~> 1) + aws-sdk-appconfig (~> 1) + aws-sdk-appconfigdata (~> 1) + aws-sdk-appfabric (~> 1) + aws-sdk-appflow (~> 1) + aws-sdk-appintegrationsservice (~> 1) aws-sdk-applicationautoscaling (~> 1) + aws-sdk-applicationcostprofiler (~> 1) aws-sdk-applicationdiscoveryservice (~> 1) aws-sdk-applicationinsights (~> 1) aws-sdk-appmesh (~> 1) + aws-sdk-appregistry (~> 1) + aws-sdk-apprunner (~> 1) aws-sdk-appstream (~> 1) aws-sdk-appsync (~> 1) + aws-sdk-arczonalshift (~> 1) aws-sdk-athena (~> 1) + aws-sdk-auditmanager (~> 1) + aws-sdk-augmentedairuntime (~> 1) aws-sdk-autoscaling (~> 1) aws-sdk-autoscalingplans (~> 1) aws-sdk-backup (~> 1) + aws-sdk-backupgateway (~> 1) + aws-sdk-backupstorage (~> 1) aws-sdk-batch (~> 1) + aws-sdk-billingconductor (~> 1) + aws-sdk-braket (~> 1) aws-sdk-budgets (~> 1) aws-sdk-chime (~> 1) + aws-sdk-chimesdkidentity (~> 1) + aws-sdk-chimesdkmediapipelines (~> 1) + aws-sdk-chimesdkmeetings (~> 1) + aws-sdk-chimesdkmessaging (~> 1) + aws-sdk-chimesdkvoice (~> 1) + aws-sdk-cleanrooms (~> 1) aws-sdk-cloud9 (~> 1) + aws-sdk-cloudcontrolapi (~> 1) aws-sdk-clouddirectory (~> 1) aws-sdk-cloudformation (~> 1) aws-sdk-cloudfront (~> 1) @@ -590,94 +1024,162 @@ GEM aws-sdk-cloudsearch (~> 1) aws-sdk-cloudsearchdomain (~> 1) aws-sdk-cloudtrail (~> 1) + aws-sdk-cloudtraildata (~> 1) aws-sdk-cloudwatch (~> 1) aws-sdk-cloudwatchevents (~> 1) + aws-sdk-cloudwatchevidently (~> 1) aws-sdk-cloudwatchlogs (~> 1) + aws-sdk-cloudwatchrum (~> 1) + aws-sdk-codeartifact (~> 1) aws-sdk-codebuild (~> 1) + aws-sdk-codecatalyst (~> 1) aws-sdk-codecommit (~> 1) aws-sdk-codedeploy (~> 1) + aws-sdk-codeguruprofiler (~> 1) + aws-sdk-codegurureviewer (~> 1) + aws-sdk-codegurusecurity (~> 1) aws-sdk-codepipeline (~> 1) aws-sdk-codestar (~> 1) + aws-sdk-codestarconnections (~> 1) aws-sdk-codestarnotifications (~> 1) aws-sdk-cognitoidentity (~> 1) aws-sdk-cognitoidentityprovider (~> 1) aws-sdk-cognitosync (~> 1) aws-sdk-comprehend (~> 1) aws-sdk-comprehendmedical (~> 1) + aws-sdk-computeoptimizer (~> 1) aws-sdk-configservice (~> 1) aws-sdk-connect (~> 1) + aws-sdk-connectcampaignservice (~> 1) + aws-sdk-connectcases (~> 1) + aws-sdk-connectcontactlens (~> 1) aws-sdk-connectparticipant (~> 1) + aws-sdk-connectwisdomservice (~> 1) + aws-sdk-controltower (~> 1) aws-sdk-costandusagereportservice (~> 1) aws-sdk-costexplorer (~> 1) + aws-sdk-customerprofiles (~> 1) aws-sdk-databasemigrationservice (~> 1) aws-sdk-dataexchange (~> 1) aws-sdk-datapipeline (~> 1) aws-sdk-datasync (~> 1) aws-sdk-dax (~> 1) + aws-sdk-detective (~> 1) aws-sdk-devicefarm (~> 1) + aws-sdk-devopsguru (~> 1) aws-sdk-directconnect (~> 1) aws-sdk-directoryservice (~> 1) aws-sdk-dlm (~> 1) aws-sdk-docdb (~> 1) + aws-sdk-docdbelastic (~> 1) + aws-sdk-drs (~> 1) aws-sdk-dynamodb (~> 1) aws-sdk-dynamodbstreams (~> 1) + aws-sdk-ebs (~> 1) aws-sdk-ec2 (~> 1) aws-sdk-ec2instanceconnect (~> 1) aws-sdk-ecr (~> 1) + aws-sdk-ecrpublic (~> 1) aws-sdk-ecs (~> 1) aws-sdk-efs (~> 1) aws-sdk-eks (~> 1) aws-sdk-elasticache (~> 1) aws-sdk-elasticbeanstalk (~> 1) + aws-sdk-elasticinference (~> 1) aws-sdk-elasticloadbalancing (~> 1) aws-sdk-elasticloadbalancingv2 (~> 1) aws-sdk-elasticsearchservice (~> 1) aws-sdk-elastictranscoder (~> 1) aws-sdk-emr (~> 1) + aws-sdk-emrcontainers (~> 1) + aws-sdk-emrserverless (~> 1) + aws-sdk-entityresolution (~> 1) aws-sdk-eventbridge (~> 1) + aws-sdk-finspace (~> 1) + aws-sdk-finspacedata (~> 1) aws-sdk-firehose (~> 1) + aws-sdk-fis (~> 1) aws-sdk-fms (~> 1) aws-sdk-forecastqueryservice (~> 1) aws-sdk-forecastservice (~> 1) + aws-sdk-frauddetector (~> 1) aws-sdk-fsx (~> 1) aws-sdk-gamelift (~> 1) + aws-sdk-gamesparks (~> 1) aws-sdk-glacier (~> 1) aws-sdk-globalaccelerator (~> 1) aws-sdk-glue (~> 1) + aws-sdk-gluedatabrew (~> 1) aws-sdk-greengrass (~> 1) + aws-sdk-greengrassv2 (~> 1) aws-sdk-groundstation (~> 1) aws-sdk-guardduty (~> 1) aws-sdk-health (~> 1) + aws-sdk-healthlake (~> 1) + aws-sdk-honeycode (~> 1) aws-sdk-iam (~> 1) + aws-sdk-identitystore (~> 1) + aws-sdk-imagebuilder (~> 1) aws-sdk-importexport (~> 1) aws-sdk-inspector (~> 1) + aws-sdk-inspector2 (~> 1) + aws-sdk-internetmonitor (~> 1) aws-sdk-iot (~> 1) aws-sdk-iot1clickdevicesservice (~> 1) aws-sdk-iot1clickprojects (~> 1) aws-sdk-iotanalytics (~> 1) aws-sdk-iotdataplane (~> 1) + aws-sdk-iotdeviceadvisor (~> 1) aws-sdk-iotevents (~> 1) aws-sdk-ioteventsdata (~> 1) + aws-sdk-iotfleethub (~> 1) + aws-sdk-iotfleetwise (~> 1) aws-sdk-iotjobsdataplane (~> 1) + aws-sdk-iotroborunner (~> 1) + aws-sdk-iotsecuretunneling (~> 1) + aws-sdk-iotsitewise (~> 1) aws-sdk-iotthingsgraph (~> 1) + aws-sdk-iottwinmaker (~> 1) + aws-sdk-iotwireless (~> 1) + aws-sdk-ivs (~> 1) + aws-sdk-ivschat (~> 1) + aws-sdk-ivsrealtime (~> 1) aws-sdk-kafka (~> 1) + aws-sdk-kafkaconnect (~> 1) + aws-sdk-kendra (~> 1) + aws-sdk-kendraranking (~> 1) + aws-sdk-keyspaces (~> 1) aws-sdk-kinesis (~> 1) aws-sdk-kinesisanalytics (~> 1) aws-sdk-kinesisanalyticsv2 (~> 1) aws-sdk-kinesisvideo (~> 1) aws-sdk-kinesisvideoarchivedmedia (~> 1) aws-sdk-kinesisvideomedia (~> 1) + aws-sdk-kinesisvideosignalingchannels (~> 1) + aws-sdk-kinesisvideowebrtcstorage (~> 1) aws-sdk-kms (~> 1) aws-sdk-lakeformation (~> 1) aws-sdk-lambda (~> 1) aws-sdk-lambdapreview (~> 1) aws-sdk-lex (~> 1) aws-sdk-lexmodelbuildingservice (~> 1) + aws-sdk-lexmodelsv2 (~> 1) + aws-sdk-lexruntimev2 (~> 1) aws-sdk-licensemanager (~> 1) + aws-sdk-licensemanagerlinuxsubscriptions (~> 1) + aws-sdk-licensemanagerusersubscriptions (~> 1) aws-sdk-lightsail (~> 1) + aws-sdk-locationservice (~> 1) + aws-sdk-lookoutequipment (~> 1) + aws-sdk-lookoutforvision (~> 1) + aws-sdk-lookoutmetrics (~> 1) aws-sdk-machinelearning (~> 1) aws-sdk-macie (~> 1) + aws-sdk-macie2 (~> 1) + aws-sdk-mainframemodernization (~> 1) aws-sdk-managedblockchain (~> 1) + aws-sdk-managedblockchainquery (~> 1) + aws-sdk-managedgrafana (~> 1) aws-sdk-marketplacecatalog (~> 1) aws-sdk-marketplacecommerceanalytics (~> 1) aws-sdk-marketplaceentitlementservice (~> 1) @@ -686,19 +1188,41 @@ GEM aws-sdk-mediaconvert (~> 1) aws-sdk-medialive (~> 1) aws-sdk-mediapackage (~> 1) + aws-sdk-mediapackagev2 (~> 1) aws-sdk-mediapackagevod (~> 1) aws-sdk-mediastore (~> 1) aws-sdk-mediastoredata (~> 1) aws-sdk-mediatailor (~> 1) + aws-sdk-medicalimaging (~> 1) + aws-sdk-memorydb (~> 1) + aws-sdk-mgn (~> 1) aws-sdk-migrationhub (~> 1) aws-sdk-migrationhubconfig (~> 1) + aws-sdk-migrationhuborchestrator (~> 1) + aws-sdk-migrationhubrefactorspaces (~> 1) + aws-sdk-migrationhubstrategyrecommendations (~> 1) aws-sdk-mobile (~> 1) aws-sdk-mq (~> 1) aws-sdk-mturk (~> 1) + aws-sdk-mwaa (~> 1) aws-sdk-neptune (~> 1) + aws-sdk-neptunedata (~> 1) + aws-sdk-networkfirewall (~> 1) + aws-sdk-networkmanager (~> 1) + aws-sdk-nimblestudio (~> 1) + aws-sdk-oam (~> 1) + aws-sdk-omics (~> 1) + aws-sdk-opensearchserverless (~> 1) + aws-sdk-opensearchservice (~> 1) aws-sdk-opsworks (~> 1) aws-sdk-opsworkscm (~> 1) aws-sdk-organizations (~> 1) + aws-sdk-osis (~> 1) + aws-sdk-outposts (~> 1) + aws-sdk-panorama (~> 1) + aws-sdk-paymentcryptography (~> 1) + aws-sdk-paymentcryptographydata (~> 1) + aws-sdk-pcaconnectorad (~> 1) aws-sdk-personalize (~> 1) aws-sdk-personalizeevents (~> 1) aws-sdk-personalizeruntime (~> 1) @@ -706,29 +1230,51 @@ GEM aws-sdk-pinpoint (~> 1) aws-sdk-pinpointemail (~> 1) aws-sdk-pinpointsmsvoice (~> 1) + aws-sdk-pinpointsmsvoicev2 (~> 1) + aws-sdk-pipes (~> 1) aws-sdk-polly (~> 1) aws-sdk-pricing (~> 1) + aws-sdk-privatenetworks (~> 1) + aws-sdk-prometheusservice (~> 1) + aws-sdk-proton (~> 1) aws-sdk-qldb (~> 1) aws-sdk-qldbsession (~> 1) aws-sdk-quicksight (~> 1) aws-sdk-ram (~> 1) aws-sdk-rds (~> 1) aws-sdk-rdsdataservice (~> 1) + aws-sdk-recyclebin (~> 1) aws-sdk-redshift (~> 1) + aws-sdk-redshiftdataapiservice (~> 1) + aws-sdk-redshiftserverless (~> 1) aws-sdk-rekognition (~> 1) + aws-sdk-resiliencehub (~> 1) + aws-sdk-resourceexplorer2 (~> 1) aws-sdk-resourcegroups (~> 1) aws-sdk-resourcegroupstaggingapi (~> 1) aws-sdk-robomaker (~> 1) + aws-sdk-rolesanywhere (~> 1) aws-sdk-route53 (~> 1) aws-sdk-route53domains (~> 1) + aws-sdk-route53recoverycluster (~> 1) + aws-sdk-route53recoverycontrolconfig (~> 1) + aws-sdk-route53recoveryreadiness (~> 1) aws-sdk-route53resolver (~> 1) aws-sdk-s3 (~> 1) aws-sdk-s3control (~> 1) + aws-sdk-s3outposts (~> 1) aws-sdk-sagemaker (~> 1) + aws-sdk-sagemakeredgemanager (~> 1) + aws-sdk-sagemakerfeaturestoreruntime (~> 1) + aws-sdk-sagemakergeospatial (~> 1) + aws-sdk-sagemakermetrics (~> 1) aws-sdk-sagemakerruntime (~> 1) aws-sdk-savingsplans (~> 1) + aws-sdk-scheduler (~> 1) + aws-sdk-schemas (~> 1) aws-sdk-secretsmanager (~> 1) aws-sdk-securityhub (~> 1) + aws-sdk-securitylake (~> 1) aws-sdk-serverlessapplicationrepository (~> 1) aws-sdk-servicecatalog (~> 1) aws-sdk-servicediscovery (~> 1) @@ -738,202 +1284,304 @@ GEM aws-sdk-shield (~> 1) aws-sdk-signer (~> 1) aws-sdk-simpledb (~> 1) + aws-sdk-simspaceweaver (~> 1) aws-sdk-sms (~> 1) aws-sdk-snowball (~> 1) + aws-sdk-snowdevicemanagement (~> 1) aws-sdk-sns (~> 1) aws-sdk-sqs (~> 1) aws-sdk-ssm (~> 1) - aws-sdk-sso (~> 1) - aws-sdk-ssooidc (~> 1) + aws-sdk-ssmcontacts (~> 1) + aws-sdk-ssmincidents (~> 1) + aws-sdk-ssmsap (~> 1) + aws-sdk-ssoadmin (~> 1) aws-sdk-states (~> 1) aws-sdk-storagegateway (~> 1) aws-sdk-support (~> 1) + aws-sdk-supportapp (~> 1) aws-sdk-swf (~> 1) + aws-sdk-synthetics (~> 1) aws-sdk-textract (~> 1) + aws-sdk-timestreamquery (~> 1) + aws-sdk-timestreamwrite (~> 1) + aws-sdk-tnb (~> 1) aws-sdk-transcribeservice (~> 1) aws-sdk-transcribestreamingservice (~> 1) aws-sdk-transfer (~> 1) aws-sdk-translate (~> 1) + aws-sdk-verifiedpermissions (~> 1) + aws-sdk-voiceid (~> 1) + aws-sdk-vpclattice (~> 1) aws-sdk-waf (~> 1) aws-sdk-wafregional (~> 1) + aws-sdk-wafv2 (~> 1) + aws-sdk-wellarchitected (~> 1) aws-sdk-workdocs (~> 1) aws-sdk-worklink (~> 1) aws-sdk-workmail (~> 1) aws-sdk-workmailmessageflow (~> 1) aws-sdk-workspaces (~> 1) + aws-sdk-workspacesweb (~> 1) aws-sdk-xray (~> 1) - aws-sdk-robomaker (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-robomaker (1.58.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-route53 (1.30.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-rolesanywhere (1.8.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-route53domains (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-route53 (1.78.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-route53resolver (1.11.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-route53domains (1.51.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.57.0) - aws-sdk-core (~> 3, >= 3.77.0) + aws-sdk-route53recoverycluster (1.18.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-route53recoverycontrolconfig (1.18.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-route53recoveryreadiness (1.17.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-route53resolver (1.47.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3 (1.134.0) + aws-sdk-core (~> 3, >= 3.181.0) aws-sdk-kms (~> 1) + aws-sigv4 (~> 1.6) + aws-sdk-s3control (1.69.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-s3outposts (1.22.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-sagemaker (1.209.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-s3control (1.13.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-sagemakeredgemanager (1.19.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-sagemaker (1.47.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-sagemakerfeaturestoreruntime (1.23.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-sagemakerruntime (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-sagemakergeospatial (1.8.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-savingsplans (1.1.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-sagemakermetrics (1.7.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-secretsmanager (1.32.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-sagemakerruntime (1.55.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-securityhub (1.14.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-savingsplans (1.34.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-serverlessapplicationrepository (1.22.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-scheduler (1.8.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-servicecatalog (1.33.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-schemas (1.30.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-servicediscovery (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-secretsmanager (1.82.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-servicequotas (1.3.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-securityhub (1.92.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-ses (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-securitylake (1.11.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-sesv2 (1.0.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-serverlessapplicationrepository (1.51.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-shield (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-servicecatalog (1.86.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-signer (1.17.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-servicediscovery (1.56.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-simpledb (1.16.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-servicequotas (1.31.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-ses (1.55.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-sesv2 (1.39.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-shield (1.56.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-signer (1.46.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-simpledb (1.40.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv2 (~> 1.0) - aws-sdk-sms (1.17.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-simspaceweaver (1.10.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-sms (1.48.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-snowball (1.60.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-snowdevicemanagement (1.14.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-sns (1.65.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-sqs (1.62.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-ssm (1.156.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-ssmcontacts (1.22.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-ssmincidents (1.27.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-ssmsap (1.9.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-ssoadmin (1.29.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-states (1.58.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-storagegateway (1.75.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-snowball (1.22.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-support (1.51.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-sns (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-supportapp (1.9.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-sqs (1.23.1) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-swf (1.46.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-ssm (1.64.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-synthetics (1.35.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-sso (1.0.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-textract (1.50.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-ssooidc (1.0.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-timestreamquery (1.23.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-states (1.23.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-timestreamwrite (1.23.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-storagegateway (1.34.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-tnb (1.6.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-support (1.17.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-transcribeservice (1.88.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-swf (1.17.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-transcribestreamingservice (1.51.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-textract (1.11.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-transfer (1.78.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-transcribeservice (1.33.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-translate (1.58.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-transcribestreamingservice (1.10.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-verifiedpermissions (1.9.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-transfer (1.15.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-voiceid (1.17.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-translate (1.18.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-vpclattice (1.7.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-waf (1.26.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-waf (1.54.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-wafregional (1.27.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-wafregional (1.55.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-workdocs (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-wafv2 (1.68.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-worklink (1.12.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-wellarchitected (1.28.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-workmail (1.19.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-workdocs (1.49.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-workmailmessageflow (1.1.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-worklink (1.40.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-workspaces (1.31.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-workmail (1.58.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sdk-xray (1.21.0) - aws-sdk-core (~> 3, >= 3.71.0) + aws-sdk-workmailmessageflow (1.28.0) + aws-sdk-core (~> 3, >= 3.177.0) aws-sigv4 (~> 1.1) - aws-sigv2 (1.0.1) - aws-sigv4 (1.1.0) - aws-eventstream (~> 1.0, >= 1.0.2) - bcrypt (3.1.18) - bcrypt_pbkdf (1.0.1) + aws-sdk-workspaces (1.87.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-workspacesweb (1.14.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sdk-xray (1.58.0) + aws-sdk-core (~> 3, >= 3.177.0) + aws-sigv4 (~> 1.1) + aws-sigv2 (1.1.0) + aws-sigv4 (1.6.0) + aws-eventstream (~> 1, >= 1.0.2) + base64 (0.1.1) + bcrypt (3.1.19) + bcrypt_pbkdf (1.1.0) bindex (0.8.1) - bixby (3.0.2) - rubocop (= 0.85.1) - rubocop-ast (~> 0.3.0) + bixby (5.0.2) + rubocop (= 1.28.2) + rubocop-ast rubocop-performance rubocop-rails rubocop-rspec - blacklight (7.4.1) + blacklight (7.33.1) deprecation globalid + hashdiff + i18n (>= 1.7.0) jbuilder (~> 2.7) kaminari (>= 0.15) - rails (>= 5.1, < 7) - blacklight-marc (7.0.0.rc1) - blacklight (> 7.0.0.a, < 8.a) + ostruct (>= 0.3.2) + rails (>= 5.1, < 7.1) + view_component (~> 2.66) + blacklight-marc (8.1.0) + blacklight (>= 7.11, < 9) library_stdnums - marc (>= 0.4.3, < 1.1) + marc (>= 0.4.3, < 2.0) marc-fastxmlwriter rails traject (~> 3.0) blacklight_advanced_search (7.0.0) blacklight (~> 7.0) parslet - blacklight_range_limit (7.4.0) - blacklight (>= 7.0) - bootstrap (4.3.1) + blacklight_range_limit (8.3.0) + blacklight (>= 7.25.2, < 9) + deprecation + bootstrap (4.6.2) autoprefixer-rails (>= 9.1.0) - popper_js (>= 1.14.3, < 2) + popper_js (>= 1.16.1, < 2) sassc-rails (>= 2.0.0) bootstrap-select-rails (1.13.8) builder (3.2.4) - byebug (11.0.1) - cancancan (3.0.2) - capistrano (3.17.1) + byebug (11.1.3) + cancancan (3.5.0) + capistrano (3.17.3) airbrussh (>= 1.0.0) i18n rake (>= 10.0.0) @@ -944,15 +1592,16 @@ GEM capistrano (>= 1.0.0) capistrano-passenger (0.2.1) capistrano (~> 3.0) - capistrano-rails (1.4.0) + capistrano-rails (1.6.3) capistrano (~> 3.1) - capistrano-bundler (~> 1.1) + capistrano-bundler (>= 1.1, < 3) capistrano-rails-collection (0.1.0) capistrano-rails (~> 1.1) - capistrano-sidekiq (1.0.3) + capistrano-sidekiq (2.3.1) capistrano (>= 3.9.0) - sidekiq (>= 3.4, < 6.0) - capybara (3.38.0) + capistrano-bundler + sidekiq (>= 6.0) + capybara (3.39.2) addressable matrix mini_mime (>= 0.1.3) @@ -964,10 +1613,10 @@ GEM chronic (0.10.2) citeproc (1.0.10) namae (~> 1.0) - citeproc-ruby (1.1.12) + citeproc-ruby (2.0.0) citeproc (~> 1.0, >= 1.0.9) - csl (~> 1.5) - coderay (1.1.2) + csl (~> 2.0) + coderay (1.1.3) coffee-rails (4.2.2) coffee-script (>= 2.2.0) railties (>= 4.0.0) @@ -975,132 +1624,138 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - colorize (0.8.1) + colorize (1.1.0) concurrent-ruby (1.2.2) - connection_pool (2.2.5) - coveralls (0.8.23) - json (>= 1.8, < 3) - simplecov (~> 0.16.1) - term-ansicolor (~> 1.3) - thor (>= 0.19.4, < 2.0) - tins (~> 1.6) + connection_pool (2.4.1) crass (1.0.6) - csl (1.5.1) + csl (2.0.0) namae (~> 1.0) - csl-styles (1.0.1.10) - csl (~> 1.0) + rexml + csl-styles (2.0.1) + csl (~> 2.0) date (3.3.3) datetime_picker_rails (0.0.7) momentjs-rails (>= 2.8.1) - deprecation (1.0.0) + deprecation (1.1.0) activesupport - devise (4.8.1) + devise (4.9.2) bcrypt (~> 3.0) orm_adapter (~> 0.1) railties (>= 4.1.0) responders warden (~> 1.2.3) diff-lcs (1.5.0) - docile (1.3.2) + docile (1.4.0) domain_name (0.5.20190701) unf (>= 0.0.5, < 1.0.0) - dot-properties (0.1.3) - dotenv (2.7.5) - dotenv-rails (2.7.5) - dotenv (= 2.7.5) - railties (>= 3.2, < 6.1) - ed25519 (1.2.4) + dot-properties (0.1.4) + bundler (>= 2.2.33) + dotenv (2.8.1) + dotenv-rails (2.8.1) + dotenv (= 2.8.1) + railties (>= 3.2) + ed25519 (1.3.0) erubi (1.12.0) - execjs (2.7.0) + execjs (2.9.0) factory_bot (4.11.1) activesupport (>= 3.0.0) factory_bot_rails (4.11.1) factory_bot (~> 4.11.1) railties (>= 3.0.0) - faraday (0.17.0) - multipart-post (>= 1.2, < 3) - ffaker (2.13.0) - ffi (1.11.3) - globalid (1.1.0) - activesupport (>= 5.0) - hashie (3.6.0) + faraday (2.7.11) + base64 + faraday-net_http (>= 2.0, < 3.1) + ruby2_keywords (>= 0.0.4) + faraday-net_http (3.0.2) + ffaker (2.22.0) + ffi (1.15.5) + ffi-compiler (1.0.1) + ffi (>= 1.0.0) + rake + globalid (1.2.1) + activesupport (>= 6.1) + hashdiff (1.0.1) + hashie (5.0.0) honeybadger (4.12.2) - http (3.3.0) - addressable (~> 2.3) + http (5.1.1) + addressable (~> 2.8) http-cookie (~> 1.0) - http-form_data (~> 2.0) - http_parser.rb (~> 0.6.0) - http-cookie (1.0.3) + http-form_data (~> 2.2) + llhttp-ffi (~> 0.4.0) + http-cookie (1.0.5) domain_name (~> 0.5) - http-form_data (2.1.1) - http_parser.rb (0.6.0) + http-form_data (2.3.0) httpclient (2.8.3) - i18n (1.13.0) + i18n (1.14.1) concurrent-ruby (~> 1.0) - jbuilder (2.9.1) - activesupport (>= 4.2.0) - jmespath (1.6.1) - jquery-rails (4.4.0) + jbuilder (2.11.5) + actionview (>= 5.0.0) + activesupport (>= 5.0.0) + jmespath (1.6.2) + jquery-rails (4.6.0) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) - json (2.3.1) - kaminari (1.2.1) + json (2.6.3) + kaminari (1.2.2) activesupport (>= 4.1.0) - kaminari-actionview (= 1.2.1) - kaminari-activerecord (= 1.2.1) - kaminari-core (= 1.2.1) - kaminari-actionview (1.2.1) + kaminari-actionview (= 1.2.2) + kaminari-activerecord (= 1.2.2) + kaminari-core (= 1.2.2) + kaminari-actionview (1.2.2) actionview - kaminari-core (= 1.2.1) - kaminari-activerecord (1.2.1) + kaminari-core (= 1.2.2) + kaminari-activerecord (1.2.2) activerecord - kaminari-core (= 1.2.1) - kaminari-core (1.2.1) + kaminari-core (= 1.2.2) + kaminari-core (1.2.2) library_stdnums (1.6.0) - listen (3.1.5) + listen (3.0.8) rb-fsevent (~> 0.9, >= 0.9.4) rb-inotify (~> 0.9, >= 0.9.7) - ruby_dep (~> 1.2) - loofah (2.20.0) + llhttp-ffi (0.4.0) + ffi-compiler (~> 1.0) + rake (~> 13.0) + loofah (2.21.3) crass (~> 1.0.2) - nokogiri (>= 1.5.9) - mail (2.8.0) + nokogiri (>= 1.12.0) + mail (2.8.1) mini_mime (>= 0.1.1) net-imap net-pop net-smtp - marc (1.0.4) + marc (1.2.0) + rexml scrub_rb (>= 1.0.1, < 2) unf - marc-fastxmlwriter (1.0.0) + marc-fastxmlwriter (1.1.0) marc (~> 1.0) marcel (1.0.2) matrix (0.4.2) - method_source (0.9.2) - mini_mime (1.1.2) - mini_portile2 (2.8.4) - minitest (5.18.0) + method_source (1.0.0) + mini_mime (1.1.5) + minitar (0.9) + minitest (5.20.0) momentjs-rails (2.29.4.1) railties (>= 3.1) - multipart-post (2.1.1) - mysql2 (0.5.2) - namae (1.0.1) - net-imap (0.3.4) + mysql2 (0.5.5) + namae (1.1.1) + net-imap (0.3.7) date net-protocol net-pop (0.1.2) net-protocol net-protocol (0.2.1) timeout - net-scp (1.2.1) - net-ssh (>= 2.6.5) + net-scp (4.0.0) + net-ssh (>= 2.6.5, < 8.0.0) net-smtp (0.3.3) net-protocol - net-ssh (7.0.1) + net-ssh (7.2.0) nio4r (2.5.9) - nokogiri (1.15.4) - mini_portile2 (~> 2.8.2) + nokogiri (1.15.4-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.15.4-x86_64-linux) racc (~> 1.4) omniauth (1.9.2) hashie (>= 3.4.6) @@ -1108,78 +1763,83 @@ GEM omniauth-shibboleth (1.3.0) omniauth (>= 1.0.0) orm_adapter (0.5.0) - parallel (1.22.1) - parser (3.1.2.1) + ostruct (0.5.5) + parallel (1.23.0) + parser (3.2.2.3) ast (~> 2.4.1) - parslet (1.8.2) - popper_js (1.14.5) - pry (0.12.2) - coderay (~> 1.1.0) - method_source (~> 0.9.0) - pry-byebug (3.7.0) + racc + parslet (2.0.0) + popper_js (1.16.1) + pry (0.14.2) + coderay (~> 1.1) + method_source (~> 1.0) + pry-byebug (3.10.1) byebug (~> 11.0) - pry (~> 0.10) - public_suffix (5.0.1) - puma (5.6.7) + pry (>= 0.13, < 0.15) + public_suffix (5.0.3) + puma (6.3.1) nio4r (~> 2.0) racc (1.7.1) - rack (2.2.7) - rack-protection (3.0.5) - rack + rack (2.2.8) rack-test (2.1.0) rack (>= 1.3) - rails (5.2.8.1) - actioncable (= 5.2.8.1) - actionmailer (= 5.2.8.1) - actionpack (= 5.2.8.1) - actionview (= 5.2.8.1) - activejob (= 5.2.8.1) - activemodel (= 5.2.8.1) - activerecord (= 5.2.8.1) - activestorage (= 5.2.8.1) - activesupport (= 5.2.8.1) - bundler (>= 1.3.0) - railties (= 5.2.8.1) - sprockets-rails (>= 2.0.0) - rails-controller-testing (1.0.4) - actionpack (>= 5.0.1.x) - actionview (>= 5.0.1.x) - activesupport (>= 5.0.1.x) - rails-dom-testing (2.0.3) - activesupport (>= 4.2.0) + rails (7.0.7.2) + actioncable (= 7.0.7.2) + actionmailbox (= 7.0.7.2) + actionmailer (= 7.0.7.2) + actionpack (= 7.0.7.2) + actiontext (= 7.0.7.2) + actionview (= 7.0.7.2) + activejob (= 7.0.7.2) + activemodel (= 7.0.7.2) + activerecord (= 7.0.7.2) + activestorage (= 7.0.7.2) + activesupport (= 7.0.7.2) + bundler (>= 1.15.0) + railties (= 7.0.7.2) + rails-controller-testing (1.0.5) + actionpack (>= 5.0.1.rc1) + actionview (>= 5.0.1.rc1) + activesupport (>= 5.0.1.rc1) + rails-dom-testing (2.2.0) + activesupport (>= 5.0.0) + minitest nokogiri (>= 1.6) - rails-html-sanitizer (1.5.0) - loofah (~> 2.19, >= 2.19.1) - railties (5.2.8.1) - actionpack (= 5.2.8.1) - activesupport (= 5.2.8.1) + rails-html-sanitizer (1.6.0) + loofah (~> 2.21) + nokogiri (~> 1.14) + railties (7.0.7.2) + actionpack (= 7.0.7.2) + activesupport (= 7.0.7.2) method_source - rake (>= 0.8.7) - thor (>= 0.19.0, < 2.0) + rake (>= 12.2) + thor (~> 1.0) + zeitwerk (~> 2.5) rainbow (3.1.1) rake (13.0.6) - rb-fsevent (0.10.3) - rb-inotify (0.10.0) + rb-fsevent (0.11.2) + rb-inotify (0.10.1) ffi (~> 1.0) - redis (4.5.1) - regexp_parser (2.6.1) - responders (3.0.1) - actionpack (>= 5.0) - railties (>= 5.0) + redis-client (0.17.0) + connection_pool + regexp_parser (2.8.1) + responders (3.1.0) + actionpack (>= 5.2) + railties (>= 5.2) retriable (3.1.2) rexml (3.2.6) - rsolr (2.2.1) + rsolr (2.5.0) builder (>= 2.1.2) - faraday (>= 0.9.0) - rspec-core (3.12.0) + faraday (>= 0.9, < 3, != 2.0.0) + rspec-core (3.12.2) rspec-support (~> 3.12.0) - rspec-expectations (3.12.2) + rspec-expectations (3.12.3) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) rspec-its (1.3.0) rspec-core (>= 3.0.0) rspec-expectations (>= 3.0.0) - rspec-mocks (3.12.2) + rspec-mocks (3.12.6) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.12.0) rspec-rails (5.1.2) @@ -1190,43 +1850,33 @@ GEM rspec-expectations (~> 3.10) rspec-mocks (~> 3.10) rspec-support (~> 3.10) - rspec-support (3.12.0) - rspec_junit_formatter (0.4.1) + rspec-support (3.12.1) + rspec_junit_formatter (0.6.0) rspec-core (>= 2, < 4, != 2.12.0) - rubocop (0.85.1) + rubocop (1.28.2) parallel (~> 1.10) - parser (>= 2.7.0.1) + parser (>= 3.1.0.0) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.7) + regexp_parser (>= 1.8, < 3.0) rexml - rubocop-ast (>= 0.0.3) + rubocop-ast (>= 1.17.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 2.0) - rubocop-ast (0.3.0) - parser (>= 2.7.1.4) - rubocop-performance (1.7.1) - rubocop (>= 0.82.0) - rubocop-rails (2.6.0) + unicode-display_width (>= 1.4.0, < 3.0) + rubocop-ast (1.29.0) + parser (>= 3.2.1.0) + rubocop-performance (1.19.0) + rubocop (>= 1.7.0, < 2.0) + rubocop-ast (>= 0.4.0) + rubocop-rails (2.15.2) activesupport (>= 4.2.0) rack (>= 1.1) - rubocop (>= 0.82.0) - rubocop-rspec (1.41.0) - rubocop (>= 0.68.1) - ruby-progressbar (1.11.0) - ruby_dep (1.5.0) + rubocop (>= 1.7.0, < 2.0) + rubocop-rspec (2.11.1) + rubocop (~> 1.19) + ruby-progressbar (1.13.0) + ruby2_keywords (0.0.5) rubyzip (2.3.2) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sass-rails (5.0.7) - railties (>= 4.0.0, < 6) - sass (~> 3.1) - sprockets (>= 2.8, < 4.0) - sprockets-rails (>= 2.0, < 4.0) - tilt (>= 1.1, < 3) - sassc (2.2.1) + sassc (2.4.0) ffi (~> 1.9) sassc-rails (2.1.2) railties (>= 4.0.0) @@ -1236,109 +1886,106 @@ GEM tilt scrub_rb (1.0.1) selectize-rails (0.12.6) - selenium-webdriver (4.9.0) + selenium-webdriver (4.10.0) rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) - sidekiq (5.2.10) - connection_pool (~> 2.2, >= 2.2.2) - rack (~> 2.0) - rack-protection (>= 1.5.0) - redis (~> 4.5, < 4.6.0) - simple_form (5.0.1) - actionpack (>= 5.0) - activemodel (>= 5.0) + sidekiq (7.1.4) + concurrent-ruby (< 2) + connection_pool (>= 2.3.0) + rack (>= 2.2.4) + redis-client (>= 0.14.0) + simple_form (5.2.0) + actionpack (>= 5.2) + activemodel (>= 5.2) simplecov (0.16.1) docile (~> 1.1) json (>= 1.8, < 3) simplecov-html (~> 0.10.0) simplecov-html (0.10.2) - slop (3.6.0) - solr_wrapper (2.1.0) - faraday + slop (4.10.1) + solr_wrapper (4.0.2) + http + minitar retriable ruby-progressbar - rubyzip - spring (2.1.0) - spring-watcher-listen (2.0.1) - listen (>= 2.7, < 4.0) - spring (>= 1.2, < 3.0) - sprockets (3.7.2) + spring (4.1.1) + sprockets (4.2.1) concurrent-ruby (~> 1.0) - rack (> 1, < 3) + rack (>= 2.2.4, < 4) sprockets-rails (3.4.2) actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) - sshkit (1.21.2) + sshkit (1.21.5) net-scp (>= 1.1.2) net-ssh (>= 2.8.0) - term-ansicolor (1.7.1) - tins (~> 1.0) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - thor (1.2.1) - thread_safe (0.3.6) - tilt (2.0.10) - timeout (0.3.1) - tins (1.22.2) - traject (3.2.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + thor (1.2.2) + tilt (2.2.0) + timeout (0.4.0) + traject (3.8.1) concurrent-ruby (>= 0.8.0) dot-properties (>= 0.1.1) - hashie (~> 3.1) - http (~> 3.0) + hashie (>= 3.1, < 6) + http (>= 3.0, < 6) httpclient (~> 2.5) marc (~> 1.0) marc-fastxmlwriter (~> 1.0) nokogiri (~> 1.9) - slop (>= 3.4.5, < 4.0) + slop (~> 4.0) yell twitter-typeahead-rails (0.11.1.pre.corejavascript) actionpack (>= 3.1) jquery-rails railties (>= 3.1) - tzinfo (1.2.11) - thread_safe (~> 0.1) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) uglifier (4.2.0) execjs (>= 0.3.0, < 3) unf (0.1.4) unf_ext - unf_ext (0.0.7.6) - unicode-display_width (1.8.0) + unf_ext (0.0.8.2) + unicode-display_width (2.4.2) + view_component (2.82.0) + activesupport (>= 5.2.0, < 8.0) + concurrent-ruby (~> 1.0) + method_source (~> 1.0) warden (1.2.9) rack (>= 2.0.9) - web-console (3.7.0) - actionview (>= 5.0) - activemodel (>= 5.0) + web-console (4.2.1) + actionview (>= 6.0.0) + activemodel (>= 6.0.0) bindex (>= 0.4.0) - railties (>= 5.0) + railties (>= 6.0.0) webdrivers (5.3.0) nokogiri (~> 1.6) rubyzip (>= 1.3.0) selenium-webdriver (~> 4.0, < 4.11) websocket (1.2.9) - websocket-driver (0.7.5) + websocket-driver (0.7.6) websocket-extensions (>= 0.1.0) websocket-extensions (0.1.5) whenever (1.0.0) chronic (>= 0.6.3) xpath (3.2.0) nokogiri (~> 1.8) - xray-rails (0.3.2) - rails (>= 3.1.0) - yell (2.2.0) + yell (2.2.2) + zeitwerk (2.6.11) PLATFORMS - ruby + x86_64-darwin-21 + x86_64-linux DEPENDENCIES administrate (~> 0.17.0) bcrypt_pbkdf - bixby (~> 3.0.1) - blacklight (>= 7) + bixby + blacklight (= 7.33.1) blacklight-access_controls! blacklight-marc (>= 7.0.0.rc1) - blacklight_advanced_search (~> 7.0) + blacklight_advanced_search blacklight_range_limit bootstrap (~> 4.0) bootstrap-select-rails (>= 1.13) @@ -1354,7 +2001,6 @@ DEPENDENCIES capybara citeproc-ruby coffee-rails (~> 4.2) - coveralls csl-styles devise dotenv-rails @@ -1371,28 +2017,28 @@ DEPENDENCIES pry pry-byebug puma - rails (~> 5.2.0) + rails (~> 7.0, >= 7.0.7.2) rails-controller-testing rsolr (>= 1.0) rspec-its rspec-rails (~> 5.0) rspec_junit_formatter - sass-rails (~> 5.0) + sassc-rails (~> 2.1) selenium-webdriver simple_form + simplecov solr_wrapper (>= 0.3) spring - spring-watcher-listen (~> 2.0.0) twitter-typeahead-rails (= 0.11.1.pre.corejavascript) tzinfo-data uglifier (>= 1.3.0) web-console (>= 3.3.0) webdrivers (= 5.3.0) whenever - xray-rails + xray-rails! RUBY VERSION - ruby 2.7.5p203 + ruby 3.1.2p20 BUNDLED WITH - 1.17.3 + 2.3.22 diff --git a/app/assets/stylesheets/lux/_facets.scss b/app/assets/stylesheets/lux/_facets.scss index f6140d3b..463a3503 100644 --- a/app/assets/stylesheets/lux/_facets.scss +++ b/app/assets/stylesheets/lux/_facets.scss @@ -144,4 +144,16 @@ section#sidebar.search { color: $bright-blue; text-decoration: none; } -} \ No newline at end of file +} + +.facet-pagination.bottom, .facet-pagination.top { + flex: 1; + margin: 0.25rem; + > .sort-options { + float: right; + } +} + +.facet-pagination.top { + padding: 0.75rem; +} diff --git a/app/assets/stylesheets/lux/_sort_widgets.scss b/app/assets/stylesheets/lux/_sort_widgets.scss index 796fdb2b..f768686d 100644 --- a/app/assets/stylesheets/lux/_sort_widgets.scss +++ b/app/assets/stylesheets/lux/_sort_widgets.scss @@ -16,7 +16,7 @@ div#sortAndPerPage { right: 0; } - > div.sort-tools > div.per-page-dropdown, div#sort-dropdown { + > .sort-tools > .search-widgets > div#per_page-dropdown, div#sort-dropdown { > button.dropdown-toggle { border-radius: $results-border-radius; } @@ -27,7 +27,7 @@ div#sortAndPerPage { } } - > div.sort-tools > div.per-page-dropdown { + > .sort-tools > .search-widgets > div#per_page-dropdown { > .dropdown-menu { min-width: $results-drop-menu-min-w; } diff --git a/app/components/blacklight/document_metadata_component.html.erb b/app/components/blacklight/document_metadata_component.html.erb new file mode 100644 index 00000000..bb714933 --- /dev/null +++ b/app/components/blacklight/document_metadata_component.html.erb @@ -0,0 +1,7 @@ +
+ <% fields.each do |field| -%> +
+ <%= field %> +
+ <% end -%> +
diff --git a/app/components/blacklight/document_metadata_component.rb b/app/components/blacklight/document_metadata_component.rb new file mode 100644 index 00000000..ee738453 --- /dev/null +++ b/app/components/blacklight/document_metadata_component.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module Blacklight + class DocumentMetadataComponent < Blacklight::Component + renders_many :fields, (lambda do |component: nil, **kwargs| + (component || Lux::MetadataFieldComponent).new(**kwargs) + end) + with_collection_parameter :fields + + # @param fields [Enumerable] Document field presenters + def initialize(fields: [], show: false) + @fields = fields + @show = show + end + + def before_render + return unless fields + + @fields.each do |field| + field(component: field_component(field), field:, show: @show) + end + end + + def render? + fields.present? + end + + def field_component(field) + field&.component || Lux::MetadataFieldComponent + end + end +end diff --git a/app/components/blacklight/search_bar_component.html.erb b/app/components/blacklight/search_bar_component.html.erb new file mode 100644 index 00000000..66c071ce --- /dev/null +++ b/app/components/blacklight/search_bar_component.html.erb @@ -0,0 +1,40 @@ +<%# Blacklight v7.33.1 Override - changes the classes/ids to match our previous setup %> +<%= form_tag @url, method: @method, class: @classes.join(' '), role: 'search', aria: { label: scoped_t('submit') }, **@form_options do %> + <%= render_hash_as_hidden_fields(@params) %> + <% if search_fields.length > 1 %> + <%# Additional class added below %> + + <% end %> + <% before_input_groups.each do |input_group| %> + <%= input_group %> + <% end %> + <%# Additional class and id added below %> +
+ <%= prepend %> + + <% if search_fields.length > 1 %> + <%# Title removed, classes reworked, and our data-style enforced below %> + <%= select_tag(:search_field, + options_for_select(search_fields, h(@search_field)), + id: "#{@prefix}search_field", + class: "selectpicker form-select search-field col-3", + "data-style" => "fielded-search") %> + <% elsif search_fields.length == 1 %> + <%= hidden_field_tag :search_field, search_fields.first.last %> + <% end %> + + <%# Additional class added below %> + + <%# Classes reconfigured below %> + <%= text_field_tag @query_param, @q, placeholder: scoped_t('search.placeholder'), class: "search-q q form-control col-8", id: "#{@prefix}q", autocomplete: autocomplete_path.present? ? "off" : "", autofocus: @autofocus, aria: { label: scoped_t('search.label') }, data: { autocomplete_enabled: autocomplete_path.present?, autocomplete_path: autocomplete_path } %> + + + <%= append %> + <%= search_button || render(::Blacklight::SearchButtonComponent.new(id: "#{@prefix}search", text: scoped_t('submit'))) %> + +
+<% end %> + +<% if advanced_search_enabled? %> + <%= link_to t('blacklight.advanced_search.more_options'), @advanced_search_url, class: 'advanced_search btn btn-secondary'%> +<% end %> \ No newline at end of file diff --git a/app/components/blacklight/search_bar_component.rb b/app/components/blacklight/search_bar_component.rb new file mode 100644 index 00000000..c479ae91 --- /dev/null +++ b/app/components/blacklight/search_bar_component.rb @@ -0,0 +1,88 @@ +# frozen_string_literal: true +# Blacklight 7.33.1 Override - This portion has been left unchanged, but is needed here to be rspec'ed. + +module Blacklight + class SearchBarComponent < Blacklight::Component + include Blacklight::ContentAreasShim + + renders_one :append + renders_one :prepend + renders_one :search_button + renders_many :before_input_groups + + # rubocop:disable Metrics/ParameterLists + def initialize( + url:, params:, + advanced_search_url: nil, presenter: nil, + classes: ['search-query-form'], prefix: nil, + method: 'GET', q: nil, query_param: :q, + search_field: nil, search_fields: nil, autocomplete_path: nil, + autofocus: nil, i18n: { scope: 'blacklight.search.form' }, + form_options: {} + ) + @url = url + @advanced_search_url = advanced_search_url + @q = q || params[:q] + @query_param = query_param + @search_field = search_field || params[:search_field] + @params = params.except(:q, :search_field, :utf8, :page) + @prefix = prefix + @classes = classes + @method = method + @autocomplete_path = autocomplete_path + @autofocus = autofocus + @search_fields = search_fields + @i18n = i18n + @form_options = form_options + + return if presenter.nil? + + Deprecation.warn(self, 'SearchBarComponent no longer uses a SearchBarPresenter, the presenter: param will be removed in 8.0. ' \ + 'Set advanced_search.enabled, autocomplete_enabled, and enable_search_bar_autofocus on BlacklightConfiguration') + end + # rubocop:enable Metrics/ParameterLists + + def autocomplete_path + return nil unless blacklight_config.autocomplete_enabled + + @autocomplete_path + end + + def autofocus + if @autofocus.nil? + blacklight_config.enable_search_bar_autofocus && + controller.is_a?(Blacklight::Catalog) && + controller.action_name == "index" && + !controller.has_search_parameters? + else + @autofocus + end + end + + def search_fields + @search_fields ||= blacklight_config.search_fields.values + .select { |field_def| helpers.should_render_field?(field_def) } + .collect { |field_def| [helpers.label_for_search_field(field_def.key), field_def.key] } + end + + def advanced_search_enabled? + blacklight_config.advanced_search.enabled + end + + private + + def blacklight_config + helpers.blacklight_config + end + + def render_hash_as_hidden_fields(*args) + Deprecation.silence(Blacklight::HashAsHiddenFieldsHelperBehavior) do + helpers.render_hash_as_hidden_fields(*args) + end + end + + def scoped_t(key, **args) + t(key, default: t(key, scope: 'blacklight.search.form'), **@i18n, **args) + end + end +end diff --git a/app/components/blacklight/search_button_component.rb b/app/components/blacklight/search_button_component.rb new file mode 100644 index 00000000..547ed341 --- /dev/null +++ b/app/components/blacklight/search_button_component.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +module Blacklight + class SearchButtonComponent < ::ViewComponent::Base + def initialize(text:, id:) + @text = text + @id = id + end + + def call + tag.button(class: 'btn btn-primary search-btn rounded-0', type: 'submit', id: @id) do + tag.span(@text, class: "submit-search-text") + end + end + end +end diff --git a/app/components/blacklight/start_over_button_component.rb b/app/components/blacklight/start_over_button_component.rb new file mode 100644 index 00000000..b59a006e --- /dev/null +++ b/app/components/blacklight/start_over_button_component.rb @@ -0,0 +1,21 @@ +# frozen_string_literal: true +# Blacklight v7.33.1 Override - use our classes instead + +module Blacklight + class StartOverButtonComponent < Blacklight::Component + def call + link_to t('blacklight.search.start_over'), start_over_path, class: 'catalog_startOverLink button link' + end + + private + + ## + # Get the path to the search action with any parameters (e.g. view type) + # that should be persisted across search sessions. + def start_over_path(query_params = params) + Deprecation.silence(Blacklight::UrlHelperBehavior) do + helpers.start_over_path(query_params) + end + end + end +end diff --git a/app/views/catalog/_breadcrumbs.html.erb b/app/components/lux/breadcrumbs_component.html.erb similarity index 100% rename from app/views/catalog/_breadcrumbs.html.erb rename to app/components/lux/breadcrumbs_component.html.erb diff --git a/app/components/lux/breadcrumbs_component.rb b/app/components/lux/breadcrumbs_component.rb new file mode 100644 index 00000000..83228e2a --- /dev/null +++ b/app/components/lux/breadcrumbs_component.rb @@ -0,0 +1,47 @@ +# frozen_string_literal: true + +module Lux + class BreadcrumbsComponent < Blacklight::Component + attr_reader :crumb_hashes + + def initialize(document: nil, crumb_hashes: []) + @document = document + @crumb_hashes = crumb_hashes + end + + def before_render + @crumb_hashes = @document.present? ? page_breadcrumbs_parser : @crumb_hashes + end + + def page_breadcrumbs_parser + if @document.parent_collection + parent_coll_arr + elsif @document.no_parent_work_w_collection + no_par_work_w_coll_arr + elsif @document.parent_work_w_collection + par_work_w_coll_arr + elsif @document.parent_work_no_collection + par_work_w_no_coll + else + [@document.item_breadcrumb] + end + end + + # breadcrumb hash arrays + def parent_coll_arr + [@document.back_parent_coll_breadcrumb, @document.item_breadcrumb] + end + + def no_par_work_w_coll_arr + [@document.back_collection_breadcrumb, @document.item_breadcrumb] + end + + def par_work_w_coll_arr + [@document.back_collection_breadcrumb, @document.back_parent_breadcrumb, @document.item_breadcrumb] + end + + def par_work_w_no_coll + [@document.back_parent_breadcrumb, @document.item_breadcrumb] + end + end +end diff --git a/app/components/lux/citation/modal_component.html.erb b/app/components/lux/citation/modal_component.html.erb new file mode 100644 index 00000000..b7b2f7d1 --- /dev/null +++ b/app/components/lux/citation/modal_component.html.erb @@ -0,0 +1,21 @@ +<%# Blacklight v7.33.1 rewrite of app/components/blacklight/system/modal_component.html.erb %> +
+ + + <%= body || (capture do %> + + <% end) %> + <% if footer.present? %> + + <% end %> +
\ No newline at end of file diff --git a/app/components/lux/citation/modal_component.rb b/app/components/lux/citation/modal_component.rb new file mode 100644 index 00000000..1bcfaa4a --- /dev/null +++ b/app/components/lux/citation/modal_component.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# Blacklight v7.33.1 rewrite of app/components/blacklight/system/modal_component.rb + +module Lux + module Citation + class ModalComponent < ViewComponent::Base + include ::Blacklight::ContentAreasShim + + renders_one :body + renders_one :footer + end + end +end diff --git a/app/components/lux/document/citation_component.html.erb b/app/components/lux/document/citation_component.html.erb new file mode 100644 index 00000000..a5050528 --- /dev/null +++ b/app/components/lux/document/citation_component.html.erb @@ -0,0 +1,10 @@ +<%# Blacklight v7.33.1 Overwrite - make it match our desired output %> +
+

<%= title %>

+ + <% @formats.each do |i18n_key, citation_method| %> +

<%= t(i18n_key) %>

+ <%= sanitize(@generator.citation_for(citation_method)) %> +

+ <% end %> +
\ No newline at end of file diff --git a/app/components/lux/document/citation_component.rb b/app/components/lux/document/citation_component.rb new file mode 100644 index 00000000..ec57c5b1 --- /dev/null +++ b/app/components/lux/document/citation_component.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true +# Blacklight v7.33.1 Override - use our logic instead +require './lib/emory/citation_formatter' + +class Lux::Document::CitationComponent < Blacklight::Document::CitationComponent + attr_reader :generator + DEFAULT_FORMATS = { + 'blacklight.citation.mla': 'modern-language-association', + 'blacklight.citation.apa': 'apa', + 'blacklight.citation.chicago': 'chicago-fullnote-bibliography' + }.freeze + + # @param [Blacklight::Document] document + # @param [Hash Symbol>] formats map of citation format names (suspiciously, i18n keys + # for them) to document methods that return the formatted citation. + def initialize(document:, formats: DEFAULT_FORMATS) + @document = document + @formats = formats + end + + def before_render + @generator = ::Emory::CitationFormatter.new(@document) + end +end diff --git a/app/components/lux/explore_collections_component.html.erb b/app/components/lux/explore_collections_component.html.erb new file mode 100644 index 00000000..6f2a5273 --- /dev/null +++ b/app/components/lux/explore_collections_component.html.erb @@ -0,0 +1,16 @@ +
+

<%= link_to 'Explore Our Collections', explore_collections_path, class: "browse-link" %>

+
+
+ <% collections.each do |c| %> +
+
+
Featured Collection
+
<%= image_tag c.banner_path, alt: c.title %>
+ <%= link_to c.title, c.collection_path, class: "link tile-listing-title" %> +

<%= c.description %>

+ <%= link_to "View Collection", c.collection_path, class: "link tile-listing-action mt-auto" %> +
+
+ <% end %> +
\ No newline at end of file diff --git a/app/components/lux/explore_collections_component.rb b/app/components/lux/explore_collections_component.rb new file mode 100644 index 00000000..99d435c8 --- /dev/null +++ b/app/components/lux/explore_collections_component.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Lux + class ExploreCollectionsComponent < Blacklight::Component + attr_reader :collections + + def initialize + @collections = ::ExploreCollectionsPresenter.new.collections + end + + def explore_collections_path + helpers.search_action_path('f[has_model_ssim][]' => 'Collection', 'f[visibility_ssi][]' => 'open') + end + end +end diff --git a/app/components/lux/hero_image_component.html.erb b/app/components/lux/hero_image_component.html.erb new file mode 100644 index 00000000..2bc638b9 --- /dev/null +++ b/app/components/lux/hero_image_component.html.erb @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/app/components/lux/hero_image_component.rb b/app/components/lux/hero_image_component.rb new file mode 100644 index 00000000..c5eee958 --- /dev/null +++ b/app/components/lux/hero_image_component.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Lux + class HeroImageComponent < Blacklight::Component + attr_reader :image1, :remaining_images + + def initialize + images = ::HeroImagePresenter.new.images + @image1 = images.first + @remaining_images = images.drop(1) + end + end +end diff --git a/app/components/lux/metadata/about_this_collection_component.html.erb b/app/components/lux/metadata/about_this_collection_component.html.erb new file mode 100644 index 00000000..f560002b --- /dev/null +++ b/app/components/lux/metadata/about_this_collection_component.html.erb @@ -0,0 +1,29 @@ +<% if fields.count > 0 %> +
+
About This Collection
+
+
+ <% fields.each do |field_name, field| %> +
+
+ <%= helpers.render_document_show_field_label(document, field: field_name) %> +
+ <% if field_name == "finding_aid_link_ssm" %> +
+ Finding Aid +
+ <% else %> +
+ <% if helpers.field_is_for_dates?(field_name) %> + <%= helpers.dates_on_separate_lines(document, field_name).html_safe %> + <% else %> + <%= document_presenter.field_value(field) %> + <% end %> +
+ <% end %> +
+ <% end %> +
+
+
+<% end %> diff --git a/app/components/lux/metadata/about_this_collection_component.rb b/app/components/lux/metadata/about_this_collection_component.rb new file mode 100644 index 00000000..d02c9723 --- /dev/null +++ b/app/components/lux/metadata/about_this_collection_component.rb @@ -0,0 +1,20 @@ +# frozen_string_literal: true + +module Lux + module Metadata + class AboutThisCollectionComponent < Blacklight::Component + attr_reader :document, :document_presenter, :fields + + def initialize(document:) + @document = document + end + + def before_render + @document_presenter = helpers.document_presenter(@document) + @fields = ::MetadataPresenter.new( + document: @document_presenter.fields_to_render + ).terms(:about_this_collection) + end + end + end +end diff --git a/app/components/lux/metadata/about_this_item_component.html.erb b/app/components/lux/metadata/about_this_item_component.html.erb new file mode 100644 index 00000000..7b1ada65 --- /dev/null +++ b/app/components/lux/metadata/about_this_item_component.html.erb @@ -0,0 +1,24 @@ +<% if fields.count > 0 %> +
+
About This Item
+
+ <%= present_resolution_download_restriction %> +
+ <% fields.each do |field_name, field| %> +
+
+ <%= helpers.render_document_show_field_label(document, field: field_name) %> +
+
+ <% if helpers.field_is_for_dates?(field_name) %> + <%= helpers.dates_on_separate_lines(document, field_name).html_safe %> + <% else %> + <%= document_presenter.field_value(field) %> + <% end %> +
+
+ <% end %> +
+
+
+<% end %> diff --git a/app/components/lux/metadata/about_this_item_component.rb b/app/components/lux/metadata/about_this_item_component.rb new file mode 100644 index 00000000..a9293825 --- /dev/null +++ b/app/components/lux/metadata/about_this_item_component.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Lux + module Metadata + class AboutThisItemComponent < Blacklight::Component + attr_reader :document, :document_presenter, :fields + + def initialize(document:) + @document = document + end + + def present_resolution_download_restriction + sanitize(helpers.resolution_download_restriction(@document)) + end + + def before_render + @document_presenter = helpers.document_presenter(@document) + @fields = ::AboutThisItemPresenter.new( + document: @document_presenter.fields_to_render + ).terms + end + end + end +end diff --git a/app/components/lux/metadata/access_and_copyright_component.html.erb b/app/components/lux/metadata/access_and_copyright_component.html.erb new file mode 100644 index 00000000..bb3abcfd --- /dev/null +++ b/app/components/lux/metadata/access_and_copyright_component.html.erb @@ -0,0 +1,28 @@ +<% if this_is_work %> + +<% end %> diff --git a/app/components/lux/metadata/access_and_copyright_component.rb b/app/components/lux/metadata/access_and_copyright_component.rb new file mode 100644 index 00000000..aa89f7d7 --- /dev/null +++ b/app/components/lux/metadata/access_and_copyright_component.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: true + +module Lux + module Metadata + class AccessAndCopyrightComponent < Blacklight::Component + attr_reader :document, :document_presenter, :fields, :emory_rights_statement, + :rights_statement, :human_readable_rights_statement + + def initialize(document:) + @document = document + end + + def this_is_work + @document["has_model_ssim"]&.first == "CurateGenericWork" + end + + def rights_statment_non_applicable + @rights_statement == "Not Applicable" + end + + def before_render + @emory_rights_statement = @document["emory_rights_statements_tesim"]&.first + @rights_statement = @document["rights_statement_tesim"]&.first + @human_readable_rights_statement = @document["human_readable_rights_statement_ssim"]&.first + @document_presenter = helpers.document_presenter(@document) + @fields = ::MetadataPresenter.new( + document: @document_presenter.fields_to_render + ).terms(:access_and_copyright) + end + end + end +end diff --git a/app/components/lux/metadata/find_this_item_component.html.erb b/app/components/lux/metadata/find_this_item_component.html.erb new file mode 100644 index 00000000..6caa3b13 --- /dev/null +++ b/app/components/lux/metadata/find_this_item_component.html.erb @@ -0,0 +1,18 @@ +<% if fields.count > 0 %> +
+
<%= title %>
+
+
+ <% fields.each do |field_name, field| %> +
+
+ <%= helpers.find_item_field_label(document, field_name) %>
+
+ <%= helpers.find_item_field_value(document_presenter, field, field_name) %> +
+
+ <% end %> +
+
+
+<% end %> diff --git a/app/components/lux/metadata/find_this_item_component.rb b/app/components/lux/metadata/find_this_item_component.rb new file mode 100644 index 00000000..a39c15ee --- /dev/null +++ b/app/components/lux/metadata/find_this_item_component.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true + +module Lux + module Metadata + class FindThisItemComponent < Blacklight::Component + attr_reader :document, :document_presenter, :fields, :title + def initialize(document:) + @document = document + end + + def this_is_collection + @document["has_model_ssim"]&.first == "Collection" + end + + def before_render + @title = this_is_collection ? 'Find This Collection' : 'Find This Item' + @document_presenter = helpers.document_presenter(@document) + @fields = ::MetadataPresenter.new( + document: @document_presenter.fields_to_render + ).terms(:find_this_item) + end + end + end +end diff --git a/app/components/lux/metadata/first_column_component.html.erb b/app/components/lux/metadata/first_column_component.html.erb new file mode 100644 index 00000000..4b3d0c8f --- /dev/null +++ b/app/components/lux/metadata/first_column_component.html.erb @@ -0,0 +1,8 @@ +
+ <%= is_part_of %> + <% if this_is_collection %> + <%= render ::Lux::Metadata::ViewItemsInCollectionComponent.new(document: document) %> + <% end %> + <%= find_this_item %> + <%= related_material %> +
diff --git a/app/components/lux/metadata/first_column_component.rb b/app/components/lux/metadata/first_column_component.rb new file mode 100644 index 00000000..066e47a6 --- /dev/null +++ b/app/components/lux/metadata/first_column_component.rb @@ -0,0 +1,39 @@ +# frozen_string_literal: true + +module Lux + module Metadata + class FirstColumnComponent < Blacklight::Component + attr_reader :document + renders_one :is_part_of, (lambda do + ::Lux::Metadata::IsPartOfComponent.new(document: @document) + end) + renders_one :find_this_item, (lambda do + ::Lux::Metadata::FindThisItemComponent.new(document: @document) + end) + renders_one :related_material, (lambda do + ::Lux::Metadata::GenericMetadataComponent.new( + document: @document, + presenter_klass: ::RelatedMaterialPresenter, + presenter_container_class: 'related-material', + title: 'Related Material', + add_class_dt: 'col-md-12', + add_class_dd: 'col-md-12' + ) + end) + + def initialize(document:) + @document = document + end + + def this_is_collection + @document["has_model_ssim"]&.first == "Collection" + end + + def before_render + set_slot(:is_part_of, nil) + set_slot(:find_this_item, nil) + set_slot(:related_material, nil) + end + end + end +end diff --git a/app/views/catalog/_metadata_block.html.erb b/app/components/lux/metadata/generic_metadata_component.html.erb similarity index 51% rename from app/views/catalog/_metadata_block.html.erb rename to app/components/lux/metadata/generic_metadata_component.html.erb index c4e71194..9038f5e3 100644 --- a/app/views/catalog/_metadata_block.html.erb +++ b/app/components/lux/metadata/generic_metadata_component.html.erb @@ -1,20 +1,18 @@ -<% doc_presenter = show_presenter(document) %> -<% fields = presenter.new(document: doc_presenter.fields_to_render).terms %> -<% if fields.length > 0 %> -
+<% if fields.count > 0 %> +
<%= title %>
<% fields.each do |field_name, field| %>
- <%= render_document_show_field_label document, field: field_name %> + <%= helpers.render_document_show_field_label document, field: field_name %>
- <% if field_is_for_dates?(field_name) %> - <%= dates_on_separate_lines(document, field_name).html_safe %> + <% if helpers.field_is_for_dates?(field_name) %> + <%= helpers.dates_on_separate_lines(document, field_name).html_safe %> <% else %> - <%= doc_presenter.field_value field %> + <%= document_presenter.field_value field %> <% end %>
diff --git a/app/components/lux/metadata/generic_metadata_component.rb b/app/components/lux/metadata/generic_metadata_component.rb new file mode 100644 index 00000000..def821b1 --- /dev/null +++ b/app/components/lux/metadata/generic_metadata_component.rb @@ -0,0 +1,34 @@ +# frozen_string_literal: true + +# rubocop:disable Metrics/ParameterLists +module Lux + module Metadata + class GenericMetadataComponent < Blacklight::Component + attr_reader :document, :presenter_container_class, :title, :add_class_dt, + :add_class_dd, :document_presenter, :fields + def initialize( + document:, + presenter_klass:, + presenter_container_class:, + title:, + add_class_dt:, + add_class_dd: + ) + @document = document + @presenter_klass = presenter_klass + @presenter_container_class = presenter_container_class + @title = title + @add_class_dt = add_class_dt + @add_class_dd = add_class_dd + end + + def before_render + @document_presenter = helpers.document_presenter(@document) + @fields = @presenter_klass.new( + document: @document_presenter.fields_to_render + ).terms + end + end + end +end +# rubocop:enable Metrics/ParameterLists diff --git a/app/components/lux/metadata/is_part_of_component.html.erb b/app/components/lux/metadata/is_part_of_component.html.erb new file mode 100644 index 00000000..b8286635 --- /dev/null +++ b/app/components/lux/metadata/is_part_of_component.html.erb @@ -0,0 +1,37 @@ + + +<% if fields.count > 0 %> +
+
This item is part of:
+
+
+ <% if collection_member_present %> +
+
><%= col_title || "Parent Collection" %>
+ <% end %> + <% if parent_work_present %> +
+
><%= link_title %>
+ <% end %> +
+
+
+<% end %> diff --git a/app/components/lux/metadata/is_part_of_component.rb b/app/components/lux/metadata/is_part_of_component.rb new file mode 100644 index 00000000..f2281db1 --- /dev/null +++ b/app/components/lux/metadata/is_part_of_component.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true + +module Lux + module Metadata + class IsPartOfComponent < Blacklight::Component + attr_reader :fields, :source_collection_title, :title, :holding_repository, + :human_readable_content_type, :link, :link_title, :col_link, :col_title + + def initialize(document:) + @document = document + end + + def collection_member_present + @document['member_of_collection_ids_ssim'].present? + end + + def parent_work_present + @document['parent_work_for_lux_tesim'].present? + end + + def before_render + pull_variables_from_document + document_presenter = helpers.document_presenter(@document) + @fields = ::MetadataPresenter.new( + document: document_presenter.fields_to_render + ).terms(:is_part_of) + + if @source_collection_id.present? && @member_of_collection_id != @source_collection_id + @col_link = @source_collection_id + @col_title = @document.source_collection_title + else + @col_link = @member_of_collection_id + @col_title = @member_of_collection + end + end + + def pull_variables_from_document + @source_collection_title = @document['source_collection_title_ssim']&.first + @title = @document['title_tesim'].first + @holding_repository = @document['holding_repository_tesim']&.first + @human_readable_content_type = @document['human_readable_content_type_ssim']&.first + @member_of_collection_id = @document['member_of_collection_ids_ssim']&.first + @source_collection_id = @document['source_collection_id_tesim']&.first + @member_of_collection = @document["member_of_collections_ssim"]&.first + @link, @link_title = @document['parent_work_for_lux_tesim']&.first&.split(', ') + end + end + end +end diff --git a/app/components/lux/metadata/mobile_component.html.erb b/app/components/lux/metadata/mobile_component.html.erb new file mode 100644 index 00000000..abff762a --- /dev/null +++ b/app/components/lux/metadata/mobile_component.html.erb @@ -0,0 +1,14 @@ +<% if this_is_collection %> + <%= render ::Lux::Metadata::ViewItemsInCollectionComponent.new(document: document) %> +<% end %> +<%= is_part_of %> +<% if this_is_collection %> + <%= render ::Lux::Metadata::AboutThisCollectionComponent.new(document: document) %> +<% end %> +<% if this_is_work %> + <%= render ::Lux::Metadata::AboutThisItemComponent.new(document: document) %> +<% end %> +<%= render "catalog/show_tools", document: document %> +<%= subject_keywords %> +<%= find_this_item %> +<%= access_and_copyright %> \ No newline at end of file diff --git a/app/components/lux/metadata/mobile_component.rb b/app/components/lux/metadata/mobile_component.rb new file mode 100644 index 00000000..c5630e4d --- /dev/null +++ b/app/components/lux/metadata/mobile_component.rb @@ -0,0 +1,49 @@ +# frozen_string_literal: true +# Note: This component has no rspec associated to it because of the partial call +# in the html requiring Warden helpers that aren't available in Component specs. + +module Lux + module Metadata + class MobileComponent < Blacklight::Component + attr_reader :document + renders_one :is_part_of, (lambda do + ::Lux::Metadata::IsPartOfComponent.new(document: @document) + end) + renders_one :subject_keywords, (lambda do + ::Lux::Metadata::GenericMetadataComponent.new( + document: @document, + presenter_klass: ::SubjectsKeywordsPresenter, + presenter_container_class: 'subjects-keywords', + title: 'Subjects / Keywords', + add_class_dt: 'col-md-5', + add_class_dd: 'col-md-7' + ) + end) + renders_one :find_this_item, (lambda do + ::Lux::Metadata::FindThisItemComponent.new(document: @document) + end) + renders_one :access_and_copyright, (lambda do + ::Lux::Metadata::AccessAndCopyrightComponent.new(document: @document) + end) + + def initialize(document:) + @document = document + end + + def this_is_collection + @document["has_model_ssim"]&.first == "Collection" + end + + def this_is_work + @document["has_model_ssim"]&.first == "CurateGenericWork" + end + + def before_render + set_slot(:is_part_of, nil) + set_slot(:subject_keywords, nil) + set_slot(:find_this_item, nil) + set_slot(:access_and_copyright, nil) + end + end + end +end diff --git a/app/components/lux/metadata/second_column_component.html.erb b/app/components/lux/metadata/second_column_component.html.erb new file mode 100644 index 00000000..87be909f --- /dev/null +++ b/app/components/lux/metadata/second_column_component.html.erb @@ -0,0 +1,12 @@ +
+ <% if this_is_collection %> + <%= render ::Lux::Metadata::AboutThisCollectionComponent.new(document: document) %> + <% end %> + <% if this_is_work %> + <%= render ::Lux::Metadata::ThisItemContainsComponent.new(document: document) %> + <%= render ::Lux::Metadata::AboutThisItemComponent.new(document: document) %> + <% end %> + <%= subject_keywords %> + <%= publication_details %> + <%= additional_details %> +
\ No newline at end of file diff --git a/app/components/lux/metadata/second_column_component.rb b/app/components/lux/metadata/second_column_component.rb new file mode 100644 index 00000000..67e80114 --- /dev/null +++ b/app/components/lux/metadata/second_column_component.rb @@ -0,0 +1,57 @@ +# frozen_string_literal: true + +module Lux + module Metadata + class SecondColumnComponent < Blacklight::Component + attr_reader :document + renders_one :subject_keywords, (lambda do + ::Lux::Metadata::GenericMetadataComponent.new( + document: @document, + presenter_klass: ::SubjectsKeywordsPresenter, + presenter_container_class: 'subjects-keywords', + title: 'Subjects / Keywords', + add_class_dt: 'col-md-5', + add_class_dd: 'col-md-7' + ) + end) + renders_one :publication_details, (lambda do + ::Lux::Metadata::GenericMetadataComponent.new( + document: @document, + presenter_klass: ::PublicationDetailsPresenter, + presenter_container_class: 'publication-details', + title: 'Publication Details', + add_class_dt: 'col-md-5', + add_class_dd: 'col-md-7' + ) + end) + renders_one :additional_details, (lambda do + ::Lux::Metadata::GenericMetadataComponent.new( + document: @document, + presenter_klass: ::AdditionalDetailsPresenter, + presenter_container_class: 'additional-details', + title: 'Additional Details', + add_class_dt: 'col-md-5', + add_class_dd: 'col-md-7' + ) + end) + + def initialize(document:) + @document = document + end + + def this_is_collection + @document["has_model_ssim"]&.first == "Collection" + end + + def this_is_work + @document["has_model_ssim"]&.first == "CurateGenericWork" + end + + def before_render + set_slot(:subject_keywords, nil) + set_slot(:publication_details, nil) + set_slot(:additional_details, nil) + end + end + end +end diff --git a/app/components/lux/metadata/third_column_component.html.erb b/app/components/lux/metadata/third_column_component.html.erb new file mode 100644 index 00000000..513eb8f6 --- /dev/null +++ b/app/components/lux/metadata/third_column_component.html.erb @@ -0,0 +1,4 @@ +
+ <%= render "catalog/show_tools", document: document %> + <%= access_and_copyright %> +
\ No newline at end of file diff --git a/app/components/lux/metadata/third_column_component.rb b/app/components/lux/metadata/third_column_component.rb new file mode 100644 index 00000000..91fd178c --- /dev/null +++ b/app/components/lux/metadata/third_column_component.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true +# Note: This component has no rspec associated to it because of the partial call +# in the html requiring Warden helpers that aren't available in Component specs. + +module Lux + module Metadata + class ThirdColumnComponent < Blacklight::Component + attr_reader :document + + renders_one :access_and_copyright, (lambda do + ::Lux::Metadata::AccessAndCopyrightComponent.new(document: @document) + end) + + def initialize(document:) + @document = document + end + + def before_render + set_slot(:access_and_copyright, nil) + end + end + end +end diff --git a/app/views/catalog/_this_item_contains_block.html.erb b/app/components/lux/metadata/this_item_contains_component.html.erb similarity index 53% rename from app/views/catalog/_this_item_contains_block.html.erb rename to app/components/lux/metadata/this_item_contains_component.html.erb index 5d389056..b3fa3246 100644 --- a/app/views/catalog/_this_item_contains_block.html.erb +++ b/app/components/lux/metadata/this_item_contains_component.html.erb @@ -1,11 +1,10 @@ -<% child_works = presenter.new(document: document).children %> <% if child_works %> -
+
<%= t('blacklight.work.this_item_contains') %>
<% child_works.each do |w| %>
-
>
+
>
><%= w[:title] %>
<% end %> diff --git a/app/components/lux/metadata/this_item_contains_component.rb b/app/components/lux/metadata/this_item_contains_component.rb new file mode 100644 index 00000000..ea19a6a9 --- /dev/null +++ b/app/components/lux/metadata/this_item_contains_component.rb @@ -0,0 +1,18 @@ +# frozen_string_literal: true + +module Lux + module Metadata + class ThisItemContainsComponent < Blacklight::Component + attr_reader :child_works, :thumbnail_url + + def initialize(document:) + @document = document + end + + def before_render + @child_works = ::ThisItemContainsPresenter.new(document: @document).children + @thumbnail_url = ENV['THUMBNAIL_URL'] || '' + end + end + end +end diff --git a/app/components/lux/metadata/view_items_in_collection_component.html.erb b/app/components/lux/metadata/view_items_in_collection_component.html.erb new file mode 100644 index 00000000..471b7d08 --- /dev/null +++ b/app/components/lux/metadata/view_items_in_collection_component.html.erb @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/app/components/lux/metadata/view_items_in_collection_component.rb b/app/components/lux/metadata/view_items_in_collection_component.rb new file mode 100644 index 00000000..18b9ead6 --- /dev/null +++ b/app/components/lux/metadata/view_items_in_collection_component.rb @@ -0,0 +1,17 @@ +# frozen_string_literal: true + +module Lux + module Metadata + class ViewItemsInCollectionComponent < Blacklight::Component + attr_reader :formatted_title + + def initialize(document:) + @document = document + end + + def before_render + @formatted_title = CGI.escape(@document[:title_tesim]&.first) + end + end + end +end diff --git a/app/components/lux/metadata_field_component.html.erb b/app/components/lux/metadata_field_component.html.erb new file mode 100644 index 00000000..9770c44b --- /dev/null +++ b/app/components/lux/metadata_field_component.html.erb @@ -0,0 +1,8 @@ +<%= render(@layout.new(field: @field)) do |component| %> + <% component.label do %> + <%= label %> + <% end %> + <% component.value do %> + <%= @field.render %> + <% end %> +<% end %> \ No newline at end of file diff --git a/app/components/lux/metadata_field_component.rb b/app/components/lux/metadata_field_component.rb new file mode 100644 index 00000000..595f5e9a --- /dev/null +++ b/app/components/lux/metadata_field_component.rb @@ -0,0 +1,16 @@ +# frozen_string_literal: true + +# NOTE: This is a copy of Blacklight v7.33.1's Blacklight::MetadataFieldComponent. +# It is necessary to bring Components that are called within an overridden component +# into an application using Blacklight because they expect the Components being called +# to be within the same directory. Tests will be copied as well. +class Lux::MetadataFieldComponent < Blacklight::MetadataFieldComponent + # @param field [Blacklight::FieldPresenter] + # @param layout [Blacklight::MetadataFieldLayoutComponent] alternate layout component to use + # @param show [Boolean] are we showing only a single document (vs a list of search results); used for backwards-compatibility + def initialize(field:, layout: nil, show: false) + @field = field + @layout = layout || Lux::MetadataFieldLayoutComponent + @show = show + end +end diff --git a/app/components/lux/metadata_field_layout_component.html.erb b/app/components/lux/metadata_field_layout_component.html.erb new file mode 100644 index 00000000..b8c1528f --- /dev/null +++ b/app/components/lux/metadata_field_layout_component.html.erb @@ -0,0 +1,4 @@ +
<%= label %>
+<% values.each do |v| %> + <%= v %> +<% end %> \ No newline at end of file diff --git a/app/components/lux/metadata_field_layout_component.rb b/app/components/lux/metadata_field_layout_component.rb new file mode 100644 index 00000000..2de0ec6b --- /dev/null +++ b/app/components/lux/metadata_field_layout_component.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true +# Blacklight v7.33.1 Override - changes the label and value classes to what we expect. +# There is no spec written for this component in Blacklight. + +class Lux::MetadataFieldLayoutComponent < Blacklight::MetadataFieldLayoutComponent + # @param field [Blacklight::FieldPresenter] + def initialize(field:, label_class: 'index-field-name', value_class: '') + @field = field + @key = @field.key.parameterize + @label_class = label_class + @value_class = value_class + end +end diff --git a/app/components/lux/response/facet_group_component.html.erb b/app/components/lux/response/facet_group_component.html.erb new file mode 100644 index 00000000..e077dd63 --- /dev/null +++ b/app/components/lux/response/facet_group_component.html.erb @@ -0,0 +1,59 @@ +<%# Blacklight v7.33.1 Override - enforces our own classes for desired styling and gtagging %> +<%# main container for facets/limits menu %> +<%= content_tag :div, id: @id, class: 'facets sidenav facets-toggleable-md' do %> + + + <%= content_tag :div, id: @panel_id, class: 'facets-collapse collapse mt-3' do %> + <% ::Deprecation.silence(::Blacklight::FacetsHelperBehavior) do %> + <%= helpers.render_facet_partials @fields, response: @response %> + <% end %> + <% end %> +<% end %> + + \ No newline at end of file diff --git a/app/components/lux/response/facet_group_component.rb b/app/components/lux/response/facet_group_component.rb new file mode 100644 index 00000000..26ade407 --- /dev/null +++ b/app/components/lux/response/facet_group_component.rb @@ -0,0 +1,4 @@ +# frozen_string_literal: true + +class Lux::Response::FacetGroupComponent < Blacklight::Response::FacetGroupComponent # Render a group of facet fields +end diff --git a/app/components/lux/show_all_metadata_component.html.erb b/app/components/lux/show_all_metadata_component.html.erb new file mode 100644 index 00000000..8083503f --- /dev/null +++ b/app/components/lux/show_all_metadata_component.html.erb @@ -0,0 +1,8 @@ +
+
<%= first_column %>
+
<%= second_column %>
+
<%= third_column %>
+
+
+
<%= mobile %>
+
\ No newline at end of file diff --git a/app/components/lux/show_all_metadata_component.rb b/app/components/lux/show_all_metadata_component.rb new file mode 100644 index 00000000..4ca5c328 --- /dev/null +++ b/app/components/lux/show_all_metadata_component.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +module Lux + class ShowAllMetadataComponent < Blacklight::Component + renders_one :first_column, (lambda do + ::Lux::Metadata::FirstColumnComponent.new(document: @document) + end) + renders_one :second_column, (lambda do + ::Lux::Metadata::SecondColumnComponent.new(document: @document) + end) + renders_one :third_column, (lambda do + ::Lux::Metadata::ThirdColumnComponent.new(document: @document) + end) + renders_one :mobile, (lambda do + ::Lux::Metadata::MobileComponent.new(document: @document) + end) + + def initialize(document:) + @document = document + end + + def before_render + set_slot(:first_column, nil) + set_slot(:second_column, nil) + set_slot(:third_column, nil) + set_slot(:mobile, nil) + end + end +end diff --git a/app/components/lux/show_document_component.html.erb b/app/components/lux/show_document_component.html.erb new file mode 100644 index 00000000..8a8b6900 --- /dev/null +++ b/app/components/lux/show_document_component.html.erb @@ -0,0 +1,7 @@ +<% if show_nothing_tester %> +<% elsif show_banner_tester %> + class="img-fluid" id="collection-banner" title="collection feature image"> +<% else %> + <%= render ::Lux::ShowUvComponent.new(doc_id: document.id, request_base_url: request_base_url) %> +<% end %> +<%= all_metadata %> \ No newline at end of file diff --git a/app/components/lux/show_document_component.rb b/app/components/lux/show_document_component.rb new file mode 100644 index 00000000..6becec09 --- /dev/null +++ b/app/components/lux/show_document_component.rb @@ -0,0 +1,35 @@ +# frozen_string_literal: true + +module Lux + class ShowDocumentComponent < Blacklight::Component + attr_reader :document, :request_base_url + + renders_one :all_metadata, (lambda do + ::Lux::ShowAllMetadataComponent.new(document: @document) + end) + + def initialize(document:, request_base_url:) + @document = document + @request_base_url = request_base_url + @thumbnail_url = ENV['THUMBNAIL_URL'] || '' + end + + def show_nothing_tester + @document["child_works_for_lux_tesim"] || ( + @document["has_model_ssim"] == ["Collection"] && @document["banner_path_ss"].nil? + ) + end + + def show_banner_tester + @document["has_model_ssim"] == ["Collection"] && @document["banner_path_ss"].present? + end + + def banner_source + @thumbnail_url + @document["banner_path_ss"] + end + + def before_render + set_slot(:all_metadata, nil) + end + end +end diff --git a/app/components/lux/show_uv_component.html.erb b/app/components/lux/show_uv_component.html.erb new file mode 100644 index 00000000..0ece370d --- /dev/null +++ b/app/components/lux/show_uv_component.html.erb @@ -0,0 +1,12 @@ +
+ +
+
\ No newline at end of file diff --git a/app/components/lux/show_uv_component.rb b/app/components/lux/show_uv_component.rb new file mode 100644 index 00000000..686eff78 --- /dev/null +++ b/app/components/lux/show_uv_component.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +module Lux + class ShowUvComponent < Blacklight::Component + attr_reader :doc_id, :request_base_url, :iiif_url + + def initialize(doc_id:, request_base_url:) + @doc_id = doc_id + @request_base_url = request_base_url + @iiif_url = Rails.application.config.iiif_url + end + end +end diff --git a/app/components/lux/static_content_component.html.erb b/app/components/lux/static_content_component.html.erb new file mode 100644 index 00000000..707a9374 --- /dev/null +++ b/app/components/lux/static_content_component.html.erb @@ -0,0 +1,2 @@ +

<%= header_text %>

+

<%= body_text %>

\ No newline at end of file diff --git a/app/components/lux/static_content_component.rb b/app/components/lux/static_content_component.rb new file mode 100644 index 00000000..e4948d41 --- /dev/null +++ b/app/components/lux/static_content_component.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Lux + class StaticContentComponent < Blacklight::Component + attr_reader :header_class, :header_text, :body_class, :body_text + + def initialize(header_class:, header_text:, body_class:, body_text:) + @header_class = ['static-blurb-header', header_class].join(' ') + @header_text = header_text + @body_class = ['static-blurb-body', body_class].join(' ') + @body_text = sanitize(body_text) + end + end +end diff --git a/app/views/static/_static_heading.html.erb b/app/components/lux/static_heading_component.html.erb similarity index 95% rename from app/views/static/_static_heading.html.erb rename to app/components/lux/static_heading_component.html.erb index d6b3d1b5..ecfca1a1 100644 --- a/app/views/static/_static_heading.html.erb +++ b/app/components/lux/static_heading_component.html.erb @@ -2,4 +2,4 @@

<%= subheading %>


-
+
\ No newline at end of file diff --git a/app/components/lux/static_heading_component.rb b/app/components/lux/static_heading_component.rb new file mode 100644 index 00000000..377313d2 --- /dev/null +++ b/app/components/lux/static_heading_component.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Lux + class StaticHeadingComponent < Blacklight::Component + attr_reader :title, :subheading + + def initialize(title:, subheading:) + @title = title + @subheading = subheading + end + end +end diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index c2a9a744..e3600483 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -8,9 +8,9 @@ class ApplicationController < ActionController::Base protect_from_forgery with: :exception - rescue_from CanCan::AccessDenied, with: :render_404 + rescue_from CanCan::AccessDenied, with: :render404 - def render_404 + def render404 render file: Rails.root.join('app', 'views', 'static', 'not_found.html.erb'), status: :not_found, layout: true end @@ -99,6 +99,6 @@ def current_ability def user_ip return request.headers["X-Forwarded-For"] if request.headers["X-Forwarded-For"] - return request.headers["REMOTE_ADDR"] if request.headers["REMOTE_ADDR"] + request.headers["REMOTE_ADDR"] if request.headers["REMOTE_ADDR"] end end diff --git a/app/controllers/catalog_controller.rb b/app/controllers/catalog_controller.rb index 4ae8ed2d..a5838566 100644 --- a/app/controllers/catalog_controller.rb +++ b/app/controllers/catalog_controller.rb @@ -5,19 +5,19 @@ class CatalogController < ApplicationController include Blacklight::Catalog include Blacklight::AccessControls::Catalog - rescue_from NameError, with: :render_404 + rescue_from NameError, with: :render404 - def render_404 + def render404 visibility = visibility_lookup(resource_id_param) case visibility when 'emory_low', 'authenticated' - Rails.logger.debug "CatalogController#render_404: request.url: #{request.url}" + Rails.logger.debug "CatalogController#render404: request.url: #{request.url}" session[:requested_page] = request.url redirect_to new_user_session_path when 'rose_high', 'restricted' - render file: Rails.root.join('app', 'views', 'static', 'reading_room_not_found.html.erb'), status: :not_found, layout: true + render 'static/reading_room_not_found', status: :not_found, layout: true else - render file: Rails.root.join('app', 'views', 'static', 'not_found.html.erb'), status: :not_found, layout: true + render 'static/not_found', status: :not_found, layout: true end end @@ -142,12 +142,14 @@ def guest_uid_authentication_key(key) config.add_facet_field 'visibility_group_ssi', label: 'Access' config.add_facet_field 'contributors_sim', label: 'Contributors', show: false config.add_facet_field 'keywords_sim', label: 'Keywords', show: false + config.add_facet_field 'has_model_ssim', show: false + config.add_facet_field 'visibility_ssi', show: false #config.add_facet_field 'pub_date_ssim', label: 'Publication Year', single: true #config.add_facet_field 'subject_ssim', label: 'Topic', limit: 20, index_range: 'A'..'Z' #config.add_facet_field 'language_ssim', label: 'Language', limit: true - # config.add_facet_field 'example_pivot_field', label: 'Pivot Field', pivot: ['format', 'language_ssim'] + # config.add_facet_field 'example_pivot_field', label: 'Pivot Field', pivot: ['format', 'language_ssim'], collapsing: true #config.add_facet_field 'example_query_facet_field', label: 'Publish Date', query: { # years_5: { label: 'within 5 Years', fq: "pub_date_ssim:[#{Time.zone.now.year - 5} TO *]" }, diff --git a/app/controllers/static_controller.rb b/app/controllers/static_controller.rb index 569f1023..d05b5c8b 100644 --- a/app/controllers/static_controller.rb +++ b/app/controllers/static_controller.rb @@ -11,6 +11,6 @@ def contact end def not_found - render status: 404 + render status: :not_found end end diff --git a/app/helpers/blacklight/blacklight_helper_behavior.rb b/app/helpers/blacklight/blacklight_helper_behavior.rb deleted file mode 100644 index fde0e4e8..00000000 --- a/app/helpers/blacklight/blacklight_helper_behavior.rb +++ /dev/null @@ -1,305 +0,0 @@ -# frozen_string_literal: true -# Methods added to this helper will be available to all templates in the hosting application - -# [Blacklight overwrite] Do not display label for holding_repository_tesim in search results #L155 - -module Blacklight::BlacklightHelperBehavior - include Blacklight::UrlHelperBehavior - include Blacklight::HashAsHiddenFieldsHelperBehavior - include Blacklight::LayoutHelperBehavior - include Blacklight::IconHelperBehavior - - ## - # Get the name of this application from an i18n string - # key: blacklight.application_name - # Try first in the current locale, then the default locale - # - # @return [String] the application name - def application_name - # It's important that we don't use ActionView::Helpers::CacheHelper#cache here - # because it returns nil. - Rails.cache.fetch 'blacklight/application_name' do - t('blacklight.application_name', - default: t('blacklight.application_name', locale: I18n.default_locale)) - end - end - - ## - # Get the page's HTML title - # - # @return [String] - def render_page_title - (content_for(:page_title) if content_for?(:page_title)) || @page_title || application_name - end - - ## - # Create links from a documents dynamically - # provided export formats. - # - # Returns empty string if no links available. - # - # @param [SolrDocument] document - # @param [Hash] options - # @option options [Boolean] :unique ensures only one link is output for every - # content type, e.g. as required by atom - # @option options [Array] :exclude array of format shortnames to not include in the output - def render_link_rel_alternates(document = @document, options = {}) - return if document.nil? - - presenter(document).link_rel_alternates(options) - end - - ## - # Render OpenSearch headers for this search - # @return [String] - def render_opensearch_response_metadata - render partial: 'catalog/opensearch_response_metadata', locals: { response: @response } - end - deprecation_deprecate render_opensearch_response_metadata: 'Use `render "catalog/opensearch_response_metadata"\' instead' - - ## - # Render classes for the element - # @return [String] - def render_body_class - extra_body_classes.join " " - end - - ## - # List of classes to be applied to the element - # @see render_body_class - # @return [Array] - def extra_body_classes - @extra_body_classes ||= ['blacklight-' + controller.controller_name, 'blacklight-' + [controller.controller_name, controller.action_name].join('-')] - end - - ## - # Render the search navbar - # @return [String] - def render_search_bar - search_bar_presenter.render - end - - def search_bar_presenter - @search_bar ||= search_bar_presenter_class.new(controller, blacklight_config) - end - - ## - # Determine whether to render a given field in the index view. - # - # @param [SolrDocument] document - # @param [Blacklight::Configuration::Field] field_config - # @return [Boolean] - def should_render_index_field? document, field_config - Deprecation.warn self, "should_render_index_field? is deprecated and will be removed in Blacklight 8. Use IndexPresenter#render_field? instead." - should_render_field?(field_config, document) && document_has_value?(document, field_config) - end - - ## - # Determine whether to render a given field in the show view - # - # @param [SolrDocument] document - # @param [Blacklight::Configuration::Field] field_config - # @return [Boolean] - def should_render_show_field? document, field_config - Deprecation.warn self, "should_render_show_field? is deprecated and will be removed in Blacklight 8. Use ShowPresenter#render_field? instead." - should_render_field?(field_config, document) && document_has_value?(document, field_config) - end - - ## - # Check if a document has (or, might have, in the case of accessor methods) a value for - # the given solr field - # @param [SolrDocument] document - # @param [Blacklight::Configuration::Field] field_config - # @return [Boolean] - def document_has_value? document, field_config - Deprecation.warn self, "document_has_value? is deprecated and will be removed in Blacklight 8. Use DocumentPresenter#has_value? instead." - document.has?(field_config.field) || - (document.has_highlight_field? field_config.field if field_config.highlight) || - field_config.accessor - end - - ## - # Determine whether to display spellcheck suggestions - # - # @param [Blacklight::Solr::Response] response - # @return [Boolean] - def should_show_spellcheck_suggestions? response - # The spelling response field may be missing from non solr repositories. - response.total <= spell_check_max && - !response.spelling.nil? && - response.spelling.words.any? - end - - ## - # Render the index field label for a document - # - # Translations for index field labels should go under blacklight.search.fields - # They are picked up from there by a value "%{label}" in blacklight.search.index.label - # - # @overload render_index_field_label(options) - # Use the default, document-agnostic configuration - # @param [Hash] opts - # @option opts [String] :field - # @overload render_index_field_label(document, options) - # Allow an extention point where information in the document - # may drive the value of the field - # @param [SolrDocument] doc - # @param [Hash] opts - # @option opts [String] :field - def render_index_field_label *args - options = args.extract_options! - document = args.first - - field = options[:field] - - # Do not display any label for holding_repository_tesim - return nil if field == "holding_repository_tesim" - - label = options[:label] || index_field_label(document, field) - html_escape t(:"blacklight.search.index.#{document_index_view_type}.label", default: :'blacklight.search.index.label', label: label) - end - - ## - # Render the show field label for a document - # - # @overload render_document_show_field_label(options) - # Use the default, document-agnostic configuration - # @param [Hash] opts - # @option opts [String] :field - # @overload render_document_show_field_label(document, options) - # Allow an extention point where information in the document - # may drive the value of the field - # @param [SolrDocument] doc - # @param [Hash] opts - # @option opts [String] :field - def render_document_show_field_label *args - options = args.extract_options! - document = args.first - - field = options[:field] - label = options[:label] || document_show_field_label(document, field) - - t(:'blacklight.search.show.label', label: label) - end - - ## - # Get the value of the document's "title" field, or a placeholder - # value (if empty) - # - # @param [SolrDocument] document - # @return [String] - def document_heading document = nil - document ||= @document - presenter(document).heading - end - - ## - # Get the document's "title" to display in the element. - # (by default, use the #document_heading) - # - # @see #document_heading - # @param [SolrDocument] document - # @return [String] - def document_show_html_title document = nil - document ||= @document - - presenter(document).html_title - end - - ## - # Render the document "heading" (title) in a content tag - # @overload render_document_heading(document, options) - # @param [SolrDocument] document - # @param [Hash] options - # @option options [Symbol] :tag - # @overload render_document_heading(options) - # @param [Hash] options - # @option options [Symbol] :tag - def render_document_heading(*args) - options = args.extract_options! - document = args.first - tag = options.fetch(:tag, :h4) - document ||= @document - - content_tag(tag, presenter(document).heading, itemprop: "name") - end - - ## - # Get the current "view type" (and ensure it is a valid type) - # - # @param [Hash] query_params the query parameters to check - # @return [Symbol] - def document_index_view_type query_params = params - view_param = query_params[:view] - view_param ||= session[:preferred_view] - if view_param && document_index_views.key?(view_param.to_sym) - view_param.to_sym - else - default_document_index_view_type - end - end - - ## - # Render a partial of an arbitrary format inside a - # template of a different format. (e.g. render an HTML - # partial from an XML template) - # code taken from: - # http://stackoverflow.com/questions/339130/how-do-i-render-a-partial-of-a-different-format-in-rails (zgchurch) - # - # @param [String] format suffix - # @yield - def with_format(format) - old_formats = formats - self.formats = [format] - yield - self.formats = old_formats - nil - end - - ## - # Should we render a grouped response (because the response - # contains a grouped response instead of the normal response) - def render_grouped_response? response = @response - response.grouped? - end - - ## - # Returns a document presenter for the given document - # TODO: Move this to the controller. It can just pass a presenter or set of presenters. - def presenter(document) - case action_name - when 'show', 'citation' - show_presenter(document) - else - index_presenter(document) - end - end - - def show_presenter(document) - show_presenter_class(document).new(document, self) - end - - def index_presenter(document) - index_presenter_class(document).new(document, self) - end - - ## - # Override this method if you want to use a different presenter class - def show_presenter_class(_document) - blacklight_config.show.document_presenter_class - end - - def index_presenter_class(_document) - blacklight_config.index.document_presenter_class - end - - def search_bar_presenter_class - blacklight_config.index.search_bar_presenter_class - end - - ## - # Open Search discovery tag for HTML <head> links - def opensearch_description_tag title, href - tag :link, href: href, title: title, type: "application/opensearchdescription+xml", rel: "search" - end -end diff --git a/app/helpers/blacklight/component_helper.rb b/app/helpers/blacklight/component_helper.rb index b0dd6953..8dbe25e4 100644 --- a/app/helpers/blacklight/component_helper.rb +++ b/app/helpers/blacklight/component_helper.rb @@ -4,8 +4,10 @@ module ComponentHelper include Blacklight::ComponentHelperBehavior # Overrides stock Blacklight method to allow widgets to move around the page # more freely. - def render_results_collection_tools(options = {}) - render_filtered_partials(blacklight_config.view_config(document_index_view_type).collection_actions, options) + def render_results_collection_tools(wrapping_class: nil, component: Blacklight::Document::ActionsComponent) + actions = filter_partials(blacklight_config.view_config(document_index_view_type).collection_actions, {}).map { |_k, v| v } + + render(component.new(actions:, classes: wrapping_class)) end end end diff --git a/app/helpers/citation_helper.rb b/app/helpers/citation_helper.rb deleted file mode 100644 index fd13b49f..00000000 --- a/app/helpers/citation_helper.rb +++ /dev/null @@ -1,19 +0,0 @@ -# frozen_string_literal: true -require './lib/emory/citation_formatter' - -module CitationHelper - def mla_citation_txt(document) - generator = Emory::CitationFormatter.new(document) - generator.citation_for('modern-language-association') - end - - def apa_citation_txt(document) - generator = Emory::CitationFormatter.new(document) - generator.citation_for('apa') - end - - def chicago_citation_txt(document) - generator = Emory::CitationFormatter.new(document) - generator.citation_for('chicago-fullnote-bibliography') - end -end diff --git a/app/helpers/curate_helper.rb b/app/helpers/curate_helper.rb new file mode 100644 index 00000000..be9748e8 --- /dev/null +++ b/app/helpers/curate_helper.rb @@ -0,0 +1,38 @@ +# frozen_string_literal: true + +module CurateHelper + # @!group Document helpers + ## + # Render the index field label for a document + # + # Translations for index field labels should go under blacklight.search.fields + # They are picked up from there by a value "%{label}" in blacklight.search.index.label + # + # @deprecated + # @overload render_index_field_label(options) + # Use the default, document-agnostic configuration + # @param [Hash] opts + # @option opts [String] :field + # @overload render_index_field_label(document, options) + # Allow an extention point where information in the document + # may drive the value of the field + # @param [SolrDocument] doc + # @param [Hash] opts + # @option opts [String] :field + # @return [String] + def render_index_field_label(*args) + options = args.extract_options! + document = args.first + + field = options[:field] + + # BlacklightHelper v7.33.1 Override - Do not display any label for holding_repository_tesim + return nil if field == "holding_repository_tesim" + + label = Deprecation.silence(Blacklight::ConfigurationHelperBehavior) do + options[:label] || index_field_label(document, field) + end + html_escape t(:"blacklight.search.index.#{document_index_view_type}.label", default: :'blacklight.search.index.label', label:) + end + deprecation_deprecate render_index_field_label: 'Use Blacklight::MetadataFieldComponent instead' +end diff --git a/app/helpers/newspaper_works/newspaper_works_helper_behavior.rb b/app/helpers/newspaper_works/newspaper_works_helper_behavior.rb index a75da44d..c84cf717 100644 --- a/app/helpers/newspaper_works/newspaper_works_helper_behavior.rb +++ b/app/helpers/newspaper_works/newspaper_works_helper_behavior.rb @@ -21,7 +21,7 @@ def render_ocr_snippets(options = {}) snippets_content << render(partial: 'catalog/snippets_more', locals: { snippets: snippets.drop(1), - options: options + options: }) end snippets_content.join("\n").html_safe diff --git a/app/helpers/show_breadcrumb_helper.rb b/app/helpers/show_breadcrumb_helper.rb deleted file mode 100644 index 3193b9f4..00000000 --- a/app/helpers/show_breadcrumb_helper.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true -module ShowBreadcrumbHelper - def render_page_breadcrumbs(d) - if d.parent_collection - render 'catalog/breadcrumbs', crumb_hashes: parent_coll_arr(d) - elsif d.no_parent_work_w_collection - render 'catalog/breadcrumbs', crumb_hashes: no_par_work_w_coll_arr(d) - elsif d.parent_work_w_collection - render 'catalog/breadcrumbs', crumb_hashes: par_work_w_coll_arr(d) - elsif d.parent_work_no_collection - render 'catalog/breadcrumbs', crumb_hashes: par_work_w_no_coll(d) - else - render 'catalog/breadcrumbs', crumb_hashes: [d.item_breadcrumb] - end - end - - # breadcrumb hash arrays - def parent_coll_arr(d) - [d.back_parent_coll_breadcrumb, d.item_breadcrumb] - end - - def no_par_work_w_coll_arr(d) - [d.back_collection_breadcrumb, d.item_breadcrumb] - end - - def par_work_w_coll_arr(d) - [d.back_collection_breadcrumb, d.back_parent_breadcrumb, d.item_breadcrumb] - end - - def par_work_w_no_coll(d) - [d.back_parent_breadcrumb, d.item_breadcrumb] - end -end diff --git a/app/models/content_block.rb b/app/models/content_block.rb index 32765a8a..9e3c5cf4 100644 --- a/app/models/content_block.rb +++ b/app/models/content_block.rb @@ -8,6 +8,6 @@ def self.homepage_banner end def self.blank(reference:) - ContentBlock.new(reference: reference, value: '') + ContentBlock.new(reference:, value: '') end end diff --git a/app/models/search_builder.rb b/app/models/search_builder.rb index d058ed51..2bdf57d7 100644 --- a/app/models/search_builder.rb +++ b/app/models/search_builder.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -require './lib/newspaper_works/highlight_search_params.rb' +require './lib/newspaper_works/highlight_search_params' class SearchBuilder < Blacklight::SearchBuilder include Blacklight::Solr::SearchBuilderBehavior diff --git a/app/models/solr_document.rb b/app/models/solr_document.rb index a115e7e0..e75a0a3b 100644 --- a/app/models/solr_document.rb +++ b/app/models/solr_document.rb @@ -4,7 +4,7 @@ class SolrDocument # The following shows how to setup this blacklight document to display marc documents extension_parameters[:marc_source_field] = :marc_ss extension_parameters[:marc_format_type] = :marcxml - use_extension(Blacklight::Solr::Document::Marc) do |document| + use_extension(Blacklight::Marc::DocumentExtension) do |document| document.key?(SolrDocument.extension_parameters[:marc_source_field]) end @@ -39,12 +39,12 @@ def title_split standard_title&.split(' ') end - def title_first_3 + def title_first3 title_split&.first(3) end def title_abbr - title_first_3.join(' ') + '...' if title_split.size > 3 + title_first3.join(' ') + '...' if title_split.size > 3 end def standard_link diff --git a/app/presenters/about_this_item_presenter.rb b/app/presenters/about_this_item_presenter.rb index eb3368dd..467886ad 100644 --- a/app/presenters/about_this_item_presenter.rb +++ b/app/presenters/about_this_item_presenter.rb @@ -9,7 +9,7 @@ def initialize(document:) end def terms - @config = @config.symbolize_keys - @document.slice(*@config.keys) + @config = @config.keys + @document.to_a.select { |field| @config.include? field.first }.to_enum end end diff --git a/app/presenters/additional_details_presenter.rb b/app/presenters/additional_details_presenter.rb index 48a1ca0f..b3262bed 100644 --- a/app/presenters/additional_details_presenter.rb +++ b/app/presenters/additional_details_presenter.rb @@ -9,7 +9,7 @@ def initialize(document:) end def terms - @config = @config.symbolize_keys - @document.slice(*@config.keys) + @config = @config.keys + @document.to_a.select { |field| @config.include? field.first }.to_enum end end diff --git a/app/presenters/blacklight/thumbnail_presenter.rb b/app/presenters/blacklight/thumbnail_presenter.rb index 906f82b9..d70a8c20 100644 --- a/app/presenters/blacklight/thumbnail_presenter.rb +++ b/app/presenters/blacklight/thumbnail_presenter.rb @@ -1,4 +1,6 @@ # frozen_string_literal: true +# Blacklight v7.33.1 Override - introduces Lux specific logic with #lux_thumbnail_url, +# #thumbnail_image_url, and #thumbnail_value. module Blacklight class ThumbnailPresenter @@ -14,6 +16,10 @@ def initialize(document, view_context, view_config) @view_config = view_config end + def render(image_options = {}) + thumbnail_value(image_options) + end + ## # Does the document have a thumbnail to render? # @@ -90,7 +96,7 @@ def thumbnail_value_from_document end def retrieve_values(field_config) - FieldRetriever.new(document, field_config).fetch + FieldRetriever.new(document, field_config, view_context).fetch end def field_config(field) diff --git a/app/presenters/metadata_presenter.rb b/app/presenters/metadata_presenter.rb index 21eb5a33..1fb7e595 100644 --- a/app/presenters/metadata_presenter.rb +++ b/app/presenters/metadata_presenter.rb @@ -10,7 +10,7 @@ def initialize(document:) def terms(section) @config = @config.symbolize_keys - @section_terms = @config[section].symbolize_keys - @document.slice(*@section_terms.keys) + @section_terms = @config[section].keys + @document.to_a.select { |field| @section_terms.include? field.first }.to_enum end end diff --git a/app/presenters/publication_details_presenter.rb b/app/presenters/publication_details_presenter.rb index a949938c..2e8a5275 100644 --- a/app/presenters/publication_details_presenter.rb +++ b/app/presenters/publication_details_presenter.rb @@ -9,7 +9,7 @@ def initialize(document:) end def terms - @config = @config.symbolize_keys - @document.slice(*@config.keys) + @config = @config.keys + @document.to_a.select { |field| @config.include? field.first }.to_enum end end diff --git a/app/presenters/related_material_presenter.rb b/app/presenters/related_material_presenter.rb index 19997caa..18a5e264 100644 --- a/app/presenters/related_material_presenter.rb +++ b/app/presenters/related_material_presenter.rb @@ -9,7 +9,7 @@ def initialize(document:) end def terms - @config = @config.symbolize_keys - @document.slice(*@config.keys) + config_keys = @config.keys + @document.to_a.select { |field| config_keys.include? field.first }.to_enum end end diff --git a/app/presenters/subjects_keywords_presenter.rb b/app/presenters/subjects_keywords_presenter.rb index 33d3e881..cc71f97c 100644 --- a/app/presenters/subjects_keywords_presenter.rb +++ b/app/presenters/subjects_keywords_presenter.rb @@ -9,7 +9,7 @@ def initialize(document:) end def terms - @config = @config.symbolize_keys - @document.slice(*@config.keys) + @config = @config.keys + @document.to_a.select { |field| @config.include? field.first }.to_enum end end diff --git a/app/views/advanced/index.html.erb b/app/views/advanced/index.html.erb index aa694bf8..993056c4 100644 --- a/app/views/advanced/index.html.erb +++ b/app/views/advanced/index.html.erb @@ -1,7 +1,6 @@ <% @page_title = "More Search Options - #{application_name}" %> -<%= render 'catalog/breadcrumbs', crumb_hashes: [{ curr_page: true, abbr: nil, link: '/advanced', title: "Advanced Search" }] -%> +<%= render ::Lux::BreadcrumbsComponent.new(crumb_hashes: [{ curr_page: true, abbr: nil, link: '/advanced', title: "Advanced Search" }]) %> <div class="advanced-search-form col-sm-12"> <div class="row align-items-center"> <h1 class="advanced page-header show-header mr-3"> diff --git a/app/views/blacklight/nav/_bookmark.html.erb b/app/views/blacklight/nav/_bookmark.html.erb index f33edc5d..6849f82b 100644 --- a/app/views/blacklight/nav/_bookmark.html.erb +++ b/app/views/blacklight/nav/_bookmark.html.erb @@ -1,3 +1,4 @@ +<%# Blacklight v7.33.1 Override %> <%= link_to bookmarks_path, id:'bookmarks_nav', class: 'nav-link' do %> <%= t('blacklight.header_links.bookmarks') %> <span data-role='bookmark-counter'><%= current_or_guest_user.bookmarks.count %></span> diff --git a/app/views/blacklight_range_limit/_range_limit_panel.html.erb b/app/views/blacklight_range_limit/_range_limit_panel.html.erb deleted file mode 100644 index aa9396ef..00000000 --- a/app/views/blacklight_range_limit/_range_limit_panel.html.erb +++ /dev/null @@ -1,101 +0,0 @@ -<% # [Blacklight Range Limit 7.4.0 overwrite] Include dummy search field if only date slider is used #L65-69 %> -<% # Overwrite adapted from UCLA's Ursus %> - -<%- # requires solr_config local passed in - field_config = range_config(field_name) - label = facet_field_label(field_name) - - input_label_range_begin = field_config[:input_label_range_begin] || t("blacklight.range_limit.range_begin", field_label: label) - input_label_range_end = field_config[:input_label_range_end] || t("blacklight.range_limit.range_end", field_label: label) - maxlength = field_config[:maxlength] --%> - -<div class="limit_content range_limit"> - <% if has_selected_range_limit?(field_name) %> - <ul class="current list-unstyled facet-values"> - <li class="selected"> - <span class="facet-label"> - <span class="selected"><%= range_display(field_name) %></span> - <%= link_to search_action_url(remove_range_param(field_name).except(:controller, :action)), :class=>"remove", :title => t('blacklight.range_limit.remove_limit') do %> - <span class="remove-icon">✖</span> - <span class="sr-only">[<%= t('blacklight.range_limit.remove_limit') %>]</span> - <% end %> - </span> - <span class="selected facet-count"><%= number_with_delimiter(@response.total) %></span> - </li> - </ul> - - <% end %> - - <!-- no results profile if missing is selected --> - <% unless selected_missing_for_range_limit?(field_name) %> - <!-- you can hide this if you want, but it has to be on page if you want - JS slider and calculated facets to show up, JS sniffs it. --> - <div class="profile"> - <% if stats_for_field?(field_name) %> - <!-- No stats information found for field in search response --> - <% end %> - - <% if (min = range_results_endpoint(field_name, :min)) && - (max = range_results_endpoint(field_name, :max)) %> - - <% if field_config[:segments] != false %> - <div class="distribution subsection <%= 'chart_js' unless field_config[:chart_js] == false %>"> - <!-- if we already fetched segments from solr, display them - here. Otherwise, display a link to fetch them, which JS - will AJAX fetch. --> - <% if solr_range_queries_to_a(field_name).length > 0 %> - - <%= render(:partial => "blacklight_range_limit/range_segments", :locals => {:solr_field => field_name}) %> - - <% else %> - <%= link_to(t('blacklight.range_limit.view_distribution'), range_limit_url(range_field: field_name, range_start: min, range_end: max), :class => "load_distribution") %> - <% end %> - </div> - <% end %> - <p class="range subsection <%= "slider_js" unless field_config[:slider_js] == false %>"> - <%= t('blacklight.range_limit.results_range_html', min: range_results_endpoint(field_name, :min), max: range_results_endpoint(field_name, :max)) %> - </p> - <% end %> - </div> - - <%= form_tag search_action_path, :method => :get, class: [BlacklightRangeLimit.classes[:form], "range_#{field_name} d-flex justify-content-center"].join(' ') do %> - <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:page)) %> - - <!-- Include a dummy search_field parameter if none exists to trick blacklight - into displaying actual search results instead of home page. --> - <% unless params.has_key?(:search_field) %> - <%= hidden_field_tag("search_field", "common_fields") %> - <% end %> - - <%= content_tag :label, t('blacklight.range_limit.date_range_label'), class: 'range_limit_label sr-only' %> - <div class="input-group input-group-sm mb-3 flex-nowrap range-limit-input-group"> - <%= render_range_input(field_name, :begin, input_label_range_begin, maxlength) %> - <%= render_range_input(field_name, :end, input_label_range_end, maxlength) %> - <div class="input-group-append"> - <%= submit_tag t('blacklight.range_limit.submit_limit'), class: BlacklightRangeLimit.classes[:submit] %> - </div> - </div> - <% end %> - - <%= link_to t('blacklight.range_limit.view_larger', field_name: label), - range_limit_panel_url(id: field_name), - class: 'view_larger mt-1', - data: { blacklight_modal: 'trigger' } %> - - <% unless request.xhr? %> - <% if (stats = stats_for_field(field_name)) && stats["missing"] > 0 %> - <ul class="missing list-unstyled facet-values subsection"> - <li> - <span class="facet-label"> - <%= link_to t('blacklight.range_limit.missing'), missing_constraint_url_corrected(field_name) %> - </span> - <%# note important there be no whitespace inside facet-count to avoid - bug in some versions of Blacklight (including 7.1.0.alpha) %> - <span class="facet-count"><%= number_with_delimiter(stats["missing"]) %></span> - </li> - </ul> - <% end %> - <% end %> - <% end %> -</div> \ No newline at end of file diff --git a/app/views/bookmarks/_tools.html.erb b/app/views/bookmarks/_tools.html.erb index 6956316a..5afaf990 100644 --- a/app/views/bookmarks/_tools.html.erb +++ b/app/views/bookmarks/_tools.html.erb @@ -1,11 +1,22 @@ -<% # [Blacklight overwrite] Do not display Help or Feedback links on Bookmarks page #L5 %> - -<ul class="<%= controller_name %>Tools nav nav-pills"> - <%= render_show_doc_actions document_list, document: nil, document_list: @response.documents, url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h) do |config, inner| %> - <% if inner.include?("Cite") %> - <li class="nav-item"> - <%= inner %> - </li> +<% # [Blacklight v7.33.1 Override] Do not display Help or Feedback links on Bookmarks page #L5 %> +<% citation_only = Array(document_actions(document_list, options: { document: nil }).select { |v| v.name == :citation }) %> +<% if render_show_doc_actions_method_from_blacklight? %> + <%= render(Blacklight::Document::ActionsComponent.new(document: nil, + tag: 'div', + classes: "#{controller_name}Tools", + link_classes: 'btn btn-outline-primary', + actions: citation_only, + options: { document_list: @response.documents }, + url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h))) %> +<% else %> + <% Deprecation.warn(self, '#render_show_doc_actions is deprecated; use ActionComponents instead') %> + <ul class="<%= controller_name %>Tools nav nav-pills"> + <%= render_show_doc_actions document_list, document: nil, document_list: @response.documents, url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h) do |config, inner| %> + <% if inner.include?("Cite") %> + <li class="nav-item"> + <%= inner %> + </li> + <% end %> <% end %> - <% end %> -</ul> \ No newline at end of file + </ul> +<% end %> diff --git a/app/views/bookmarks/index.html.erb b/app/views/bookmarks/index.html.erb index 17d55634..0b041474 100644 --- a/app/views/bookmarks/index.html.erb +++ b/app/views/bookmarks/index.html.erb @@ -1,8 +1,8 @@ +<%# Blacklight v7.33.1 Override - adds custom breadcrumbs L#5 %> <% @page_title = t('blacklight.bookmarks.page_title', :application_name => application_name) %> <div id="content" class="col-md-12"> - <%= render 'catalog/breadcrumbs', crumb_hashes: [{ curr_page: true, abbr: nil, link: '/bookmarks', title: "Bookmarks" }] - %> + <%= render ::Lux::BreadcrumbsComponent.new(crumb_hashes: [{ curr_page: true, abbr: nil, link: '/bookmarks', title: "Bookmarks" }]) %> <h1 class='page-heading bookmarks show-header'><%= t('blacklight.bookmarks.title') %></h1> <%- if current_or_guest_user.blank? -%> @@ -15,8 +15,8 @@ <% else %> <%= render 'sort_and_per_page' %> <%= render partial: 'tools', locals: { document_list: @response.documents } %> - <h2 class='section-heading sr-only'><%= t('blacklight.bookmarks.list_title') %></h2> - <%= render_document_index %> + <h2 class='section-heading sr-only visually-hidden'><%= t('blacklight.bookmarks.list_title') %></h2> + <%= render_document_index @response.documents %> <%= render 'results_pagination' %> <% end %> </div> \ No newline at end of file diff --git a/app/views/catalog/_about_this_collection_block.html.erb b/app/views/catalog/_about_this_collection_block.html.erb deleted file mode 100644 index f5a733a4..00000000 --- a/app/views/catalog/_about_this_collection_block.html.erb +++ /dev/null @@ -1,27 +0,0 @@ -<% doc_presenter = show_presenter(document) %> -<% fields = presenter.new(document: doc_presenter.fields_to_render).terms(:about_this_collection) %> -<% if fields.length > 0 %> - <div class="<%= presenter_class %> card mb-2 rounded-0" title="<%= title %>"> - <div class="card-header rounded-0"><%= title %></div> - <div class="card-body"> - <dl title="<%= title %>"> - <% fields.each do |field_name, field| %> - <div class="row"> - <dt class="blacklight-<%= field_name.parameterize %> col-md-5"><%= render_document_show_field_label document, field: field_name %></dt> - <% if field_name == "finding_aid_link_ssm" %> - <dd class="blacklight-<%= field_name.parameterize %> col-md-7"><a href="<%= doc_presenter.field_value field %>">Finding Aid</a></dd> - <% else %> - <dd class="blacklight-<%= field_name.parameterize %> col-md-7"> - <% if field_is_for_dates?(field_name) %> - <%= dates_on_separate_lines(document, field_name).html_safe %> - <% else %> - <%= doc_presenter.field_value field %> - <% end %> - </dd> - <% end %> - </div> - <% end %> - </dl> - </div> - </div> -<% end %> diff --git a/app/views/catalog/_about_this_item_block.html.erb b/app/views/catalog/_about_this_item_block.html.erb deleted file mode 100644 index d6ebe1a0..00000000 --- a/app/views/catalog/_about_this_item_block.html.erb +++ /dev/null @@ -1,26 +0,0 @@ -<% doc_presenter = show_presenter(document) %> -<% fields = presenter.new(document: doc_presenter.fields_to_render).terms %> -<% if fields.length > 0 %> - <div class="<%= presenter_class %> card mb-2 rounded-0" title="<%= title %>"> - <div class="card-header rounded-0"><%= title %></div> - <div class="card-body"> - <%= resolution_download_restriction(document)&.html_safe %> - <dl title="<%= title %>"> - <% fields.each do |field_name, field| %> - <div class="row"> - <dt class="blacklight-<%= field_name.parameterize %> <%= add_class_dt %>"> - <%= render_document_show_field_label document, field: field_name %> - </dt> - <dd class="blacklight-<%= field_name.parameterize %> <%= add_class_dd %>"> - <% if field_is_for_dates?(field_name) %> - <%= dates_on_separate_lines(document, field_name).html_safe %> - <% else %> - <%= doc_presenter.field_value field %> - <% end %> - </dd> - </div> - <% end %> - </dl> - </div> - </div> -<% end %> diff --git a/app/views/catalog/_access_and_copyright_block.html.erb b/app/views/catalog/_access_and_copyright_block.html.erb deleted file mode 100644 index 376817a9..00000000 --- a/app/views/catalog/_access_and_copyright_block.html.erb +++ /dev/null @@ -1,26 +0,0 @@ -<% doc_presenter = show_presenter(document) %> -<% fields = presenter.new(document: doc_presenter.fields_to_render).terms(:access_and_copyright) %> -<% if document["has_model_ssim"]&.first == "CurateGenericWork" %> - <div class="<%= presenter_class %> card mb-2 rounded-0" title="<%= title %>"> - <div class="card-header rounded-0"><%= title %></div> - <div class="card-body"> - <dl title="<%= title %>"> - <dt class="blacklight-emory_rights_statement">Rights Statement:</dt> - <dd class="blacklight-emory_rights_statement"><%= document["emory_rights_statements_tesim"]&.first %></dd> - <dt class="blacklight-rights_statement">Rights Status:</dt> - <dd class="blacklight-rights_statement"> - <% if document["rights_statement_tesim"]&.first == "Not Applicable" %> - <%= document["human_readable_rights_statement_ssim"]&.first %> - <% else %> - <a href=<%= document["rights_statement_tesim"]&.first %>><%= document["human_readable_rights_statement_ssim"]&.first %></a> - <% end %> - </dd> - <% fields.each do |field_name, field| %> - <dt class="blacklight-<%= field_name.parameterize %>"><%= render_document_show_field_label document, field: field_name %></dt> - <dd class="blacklight-<%= field_name.parameterize %>"><%= doc_presenter.field_value field %></dd> - <% end %> - <p class="copyright-dislaimer" title="copyright dislaimer">Emory Libraries provides copyright information as a courtesy and makes no representation about copyright or other legal status of materials in its digital collections.</p> - </dl> - </div> - </div> -<% end %> diff --git a/app/views/catalog/_citation.html.erb b/app/views/catalog/_citation.html.erb index 9d9dd53c..71371f04 100644 --- a/app/views/catalog/_citation.html.erb +++ b/app/views/catalog/_citation.html.erb @@ -1,18 +1,4 @@ -<div class="modal-header citations"> - <p><i><small>Provided as a suggestion only. Please verify these automated citations against the guidelines of your preferred style.</small></i></p> - <button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="<%= t('blacklight.modal.close') %>"> - <span aria-hidden="true">×</span> - </button> -</div> -<div class="modal-body"> - - <% @documents.each do |document| %> - <h1 class="modal-title show-header citation-title"><%= document_heading(document) %></h1> - <h3 class="heading -h3"><%= t('blacklight.citation.mla') %></h3> - <%= mla_citation_txt(document).html_safe %><br/><br/> - <h3 class="heading -h3"><%= t('blacklight.citation.apa') %></h3> - <%= apa_citation_txt(document).html_safe %><br/><br/> - <h3 class="heading -h3"><%= t('blacklight.citation.chicago') %></h3> - <%= chicago_citation_txt(document).html_safe %><br><br> - <% end %> -</div> \ No newline at end of file +<%# Blacklight v7.33.1 Override - use our logic instead %> +<%= render ::Lux::Citation::ModalComponent.new do |component| %> + <%= render ::Lux::Document::CitationComponent.with_collection(@documents) if @documents.present? %> +<% end %> \ No newline at end of file diff --git a/app/views/catalog/_constraints.html.erb b/app/views/catalog/_constraints.html.erb deleted file mode 100644 index e7eaae0c..00000000 --- a/app/views/catalog/_constraints.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<% if query_has_constraints? %> - <div id="appliedParams" class="clearfix constraints-container"> - <h2 class="sr-only"><%= t('blacklight.search.search_constraints_header') %></h2> - - <%=link_to t('blacklight.search.start_over'), start_over_path, class: "catalog_startOverLink button link" %> - <span class="constraints-label sr-only"><%= t('blacklight.search.filters.title') %></span> - <%= render_constraints(params) %> - </div> -<% end %> \ No newline at end of file diff --git a/app/views/catalog/_document.html.erb b/app/views/catalog/_document.html.erb index ea46faa9..e6406fce 100644 --- a/app/views/catalog/_document.html.erb +++ b/app/views/catalog/_document.html.erb @@ -1,6 +1,9 @@ +<%# Blacklight v7.33.1 Override - we only want :index_header and :index to render %> <% # container for a single doc -%> -<article class="document <%= render_document_class document %> document-position-<%= document_counter%> " data-document-counter="<%= document_counter %>" itemscope itemtype="<%= document.itemtype %>"> - <%= render_document_partials document, - [:index_header, :index], - document_counter: document_counter %> -</article> + +<% view_config = local_assigns[:view_config] || blacklight_config.view_config(document_index_view_type) %> +<%= render (view_config.document_component || ::Blacklight::DocumentComponent).new(presenter: document_presenter(document), counter: document_counter_with_offset(document_counter), document: document) do |component| %> + <% component.public_send(view_config.document_component.blank? && view_config.partials.any? ? :body : :partial) do %> + <%= render_document_partials document, [:index_header, :index], component: component, document_counter: document_counter %> + <% end %> +<% end %> \ No newline at end of file diff --git a/app/views/catalog/_explore_collections.html.erb b/app/views/catalog/_explore_collections.html.erb index 77dacf15..157fcdca 100644 --- a/app/views/catalog/_explore_collections.html.erb +++ b/app/views/catalog/_explore_collections.html.erb @@ -1,18 +1 @@ -<% presenter = ExploreCollectionsPresenter.new %> -<% collections = presenter.collections %> -<div class="homepage-content-header"> - <h2 class="homepage-content-heading explore-collections-heading"><%= link_to 'Explore Our Collections', search_action_path('f[has_model_ssim][]' => 'Collection', 'f[visibility_ssi][]' => 'open'), class: "browse-link" %></h2> -</div> -<div class="tiles row justify-content-between"> - <% collections.each do |c| %> - <div class="col-12 col-sm-6 col-lg-4 mt-3"> - <div class="tile-listing has-badge has-description has-action card"> - <div class="tile-badge"> Featured Collection </div> - <div class="tile-listing-image"><%= image_tag c.banner_path, alt: c.title %></div> - <%= link_to c.title, c.collection_path, class: "link tile-listing-title" %> - <p class="tile-listing-description mt-2"><%= c.description %></p> - <%= link_to "View Collection", c.collection_path, class: "link tile-listing-action mt-auto" %> - </div> - </div> - <% end %> -</div> \ No newline at end of file +<%= render ::Lux::ExploreCollectionsComponent.new %> \ No newline at end of file diff --git a/app/views/catalog/_facet_group.html.erb b/app/views/catalog/_facet_group.html.erb index 16337bfc..0995dabf 100644 --- a/app/views/catalog/_facet_group.html.erb +++ b/app/views/catalog/_facet_group.html.erb @@ -1,50 +1,13 @@ -<% # main container for facets/limits menu -%> -<% if has_facet_values? facet_field_names(groupname), @response %> -<div id="facets<%= "-#{groupname}" unless groupname.nil? %>" class="facets sidenav facets-toggleable-md"> - <div class="navbar navbar-light navbar-expand-lg"> - <h2 class="homepage-content-heading"> - <% h2_title = request.fullpath != '/' ? "Limit Your Search" : t('blacklight.search.facets.title') %> - <% if h2_title == t('blacklight.search.facets.title') && groupname.blank? %> - <%= link_to h2_title, search_action_path(:utf8 => '✓', :search_field => 'common_fields', :q => ''), method: :get, class: "browse-link" %> - <% else %> - <%= groupname.blank? ? h2_title : t("blacklight.search.facets-#{groupname}.title") %> - <% end %> - </h2> - <button class="navbar-toggler navbar-toggler-right" id="facets-toggler" type="button" data-toggle="collapse" data-target="#facet-panel<%= "-#{groupname}" unless groupname.nil? %>-collapse" aria-controls="facet-panel<%= "-#{groupname}" unless groupname.nil? %>-collapse" aria-expanded="false" aria-label="Toggle facets"> - <span class="navbar-toggler-icon"></span> - </button> - </div> - <div id="facet-panel<%= "-#{groupname}" unless groupname.nil? %>-collapse" class="facets-collapse collapse mt-3"> - <%= render_facet_partials facet_field_names(groupname), response: @response %> - </div> -</div> +<%# Blacklight v7.33.1 Override - parses title with our desired logic %> +<% h2_title = request.fullpath != '/' ? "Limit Your Search" : t('blacklight.search.facets.title') %> +<% parsed_title = if h2_title == t('blacklight.search.facets.title') && groupname.blank? %> + <% link_to h2_title, search_action_path(:utf8 => '✓', :search_field => 'common_fields', :q => ''), method: :get, class: "browse-link" %> +<% else %> + <% groupname.blank? ? h2_title : t("blacklight.search.facets-#{groupname}.title") %> <% end %> -<script type="text/javascript"> - document.querySelectorAll('.facet-select').forEach(function(item) { - item.addEventListener('click', function() { - var facetParent = item.parentElement.parentElement.parentElement.parentElement.parentElement.id; - - gtag('event', item.text, { - 'event_category': 'facet_clicked', - 'event_label': facetParent - }); - }); - }); - - document.querySelector('.submit.btn.btn-secondary').addEventListener('click', function() { - gtag('event', 'publication_date_range_applied', { - 'event_category': 'facet_clicked', - 'event_label': 'publication_date_range_facet' - }); - }); - - document.querySelectorAll('.btn.btn-block.p-2.text-left.collapse-toggle.collapsed').forEach(function(item) { - item.addEventListener('click', function() { - gtag('event', item.innerText, { - 'event_category': 'facet_expanded', - 'event_label': item.innerText - }); - }); - }); -</script> +<%= render (blacklight_config&.view_config(document_index_view_type)&.facet_group_component || ::Lux::Response::FacetGroupComponent).new( + response: @response, + id: groupname, + fields: facet_field_names(groupname), + title: parsed_title) %> \ No newline at end of file diff --git a/app/views/catalog/_facet_pagination.html.erb b/app/views/catalog/_facet_pagination.html.erb deleted file mode 100644 index 3ebe3775..00000000 --- a/app/views/catalog/_facet_pagination.html.erb +++ /dev/null @@ -1,21 +0,0 @@ -<!-- This is a Blacklight 7.4.3 overwrite that is required to remove a string of "</span>" occuring after the disabled "Previous" links - in the pagination bar --> -<div class="prev_next_links btn-group float-md-left"> - <%= link_to_previous_page @pagination, raw(t('views.pagination.previous')), params: search_state.to_h, param_name: blacklight_config.facet_paginator_class.request_keys[:page], class: 'btn btn-link', data: { blacklight_modal: "preserve" } do %> - <%= content_tag :span, raw(t('views.pagination.previous')), class: 'disabled btn' %> - <% end %> - - <%= link_to_next_page @pagination, raw(t('views.pagination.next')), params: search_state.to_h, param_name: blacklight_config.facet_paginator_class.request_keys[:page], class: 'btn btn-link', data: { blacklight_modal: "preserve" } do %> - <%= content_tag :span, raw(t('views.pagination.next')), class: 'disabled btn' %> - <% end %> -</div> - -<div class="sort-options btn-group float-md-right"> - <% if @pagination.sort == 'index' -%> - <span class="active az btn btn-outline-secondary"><%= t('blacklight.search.facets.sort.index') %></span> - <%= link_to(t('blacklight.search.facets.sort.count'), @pagination.params_for_resort_url('count', search_state.to_h), class: "sort_change numeric btn btn-outline-secondary", data: { blacklight_modal: "preserve" }) %> - <% elsif @pagination.sort == 'count' -%> - <%= link_to(t('blacklight.search.facets.sort.index'), @pagination.params_for_resort_url('index', search_state.to_h), class: "sort_change az btn btn-outline-secondary", data: { blacklight_modal: "preserve" }) %> - <span class="active numeric btn btn-outline-secondary"><%= t('blacklight.search.facets.sort.count') %></span> - <% end -%> -</div> diff --git a/app/views/catalog/_find_this_item_block.html.erb b/app/views/catalog/_find_this_item_block.html.erb deleted file mode 100644 index cc8c416b..00000000 --- a/app/views/catalog/_find_this_item_block.html.erb +++ /dev/null @@ -1,20 +0,0 @@ -<% doc_presenter = show_presenter(document) %> -<% fields = presenter.new(document: doc_presenter.fields_to_render).terms(:find_this_item) %> -<% if fields.length > 0 %> - <div class="<%= presenter_class %> card mb-2 rounded-0" title="<%= title %>"> - <div class="card-header rounded-0"><%= title %></div> - <div class="card-body"> - <dl title="<%= title %>"> - <% fields.each do |field_name, field| %> - <div class="row"> - <dt class="blacklight-<%= field_name.parameterize %> <%= add_class_dt %>"> - <%= find_item_field_label(document, field_name) %></dt> - <dd class="blacklight-<%= field_name.parameterize %> <%= add_class_dd %>"> - <%= find_item_field_value(doc_presenter, field, field_name) %> - </dd> - </div> - <% end %> - </dl> - </div> - </div> -<% end %> diff --git a/app/views/catalog/_hero_image.html.erb b/app/views/catalog/_hero_image.html.erb index aa7bcc15..bcad5b07 100644 --- a/app/views/catalog/_hero_image.html.erb +++ b/app/views/catalog/_hero_image.html.erb @@ -1,24 +1 @@ -<% presenter = HeroImagePresenter.new %> -<% images = presenter.images %> -<div class="carousel slide mt-3 mb-3" data-ride="carousel" data-interval="6000"> - <div class="carousel-caption"> - <h1 class="intro-hero-title">Emory Digital Collections</h1> - <h3 class="intro-hero-text">Access unique research materials</h3> - </div> - <div class="carousel-inner"> - <div class="carousel-item active"> - <%= image_tag images.first["file"], class: "d-block w-100 carousel-image", alt: images.first["name"]%> - <div class="carousel-caption d-none d-md-block"> - <%= link_to "View Featured Item", images.first["path"], class: "intro-hero-subtitle button link" %> - </div> - </div> - <% images.drop(1).each do |img| %> - <div class="carousel-item"> - <%= image_tag img["file"], class: "d-block w-100 carousel-image", alt: img["name"]%> - <div class="carousel-caption d-none d-md-block"> - <%= link_to "View Featured Item", img["path"], class: "intro-hero-subtitle button link" %> - </div> - </div> - <% end %> - </div> -</div> \ No newline at end of file +<%= render ::Lux::HeroImageComponent.new %> \ No newline at end of file diff --git a/app/views/catalog/_index.html.erb b/app/views/catalog/_index.html.erb index b49c6fb1..ab8286a7 100644 --- a/app/views/catalog/_index.html.erb +++ b/app/views/catalog/_index.html.erb @@ -1,23 +1,11 @@ -<% doc_presenter = index_presenter(document) %> -<% document_actions = capture do %> - <% # bookmark functions for items/docs -%> - <%= render_index_doc_actions document, wrapping_class: "index-document-functions col-sm-4 col-lg-3" %> -<% end %> <%# default partial to display solr document fields in catalog index view -%> <dl class="row"> - <dt class="col-sm-3"><%= render_document_partials document, [:thumbnail] %></dt> + <dt class="col-sm-3"><%= render_document_partials(document, [:thumbnail]) %></dt> <dd class="col-sm-6"> - <dl> - <% doc_presenter.fields_to_render.each do |field_name, field| -%> - <div class="row"> - <dt class="blacklight-<%= field_name.parameterize %> index-field-name"><%= render_index_field_label document, field: field_name %></dt> - <dd class="blacklight-<%= field_name.parameterize %>"><%= doc_presenter.field_value field %></dd> - </div> - <% end -%> - </dl> + <%= render Blacklight::DocumentMetadataComponent.new(fields: document_presenter(document).field_presenters) %> </dd> <dd class="col-sm-3"> - <%= document_actions %> + <%= render_index_doc_actions(document, wrapping_class: "index-document-functions col-sm-4 col-lg-3") %> </dd> -</dl> +</dl> \ No newline at end of file diff --git a/app/views/catalog/_index_header.html.erb b/app/views/catalog/_index_header.html.erb index a0fed36d..93c95ed0 100644 --- a/app/views/catalog/_index_header.html.erb +++ b/app/views/catalog/_index_header.html.erb @@ -1,4 +1,5 @@ <!-- [Blacklight overwrite] Render custom information under object titles in search results #L21-27 --> +<%# Note: unchanged with v7.33.1 %> <%# header bar for doc items in index view -%> <header class="documentHeader row"> diff --git a/app/views/catalog/_is_part_of_block.html.erb b/app/views/catalog/_is_part_of_block.html.erb deleted file mode 100644 index fd444031..00000000 --- a/app/views/catalog/_is_part_of_block.html.erb +++ /dev/null @@ -1,47 +0,0 @@ -<script> - - // Sends the custom dimension to Google Analytics. - gtag('event', "<%= document['source_collection_title_ssim']&.first %>", - { - 'event_category': 'collection_view', - 'event_label': '<%= document['title_tesim'].first %>' - }); - gtag('event', "<%= document['holding_repository_tesim']&.first %>", - { - 'event_category': 'holding_repository_view', - 'event_label': '<%= document['title_tesim'].first %>' - }); - gtag('event', "<%= document['human_readable_content_type_ssim']&.first %>", - { - 'event_category': 'format_view', - 'event_label': '<%= document['title_tesim'].first %>' - }); -</script> - -<% doc_presenter = show_presenter(document) %> -<% fields = presenter.new(document: doc_presenter.fields_to_render).terms(:is_part_of) %> -<% if fields.length > 0 %> - <div class="<%= presenter_class %> card mb-2 rounded-0" title="<%= title %>"> - <div class="card-header rounded-0"><%= title %></div> - <div class="card-body"> - <dl title="<%= title %>"> - <% if document['member_of_collection_ids_ssim'].present? %> - <% unless document['source_collection_id_tesim'].nil? || document['member_of_collection_ids_ssim'].first == document['source_collection_id_tesim']&.first %> - <% col_link = document['source_collection_id_tesim'].first %> - <% col_title = document.source_collection_title %> - <% else %> - <% col_link = document["member_of_collection_ids_ssim"].first %> - <% col_title = document["member_of_collections_ssim"]&.first %> - <% end %> - <dt title="parent collection link"></dt> - <dd class="blacklight-member_of_collections"><a href=<%= col_link %>><%= col_title || "Parent Collection" %></a></dd> - <% end %> - <% if document['parent_work_for_lux_tesim'].present? %> - <% link, link_title = document['parent_work_for_lux_tesim'].first.split(', ') %> - <dt title="parent work link"></dt> - <dd class='blacklight-parent_member_of_collections'><a href=<%= link %>><%= link_title %></a></dd> - <% end %> - </dl> - </div> - </div> -<% end %> diff --git a/app/views/catalog/_metadata_all.html.erb b/app/views/catalog/_metadata_all.html.erb deleted file mode 100644 index 952935ba..00000000 --- a/app/views/catalog/_metadata_all.html.erb +++ /dev/null @@ -1,16 +0,0 @@ -<div class="row d-none d-lg-flex"> - <div class="col-md-3"> - <%= render "metadata_col_1", document: document %> - </div> - <div class="col-md-6"> - <%= render "metadata_col_2", document: document %> - </div> - <div class="col-md-3"> - <%= render "metadata_col_3", document: document %> - </div> -</div> -<div class="row d-lg-none"> - <div class="col"> - <%= render 'metadata_mobile', document: document %> - </div> -</div> \ No newline at end of file diff --git a/app/views/catalog/_metadata_col_1.html.erb b/app/views/catalog/_metadata_col_1.html.erb deleted file mode 100644 index 193a118c..00000000 --- a/app/views/catalog/_metadata_col_1.html.erb +++ /dev/null @@ -1,9 +0,0 @@ -<div class="row-flex"> - <%= render 'is_part_of_block', document: document, presenter: MetadataPresenter, presenter_class: 'is-part-of', title: 'This item is part of:' %> - <% if document["has_model_ssim"]&.first == "Collection" %> - <%= render 'view_items_in_collection_block', document: document, presenter: MetadataPresenter, presenter_class: 'view-items-in-collection' %> - <% title_for_find_col = 'Find This Collection' %> - <% end %> - <%= render 'find_this_item_block', document: document, presenter: MetadataPresenter, presenter_class: 'find-this-item', title: "#{title_for_find_col || 'Find This Item'}", add_class_dt: "col-md-12", add_class_dd: "col-md-12" %> - <%= render 'metadata_block', document: document, presenter: RelatedMaterialPresenter, presenter_class: 'related-material', title: 'Related Material', add_class_dt: "col-md-12", add_class_dd: "col-md-12" %> -</div> diff --git a/app/views/catalog/_metadata_col_2.html.erb b/app/views/catalog/_metadata_col_2.html.erb deleted file mode 100644 index b7d5371d..00000000 --- a/app/views/catalog/_metadata_col_2.html.erb +++ /dev/null @@ -1,12 +0,0 @@ -<div class="row-flex"> - <% if document["has_model_ssim"]&.first == "Collection" %> - <%= render 'about_this_collection_block', document: document, presenter: MetadataPresenter, presenter_class: 'about-this-collection', title: 'About This Collection' %> - <% end %> - <% if document["has_model_ssim"]&.first == "CurateGenericWork" %> - <%= render 'this_item_contains_block', document: document, presenter: ThisItemContainsPresenter, presenter_class: 'this-item-contains', title: 'This item contains:' %> - <%= render 'about_this_item_block', document: document, presenter: AboutThisItemPresenter, presenter_class: 'about-this-item', title: 'About This Item', add_class_dt: "col-md-5", add_class_dd: "col-md-7" %> - <% end %> - <%= render 'metadata_block', document: document, presenter: SubjectsKeywordsPresenter, presenter_class: 'subjects-keywords', title: 'Subjects / Keywords', add_class_dt: "col-md-5", add_class_dd: "col-md-7" %> - <%= render 'metadata_block', document: document, presenter: PublicationDetailsPresenter, presenter_class: 'publication-details', title: 'Publication Details', add_class_dt: "col-md-5", add_class_dd: "col-md-7" %> - <%= render 'metadata_block', document: document, presenter: AdditionalDetailsPresenter, presenter_class: 'additional-details', title: 'Additional Details', add_class_dt: "col-md-5", add_class_dd: "col-md-7" %> -</div> diff --git a/app/views/catalog/_metadata_col_3.html.erb b/app/views/catalog/_metadata_col_3.html.erb deleted file mode 100644 index 95e8627c..00000000 --- a/app/views/catalog/_metadata_col_3.html.erb +++ /dev/null @@ -1,4 +0,0 @@ -<div class="row-flex"> - <%= render "show_tools", document: document %> - <%= render 'access_and_copyright_block', document: document, presenter: MetadataPresenter, presenter_class: 'access-and-copyright', title: 'Access and Copyright' %> -</div> diff --git a/app/views/catalog/_metadata_mobile.html.erb b/app/views/catalog/_metadata_mobile.html.erb deleted file mode 100644 index 0d26b8e3..00000000 --- a/app/views/catalog/_metadata_mobile.html.erb +++ /dev/null @@ -1,15 +0,0 @@ -<% if document["has_model_ssim"]&.first == "Collection" %> - <%= render 'view_items_in_collection_block', document: document, presenter: MetadataPresenter, presenter_class: 'view-items-in-collection' %> -<% end %> -<%= render 'is_part_of_block', document: document, presenter: MetadataPresenter, presenter_class: 'is-part-of', title: 'This item is part of:' %> -<% if document["has_model_ssim"]&.first == "Collection" %> - <%= render 'about_this_collection_block', document: document, presenter: MetadataPresenter, presenter_class: 'about-this-collection', title: 'About This Collection' %> - <% title_for_find_col = 'Find This Collection' %> -<% end %> -<% if document["has_model_ssim"]&.first == "CurateGenericWork" %> - <%= render 'about_this_item_block', document: document, presenter: AboutThisItemPresenter, presenter_class: 'about-this-item', title: 'About This Item', add_class_dt: "col-md-5", add_class_dd: "col-md-7" %> -<% end %> -<%= render "show_tools", document: document %> -<%= render 'metadata_block', document: document, presenter: SubjectsKeywordsPresenter, presenter_class: 'subjects-keywords', title: 'Subjects / Keywords', add_class_dt: "col-md-5", add_class_dd: "col-md-7" %> -<%= render 'find_this_item_block', document: document, presenter: MetadataPresenter, presenter_class: 'find-this-item', title: "#{title_for_find_col || 'Find This Item'}", add_class_dt: "col-md-12", add_class_dd: "col-md-12" %> -<%= render 'access_and_copyright_block', document: document, presenter: MetadataPresenter, presenter_class: 'access-and-copyright', title: 'Access and Copyright' %> \ No newline at end of file diff --git a/app/views/catalog/_search_form.html.erb b/app/views/catalog/_search_form.html.erb deleted file mode 100644 index d631435e..00000000 --- a/app/views/catalog/_search_form.html.erb +++ /dev/null @@ -1,26 +0,0 @@ -<%= form_tag search_action_url, method: :get, class: 'search-query-form', role: 'search' do %> - <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:q, :search_field, :qt, :page, :utf8)) %> - <% if search_fields.length > 1 %> - <label for="search_field" class="sr-only sr-only-focusable"><%= t('blacklight.search.form.search_field.label') %></label> - <% end %> - <div id="search-fields" class="input-group col-md-12"> - <% if search_fields.length > 1 %> - <%= select_tag(:search_field, - options_for_select(search_fields, h(params[:search_field])), - id: "search_field", - class: "selectpicker search-field col-3", - "data-style" => "fielded-search") %> - <% elsif search_fields.length == 1 %> - <%= hidden_field_tag :search_field, search_fields.first.last %> - <% end %> - - <label for="q" class="sr-only sr-only-focusable"><%= t('blacklight.search.form.search.label') %></label> - <%= text_field_tag :q, params[:q], placeholder: t('blacklight.search.form.search.placeholder'), class: "search-q q form-control col-8", id: "q", autofocus: presenter.autofocus?, data: { autocomplete_enabled: presenter.autocomplete_enabled?, autocomplete_path: search_action_path(action: :suggest) } %> - - <span class="input-group-append"> - <button class="btn btn-primary rounded-0" id="search"> - <%= t('blacklight.search.form.submit') %> - </button> - </span> - </div> -<% end %> diff --git a/app/views/catalog/_search_results.html.erb b/app/views/catalog/_search_results.html.erb index 00db151a..adcbff65 100644 --- a/app/views/catalog/_search_results.html.erb +++ b/app/views/catalog/_search_results.html.erb @@ -1,4 +1,5 @@ -<% @page_title = t('blacklight.search.page_title.title', :constraints => render_search_to_page_title(params), :application_name => application_name) %> +<%# Blacklight v7.33.1 Override - matches the classes used to our previous overrides %> +<% @page_title = t('blacklight.search.page_title.title', constraints: render_search_to_page_title(params), application_name: application_name) %> <% content_for(:head) do -%> <%= render 'catalog/opensearch_response_metadata', response: @response %> @@ -12,21 +13,20 @@ <% end %> <% content_for(:container_header) do -%> - <h1 class="sr-only sr-only-focusable top-content-title"><%= t('blacklight.search.header') %></h1> - + <%= render 'search_results_header' %> <%= render 'constraints' %> <% end %> <%= render 'search_header' %> -<h2 class="sr-only sr-only-focusable"><%= t('blacklight.search.search_results') %></h2> +<h2 class="sr-only sr-only-focusable visually-hidden"><%= t('blacklight.search.search_results') %></h2> <%- if @response.empty? %> <%= render "zero_results" %> <%- elsif render_grouped_response? %> - <%= render_grouped_document_index %> + <%= ::Deprecation.silence(::Blacklight::RenderPartialsHelperBehavior) { render_grouped_document_index } %> <%- else %> - <%= render_document_index %> + <%= render_document_index @response.documents %> <%- end %> <%= render 'results_pagination' %> diff --git a/app/views/catalog/_search_results_header.html.erb b/app/views/catalog/_search_results_header.html.erb new file mode 100644 index 00000000..a3af5bdc --- /dev/null +++ b/app/views/catalog/_search_results_header.html.erb @@ -0,0 +1,2 @@ +<%# Blacklight v7.33.1 Override - matches classes to our previous overrides %> +<h1 class="sr-only sr-only-focusable visually-hidden top-content-title"><%= t('blacklight.search.header') %></h1> \ No newline at end of file diff --git a/app/views/catalog/_show.html.erb b/app/views/catalog/_show.html.erb index 8aa921f6..0c7a9a71 100644 --- a/app/views/catalog/_show.html.erb +++ b/app/views/catalog/_show.html.erb @@ -1,15 +1,2 @@ -<% - if document["child_works_for_lux_tesim"] || - (document["has_model_ssim"] == ["Collection"] && document["banner_path_ss"].nil?) -%> -<% elsif document["has_model_ssim"] == ["Collection"] && document["banner_path_ss"].present? %> - <img - src=<%= (ENV['THUMBNAIL_URL'] || '') + document["banner_path_ss"] %> - class="img-fluid" - id="collection-banner" - title="collection feature image" - > -<% else %> - <%= render "uv", document: document %> -<% end %> -<%= render "metadata_all", document: document %> +<%# Blacklight v7.33.1 Override - skipping Blacklight::DocumentMetadataComponent in favor of our own component %> +<%= render ::Lux::ShowDocumentComponent.new(document: document, request_base_url: request&.base_url) %> \ No newline at end of file diff --git a/app/views/catalog/_show_header.html.erb b/app/views/catalog/_show_header.html.erb index 35dcc59b..a5e4985f 100644 --- a/app/views/catalog/_show_header.html.erb +++ b/app/views/catalog/_show_header.html.erb @@ -1,2 +1,6 @@ +<%# Blacklight v7.33.1 Override - we prefer our own header type and class names %> + <% # bookmark/folder functions -%> -<h1 itemprop="name" class="show-header"><%= document_heading %></h1> \ No newline at end of file +<h1 itemprop="name" class="show-header"> + <%= Deprecation.silence(Blacklight::BlacklightHelperBehavior) { document_heading } %> +</h1> diff --git a/app/views/catalog/_show_main_content.html.erb b/app/views/catalog/_show_main_content.html.erb index d292ec9b..b4a7175d 100644 --- a/app/views/catalog/_show_main_content.html.erb +++ b/app/views/catalog/_show_main_content.html.erb @@ -1,21 +1,27 @@ -<%# Standard Blacklight (v7.7.0) View overrided to add call to new breadcrumb partial %> -<%= render 'previous_next_doc' if @search_context %> -<%= render_page_breadcrumbs(@document) %> +<%# Blacklight (v7.33.1) View overriden to add call to new breadcrumb partial %> +<%= render(Blacklight::SearchContextComponent.new(search_context: @search_context, search_session: search_session)) if search_session['document_id'] == @document.id %> +<%= render ::Lux::BreadcrumbsComponent.new(document: @document) %> -<% @page_title = t('blacklight.search.show.title', :document_title => document_show_html_title, :application_name => application_name).html_safe %> +<% @page_title = t('blacklight.search.show.title', document_title: Deprecation.silence(Blacklight::BlacklightHelperBehavior) { document_show_html_title }, application_name: application_name).html_safe %> <% content_for(:head) { render_link_rel_alternates } %> -<div id="document" class="document <%= render_document_class %>" itemscope itemtype="<%= @document.itemtype %>"> - <div id="doc_<%= @document.id.to_s.parameterize %>"> - <%= render_document_partials @document, blacklight_config.view_config(:show).partials %> - </div> -</div> +<%= render (blacklight_config.view_config(:show).document_component || Blacklight::DocumentComponent).new(presenter: document_presenter(@document), component: :div, title_component: :h1, show: true) do |component| %> + <% component.footer do %> + <% if @document.respond_to?(:export_as_openurl_ctx_kev) %> + <!-- + // COinS, for Zotero among others. + // This document_partial_name(@document) business is not quite right, + // but has been there for a while. + --> + <span class="Z3988" title="<%= @document.export_as_openurl_ctx_kev(Deprecation.silence(Blacklight::RenderPartialsHelperBehavior) { document_partial_name(@document) }) %>"></span> + <% end %> + <% end %> -<% if @document.respond_to?(:export_as_openurl_ctx_kev) %> - <!-- - // COinS, for Zotero among others. - // This document_partial_name(@document) business is not quite right, - // but has been there for a while. - --> - <span class="Z3988" title="<%= @document.export_as_openurl_ctx_kev(document_partial_name(@document)) %>"></span> + <%# Use :body for complete backwards compatibility (overriding the component body markup), + but if the app explicitly opted-in to components, make the partials data available as :partials to ease migrations pain %> + <% component.public_send(blacklight_config.view_config(:show).document_component.blank? && blacklight_config.view_config(:show).partials.any? ? :body : :partial) do %> + <div id="doc_<%= @document.id.to_s.parameterize %>"> + <%= render_document_partials @document, blacklight_config.view_config(:show).partials, component: component %> + </div> + <% end %> <% end %> \ No newline at end of file diff --git a/app/views/catalog/_show_tools.html.erb b/app/views/catalog/_show_tools.html.erb index edfd11e7..76e467af 100644 --- a/app/views/catalog/_show_tools.html.erb +++ b/app/views/catalog/_show_tools.html.erb @@ -1,15 +1,21 @@ +<%# Blacklight v7.33.1 Override - we prefer our class structure and accessibility improvements %> <% if show_doc_actions? %> <div class="card mb-2 rounded-0" title="<%= t('blacklight.tools.title') %>"> <div class="card-header rounded-0"> <%= t('blacklight.tools.title') %> </div> - <ul class="list-group list-group-flush" title="<%= t('blacklight.tools.title') %> Links"> - <%= render_show_doc_actions @document do |config, inner| %> - <li class="list-group-item <%= config.key %>"> - <%= inner %> - </li> - <% end %> - </ul> + <% if render_show_doc_actions_method_from_blacklight? %> + <%= render(Blacklight::Document::ActionsComponent.new(document: @document, tag: 'ul', classes: 'list-group list-group-flush', wrapping_tag: 'li', wrapping_classes: 'list-group-item', actions: document_actions(@document), url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h))) %> + <% else %> + <% Deprecation.warn(self, '#render_show_doc_actions is deprecated; use ActionComponents instead') %> + <ul class="list-group list-group-flush" title="<%= t('blacklight.tools.title') %> Links"> + <%= render_show_doc_actions @document do |config, inner| %> + <li class="list-group-item <%= config.key %>"> + <%= inner %> + </li> + <% end %> + </ul> + <% end %> </div> <% end %> diff --git a/app/views/catalog/_sort_and_per_page.html.erb b/app/views/catalog/_sort_and_per_page.html.erb index 729b0897..bc4131f9 100644 --- a/app/views/catalog/_sort_and_per_page.html.erb +++ b/app/views/catalog/_sort_and_per_page.html.erb @@ -1,8 +1,14 @@ -<div id="sortAndPerPage" class="row sort-pagination clearfix<%= ' bookmarks' if request.fullpath == '/bookmarks' %>"> +<%# Blacklight v7.33.1 Override - we prefer our class structure and accessibility improvements %> + +<div + id="sortAndPerPage" + class="row sort-pagination d-md-flex justify-content-between<%= ' bookmarks' if request.fullpath == '/bookmarks' %>" + role="navigation" + aria-label="<%= t('blacklight.search.per_page.aria_label')%>"> <div class="col-xs-6"> <%= render partial: "paginate_compact", object: @response if show_pagination? %> </div> <div class="col-xs-6 sort-tools" align="right"> - <%= render_results_collection_tools wrapping_class: "search-widgets float-md-right" %> + <%= render_results_collection_tools wrapping_class: "search-widgets" %> </div> </div> diff --git a/app/views/catalog/_thumbnail.html.erb b/app/views/catalog/_thumbnail.html.erb index 74decc27..7642acfd 100644 --- a/app/views/catalog/_thumbnail.html.erb +++ b/app/views/catalog/_thumbnail.html.erb @@ -1,5 +1,3 @@ -<% if presenter(document).thumbnail.exists? && tn = presenter(document).thumbnail.thumbnail_tag({}) %> -<div class="document-thumbnail"> - <%= tn %> -</div> -<% end %> +<%# Blacklight v7.33.1 Override - removes counter as a presentation factor %> + +<%= render Blacklight::Document::ThumbnailComponent.new(presenter: document_presenter(document), counter: nil) %> diff --git a/app/views/catalog/_uv.html.erb b/app/views/catalog/_uv.html.erb deleted file mode 100644 index 285b8aa0..00000000 --- a/app/views/catalog/_uv.html.erb +++ /dev/null @@ -1,12 +0,0 @@ -<div class="uv-container"> - <iframe - class="universal-viewer-iframe" - src="<%= request&.base_url %>/uv/uv.html#?manifest=<%= Rails.application.config.iiif_url %>/<%= document.id %>/manifest" - width="924px" - height="668px" - allowfullscreen - frameborder="0" - title="content viewer"> - </iframe> -</div> -</br> diff --git a/app/views/catalog/_view_items_in_collection_block.html.erb b/app/views/catalog/_view_items_in_collection_block.html.erb deleted file mode 100644 index 0eca838e..00000000 --- a/app/views/catalog/_view_items_in_collection_block.html.erb +++ /dev/null @@ -1,10 +0,0 @@ -<% doc_presenter = show_presenter(document) %> -<% fields = presenter.new(document: doc_presenter.fields_to_render).terms(:view_items_in_this_collection) %> - <div class="<%= presenter_class %> card mb-2 rounded-0" title="<%= t('blacklight.work.view_items_collection') %>"> - <div class="card-body"> - <dl title="<%= t('blacklight.work.view_items_collection') %>"> - <dt title="collection link"></dt> - <dd class="blacklight-view-items-in-collection"><a href="/?f%5Bsource_collection_title_ssim%5D%5B%5D=<%= CGI::escape(document[:title_tesim]&.first) %>&per_page=10"><%= t('blacklight.work.view_items_collection') %></a></dd> - </dl> - </div> - </div> diff --git a/app/views/catalog/facet.html.erb b/app/views/catalog/facet.html.erb index 2185df0d..db479661 100644 --- a/app/views/catalog/facet.html.erb +++ b/app/views/catalog/facet.html.erb @@ -1,24 +1,23 @@ -<!-- This is a Blacklight 7.4.3 overwrite that is required to properly align the two pagination bars (top and bottom) together --> -<div class="facet-pagination top"> - <%= render :partial=>'facet_pagination' %> -</div> +<!-- This is a Blacklight 7.33.1 overwrite that is required to properly align the two pagination bars (top and bottom) together --> +<%= render Blacklight::System::ModalComponent.new do |component| %> + <% component.prefix do %> + <div class="facet-pagination top"> + <%= render :partial=>'facet_pagination' %> + </div> + <% end %> -<div class="modal-header"> - <h1 class="modal-title"><%= facet_field_label(@facet.key) %></h1> - <button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="<%= t('blacklight.modal.close') %>"> - <span aria-hidden="true">×</span> - </button> -</div> + <% component.title { facet_field_label(@facet.key) } %> -<div class="modal-body"> <%= render partial: 'facet_index_navigation' if @facet.index_range && @display_facet.index? %> <div class="facet-extended-list"> - <%= render_facet_limit(@display_facet, layout: false) %> + <%= render_facet_limit(@display_facet, layout: false) %> </div> -</div> -<div class="modal-footer"></div> -<div class="facet-pagination bottom"> - <%= render :partial=>'facet_pagination' %> -</div> + <% component.footer do %> + <div class="facet-pagination bottom"> + <%= render :partial=>'facet_pagination' %> + </div> + <% end %> + +<% end %> diff --git a/app/views/catalog/show.html.erb b/app/views/catalog/show.html.erb index 26ca6f5c..17eacc58 100644 --- a/app/views/catalog/show.html.erb +++ b/app/views/catalog/show.html.erb @@ -1,8 +1,10 @@ +<!-- Blacklight 7.33.1 Override - utlizies our classes and desired placement of elements --> + <% if current_search_session %> <div id="appliedParams" class="clearfix constraints-container"> - <%= link_to t('blacklight.search.start_over'), start_over_path, class: "catalog_startOverLink button link" %> + <%= render 'start_over' %> <%= link_back_to_catalog class: 'button back-to' %> </div> <% end %> -<%= render_document_main_content_partial %> +<%= render 'show_main_content' %> diff --git a/app/views/layouts/blacklight/base.html.erb b/app/views/layouts/blacklight/base.html.erb index 75d65ba0..f2e4fbc2 100644 --- a/app/views/layouts/blacklight/base.html.erb +++ b/app/views/layouts/blacklight/base.html.erb @@ -18,13 +18,16 @@ <!-- Internet Explorer use the highest version available --> <meta http-equiv="X-UA-Compatible" content="IE=edge"> - <title><%= render_page_title %> + <%= ActionView::Base.full_sanitizer.sanitize(render_page_title) %> <%= opensearch_description_tag application_name, opensearch_catalog_url(format: 'xml') %> <%= favicon_link_tag %> - <%= stylesheet_link_tag "application", media: "all" %> + <%= stylesheet_link_tag "application", media: "all", "data-turbo-track": "reload" %> <%= javascript_include_tag "application" %> <%= csrf_meta_tags %> <%= content_for(:head) %> + + <%= javascript_include_tag 'xray', nonce: true, "data-turbo-track": "reload", defer: true if Rails.env.development? %> + <%= stylesheet_link_tag 'xray', nonce: true if Rails.env.development? %> diff --git a/app/views/search_history/index.html.erb b/app/views/search_history/index.html.erb index 77e04524..1ecb84ca 100644 --- a/app/views/search_history/index.html.erb +++ b/app/views/search_history/index.html.erb @@ -1,8 +1,9 @@ +<%# Blacklight v7.33.1 Override - adds breacrumbs and alters classes %> + <% @page_title = t('blacklight.search_history.page_title', :application_name => application_name) %>
- <%= render 'catalog/breadcrumbs', crumb_hashes: [{ curr_page: true, abbr: nil, link: '/search_history', title: "History" }] - %> + <%= render ::Lux::BreadcrumbsComponent.new(crumb_hashes: [{ curr_page: true, abbr: nil, link: '/search_history', title: "History" }]) %>

<%= t('blacklight.search_history.title') %>

<% if @searches.blank? %>

<%= t('blacklight.search_history.no_history') %>

@@ -11,7 +12,7 @@ blacklight.clear_search_history_path, method: :delete, data: { confirm: t('blacklight.search_history.clear.action_confirm') }, - class: 'btn btn-danger float-md-right rounded-0' %> + class: 'btn btn-danger float-md-right float-md-end rounded-0' %>

<%= t('blacklight.search_history.recent') %>

<% @searches.each_with_index do |search,index| %> diff --git a/app/views/shared/_big_nav.html.erb b/app/views/shared/_big_nav.html.erb index 03d2d40f..2b59498d 100644 --- a/app/views/shared/_big_nav.html.erb +++ b/app/views/shared/_big_nav.html.erb @@ -17,13 +17,17 @@ - <%= render 'shared/top_links' %> <% # Don't show regular search on advanced search page %>
<% unless request.original_fullpath == "/advanced" %> - <%= render_search_bar %> + <%= render((blacklight_config&.view_config(document_index_view_type)&.search_bar_component ||Blacklight::SearchBarComponent).new( + url: search_action_url, + advanced_search_url: search_action_url(action: 'advanced_search'), + params: search_state.params_for_search.except(:qt), + autocomplete_path: search_action_path(action: :suggest))) %> <% end %>
diff --git a/app/views/static/_static_content_blurbs.html.erb b/app/views/static/_static_content_blurbs.html.erb deleted file mode 100644 index e07c648e..00000000 --- a/app/views/static/_static_content_blurbs.html.erb +++ /dev/null @@ -1,2 +0,0 @@ -

<%= blurb_header %>

-

<%= blurb %>

\ No newline at end of file diff --git a/app/views/static/about.html.erb b/app/views/static/about.html.erb index b0dbb7df..a5cb0562 100644 --- a/app/views/static/about.html.erb +++ b/app/views/static/about.html.erb @@ -1,46 +1,52 @@ <% @page_title = "#{t('about')} - #{application_name}" %> -<% title = I18n.t('about'); abbr = title.split(' ').first(3).join(' ') + '...' %> +<% title = I18n.t('about') %> -<%= render 'catalog/breadcrumbs', crumb_hashes: [{ curr_page: true, abbr: abbr, link: '/about', title: title }] -%> +<%= render ::Lux::BreadcrumbsComponent.new( + crumb_hashes: [ + { curr_page: true, + abbr: (title.split(' ').first(3).join(' ') + '...'), + link: '/about', + title: title } + ] +) %>
-<%= render 'static/static_heading', - title: title, - subheading: "The digital front door to unique cultural heritage and scholarship collections from Emory University." -%> + <%= render ::Lux::StaticHeadingComponent.new( + title: title, + subheading: 'The digital front door to unique cultural heritage and scholarship collections from Emory University.' + ) %>
- <%= render 'static/static_content_blurbs', - blurb_header_klass: " dlp-blurb-header", - blurb_header: "Digital Library Program", - blurb_body_klass: " dlp-blurb", - blurb: "A key offering of the Digital Library Program (DLP), a multi-year Emory Libraries strategic initiative to promote best practices and provide long term access to Emory's unique digital assets and collections, the Emory Digital Collections site is the digital front door to our newly re-architected digital repository.".html_safe - %> - <%= render 'static/static_content_blurbs', - blurb_header_klass: " coll-con-blurb-header", - blurb_header: "Collections & Content", - blurb_body_klass: " coll-con-blurb", - blurb: "The Emory Libraries’ holdings include hundreds of digital collections and millions of digital assets in queue to be made available through our Emory Digital Collections site. We load new content on an ongoing basis, and our repository roadmap includes expanding support for additional types of material.".html_safe - %> - <%= render 'static/static_content_blurbs', - blurb_header_klass: " tech-blurb-header", - blurb_header: "Technology", - blurb_body_klass: " tech-blurb", - blurb: "The Cor digital preservation repository infrastructure developed by the Emory Libraries is built using the Samvera digital repository framework, collaboratively developed and maintained by dozens of organizations in the library and museum sectors. The Emory Digital Collections public interface is built upon Blacklight, and our management and preservation functionality is built upon Hyrax, Fedora, Solr, and other components within an AWS framework. Learn more about our technical implementation plans at our wiki site.".html_safe - %> - <%= render 'static/static_content_blurbs', - blurb_header_klass: " accessibility-blurb-header", - blurb_header: "Accessibility", - blurb_body_klass: " accessibility-blurb", - blurb: "Emory Libraries is committed to the principles of universal design and strives to provide equitable services online and in our spaces. We assess and enhance the usability and accessibility of our digital interfaces on an ongoing basis, and use Section 508 of the Rehabilitation Act and current WCAG AA standards as benchmarks. For further information, please use our feedback form or consult Emory’s Department of Accessibility Services.".html_safe - %> - <%= render 'static/static_content_blurbs', - blurb_header_klass: " help-blurb-header", - blurb_header: "Questions, Help, and Feedback", - blurb_body_klass: " help-blurb", - blurb: "Please visit our Contact page for more information about Emory Digital Collections or get in touch through our feedback form. View our user guide at our wiki site.".html_safe - %> + <%= render ::Lux::StaticContentComponent.new( + header_class: 'dlp-blurb-header', + header_text: 'Digital Library Program', + body_class: 'dlp-blurb', + body_text: "A key offering of the Digital Library Program (DLP), a multi-year Emory Libraries strategic initiative to promote best practices and provide long term access to Emory's unique digital assets and collections, the Emory Digital Collections site is the digital front door to our newly re-architected digital repository." + ) %> + <%= render ::Lux::StaticContentComponent.new( + header_class: 'coll-con-blurb-header', + header_text: 'Collections & Content', + body_class: 'coll-con-blurb', + body_text: "The Emory Libraries’ holdings include hundreds of digital collections and millions of digital assets in queue to be made available through our Emory Digital Collections site. We load new content on an ongoing basis, and our repository roadmap includes expanding support for additional types of material." + ) %> + <%= render ::Lux::StaticContentComponent.new( + header_class: 'tech-blurb-header', + header_text: 'Technology', + body_class: 'tech-blurb', + body_text: "The Cor digital preservation repository infrastructure developed by the Emory Libraries is built using the Samvera digital repository framework, collaboratively developed and maintained by dozens of organizations in the library and museum sectors. The Emory Digital Collections public interface is built upon Blacklight, and our management and preservation functionality is built upon Hyrax, Fedora, Solr, and other components within an AWS framework. Learn more about our technical implementation plans at our wiki site." + ) %> + <%= render ::Lux::StaticContentComponent.new( + header_class: 'accessibility-blurb-header', + header_text: 'Accessibility', + body_class: 'accessibility-blurb', + body_text: "Emory Libraries is committed to the principles of universal design and strives to provide equitable services online and in our spaces. We assess and enhance the usability and accessibility of our digital interfaces on an ongoing basis, and use Section 508 of the Rehabilitation Act and current WCAG AA standards as benchmarks. For further information, please use our feedback form or consult Emory’s Department of Accessibility Services." + ) %> + <%= render ::Lux::StaticContentComponent.new( + header_class: 'help-blurb-header', + header_text: 'Questions, Help, and Feedback', + body_class: 'help-blurb', + body_text: "Please visit our Contact page for more information about Emory Digital Collections or get in touch through our feedback form. View our user guide at our wiki site." + ) %>
diff --git a/app/views/static/contact.html.erb b/app/views/static/contact.html.erb index c742d1b2..42a485eb 100644 --- a/app/views/static/contact.html.erb +++ b/app/views/static/contact.html.erb @@ -1,13 +1,13 @@ <% @page_title = "#{t('contact')} - #{application_name}" %> -<% title = I18n.t('contact'); abbr = nil %> +<% title = I18n.t('contact') %> -<%= render 'catalog/breadcrumbs', crumb_hashes: [{ curr_page: true, abbr: abbr, link: '/contact', title: title }] -%> +<%= render ::Lux::BreadcrumbsComponent.new(crumb_hashes: [{ curr_page: true, abbr: nil, link: '/contact', title: title }]) %>
-<%= render 'static/static_heading', - title: title, - subheading: "Contact points for technical assistance and additional information about our digital collections." -%> + <%= render ::Lux::StaticHeadingComponent.new( + title: title, + subheading: "Contact points for technical assistance and additional information about our digital collections." + ) + %>
diff --git a/app/views/static/not_found.html.erb b/app/views/static/not_found.html.erb index 547e8b63..7fbcfb68 100644 --- a/app/views/static/not_found.html.erb +++ b/app/views/static/not_found.html.erb @@ -1,9 +1,10 @@
- <%= render 'catalog/breadcrumbs', crumb_hashes: [] %> -
- <%= render 'static/static_heading', - title: t('static.not_found.header'), - subheading: t('static.not_found.subheading').html_safe - %> -
+ <%= render ::Lux::BreadcrumbsComponent.new %> +
+ <%= render ::Lux::StaticHeadingComponent.new( + title: t('static.not_found.header'), + subheading: t('static.not_found.subheading').html_safe + ) + %> +
diff --git a/app/views/static/reading_room_not_found.html.erb b/app/views/static/reading_room_not_found.html.erb index bfd4eeb7..6ab7036b 100644 --- a/app/views/static/reading_room_not_found.html.erb +++ b/app/views/static/reading_room_not_found.html.erb @@ -1,15 +1,16 @@
- <%= render 'catalog/breadcrumbs', crumb_hashes: [] %> + <%= render ::Lux::BreadcrumbsComponent.new %>
- <%= render 'static/static_heading', - title: t('static.reading_room_not_found.header'), - subheading: t('static.reading_room_not_found.subheading').html_safe + <%= render ::Lux::StaticHeadingComponent.new( + title: t('static.reading_room_not_found.header'), + subheading: t('static.reading_room_not_found.subheading').html_safe + ) %>
- <%= render 'static/static_content_blurbs', - blurb_header_klass: " reading-room-blurb-header", - blurb_header: "More About Access Restrictions", - blurb_body_klass: " reading-room-blurb", - blurb: "
  • Some items may no longer be available from the providing library. Refer to the contact information for each digital collection or consult our Contact page
  • Additional information is available within our user guide at our wiki site.
".html_safe - %> + <%= render ::Lux::StaticContentComponent.new( + header_class: 'reading-room-blurb-header', + header_text: 'More About Access Restrictions', + body_class: 'reading-room-blurb', + body_text: "
  • Some items may no longer be available from the providing library. Refer to the contact information for each digital collection or consult our Contact page
  • Additional information is available within our user guide at our wiki site.
" + ) %>
diff --git a/bin/setup b/bin/setup index 78c4e861..ec47b79b 100755 --- a/bin/setup +++ b/bin/setup @@ -1,38 +1,33 @@ #!/usr/bin/env ruby -require 'pathname' -require 'fileutils' -include FileUtils +require "fileutils" # path to your application root. -APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) +APP_ROOT = File.expand_path("..", __dir__) def system!(*args) system(*args) || abort("\n== Command #{args} failed ==") end -chdir APP_ROOT do - # This script is a starting point to setup your application. +FileUtils.chdir APP_ROOT do + # This script is a way to set up or update your development environment automatically. + # This script is idempotent, so that you can run it at any time and get an expectable outcome. # Add necessary setup steps to this file. - puts '== Installing dependencies ==' - system! 'gem install bundler --conservative' - system('bundle check') || system!('bundle install') - - # Install JavaScript dependencies if using Yarn - # system('bin/yarn') - + puts "== Installing dependencies ==" + system! "gem install bundler --conservative" + system("bundle check") || system!("bundle install") # puts "\n== Copying sample files ==" - # unless File.exist?('config/database.yml') - # cp 'config/database.yml.sample', 'config/database.yml' + # unless File.exist?("config/database.yml") + # FileUtils.cp "config/database.yml.sample", "config/database.yml" # end puts "\n== Preparing database ==" - system! 'bin/rails db:setup' + system! "bin/rails db:prepare" puts "\n== Removing old logs and tempfiles ==" - system! 'bin/rails log:clear tmp:clear' + system! "bin/rails log:clear tmp:clear" puts "\n== Restarting application server ==" - system! 'bin/rails restart' + system! "bin/rails restart" end diff --git a/config/application.rb b/config/application.rb index ed1c8569..efd7ccf2 100644 --- a/config/application.rb +++ b/config/application.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require_relative 'boot' +require_relative "boot" -require 'rails/all' +require "rails/all" # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. @@ -10,14 +10,22 @@ module LuxBl7 class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. - config.load_defaults 5.1 + config.load_defaults 7.0 - # Settings in config/environments/* take precedence over those specified here. - # Application configuration should go into files in config/initializers - # -- all .rb files in that directory are automatically loaded. + # Configuration for the application, engines, and railties goes here. + # + # These settings can be overridden in specific environments using the files + # in config/environments, which are processed later. + # + # config.time_zone = "Central Time (US & Canada)" + # config.eager_load_paths << Rails.root.join("extras") config.exceptions_app = routes config.active_record.yaml_column_permitted_classes = [ActiveSupport::HashWithIndifferentAccess, Symbol] + + config.active_record.legacy_connection_handling = false + + config.autoload_paths += %W[#{config.root}/lib] end end diff --git a/config/blacklight.yml b/config/blacklight.yml index 94cd2843..e1196dd5 100644 --- a/config/blacklight.yml +++ b/config/blacklight.yml @@ -1,3 +1,4 @@ +load_defaults: 7.33.1 development: adapter: solr url: <%= ENV['SOLR_URL'] || "http://127.0.0.1:8983/solr/blacklight-core" %> diff --git a/config/boot.rb b/config/boot.rb index 9be337a4..f1f3a447 100644 --- a/config/boot.rb +++ b/config/boot.rb @@ -1,4 +1,4 @@ # frozen_string_literal: true -ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../Gemfile', __dir__) +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) -require 'bundler/setup' # Set up gems listed in the Gemfile. +require "bundler/setup" # Set up gems listed in the Gemfile. diff --git a/config/deploy.rb b/config/deploy.rb index d2b6a214..e157b119 100644 --- a/config/deploy.rb +++ b/config/deploy.rb @@ -46,6 +46,18 @@ before 'deploy:starting', 'deploy:confirm_cab_approval' +namespace :yarn do + task :install do + on roles :all do + within release_path do + execute :yarn, 'install' + end + end + end +end + +after :'deploy:assets:precompile', :'yarn:install' + # Default branch is :master # ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp diff --git a/config/environments/development.rb b/config/environments/development.rb index 29169e42..08386044 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -1,9 +1,11 @@ # frozen_string_literal: true +require "active_support/core_ext/integer/time" + Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. - # In the development environment your application's code is reloaded on - # every request. This slows down response time but is perfect for development + # In the development environment your application's code is reloaded any time + # it changes. This slows down response time but is perfect for development # since you don't have to restart the web server when you make code changes. config.cache_classes = false @@ -13,13 +15,18 @@ # Show full error reports. config.consider_all_requests_local = false + # Enable server timing + config.server_timing = true + # Enable/disable caching. By default caching is disabled. + # Run rails dev:cache to toggle caching. if Rails.root.join('tmp', 'caching-dev.txt').exist? config.action_controller.perform_caching = true + config.action_controller.enable_fragment_cache_logging = true config.cache_store = :memory_store config.public_file_server.headers = { - 'Cache-Control' => "public, max-age=#{2.days.seconds.to_i}" + "Cache-Control" => "public, max-age=#{2.days.to_i}" } else config.action_controller.perform_caching = false @@ -35,21 +42,28 @@ # Print deprecation notices to the Rails logger. config.active_support.deprecation = :log + # Raise exceptions for disallowed deprecations. + config.active_support.disallowed_deprecation = :raise + + # Tell Active Support which deprecation messages to disallow. + config.active_support.disallowed_deprecation_warnings = [] + # Raise an error on page load if there are pending migrations. config.active_record.migration_error = :page_load - # Debug mode disables concatenation and preprocessing of assets. - # This option may cause significant delays in view rendering with a large - # number of complex assets. - config.assets.debug = true + # Highlight code that triggered database queries in logs. + config.active_record.verbose_query_logs = true # Suppress logger output for asset requests. config.assets.quiet = true - # Raises error for missing translations - # config.action_view.raise_on_missing_translations = true + # Raises error for missing translations. + # config.i18n.raise_on_missing_translations = true + + # Annotate rendered view with file names. + # config.action_view.annotate_rendered_view_with_filenames = true - # Use an evented file watcher to asynchronously detect changes in source code, - # routes, locales, etc. This feature depends on the listen gem. - config.file_watcher = ActiveSupport::EventedFileUpdateChecker + # Uncomment if you wish to allow Action Cable access from any origin. + # config.action_cable.disable_request_forgery_protection = true + config.action_view.preload_links_header = false end diff --git a/config/environments/production.rb b/config/environments/production.rb index c34d455c..3786060f 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -1,4 +1,6 @@ # frozen_string_literal: true +require "active_support/core_ext/integer/time" + Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. @@ -15,42 +17,41 @@ config.consider_all_requests_local = false config.action_controller.perform_caching = true - # Attempt to read encrypted secrets from `config/secrets.yml.enc`. - # Requires an encryption key in `ENV["RAILS_MASTER_KEY"]` or - # `config/secrets.yml.key`. - config.read_encrypted_secrets = true + # Ensures that a master key has been made available in either ENV["RAILS_MASTER_KEY"] + # or in config/master.key. This key is used to decrypt credentials (and other encrypted files). + # config.require_master_key = true # Disable serving static files from the `/public` folder by default since # Apache or NGINX already handles this. - config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? + config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present? - # Compress JavaScripts and CSS. - config.assets.js_compressor = Uglifier.new(harmony: true) + # Compress CSS using a preprocessor. # config.assets.css_compressor = :sass # Do not fallback to assets pipeline if a precompiled asset is missed. config.assets.compile = false - # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb - # Enable serving of images, stylesheets, and JavaScripts from an asset server. - # config.action_controller.asset_host = 'http://assets.example.com' + # config.asset_host = "http://assets.example.com" # Specifies the header that your server uses for sending files. - # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache - # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache + # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX - # Mount Action Cable outside main process or domain + # Store uploaded files on the local file system (see config/storage.yml for options). + config.active_storage.service = :local + + # Mount Action Cable outside main process or domain. # config.action_cable.mount_path = nil - # config.action_cable.url = 'wss://example.com/cable' - # config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ] + # config.action_cable.url = "wss://example.com/cable" + # config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ] # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. # config.force_ssl = true - # Use the lowest log level to ensure availability of diagnostic information - # when problems arise. - config.log_level = :debug + # Include generic and useful information about system operation, but avoid logging too much + # information to avoid inadvertent exposure of personally identifiable information (PII). + config.log_level = :info # Prepend all log lines with the following tags. config.log_tags = [:request_id] @@ -58,9 +59,10 @@ # Use a different cache store in production. # config.cache_store = :mem_cache_store - # Use a real queuing backend for Active Job (and separate queues per environment) + # Use a real queuing backend for Active Job (and separate queues per environment). # config.active_job.queue_adapter = :resque - # config.active_job.queue_name_prefix = "lux_bl_7_#{Rails.env}" + # config.active_job.queue_name_prefix = "lux_bl7_production" + config.action_mailer.perform_caching = false # Ignore bad email addresses and do not raise email delivery errors. @@ -71,15 +73,15 @@ # the I18n.default_locale when a translation cannot be found). config.i18n.fallbacks = true - # Send deprecation notices to registered listeners. - config.active_support.deprecation = :notify + # Don't log any deprecations. + config.active_support.report_deprecations = false # Use default logging formatter so that PID and timestamp are not suppressed. config.log_formatter = ::Logger::Formatter.new # Use a different logger for distributed setups. - # require 'syslog/logger' - # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name') + # require "syslog/logger" + # config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new "app-name") if ENV["RAILS_LOG_TO_STDOUT"].present? logger = ActiveSupport::Logger.new(STDOUT) diff --git a/config/environments/test.rb b/config/environments/test.rb index 8a6e876d..9b08ec56 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -1,33 +1,42 @@ # frozen_string_literal: true +require "active_support/core_ext/integer/time" + +# The test environment is used exclusively to run your application's +# test suite. You never need to work with it otherwise. Remember that +# your test database is "scratch space" for the test suite and is wiped +# and recreated between test runs. Don't rely on the data there! + Rails.application.configure do # Settings specified here will take precedence over those in config/application.rb. - # The test environment is used exclusively to run your application's - # test suite. You never need to work with it otherwise. Remember that - # your test database is "scratch space" for the test suite and is wiped - # and recreated between test runs. Don't rely on the data there! - config.cache_classes = true + # Turn false under Spring and add config.action_view.cache_template_loading = true. + config.cache_classes = false - # Do not eager load code on boot. This avoids loading your whole application - # just for the purpose of running a single test. If you are using a tool that - # preloads Rails for running tests, you may have to set it to true. - config.eager_load = false + # Eager loading loads your whole application. When running a single test locally, + # this probably isn't necessary. It's a good idea to do in a continuous integration + # system, or in some way before deploying your code. + config.eager_load = ENV["CI"].present? # Configure public file server for tests with Cache-Control for performance. config.public_file_server.enabled = true config.public_file_server.headers = { - 'Cache-Control' => "public, max-age=#{1.hour.seconds.to_i}" + "Cache-Control" => "public, max-age=#{1.hour.to_i}" } # Show full error reports and disable caching. config.consider_all_requests_local = false config.action_controller.perform_caching = false + config.cache_store = :null_store # Raise exceptions instead of rendering exception templates. config.action_dispatch.show_exceptions = true # Disable request forgery protection in test environment. config.action_controller.allow_forgery_protection = false + + # Store uploaded files on the local file system in a temporary directory. + config.active_storage.service = :test + config.action_mailer.perform_caching = false # Tell Action Mailer not to deliver emails to the real world. @@ -38,6 +47,15 @@ # Print deprecation notices to the stderr. config.active_support.deprecation = :stderr - # Raises error for missing translations - # config.action_view.raise_on_missing_translations = true + # Raise exceptions for disallowed deprecations. + config.active_support.disallowed_deprecation = :raise + + # Tell Active Support which deprecation messages to disallow. + config.active_support.disallowed_deprecation_warnings = [] + + # Raises error for missing translations. + # config.i18n.raise_on_missing_translations = true + + # Annotate rendered view with file names. + # config.action_view.annotate_rendered_view_with_filenames = true end diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb index b6970c9e..3bb606b2 100644 --- a/config/initializers/assets.rb +++ b/config/initializers/assets.rb @@ -2,12 +2,10 @@ # Be sure to restart your server when you modify this file. # Version of your assets, change this if you want to expire all your assets. -Rails.application.config.assets.version = '1.0' +Rails.application.config.assets.version = "1.0" # Add additional assets to the asset load path. # Rails.application.config.assets.paths << Emoji.images_path -# Add Yarn node_modules folder to the asset load path. -Rails.application.config.assets.paths << Rails.root.join('node_modules') # Precompile additional assets. # application.js, application.css, and all non-JS/CSS in the app/assets diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb new file mode 100644 index 00000000..691cfa11 --- /dev/null +++ b/config/initializers/content_security_policy.rb @@ -0,0 +1,26 @@ +# frozen_string_literal: true +# Be sure to restart your server when you modify this file. + +# Define an application-wide content security policy. +# See the Securing Rails Applications Guide for more information: +# https://guides.rubyonrails.org/security.html#content-security-policy-header + +# Rails.application.configure do +# config.content_security_policy do |policy| +# policy.default_src :self, :https +# policy.font_src :self, :https, :data +# policy.img_src :self, :https, :data +# policy.object_src :none +# policy.script_src :self, :https +# policy.style_src :self, :https +# # Specify URI for violation reports +# # policy.report_uri "/csp-violation-report-endpoint" +# end +# +# # Generate session nonces for permitted importmap and inline scripts +# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s } +# config.content_security_policy_nonce_directives = %w(script-src) +# +# # Report violations without enforcing the policy. +# # config.content_security_policy_report_only = true +# end diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb index b7fe1231..a43f2e45 100644 --- a/config/initializers/filter_parameter_logging.rb +++ b/config/initializers/filter_parameter_logging.rb @@ -1,5 +1,9 @@ # frozen_string_literal: true # Be sure to restart your server when you modify this file. -# Configure sensitive parameters which will be filtered from the log file. -Rails.application.config.filter_parameters += [:password] +# Configure parameters to be filtered from the log file. Use this to limit dissemination of +# sensitive information. See the ActiveSupport::ParameterFilter documentation for supported +# notations and behaviors. +Rails.application.config.filter_parameters += [ + :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn +] diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb index aa7435fb..6c78420e 100644 --- a/config/initializers/inflections.rb +++ b/config/initializers/inflections.rb @@ -5,13 +5,13 @@ # are locale specific, and you may define rules for as many different # locales as you wish. All of these examples are active by default: # ActiveSupport::Inflector.inflections(:en) do |inflect| -# inflect.plural /^(ox)$/i, '\1en' -# inflect.singular /^(ox)en/i, '\1' -# inflect.irregular 'person', 'people' +# inflect.plural /^(ox)$/i, "\\1en" +# inflect.singular /^(ox)en/i, "\\1" +# inflect.irregular "person", "people" # inflect.uncountable %w( fish sheep ) # end # These inflection rules are supported but not enabled by default: # ActiveSupport::Inflector.inflections(:en) do |inflect| -# inflect.acronym 'RESTful' +# inflect.acronym "RESTful" # end diff --git a/config/initializers/new_framework_defaults_7_0.rb b/config/initializers/new_framework_defaults_7_0.rb new file mode 100644 index 00000000..a13554e0 --- /dev/null +++ b/config/initializers/new_framework_defaults_7_0.rb @@ -0,0 +1,142 @@ +# frozen_string_literal: true +# Be sure to restart your server when you modify this file. +# +# This file eases your Rails 7.0 framework defaults upgrade. +# +# Uncomment each configuration one by one to switch to the new default. +# Once your application is ready to run with all new defaults, you can remove +# this file and set the `config.load_defaults` to `7.0`. +# +# Read the Guide for Upgrading Ruby on Rails for more info on each option. +# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html + +# `button_to` view helper will render `