diff --git a/Gemfile b/Gemfile
index fae401d..ec93a64 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,18 +3,16 @@
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
-gem "rails", "~> 7.2"
+gem "rails", "~> 8.1"
gem "bcrypt", "~> 3.1.22"
gem "bootsnap", ">= 1.14.0", require: false
-gem "bootstrap"
gem "cgi", "~> 0.4.2"
gem "concurrent-ruby"
gem "cssbundling-rails"
gem "csv"
gem "execjs"
+gem "importmap-rails"
gem "jbuilder", "~> 2.11"
-gem "jquery-rails"
-gem "jsbundling-rails"
gem "okcomputer"
gem "net-http"
gem "net-imap"
@@ -22,13 +20,10 @@ gem "net-pop"
gem "net-smtp"
gem "pg"
gem "puma"
-gem "sassc", "~> 2.4"
-gem "sassc-rails"
+gem "propshaft"
gem "simple_auth"
gem "simple_form"
-gem "sprockets-rails"
-gem "turbolinks", "~> 5"
-gem "uglifier", ">= 1.3.0"
+gem "turbo-rails"
gem "warden"
gem "nokogiri", "~> 1.19.1"
gem "uri", ">= 1.0.4"
@@ -48,7 +43,6 @@ group :development do
gem "faker"
gem "populate"
gem "rails-erd"
- gem "sequel"
gem "spring", "3.0"
gem "web-console", ">= 3.3.0"
end
diff --git a/Gemfile.lock b/Gemfile.lock
index 8b06925..85c10ea 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,92 +1,90 @@
GEM
remote: https://rubygems.org/
specs:
- actioncable (7.2.3.1)
- actionpack (= 7.2.3.1)
- activesupport (= 7.2.3.1)
+ action_text-trix (2.1.18)
+ railties
+ actioncable (8.1.3)
+ actionpack (= 8.1.3)
+ activesupport (= 8.1.3)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (7.2.3.1)
- actionpack (= 7.2.3.1)
- activejob (= 7.2.3.1)
- activerecord (= 7.2.3.1)
- activestorage (= 7.2.3.1)
- activesupport (= 7.2.3.1)
+ actionmailbox (8.1.3)
+ actionpack (= 8.1.3)
+ activejob (= 8.1.3)
+ activerecord (= 8.1.3)
+ activestorage (= 8.1.3)
+ activesupport (= 8.1.3)
mail (>= 2.8.0)
- actionmailer (7.2.3.1)
- actionpack (= 7.2.3.1)
- actionview (= 7.2.3.1)
- activejob (= 7.2.3.1)
- activesupport (= 7.2.3.1)
+ actionmailer (8.1.3)
+ actionpack (= 8.1.3)
+ actionview (= 8.1.3)
+ activejob (= 8.1.3)
+ activesupport (= 8.1.3)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
- actionpack (7.2.3.1)
- actionview (= 7.2.3.1)
- activesupport (= 7.2.3.1)
- cgi
+ actionpack (8.1.3)
+ actionview (= 8.1.3)
+ activesupport (= 8.1.3)
nokogiri (>= 1.8.5)
- racc
- rack (>= 2.2.4, < 3.3)
+ rack (>= 2.2.4)
rack-session (>= 1.0.1)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
- actiontext (7.2.3.1)
- actionpack (= 7.2.3.1)
- activerecord (= 7.2.3.1)
- activestorage (= 7.2.3.1)
- activesupport (= 7.2.3.1)
+ actiontext (8.1.3)
+ action_text-trix (~> 2.1.15)
+ actionpack (= 8.1.3)
+ activerecord (= 8.1.3)
+ activestorage (= 8.1.3)
+ activesupport (= 8.1.3)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.2.3.1)
- activesupport (= 7.2.3.1)
+ actionview (8.1.3)
+ activesupport (= 8.1.3)
builder (~> 3.1)
- cgi
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
- activejob (7.2.3.1)
- activesupport (= 7.2.3.1)
+ activejob (8.1.3)
+ activesupport (= 8.1.3)
globalid (>= 0.3.6)
- activemodel (7.2.3.1)
- activesupport (= 7.2.3.1)
- activerecord (7.2.3.1)
- activemodel (= 7.2.3.1)
- activesupport (= 7.2.3.1)
+ activemodel (8.1.3)
+ activesupport (= 8.1.3)
+ activerecord (8.1.3)
+ activemodel (= 8.1.3)
+ activesupport (= 8.1.3)
timeout (>= 0.4.0)
- activestorage (7.2.3.1)
- actionpack (= 7.2.3.1)
- activejob (= 7.2.3.1)
- activerecord (= 7.2.3.1)
- activesupport (= 7.2.3.1)
+ activestorage (8.1.3)
+ actionpack (= 8.1.3)
+ activejob (= 8.1.3)
+ activerecord (= 8.1.3)
+ activesupport (= 8.1.3)
marcel (~> 1.0)
- activesupport (7.2.3.1)
+ activesupport (8.1.3)
base64
- benchmark (>= 0.3)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
+ json
logger (>= 1.4.2)
- minitest (>= 5.1, < 6)
+ minitest (>= 5.1)
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
+ uri (>= 0.13.1)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
ast (2.4.3)
base64 (0.3.0)
bcrypt (3.1.22)
- benchmark (0.5.0)
bigdecimal (3.3.1)
bindex (0.8.1)
bootsnap (1.18.6)
msgpack (~> 1.2)
- bootstrap (5.3.5)
- popper_js (>= 2.11.8, < 3)
- brakeman (7.1.0)
+ brakeman (8.0.4)
racc
builder (3.3.0)
byebug (12.0.0)
@@ -159,6 +157,10 @@ GEM
hashdiff (1.2.1)
i18n (1.14.8)
concurrent-ruby (~> 1.0)
+ importmap-rails (2.2.3)
+ actionpack (>= 6.0.0)
+ activesupport (>= 6.0.0)
+ railties (>= 6.0.0)
io-console (0.8.1)
irb (1.15.2)
pp (>= 0.6.0)
@@ -167,12 +169,6 @@ GEM
jbuilder (2.14.1)
actionview (>= 7.0.0)
activesupport (>= 7.0.0)
- jquery-rails (4.6.0)
- rails-dom-testing (>= 1, < 3)
- railties (>= 4.2.0)
- thor (>= 0.14, < 2.0)
- jsbundling-rails (1.3.1)
- railties (>= 6.0.0)
json (2.15.2.1)
json-schema (6.0.0)
addressable (~> 2.8)
@@ -257,7 +253,6 @@ GEM
pg (1.6.2-x86_64-darwin)
pg (1.6.2-x86_64-linux)
pg (1.6.2-x86_64-linux-musl)
- popper_js (2.11.8)
populate (0.0.2)
activerecord (>= 3.1.0)
ffaker (>= 1.13.0)
@@ -266,6 +261,10 @@ GEM
prettyprint
prettyprint (0.2.0)
prism (1.5.2)
+ propshaft (1.3.1)
+ actionpack (>= 7.0.0)
+ activesupport (>= 7.0.0)
+ rack
pry (0.15.2)
coderay (~> 1.1)
method_source (~> 1.0)
@@ -289,20 +288,20 @@ GEM
rack (>= 1.0.0)
rackup (2.2.1)
rack (>= 3)
- rails (7.2.3.1)
- actioncable (= 7.2.3.1)
- actionmailbox (= 7.2.3.1)
- actionmailer (= 7.2.3.1)
- actionpack (= 7.2.3.1)
- actiontext (= 7.2.3.1)
- actionview (= 7.2.3.1)
- activejob (= 7.2.3.1)
- activemodel (= 7.2.3.1)
- activerecord (= 7.2.3.1)
- activestorage (= 7.2.3.1)
- activesupport (= 7.2.3.1)
+ rails (8.1.3)
+ actioncable (= 8.1.3)
+ actionmailbox (= 8.1.3)
+ actionmailer (= 8.1.3)
+ actionpack (= 8.1.3)
+ actiontext (= 8.1.3)
+ actionview (= 8.1.3)
+ activejob (= 8.1.3)
+ activemodel (= 8.1.3)
+ activerecord (= 8.1.3)
+ activestorage (= 8.1.3)
+ activesupport (= 8.1.3)
bundler (>= 1.15.0)
- railties (= 7.2.3.1)
+ railties (= 8.1.3)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -319,10 +318,9 @@ GEM
rails-html-sanitizer (1.7.0)
loofah (~> 2.25)
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
- railties (7.2.3.1)
- actionpack (= 7.2.3.1)
- activesupport (= 7.2.3.1)
- cgi
+ railties (8.1.3)
+ actionpack (= 8.1.3)
+ activesupport (= 8.1.3)
irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
@@ -391,21 +389,11 @@ GEM
rexml
ruby-progressbar (1.13.0)
rubyzip (2.4.1)
- sassc (2.4.0)
- ffi (~> 1.9)
- sassc-rails (2.1.2)
- railties (>= 4.0.0)
- sassc (>= 2.0)
- sprockets (> 3.0)
- sprockets-rails
- tilt
securerandom (0.4.1)
selenium-webdriver (4.10.0)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
- sequel (5.97.0)
- bigdecimal
shellany (0.0.1)
simple_auth (3.1.4)
globalid
@@ -421,26 +409,15 @@ GEM
simplecov_json_formatter (0.1.4)
sorbet-runtime (0.5.12443)
spring (3.0.0)
- sprockets (4.2.2)
- concurrent-ruby (~> 1.0)
- logger
- rack (>= 2.2.4, < 4)
- sprockets-rails (3.5.2)
- actionpack (>= 6.1)
- activesupport (>= 6.1)
- sprockets (>= 3.0.0)
stringio (3.1.7)
thor (1.4.0)
- tilt (2.6.1)
timeout (0.6.1)
tsort (0.2.0)
- turbolinks (5.2.1)
- turbolinks-source (~> 5.2)
- turbolinks-source (5.2.0)
+ turbo-rails (2.0.23)
+ actionpack (>= 7.1.0)
+ railties (>= 7.1.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
- uglifier (4.2.1)
- execjs (>= 0.3.0, < 3)
unicode-display_width (3.2.0)
unicode-emoji (~> 4.1)
unicode-emoji (4.1.0)
@@ -489,7 +466,6 @@ PLATFORMS
DEPENDENCIES
bcrypt (~> 3.1.22)
bootsnap (>= 1.14.0)
- bootstrap
brakeman
byebug
capybara (~> 3)
@@ -501,9 +477,8 @@ DEPENDENCIES
factory_bot_rails
faker
guard-rspec
+ importmap-rails
jbuilder (~> 2.11)
- jquery-rails
- jsbundling-rails
json-schema
launchy
mutant-rspec
@@ -515,29 +490,25 @@ DEPENDENCIES
okcomputer
pg
populate
+ propshaft
pry-rails
puma
rack-test
rack_session_access
- rails (~> 7.2)
+ rails (~> 8.1)
rails-controller-testing
rails-erd
rspec-activemodel-mocks
rspec-rails
rubocop
rubocop-rails
- sassc (~> 2.4)
- sassc-rails
selenium-webdriver
- sequel
simple_auth
simple_form
simplecov
spring (= 3.0)
- sprockets-rails
- turbolinks (~> 5)
+ turbo-rails
tzinfo-data
- uglifier (>= 1.3.0)
uri (>= 1.0.4)
warden
web-console (>= 3.3.0)
diff --git a/Procfile.dev b/Procfile.dev
index 650b360..0c4b735 100644
--- a/Procfile.dev
+++ b/Procfile.dev
@@ -1,3 +1,2 @@
web: bin/rails server -p 3000
css: yarn build:css --watch
-js: yarn build --watch
diff --git a/app/assets/config/manifest.js b/app/assets/config/manifest.js
deleted file mode 100644
index 080332f..0000000
--- a/app/assets/config/manifest.js
+++ /dev/null
@@ -1 +0,0 @@
-//= link_tree ../builds
diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js
deleted file mode 100644
index 6346ad7..0000000
--- a/app/assets/javascripts/application.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// This is a manifest file that'll be compiled into application.js, which will include all the files
-// listed below.
-//
-// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, or any plugin's
-// vendor/assets/javascripts directory can be referenced here using a relative path.
-//
-// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
-// compiled file. JavaScript code in this file should be added after the last require_* statement.
-//
-// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
-// about supported directives.
-//
-//= require rails-ujs
-//= require activestorage
-//= require turbolinks
-//= require jquery
-//= require popper
-//= require bootstrap-sprockets
-//= require_tree .
diff --git a/app/assets/javascripts/cable.js b/app/assets/javascripts/cable.js
deleted file mode 100644
index 739aa5f..0000000
--- a/app/assets/javascripts/cable.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Action Cable provides the framework to deal with WebSockets in Rails.
-// You can generate new channels where WebSocket features live using the `rails generate channel` command.
-//
-//= require action_cable
-//= require_self
-//= require_tree ./channels
-
-(function() {
- this.App || (this.App = {});
-
- App.cable = ActionCable.createConsumer();
-
-}).call(this);
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 0a809a2..8977b15 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -1,5 +1,4 @@
- @import "bootstrap/scss/bootstrap";
- @import "bootstrap-icons/font/bootstrap-icons";
+@import "bootstrap/scss/bootstrap";
body {
padding-top: 21px;
@@ -15,4 +14,20 @@ body {
#header {
border-bottom: solid #ccc 1px;
padding-bottom: 14px;
-}
\ No newline at end of file
+}
+
+.menu {
+ position: relative;
+}
+
+.menu summary {
+ list-style: none;
+}
+
+.menu summary::-webkit-details-marker {
+ display: none;
+}
+
+.menu[open] .dropdown-menu {
+ display: block;
+}
diff --git a/app/javascript/application.js b/app/javascript/application.js
index f77101a..ffef3b0 100644
--- a/app/javascript/application.js
+++ b/app/javascript/application.js
@@ -1,5 +1 @@
import "@hotwired/turbo-rails"
-import "sifter"
-import "microplugin"
-import * as bootstrap from "bootstrap"
-import "./src/jquery"
\ No newline at end of file
diff --git a/app/javascript/src/jquery.js b/app/javascript/src/jquery.js
deleted file mode 100644
index d86907f..0000000
--- a/app/javascript/src/jquery.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import jquery from "jquery"
-window.jQuery = jquery
-window.$ = jquery
\ No newline at end of file
diff --git a/app/views/layouts/application.html.erb b/app/views/layouts/application.html.erb
index aabdd3a..72bea5d 100644
--- a/app/views/layouts/application.html.erb
+++ b/app/views/layouts/application.html.erb
@@ -6,8 +6,8 @@
<%= csp_meta_tag %>
- <%= stylesheet_link_tag 'application', media: 'all', 'data-turbo-track': 'reload' %>
- <%= javascript_include_tag "application", "data-turbo-track": "reload", type: "module" %>
+ <%= stylesheet_link_tag "application", media: "all", "data-turbo-track": "reload" %>
+ <%= javascript_importmap_tags %>
@@ -17,12 +17,12 @@
Special Collections Research Center
<% if notice.present? %>
diff --git a/bin/brakeman b/bin/brakeman
new file mode 100755
index 0000000..ace1c9b
--- /dev/null
+++ b/bin/brakeman
@@ -0,0 +1,7 @@
+#!/usr/bin/env ruby
+require "rubygems"
+require "bundler/setup"
+
+ARGV.unshift("--ensure-latest")
+
+load Gem.bin_path("brakeman", "brakeman")
diff --git a/bin/ci b/bin/ci
new file mode 100755
index 0000000..4137ad5
--- /dev/null
+++ b/bin/ci
@@ -0,0 +1,6 @@
+#!/usr/bin/env ruby
+require_relative "../config/boot"
+require "active_support/continuous_integration"
+
+CI = ActiveSupport::ContinuousIntegration
+require_relative "../config/ci.rb"
diff --git a/bin/importmap b/bin/importmap
new file mode 100755
index 0000000..36502ab
--- /dev/null
+++ b/bin/importmap
@@ -0,0 +1,4 @@
+#!/usr/bin/env ruby
+
+require_relative "../config/application"
+require "importmap/commands"
diff --git a/bin/rubocop b/bin/rubocop
new file mode 100755
index 0000000..5a20504
--- /dev/null
+++ b/bin/rubocop
@@ -0,0 +1,8 @@
+#!/usr/bin/env ruby
+require "rubygems"
+require "bundler/setup"
+
+# Explicit RuboCop config increases performance slightly while avoiding config confusion.
+ARGV.unshift("--config", File.expand_path("../.rubocop.yml", __dir__))
+
+load Gem.bin_path("rubocop", "rubocop")
diff --git a/config/application.rb b/config/application.rb
index c51610e..961740e 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -11,7 +11,7 @@
module NoidGenerators
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
- config.load_defaults 7.0
+ config.load_defaults 8.1
# Configuration for the application, engines, and railties goes here.
#
diff --git a/config/ci.rb b/config/ci.rb
new file mode 100644
index 0000000..702906b
--- /dev/null
+++ b/config/ci.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+# Run using bin/ci
+
+CI.run do
+ step "Setup", "bin/setup --skip-server"
+
+ step "Style: Ruby", "bin/rubocop"
+
+ step "Security: Importmap vulnerability audit", "bin/importmap audit"
+ step "Security: Brakeman code analysis", "bin/brakeman --quiet --no-pager --exit-on-warn --exit-on-error"
+ step "Tests: RSpec", "bundle exec rspec"
+ step "Tests: Seeds", "env RAILS_ENV=test bin/rails db:seed:replant"
+
+ # Optional: set a green GitHub commit status to unblock PR merge.
+ # Requires the `gh` CLI and `gh extension install basecamp/gh-signoff`.
+ # if success?
+ # step "Signoff: All systems go. Ready for merge and deploy.", "gh signoff"
+ # else
+ # failure "Signoff: CI failed. Do not merge or deploy.", "Fix the issues and try again."
+ # end
+end
diff --git a/config/importmap.rb b/config/importmap.rb
new file mode 100644
index 0000000..c00cd85
--- /dev/null
+++ b/config/importmap.rb
@@ -0,0 +1,6 @@
+# frozen_string_literal: true
+
+# Pin npm packages by running ./bin/importmap
+
+pin "application"
+pin "@hotwired/turbo-rails", to: "turbo.min.js"
diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb
deleted file mode 100644
index ba19468..0000000
--- a/config/initializers/assets.rb
+++ /dev/null
@@ -1,16 +0,0 @@
-# frozen_string_literal: true
-
-# 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"
-
-# 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
-# folder are already added.
-# Rails.application.config.assets.precompile += %w( admin.js admin.css )
diff --git a/config/initializers/new_framework_defaults_7_0.rb b/config/initializers/new_framework_defaults_7_0.rb
deleted file mode 100644
index 4dae004..0000000
--- a/config/initializers/new_framework_defaults_7_0.rb
+++ /dev/null
@@ -1,145 +0,0 @@
-# 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 `