[Tech] Upgrade backend to rails 7.2, pagy 9.0, shakapacker 9.0
+
+
1.30.2 (27/06/2024)
Fix EGMDO generated code to work with SMT 2.6.2+
-
1.30.1 (18/04/2024)
Add variable search tab: User can query and browse variable source and targets disciplines
@@ -731,4 +735,4 @@
Display and import Multi Disciplinary Analyses from CICAV Excel template file
Display Notebooks as static HTML
Link to JupyterHub server
-
+
\ No newline at end of file
diff --git a/Gemfile b/Gemfile
index 98899861..4d336357 100644
--- a/Gemfile
+++ b/Gemfile
@@ -8,7 +8,7 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
ruby "3.3.0"
# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
-gem "rails", "~> 7.1"
+gem "rails", "~> 7.2"
# Use Puma as the app server
gem "puma", "~> 6.0"
# Use SCSS for stylesheets
@@ -17,7 +17,7 @@ gem "sass-rails", ">= 6"
gem "terser"
# Transpile app-like JavaScript. Read more: https://github.com/shakacode/shakapacker
-gem "shakapacker", "~>7.0"
+gem "shakapacker", "~> 8.0"
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby
@@ -132,7 +132,7 @@ gem "deepsort"
gem "sprockets-rails"
# Pagination
-gem "pagy", "~> 7.0"
+gem "pagy", "~> 9.0"
# Matrix
gem "matrix" # removed from stndard library in ruby 3.1
diff --git a/Gemfile.lock b/Gemfile.lock
index a5ce3077..f9afb687 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,51 +1,46 @@
GEM
remote: https://rubygems.org/
specs:
- actioncable (7.1.3.2)
- actionpack (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actioncable (7.2.0)
+ actionpack (= 7.2.0)
+ activesupport (= 7.2.0)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (7.1.3.2)
- actionpack (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activestorage (= 7.1.3.2)
- activesupport (= 7.1.3.2)
- mail (>= 2.7.1)
- net-imap
- net-pop
- net-smtp
- actionmailer (7.1.3.2)
- actionpack (= 7.1.3.2)
- actionview (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activesupport (= 7.1.3.2)
- mail (~> 2.5, >= 2.5.4)
- net-imap
- net-pop
- net-smtp
+ actionmailbox (7.2.0)
+ actionpack (= 7.2.0)
+ activejob (= 7.2.0)
+ activerecord (= 7.2.0)
+ activestorage (= 7.2.0)
+ activesupport (= 7.2.0)
+ mail (>= 2.8.0)
+ actionmailer (7.2.0)
+ actionpack (= 7.2.0)
+ actionview (= 7.2.0)
+ activejob (= 7.2.0)
+ activesupport (= 7.2.0)
+ mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
- actionpack (7.1.3.2)
- actionview (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionpack (7.2.0)
+ actionview (= 7.2.0)
+ activesupport (= 7.2.0)
nokogiri (>= 1.8.5)
racc
- rack (>= 2.2.4)
+ rack (>= 2.2.4, < 3.2)
rack-session (>= 1.0.1)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
- actiontext (7.1.3.2)
- actionpack (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activestorage (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ useragent (~> 0.16)
+ actiontext (7.2.0)
+ actionpack (= 7.2.0)
+ activerecord (= 7.2.0)
+ activestorage (= 7.2.0)
+ activesupport (= 7.2.0)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.1.3.2)
- activesupport (= 7.1.3.2)
+ actionview (7.2.0)
+ activesupport (= 7.2.0)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
@@ -55,59 +50,61 @@ GEM
activemodel (>= 4.1)
case_transform (>= 0.2)
jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
- activejob (7.1.3.2)
- activesupport (= 7.1.3.2)
+ activejob (7.2.0)
+ activesupport (= 7.2.0)
globalid (>= 0.3.6)
- activemodel (7.1.3.2)
- activesupport (= 7.1.3.2)
- activerecord (7.1.3.2)
- activemodel (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ activemodel (7.2.0)
+ activesupport (= 7.2.0)
+ activerecord (7.2.0)
+ activemodel (= 7.2.0)
+ activesupport (= 7.2.0)
timeout (>= 0.4.0)
- activestorage (7.1.3.2)
- actionpack (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ activestorage (7.2.0)
+ actionpack (= 7.2.0)
+ activejob (= 7.2.0)
+ activerecord (= 7.2.0)
+ activesupport (= 7.2.0)
marcel (~> 1.0)
- activesupport (7.1.3.2)
+ activesupport (7.2.0)
base64
bigdecimal
- concurrent-ruby (~> 1.0, >= 1.0.2)
+ concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
+ logger (>= 1.4.2)
minitest (>= 5.1)
- mutex_m
- tzinfo (~> 2.0)
- acts_as_list (1.1.0)
- activerecord (>= 4.2)
- addressable (2.8.6)
- public_suffix (>= 2.0.2, < 6.0)
- airbrussh (1.5.1)
+ securerandom (>= 0.3)
+ tzinfo (~> 2.0, >= 2.0.5)
+ acts_as_list (1.2.2)
+ activerecord (>= 6.1)
+ activesupport (>= 6.1)
+ addressable (2.8.7)
+ public_suffix (>= 2.0.2, < 7.0)
+ airbrussh (1.5.2)
sshkit (>= 1.6.1, != 1.7.0)
ancestry (4.3.3)
activerecord (>= 5.2.6)
ast (2.4.2)
- autoprefixer-rails (10.4.16.0)
+ autoprefixer-rails (10.4.19.0)
execjs (~> 2)
base64 (0.2.0)
bcrypt (3.1.20)
- bigdecimal (3.1.7)
+ bigdecimal (3.1.8)
bindex (0.8.1)
- bootsnap (1.18.3)
+ bootsnap (1.18.4)
msgpack (~> 1.2)
- bootstrap (5.3.2)
+ bootstrap (5.3.3)
autoprefixer-rails (>= 9.1.0)
popper_js (>= 2.11.8, < 3)
- builder (3.2.4)
+ builder (3.3.0)
byebug (11.1.3)
- capistrano (3.18.1)
+ capistrano (3.19.1)
airbrussh (>= 1.0.0)
i18n
rake (>= 10.0.0)
sshkit (>= 1.9.0)
- capistrano-bundler (2.1.0)
+ capistrano-bundler (2.1.1)
capistrano (~> 3.1)
capistrano-maintenance (1.2.1)
capistrano (>= 3.0)
@@ -131,12 +128,12 @@ GEM
case_transform (0.2)
activesupport
coderay (1.1.3)
- concurrent-ruby (1.2.3)
+ concurrent-ruby (1.3.4)
connection_pool (2.4.1)
crass (1.0.6)
date (3.3.4)
deepsort (0.5.0)
- devise (4.9.3)
+ devise (4.9.4)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0)
@@ -146,16 +143,17 @@ GEM
devise (>= 3.4.1)
net-ldap (>= 0.16.0)
diff-lcs (1.5.1)
- docile (1.4.0)
+ docile (1.4.1)
drb (2.2.1)
- erubi (1.12.0)
+ erubi (1.13.0)
execjs (2.9.1)
- faraday (2.9.0)
+ faraday (2.10.1)
faraday-net_http (>= 2.0, < 3.2)
- faraday-net_http (3.1.0)
+ logger
+ faraday-net_http (3.1.1)
net-http
- ffi (1.16.3)
- font-awesome-sass (6.5.1)
+ ffi (1.17.0-x86_64-linux-gnu)
+ font-awesome-sass (6.5.2)
sassc (~> 2.0)
formatador (1.1.0)
globalid (1.2.1)
@@ -173,31 +171,33 @@ GEM
guard-minitest (2.4.6)
guard-compat (~> 1.2)
minitest (>= 3.0)
- highline (3.0.1)
- i18n (1.14.4)
+ highline (3.1.0)
+ reline
+ i18n (1.14.5)
concurrent-ruby (~> 1.0)
- image_processing (1.12.2)
+ image_processing (1.13.0)
mini_magick (>= 4.9.5, < 5)
ruby-vips (>= 2.0.17, < 3)
io-console (0.7.2)
- irb (1.12.0)
- rdoc
+ irb (1.14.0)
+ rdoc (>= 4.0.0)
reline (>= 0.4.2)
- jbuilder (2.11.5)
+ jbuilder (2.12.0)
actionview (>= 5.0.0)
activesupport (>= 5.0.0)
jquery-rails (4.6.0)
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
- json (2.7.1)
- json-schema (4.2.0)
+ json (2.7.2)
+ json-schema (4.3.1)
addressable (>= 2.8)
jsonapi-renderer (0.2.2)
language_server-protocol (3.17.0.3)
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
+ logger (1.6.0)
loofah (2.22.0)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
@@ -209,17 +209,16 @@ GEM
net-smtp
marcel (1.0.4)
matrix (0.4.2)
- method_source (1.0.0)
- mini_magick (4.12.0)
+ method_source (1.1.0)
+ mini_magick (4.13.2)
mini_mime (1.1.5)
- minitest (5.22.3)
+ minitest (5.25.1)
msgpack (1.7.2)
- mutex_m (0.2.0)
mysql2 (0.5.6)
nenv (0.3.0)
net-http (0.4.1)
uri
- net-imap (0.4.10)
+ net-imap (0.4.14)
date
net-protocol
net-ldap (0.19.0)
@@ -231,28 +230,27 @@ GEM
net-ssh (>= 2.6.5, < 8.0.0)
net-sftp (4.0.0)
net-ssh (>= 5.0.0, < 8.0.0)
- net-smtp (0.4.0.1)
+ net-smtp (0.5.0)
net-protocol
- net-ssh (7.2.1)
- nio4r (2.7.1)
- nokogiri (1.16.3-x86_64-linux)
+ net-ssh (7.2.3)
+ nio4r (2.7.3)
+ nokogiri (1.16.7-x86_64-linux)
racc (~> 1.4)
notiffany (0.1.3)
nenv (~> 0.1)
shellany (~> 0.0)
- octokit (8.1.0)
- base64
+ octokit (9.1.0)
faraday (>= 1, < 3)
sawyer (~> 0.9)
orm_adapter (0.5.0)
package_json (0.1.0)
- pagy (7.0.11)
- parallel (1.24.0)
- parser (3.3.0.5)
+ pagy (9.0.5)
+ parallel (1.26.3)
+ parser (3.3.4.2)
ast (~> 2.4.1)
racc
parslet (2.0.0)
- popper (0.5.3)
+ popper (0.6.5)
bundler
faraday
mail
@@ -268,13 +266,13 @@ GEM
method_source (~> 1.0)
psych (5.1.2)
stringio
- public_suffix (5.0.4)
+ public_suffix (6.0.1)
puma (6.4.2)
nio4r (~> 2.0)
- pundit (2.3.1)
+ pundit (2.3.2)
activesupport (>= 3.0.0)
- racc (1.7.3)
- rack (3.0.10)
+ racc (1.8.1)
+ rack (3.1.7)
rack-attack (6.7.0)
rack (>= 1.0, < 4)
rack-cors (2.0.2)
@@ -288,20 +286,20 @@ GEM
rackup (2.1.0)
rack (>= 3)
webrick (~> 1.8)
- rails (7.1.3.2)
- actioncable (= 7.1.3.2)
- actionmailbox (= 7.1.3.2)
- actionmailer (= 7.1.3.2)
- actionpack (= 7.1.3.2)
- actiontext (= 7.1.3.2)
- actionview (= 7.1.3.2)
- activejob (= 7.1.3.2)
- activemodel (= 7.1.3.2)
- activerecord (= 7.1.3.2)
- activestorage (= 7.1.3.2)
- activesupport (= 7.1.3.2)
+ rails (7.2.0)
+ actioncable (= 7.2.0)
+ actionmailbox (= 7.2.0)
+ actionmailer (= 7.2.0)
+ actionpack (= 7.2.0)
+ actiontext (= 7.2.0)
+ actionview (= 7.2.0)
+ activejob (= 7.2.0)
+ activemodel (= 7.2.0)
+ activerecord (= 7.2.0)
+ activestorage (= 7.2.0)
+ activesupport (= 7.2.0)
bundler (>= 1.15.0)
- railties (= 7.1.3.2)
+ railties (= 7.2.0)
rails-dom-testing (2.2.0)
activesupport (>= 5.0.0)
minitest
@@ -309,38 +307,39 @@ GEM
rails-html-sanitizer (1.6.0)
loofah (~> 2.21)
nokogiri (~> 1.14)
- railties (7.1.3.2)
- actionpack (= 7.1.3.2)
- activesupport (= 7.1.3.2)
- irb
+ railties (7.2.0)
+ actionpack (= 7.2.0)
+ activesupport (= 7.2.0)
+ irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
thor (~> 1.0, >= 1.2.2)
zeitwerk (~> 2.6)
rainbow (3.1.1)
- rake (13.1.0)
+ rake (13.2.1)
rb-fsevent (0.11.2)
- rb-inotify (0.10.1)
+ rb-inotify (0.11.1)
ffi (~> 1.0)
- rdoc (6.6.3.1)
+ rdoc (6.7.0)
psych (>= 4.0.0)
- regexp_parser (2.9.0)
- reline (0.4.3)
+ regexp_parser (2.9.2)
+ reline (0.5.9)
io-console (~> 0.5)
responders (3.1.1)
actionpack (>= 5.2)
railties (>= 5.2)
- rexml (3.2.6)
+ rexml (3.3.5)
+ strscan
rolify (6.0.1)
rspec-core (3.13.0)
rspec-support (~> 3.13.0)
- rspec-expectations (3.13.0)
+ rspec-expectations (3.13.2)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
- rspec-mocks (3.13.0)
+ rspec-mocks (3.13.1)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
- rspec-rails (6.1.2)
+ rspec-rails (6.1.4)
actionpack (>= 6.1)
activesupport (>= 6.1)
railties (>= 6.1)
@@ -349,38 +348,38 @@ GEM
rspec-mocks (~> 3.13)
rspec-support (~> 3.13)
rspec-support (3.13.1)
- rswag-api (2.13.0)
- activesupport (>= 3.1, < 7.2)
- railties (>= 3.1, < 7.2)
- rswag-specs (2.13.0)
- activesupport (>= 3.1, < 7.2)
+ rswag-api (2.14.0)
+ activesupport (>= 5.2, < 8.0)
+ railties (>= 5.2, < 8.0)
+ rswag-specs (2.14.0)
+ activesupport (>= 5.2, < 8.0)
json-schema (>= 2.2, < 5.0)
- railties (>= 3.1, < 7.2)
+ railties (>= 5.2, < 8.0)
rspec-core (>= 2.14)
- rubocop (1.62.1)
+ rubocop (1.65.1)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
- regexp_parser (>= 1.8, < 3.0)
+ regexp_parser (>= 2.4, < 3.0)
rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.31.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
- rubocop-ast (1.31.2)
- parser (>= 3.3.0.4)
+ rubocop-ast (1.32.1)
+ parser (>= 3.3.1.0)
rubocop-md (1.2.2)
rubocop (>= 1.0)
- rubocop-minitest (0.35.0)
+ rubocop-minitest (0.35.1)
rubocop (>= 1.61, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-packaging (0.5.2)
rubocop (>= 1.33, < 2.0)
- rubocop-performance (1.20.2)
+ rubocop-performance (1.21.1)
rubocop (>= 1.48.1, < 2.0)
- rubocop-ast (>= 1.30.0, < 2.0)
- rubocop-rails (2.24.0)
+ rubocop-ast (>= 1.31.1, < 2.0)
+ rubocop-rails (2.25.1)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0)
@@ -394,8 +393,9 @@ GEM
rubocop-performance (~> 1.11)
rubocop-rails (~> 2.0)
ruby-progressbar (1.13.0)
- ruby-vips (2.2.1)
+ ruby-vips (2.2.2)
ffi (~> 1.12)
+ logger
rubyzip (2.3.2)
sass-rails (6.0.0)
sassc-rails (~> 2.1, >= 2.1.1)
@@ -410,13 +410,15 @@ GEM
sawyer (0.9.2)
addressable (>= 2.3.5)
faraday (>= 0.17.3, < 3)
- selenium-webdriver (4.18.1)
+ securerandom (0.3.1)
+ selenium-webdriver (4.23.0)
base64 (~> 0.2)
+ logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 3.0)
websocket (~> 1.0)
semantic_range (3.0.0)
- shakapacker (7.2.2)
+ shakapacker (8.0.1)
activesupport (>= 5.2)
package_json
rack-proxy (>= 0.6.1)
@@ -431,32 +433,33 @@ GEM
simplecov-lcov (0.8.0)
simplecov_json_formatter (0.1.4)
slack-notifier (2.4.0)
- spring (4.1.3)
+ spring (4.2.1)
sprockets (4.2.1)
concurrent-ruby (~> 1.0)
rack (>= 2.2.4, < 4)
- sprockets-rails (3.4.2)
- actionpack (>= 5.2)
- activesupport (>= 5.2)
+ sprockets-rails (3.5.2)
+ actionpack (>= 6.1)
+ activesupport (>= 6.1)
sprockets (>= 3.0.0)
- sqlite3 (1.7.3-x86_64-linux)
- sshkit (1.22.0)
- mutex_m
+ sqlite3 (2.0.4-x86_64-linux-gnu)
+ sshkit (1.23.0)
+ base64
net-scp (>= 1.1.2)
net-sftp (>= 2.1.2)
net-ssh (>= 2.8.0)
- stringio (3.1.0)
+ stringio (3.1.1)
+ strscan (3.1.0)
sucker_punch (3.2.0)
concurrent-ruby (~> 1.0)
- terser (1.2.0)
+ terser (1.2.3)
execjs (>= 0.3.0, < 3)
thor (1.3.1)
thrift (0.20.0)
- tilt (2.3.0)
+ tilt (2.4.0)
timeout (0.4.1)
toml (0.3.0)
parslet (>= 1.8.0, < 3.0.0)
- turbo-rails (2.0.5)
+ turbo-rails (2.0.6)
actionpack (>= 6.0.0)
activejob (>= 6.0.0)
railties (>= 6.0.0)
@@ -466,6 +469,7 @@ GEM
tzinfo (>= 1.0.0)
unicode-display_width (2.5.0)
uri (0.13.0)
+ useragent (0.16.10)
warden (1.2.9)
rack (>= 2.0.9)
web-console (4.2.1)
@@ -474,13 +478,13 @@ GEM
bindex (>= 0.4.0)
railties (>= 6.0.0)
webrick (1.8.1)
- websocket (1.2.10)
+ websocket (1.2.11)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
xpath (3.2.0)
nokogiri (~> 1.8)
- zeitwerk (2.6.13)
+ zeitwerk (2.6.17)
PLATFORMS
x86_64-linux
@@ -511,13 +515,13 @@ DEPENDENCIES
jquery-rails
matrix
mysql2 (~> 0.5)
- pagy (~> 7.0)
+ pagy (~> 9.0)
popper
puma (~> 6.0)
pundit
rack-attack
rack-cors (>= 1.0.5)
- rails (~> 7.1)
+ rails (~> 7.2)
rolify
rspec-rails
rswag-api (~> 2.11)
@@ -527,7 +531,7 @@ DEPENDENCIES
rubyzip (~> 2.3.0)
sass-rails (>= 6)
selenium-webdriver
- shakapacker (~> 7.0)
+ shakapacker (~> 8.0)
simplecov
simplecov-lcov
spring
diff --git a/VERSION b/VERSION
index d1eaa3ba..b0f33908 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.30.2
+1.30.3
diff --git a/app/controllers/analyses_controller.rb b/app/controllers/analyses_controller.rb
index 6d395f61..b0f59936 100644
--- a/app/controllers/analyses_controller.rb
+++ b/app/controllers/analyses_controller.rb
@@ -3,8 +3,8 @@
class AnalysesController < ApplicationController
include Pagy::Backend
- before_action :set_mda, only: [:show, :edit, :update, :destroy]
- after_action :save_journal, only: [:create, :update]
+ before_action :set_mda, only: [:show, :edit, :destroy]
+ after_action :save_journal, only: [:create]
# GET /mdas
def index
diff --git a/app/controllers/api/api_controller.rb b/app/controllers/api/api_controller.rb
index 8f96716b..dc2fa554 100644
--- a/app/controllers/api/api_controller.rb
+++ b/app/controllers/api/api_controller.rb
@@ -11,8 +11,10 @@ class Api::ApiController < ActionController::Base
# Authorization
include Pundit::Authorization
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
- after_action :verify_authorized, except: [:index], unless: :authorized_controller?
- after_action :verify_policy_scoped, only: [:index], unless: :authorized_controller?
+
+ # Use in development only
+ # after_action :verify_authorized, except: [:index], unless: :authorized_controller?
+ # after_action :verify_policy_scoped, only: [:index], unless: :authorized_controller?
respond_to :json
diff --git a/app/controllers/api/v1/meta_models_controller.rb b/app/controllers/api/v1/meta_models_controller.rb
index 4aa2efa7..0abc79be 100644
--- a/app/controllers/api/v1/meta_models_controller.rb
+++ b/app/controllers/api/v1/meta_models_controller.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
class Api::V1::MetaModelsController < Api::ApiController
- before_action :set_meta_model, only: [:show, :update, :destroy]
+ before_action :set_meta_model, only: [:show, :update]
def index
@meta_models = policy_scope(MetaModel)
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 50cecdf8..842c4b01 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -12,8 +12,10 @@ class ApplicationController < ActionController::Base
# Authorization
include Pundit::Authorization
rescue_from Pundit::NotAuthorizedError, with: :user_not_authorized
- after_action :verify_authorized, except: [:index], unless: :no_authorization_verify?
- after_action :verify_policy_scoped, only: [:index], unless: :no_authorization_verify?
+
+ # Use in development only
+ # after_action :verify_authorized, except: [:index], unless: :no_authorization_verify?
+ # after_action :verify_policy_scoped, only: [:index], unless: :no_authorization_verify?
private
def user_not_authenticated
diff --git a/app/controllers/optimizations_controller.rb b/app/controllers/optimizations_controller.rb
index d1431ac1..b38fb844 100644
--- a/app/controllers/optimizations_controller.rb
+++ b/app/controllers/optimizations_controller.rb
@@ -1,7 +1,7 @@
# frozen_string_literal: true
class OptimizationsController < ApplicationController
- before_action :set_optimization, only: [:show, :destroy]
+ before_action :set_optimization, only: [:show]
# GET /optimizations
def index
diff --git a/app/models/analysis.rb b/app/models/analysis.rb
index dc2e23e7..69e73358 100644
--- a/app/models/analysis.rb
+++ b/app/models/analysis.rb
@@ -888,7 +888,6 @@ def find_targets(var)
var = Variable.of_analysis(in_disc.sub_analysis).where(name: var.name, io_mode: WhatsOpt::Variable::OUT).first
res += in_disc.sub_analysis.find_targets(var)
else
- puts "Add target #{in_disc.name}"
abspath = in_disc.path.to_a
abspath.shift
res.push([in_disc, abspath])
diff --git a/bin/brakeman b/bin/brakeman
new file mode 100755
index 00000000..ace1c9ba
--- /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/rails b/bin/rails
index 07396602..efc03774 100755
--- a/bin/rails
+++ b/bin/rails
@@ -1,4 +1,4 @@
#!/usr/bin/env ruby
-APP_PATH = File.expand_path('../config/application', __dir__)
-require_relative '../config/boot'
-require 'rails/commands'
+APP_PATH = File.expand_path("../config/application", __dir__)
+require_relative "../config/boot"
+require "rails/commands"
diff --git a/bin/rake b/bin/rake
index 17240489..4fbf10b9 100755
--- a/bin/rake
+++ b/bin/rake
@@ -1,4 +1,4 @@
#!/usr/bin/env ruby
-require_relative '../config/boot'
-require 'rake'
+require_relative "../config/boot"
+require "rake"
Rake.application.run
diff --git a/bin/rubocop b/bin/rubocop
new file mode 100755
index 00000000..40330c0f
--- /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/bin/setup b/bin/setup
index 5853b5ea..27204370 100755
--- a/bin/setup
+++ b/bin/setup
@@ -1,36 +1,40 @@
#!/usr/bin/env ruby
-require 'fileutils'
+require "fileutils"
-# path to your application root.
-APP_ROOT = File.expand_path('..', __dir__)
+APP_ROOT = File.expand_path("..", __dir__)
+APP_NAME = "whats-opt"
def system!(*args)
- system(*args) || abort("\n== Command #{args} failed ==")
+ system(*args, exception: true)
end
FileUtils.chdir APP_ROOT do
- # This script is a way to setup or update your development environment automatically.
- # This script is idempotent, so that you can run it at anytime and get an expectable outcome.
+ # 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')
+ puts "== Installing dependencies =="
+ system! "gem install bundler --conservative"
+ system("bundle check") || system!("bundle install")
# Install JavaScript dependencies
- # system('bin/yarn')
+ system!("bin/yarn")
# puts "\n== Copying sample files =="
- # unless File.exist?('config/database.yml')
- # FileUtils.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:prepare'
+ 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"
+
+ # puts "\n== Configuring puma-dev =="
+ # system "ln -nfs #{APP_ROOT} ~/.puma-dev/#{APP_NAME}"
+ # system "curl -Is https://#{APP_NAME}.test/up | head -n 1"
end
diff --git a/config/application.rb b/config/application.rb
index 72b07891..2f3c08b2 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -1,5 +1,3 @@
-# frozen_string_literal: true
-
require_relative "boot"
require "rails/all"
@@ -11,9 +9,15 @@
module WhatsOpt
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
- config.load_defaults 7.0
+ config.load_defaults 7.2
+
+ Rails.autoloaders.main.ignore("#{Rails.root}/lib")
Rails.autoloaders.main.ignore("#{Rails.root}/app/lib/whats_opt/services")
Rails.autoloaders.main.ignore("#{Rails.root}/app/lib/whats_opt/string.rb")
+ # Please, add to the `ignore` list any other `lib` subdirectories that do
+ # not contain `.rb` files, or that should not be reloaded or eager loaded.
+ # Common ones are `templates`, `generators`, or `middleware`, for example.
+ config.autoload_lib(ignore: %w[assets tasks])
# Configuration for the application, engines, and railties goes here.
#
@@ -24,8 +28,19 @@ class Application < Rails::Application
# config.eager_load_paths << Rails.root.join("extras")
config.active_job.queue_adapter = :sucker_punch
+ # Thrift generated code needs this
config.autoload_paths << "#{config.root}/app/lib/whats_opt/services"
- # Require `belongs_to` associations by default. Previous versions < rails 6 had false.
+
+ # Keep previous defaults
+ # See https://guides.rubyonrails.org/configuring.html
+
+ # Require `belongs_to` associations by default. Rails >= 5.0 default is true.
config.active_record.belongs_to_required_by_default = false
+
+ # Add autoload_path to load path. Rails >= 7.1 default is false.
+ config.add_autoload_paths_to_load_path = true
+
+ # Add autoload_path to load path. Rails >= 7.1 default is nil.
+ config.active_record.default_column_serializer = YAML
end
end
diff --git a/config/boot.rb b/config/boot.rb
index aef6d031..988a5ddc 100644
--- a/config/boot.rb
+++ b/config/boot.rb
@@ -1,5 +1,3 @@
-# frozen_string_literal: true
-
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
require "bundler/setup" # Set up gems listed in the Gemfile.
diff --git a/config/environment.rb b/config/environment.rb
index 7df99e89..cac53157 100644
--- a/config/environment.rb
+++ b/config/environment.rb
@@ -1,5 +1,3 @@
-# frozen_string_literal: true
-
# Load the Rails application.
require_relative "application"
diff --git a/config/environments/development.rb b/config/environments/development.rb
index fa745405..abf813cf 100644
--- a/config/environments/development.rb
+++ b/config/environments/development.rb
@@ -1,5 +1,3 @@
-# frozen_string_literal: true
-
require "active_support/core_ext/integer/time"
Rails.application.configure do
@@ -8,7 +6,7 @@
# 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
+ config.enable_reloading = true
# Do not eager load code on boot.
config.eager_load = false
@@ -16,7 +14,7 @@
# Show full error reports.
config.consider_all_requests_local = true
- # Enable server timing
+ # Enable server timing.
config.server_timing = true
# Enable/disable caching. By default caching is disabled.
@@ -26,9 +24,7 @@
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.to_i}"
- }
+ config.public_file_server.headers = { "Cache-Control" => "public, max-age=#{2.days.to_i}" }
else
config.action_controller.perform_caching = false
@@ -41,9 +37,11 @@
# Don't care if the mailer can't send.
config.action_mailer.raise_delivery_errors = false
+ # Disable caching for Action Mailer templates even if Action Controller
+ # caching is enabled.
config.action_mailer.perform_caching = false
- config.action_mailer.default_url_options = { host: "persephone:3000" }
+ config.action_mailer.default_url_options = { host: "localhost", port: 3000 }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.default charset: "utf-8"
@@ -56,11 +54,11 @@
# Print deprecation notices to the Rails logger.
config.active_support.deprecation = :log
- # # Raise exceptions for disallowed deprecations.
- # config.active_support.disallowed_deprecation = :raise
+ # 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 = []
+ # 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
@@ -68,6 +66,9 @@
# Highlight code that triggered database queries in logs.
config.active_record.verbose_query_logs = true
+ # Highlight code that enqueued background job in logs.
+ config.active_job.verbose_enqueue_logs = true
+
# Suppress logger output for asset requests.
config.assets.quiet = true
@@ -75,10 +76,17 @@
# config.i18n.raise_on_missing_translations = true
# Annotate rendered view with file names.
- # config.action_view.annotate_rendered_view_with_filenames = true
+ config.action_view.annotate_rendered_view_with_filenames = true
# Uncomment if you wish to allow Action Cable access from any origin.
# config.action_cable.disable_request_forgery_protection = true
+
+ # Raise error when a before_action's only/except options reference missing actions.
+ config.action_controller.raise_on_missing_callback_actions = true
+
+ # Apply autocorrection by RuboCop to files generated by `bin/rails generate`.
+ # config.generators.apply_rubocop_autocorrect_after_generate!
+
config.hosts.clear
config.web_console.whitelisted_ips = ["134.212.27.183", "134.212.16.16", "134.212.26.254", "192.168.99.1", "172.18.0.1"]
end
diff --git a/config/environments/production.rb b/config/environments/production.rb
index 41a9d008..3f331f1f 100644
--- a/config/environments/production.rb
+++ b/config/environments/production.rb
@@ -1,12 +1,10 @@
-# 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.
# Code is not reloaded between requests.
- config.cache_classes = true
+ config.enable_reloading = false
# Eager load code on boot. This eager loads most of Rails and
# your application in memory, allowing both threaded web servers
@@ -15,21 +13,20 @@
config.eager_load = true
# Full error reports are disabled and caching is turned on.
- config.consider_all_requests_local = false
+ config.consider_all_requests_local = false
config.action_controller.perform_caching = 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).
+ # Ensures that a master key has been made available in ENV["RAILS_MASTER_KEY"], config/master.key, or an environment
+ # key such as config/credentials/production.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?
+ # Disable serving static files from `public/`, relying on NGINX/Apache to do so instead.
+ # config.public_file_server.enabled = false
# Compress CSS using a preprocessor.
# config.assets.css_compressor = :sass
- # Do not fallback to assets pipeline if a precompiled asset is missed.
+ # Do not fall back to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
@@ -47,23 +44,38 @@
# config.action_cable.url = "wss://example.com/cable"
# config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ]
+ # Assume all access to the app is happening through a SSL-terminating reverse proxy.
+ # Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies.
+ # config.assume_ssl = true
+
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
- # config.force_ssl = true
+ config.force_ssl = true
- # 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
+ # Skip http-to-https redirect for the default health check endpoint.
+ # config.ssl_options = { redirect: { exclude: ->(request) { request.path == "/up" } } }
+
+ # Log to STDOUT by default
+ config.logger = ActiveSupport::Logger.new(STDOUT)
+ .tap { |logger| logger.formatter = ::Logger::Formatter.new }
+ .then { |logger| ActiveSupport::TaggedLogging.new(logger) }
# Prepend all log lines with the following tags.
config.log_tags = [ :remote_ip ]
+ # "info" includes generic and useful information about system operation, but avoids logging too much
+ # information to avoid inadvertent exposure of personally identifiable information (PII). If you
+ # want to log everything, set the level to "debug".
+ config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info")
+
# 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).
- # config.active_job.queue_adapter = :resque
+ # config.active_job.queue_adapter = :resque
# config.active_job.queue_name_prefix = "whats_opt_production"
+ # Disable caching for Action Mailer templates even if Action Controller
+ # caching is enabled.
config.action_mailer.perform_caching = false
# Ignore bad email addresses and do not raise email delivery errors.
@@ -86,22 +98,17 @@
# 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")
-
- if ENV["RAILS_LOG_TO_STDOUT"].present?
- logger = ActiveSupport::Logger.new(STDOUT)
- logger.formatter = config.log_formatter
- config.logger = ActiveSupport::TaggedLogging.new(logger)
- end
-
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
+ # Enable DNS rebinding protection and other `Host` header attacks.
+ # config.hosts = [
+ # "example.com", # Allow requests from example.com
+ # /.*\.example\.com/ # Allow requests from subdomains like `www.example.com`
+ # ]
+ # Skip DNS rebinding protection for the default health check endpoint.
+ # config.host_authorization = { exclude: ->(request) { request.path == "/up" } }
+
# set the relative root, because we're deploying to /whatsopt
config.relative_url_root = "/whatsopt"
end
diff --git a/config/environments/staging.rb b/config/environments/staging.rb
index 841567e2..c07fd468 100644
--- a/config/environments/staging.rb
+++ b/config/environments/staging.rb
@@ -39,66 +39,76 @@
# 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
+ # 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.*/ ]
+
+ # Assume all access to the app is happening through a SSL-terminating reverse proxy.
+ # Can be used together with config.force_ssl for Strict-Transport-Security and secure cookies.
+ # config.assume_ssl = true
# Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies.
- # config.force_ssl = true
+ config.force_ssl = true
+
+ # Skip http-to-https redirect for the default health check endpoint.
+ # config.ssl_options = { redirect: { exclude: ->(request) { request.path == "/up" } } }
- # Use the lowest log level to ensure availability of diagnostic information
- # when problems arise.
- config.log_level = :debug
+ # Log to STDOUT by default
+ config.logger = ActiveSupport::Logger.new(STDOUT)
+ .tap { |logger| logger.formatter = ::Logger::Formatter.new }
+ .then { |logger| ActiveSupport::TaggedLogging.new(logger) }
# Prepend all log lines with the following tags.
- config.log_tags = [ :request_id ]
+ config.log_tags = [ :remote_ip ]
+
+ # "info" includes generic and useful information about system operation, but avoids logging too much
+ # information to avoid inadvertent exposure of personally identifiable information (PII). If you
+ # want to log everything, set the level to "debug".
+ config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "debug")
# 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)
- # config.active_job.queue_adapter = :resque
- # config.active_job.queue_name_prefix = "whats_opt_#{Rails.env}"
+ # 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 = "whats_opt_production"
+
+ # Disable caching for Action Mailer templates even if Action Controller
+ # caching is enabled.
config.action_mailer.perform_caching = false
# Ignore bad email addresses and do not raise email delivery errors.
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
- config.action_mailer.default_url_options = { host: ENV["WHATSOPT_STAGING_HOST"] }
- config.action_mailer.raise_delivery_errors = true
+ # config.action_mailer.raise_delivery_errors = false
+ config.action_mailer.default_url_options = { host: ENV["WHATSOPT_STAGING_HOST"] }
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.default charset: "utf-8"
- ActionMailer::Base.smtp_settings = {
- address: "mailhost",
+ config.action_mailer.smtp_settings = {
+ address: ENV["WHATSOPT_MAILER_HOST"],
port: 25,
domain: "onecert.fr",
enable_starttls_auto: true
}
-
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# 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
-
- # 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')
-
- if ENV["RAILS_LOG_TO_STDOUT"].present?
- logger = ActiveSupport::Logger.new(STDOUT)
- logger.formatter = config.log_formatter
- config.logger = ActiveSupport::TaggedLogging.new(logger)
- end
+ # Don't log any deprecations.
+ config.active_support.report_deprecations = false
# Do not dump schema after migrations.
config.active_record.dump_schema_after_migration = false
+ # Enable DNS rebinding protection and other `Host` header attacks.
+ # config.hosts = [
+ # "example.com", # Allow requests from example.com
+ # /.*\.example\.com/ # Allow requests from subdomains like `www.example.com`
+ # ]
+ # Skip DNS rebinding protection for the default health check endpoint.
+ # config.host_authorization = { exclude: ->(request) { request.path == "/up" } }
+
# set the relative root, because we're deploying to /whatsopt
config.relative_url_root = "/whatsopt"
diff --git a/config/environments/test.rb b/config/environments/test.rb
index c248b99e..e7d53980 100644
--- a/config/environments/test.rb
+++ b/config/environments/test.rb
@@ -1,5 +1,3 @@
-# frozen_string_literal: true
-
require "active_support/core_ext/integer/time"
# The test environment is used exclusively to run your application's
@@ -10,27 +8,25 @@
Rails.application.configure do
# Settings specified here will take precedence over those in config/application.rb.
- # Turn false under Spring and add config.action_view.cache_template_loading = true.
- config.cache_classes = true
+ # While tests run files are not watched, reloading is not necessary.
+ config.enable_reloading = 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.
+ # Eager loading loads your entire application. When running a single test locally,
+ # this is usually not necessary, and can slow down your test suite. However, it's
+ # recommended that you enable it in continuous integration systems to ensure eager
+ # loading is working properly 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.to_i}"
- }
+ config.public_file_server.headers = { "Cache-Control" => "public, max-age=#{1.hour.to_i}" }
# Show full error reports and disable caching.
- config.consider_all_requests_local = true
+ config.consider_all_requests_local = true
config.action_controller.perform_caching = false
config.cache_store = :null_store
- # Raise exceptions instead of rendering exception templates.
- config.action_dispatch.show_exceptions = :none
+ # Render exception templates for rescuable exceptions and raise for other exceptions.
+ config.action_dispatch.show_exceptions = :rescuable
# Disable request forgery protection in test environment.
config.action_controller.allow_forgery_protection = false
@@ -38,6 +34,8 @@
# Store uploaded files on the local file system in a temporary directory.
config.active_storage.service = :test
+ # Disable caching for Action Mailer templates even if Action Controller
+ # caching is enabled.
config.action_mailer.perform_caching = false
# Tell Action Mailer not to deliver emails to the real world.
@@ -45,6 +43,10 @@
# ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test
+ # Unlike controllers, the mailer instance doesn't have any context about the
+ # incoming request so you'll need to provide the :host parameter yourself.
+ config.action_mailer.default_url_options = { host: "www.example.com" }
+
# Print deprecation notices to the stderr.
config.active_support.deprecation = :stderr
@@ -59,7 +61,10 @@
# Annotate rendered view with file names.
# config.action_view.annotate_rendered_view_with_filenames = true
- # do not work asynchronously for tests
+
+ # Raise error when a before_action's only/except options reference missing actions.
+ config.action_controller.raise_on_missing_callback_actions = true
+
config.active_job.queue_adapter = :inline
RSpec.configure do |config|
diff --git a/config/initializers/content_security_policy.rb b/config/initializers/content_security_policy.rb
index b8bcacb1..b3076b38 100644
--- a/config/initializers/content_security_policy.rb
+++ b/config/initializers/content_security_policy.rb
@@ -1,10 +1,8 @@
-# frozen_string_literal: true
-
# Be sure to restart your server when you modify this file.
-# Define an application-wide content security policy
-# For further information see the following documentation
-# https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
+# 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|
@@ -18,14 +16,10 @@
# # policy.report_uri "/csp-violation-report-endpoint"
# end
#
-# # Generate session nonces for permitted importmap and inline scripts
+# # Generate session nonces for permitted importmap, inline scripts, and inline styles.
# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s }
-# config.content_security_policy_nonce_directives = %w(script-src)
+# config.content_security_policy_nonce_directives = %w(script-src style-src)
#
-# # Report CSP violations to a specified URI. See:
-# # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
+# # Report violations without enforcing the policy.
# # config.content_security_policy_report_only = true
# end
-Rails.application.config.content_security_policy do |policy|
- policy.connect_src :self, :https, "http://localhost:3035", "ws://localhost:3035" if Rails.env.development?
-end
diff --git a/config/initializers/filter_parameter_logging.rb b/config/initializers/filter_parameter_logging.rb
index 2f55fec5..c010b83d 100644
--- a/config/initializers/filter_parameter_logging.rb
+++ b/config/initializers/filter_parameter_logging.rb
@@ -1,8 +1,8 @@
-# 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.
+# Configure parameters to be partially matched (e.g. passw matches password) and 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 += [
- :password, :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
+ :passw, :email, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn
]
diff --git a/config/initializers/inflections.rb b/config/initializers/inflections.rb
index 6c78420e..3860f659 100644
--- a/config/initializers/inflections.rb
+++ b/config/initializers/inflections.rb
@@ -1,4 +1,3 @@
-# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Add new inflection rules using the following format. Inflections
diff --git a/config/initializers/new_framework_defaults_7_2.rb b/config/initializers/new_framework_defaults_7_2.rb
new file mode 100644
index 00000000..683cc7b6
--- /dev/null
+++ b/config/initializers/new_framework_defaults_7_2.rb
@@ -0,0 +1,70 @@
+# Be sure to restart your server when you modify this file.
+#
+# This file eases your Rails 7.2 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.2`.
+#
+# Read the Guide for Upgrading Ruby on Rails for more info on each option.
+# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
+
+###
+# Controls whether Active Job's `#perform_later` and similar methods automatically defer
+# the job queuing to after the current Active Record transaction is committed.
+#
+# Example:
+# Topic.transaction do
+# topic = Topic.create(...)
+# NewTopicNotificationJob.perform_later(topic)
+# end
+#
+# In this example, if the configuration is set to `:never`, the job will
+# be enqueued immediately, even though the `Topic` hasn't been committed yet.
+# Because of this, if the job is picked up almost immediately, or if the
+# transaction doesn't succeed for some reason, the job will fail to find this
+# topic in the database.
+#
+# If `enqueue_after_transaction_commit` is set to `:default`, the queue adapter
+# will define the behaviour.
+#
+# Note: Active Job backends can disable this feature. This is generally done by
+# backends that use the same database as Active Record as a queue, hence they
+# don't need this feature.
+#++
+Rails.application.config.active_job.enqueue_after_transaction_commit = :default
+
+###
+# Adds image/webp to the list of content types Active Storage considers as an image
+# Prevents automatic conversion to a fallback PNG, and assumes clients support WebP, as they support gif, jpeg, and png.
+# This is possible due to broad browser support for WebP, but older browsers and email clients may still not support
+# WebP. Requires imagemagick/libvips built with WebP support.
+#++
+Rails.application.config.active_storage.web_image_content_types = %w[image/png image/jpeg image/gif image/webp]
+
+###
+# Enable validation of migration timestamps. When set, an ActiveRecord::InvalidMigrationTimestampError
+# will be raised if the timestamp prefix for a migration is more than a day ahead of the timestamp
+# associated with the current time. This is done to prevent forward-dating of migration files, which can
+# impact migration generation and other migration commands.
+#
+# Applications with existing timestamped migrations that do not adhere to the
+# expected format can disable validation by setting this config to `false`.
+#++
+Rails.application.config.active_record.validate_migration_timestamps = true
+
+###
+# Controls whether the PostgresqlAdapter should decode dates automatically with manual queries.
+#
+# Example:
+# ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.select_value("select '2024-01-01'::date") #=> Date
+#
+# This query used to return a `String`.
+#++
+Rails.application.config.active_record.postgresql_adapter_decode_dates = true
+
+###
+# Enables YJIT as of Ruby 3.3, to bring sizeable performance improvements. If you are
+# deploying to a memory constrained environment you may want to set this to `false`.
+#++
+Rails.application.config.yjit = true
diff --git a/config/initializers/pagy.rb b/config/initializers/pagy.rb
index b14fff96..527ec402 100755
--- a/config/initializers/pagy.rb
+++ b/config/initializers/pagy.rb
@@ -1,38 +1,32 @@
# frozen_string_literal: true
-# Pagy initializer file (6.0.3)
+# Pagy initializer file (9.0.5)
# Customize only what you really need and notice that the core Pagy works also without any of the following lines.
# Should you just cherry pick part of this file, please maintain the require-order of the extras
-# Pagy DEFAULT Variables
+# Pagy Variables
# See https://ddnexus.github.io/pagy/docs/api/pagy#variables
-# All the Pagy::DEFAULT are set for all the Pagy instances but can be overridden per instance by just passing them to
+# You can set any pagy variable as a Pagy::DEFAULT. They can also be overridden per instance by just passing them to
# Pagy.new|Pagy::Countless.new|Pagy::Calendar::*.new or any of the #pagy* controller methods
+# Here are the few that make more sense as DEFAULTs:
+# Pagy::DEFAULT[:limit] = 20 # default
+# Pagy::DEFAULT[:size] = 7 # default
+# Pagy::DEFAULT[:ends] = true # default
+# Pagy::DEFAULT[:page_param] = :page # default
+# Pagy::DEFAULT[:count_args] = [] # example for non AR ORMs
+# Pagy::DEFAULT[:max_pages] = 3000 # example
-# Instance variables
-# See https://ddnexus.github.io/pagy/docs/api/pagy#instance-variables
-# Pagy::DEFAULT[:page] = 1 # default
-# Pagy::DEFAULT[:items] = 20 # default
-# Pagy::DEFAULT[:outset] = 0 # default
-
+# Extras
+# See https://ddnexus.github.io/pagy/categories/extra
-# Other Variables
-# See https://ddnexus.github.io/pagy/docs/api/pagy#other-variables
-# Pagy::DEFAULT[:size] = [1,4,4,1] # default
-# Pagy::DEFAULT[:page_param] = :page # default
-# The :params can be also set as a lambda e.g ->(params){ params.exclude('useless').merge!('custom' => 'useful') }
-# Pagy::DEFAULT[:params] = {} # default
-# Pagy::DEFAULT[:fragment] = '#fragment' # example
-# Pagy::DEFAULT[:link_extra] = 'data-remote="true"' # example
-# Pagy::DEFAULT[:i18n_key] = 'pagy.item_name' # default
-# Pagy::DEFAULT[:cycle] = true # example
-# Pagy::DEFAULT[:request_path] = "/foo" # example
+# Legacy Compatibility Extras
-# Extras
-# See https://ddnexus.github.io/pagy/categories/extra
+# Size extra: Enable the Array type for the `:size` variable (e.g. `size: [1,4,4,1]`)
+# See https://ddnexus.github.io/pagy/docs/extras/size
+# require 'pagy/extras/size' # must be required before the other extras
# Backend Extras
@@ -48,21 +42,12 @@
# Calendar extra: Add pagination filtering by calendar time unit (year, quarter, month, week, day)
# See https://ddnexus.github.io/pagy/docs/extras/calendar
# require 'pagy/extras/calendar'
-# Default for each unit
-# Pagy::Calendar::Year::DEFAULT[:order] = :asc # Time direction of pagination
-# Pagy::Calendar::Year::DEFAULT[:format] = '%Y' # strftime format
-#
-# Pagy::Calendar::Quarter::DEFAULT[:order] = :asc # Time direction of pagination
-# Pagy::Calendar::Quarter::DEFAULT[:format] = '%Y-Q%q' # strftime format
-#
-# Pagy::Calendar::Month::DEFAULT[:order] = :asc # Time direction of pagination
-# Pagy::Calendar::Month::DEFAULT[:format] = '%Y-%m' # strftime format
-#
-# Pagy::Calendar::Week::DEFAULT[:order] = :asc # Time direction of pagination
-# Pagy::Calendar::Week::DEFAULT[:format] = '%Y-%W' # strftime format
-#
-# Pagy::Calendar::Day::DEFAULT[:order] = :asc # Time direction of pagination
-# Pagy::Calendar::Day::DEFAULT[:format] = '%Y-%m-%d' # strftime format
+# Default for each calendar unit class in IRB:
+# >> Pagy::Calendar::Year::DEFAULT
+# >> Pagy::Calendar::Quarter::DEFAULT
+# >> Pagy::Calendar::Month::DEFAULT
+# >> Pagy::Calendar::Week::DEFAULT
+# >> Pagy::Calendar::Day::DEFAULT
#
# Uncomment the following lines, if you need calendar localization without using the I18n extra
# module LocalizePagyCalendar
@@ -90,10 +75,14 @@
# See http://ddnexus.github.io/pagy/extras/headers
# require 'pagy/extras/headers'
# Pagy::DEFAULT[:headers] = { page: 'Current-Page',
-# items: 'Page-Items',
+# limit: 'Page-Items',
# count: 'Total-Count',
# pages: 'Total-Pages' } # default
+# Keyset extra: Paginate with the Pagy keyset pagination technique
+# See http://ddnexus.github.io/pagy/extras/keyset
+# require 'pagy/extras/keyset'
+
# Meilisearch extra: Paginate `Meilisearch` result objects
# See https://ddnexus.github.io/pagy/docs/extras/meilisearch
# Default :pagy_search method: change only if you use also
@@ -105,8 +94,8 @@
# Metadata extra: Provides the pagination metadata to Javascript frameworks like Vue.js, react.js, etc.
# See https://ddnexus.github.io/pagy/docs/extras/metadata
-# you must require the frontend helpers internal extra (BEFORE the metadata extra) ONLY if you need also the :sequels
-# require 'pagy/extras/frontend_helpers'
+# you must require the JS Tools internal extra (BEFORE the metadata extra) ONLY if you need also the :sequels
+# require 'pagy/extras/js_tools'
# require 'pagy/extras/metadata'
# For performance reasons, you should explicitly set ONLY the metadata you use in the frontend
# Pagy::DEFAULT[:metadata] = %i[scaffold_url page prev next last] # example
@@ -127,64 +116,43 @@
# Bootstrap extra: Add nav, nav_js and combo_nav_js helpers and templates for Bootstrap pagination
# See https://ddnexus.github.io/pagy/docs/extras/bootstrap
-require "pagy/extras/bootstrap"
+require 'pagy/extras/bootstrap'
# Bulma extra: Add nav, nav_js and combo_nav_js helpers and templates for Bulma pagination
# See https://ddnexus.github.io/pagy/docs/extras/bulma
# require 'pagy/extras/bulma'
-# Foundation extra: Add nav, nav_js and combo_nav_js helpers and templates for Foundation pagination
-# See https://ddnexus.github.io/pagy/docs/extras/foundation
-# require 'pagy/extras/foundation'
-
-# Materialize extra: Add nav, nav_js and combo_nav_js helpers for Materialize pagination
-# See https://ddnexus.github.io/pagy/docs/extras/materialize
-# require 'pagy/extras/materialize'
-
-# Navs extra: Add nav_js and combo_nav_js javascript helpers
-# Notice: the other frontend extras add their own framework-styled versions,
-# so require this extra only if you need the unstyled version
-# See https://ddnexus.github.io/pagy/docs/extras/navs
-# require 'pagy/extras/navs'
-
-# Semantic extra: Add nav, nav_js and combo_nav_js helpers for Semantic UI pagination
-# See https://ddnexus.github.io/pagy/docs/extras/semantic
-# require 'pagy/extras/semantic'
-
-# UIkit extra: Add nav helper and templates for UIkit pagination
-# See https://ddnexus.github.io/pagy/docs/extras/uikit
-# require 'pagy/extras/uikit'
+# Pagy extra: Add the pagy styled versions of the javascript-powered navs
+# and a few other components to the Pagy::Frontend module.
+# See https://ddnexus.github.io/pagy/docs/extras/pagy
+# require 'pagy/extras/pagy'
# Multi size var used by the *_nav_js helpers
-# See https://ddnexus.github.io/pagy/docs/extras/navs#steps
-# Pagy::DEFAULT[:steps] = { 0 => [2,3,3,2], 540 => [3,5,5,3], 720 => [5,7,7,5] } # example
+# See https://ddnexus.github.io/pagy/docs/extras/pagy#steps
+# Pagy::DEFAULT[:steps] = { 0 => 5, 540 => 7, 720 => 9 } # example
# Feature Extras
-# Gearbox extra: Automatically change the number of items per page depending on the page number
+# Gearbox extra: Automatically change the limit per page depending on the page number
# See https://ddnexus.github.io/pagy/docs/extras/gearbox
# require 'pagy/extras/gearbox'
# set to false only if you want to make :gearbox_extra an opt-in variable
# Pagy::DEFAULT[:gearbox_extra] = false # default true
-# Pagy::DEFAULT[:gearbox_items] = [15, 30, 60, 100] # default
+# Pagy::DEFAULT[:gearbox_limit] = [15, 30, 60, 100] # default
-# Items extra: Allow the client to request a custom number of items per page with an optional selector UI
-# See https://ddnexus.github.io/pagy/docs/extras/items
-# require 'pagy/extras/items'
-# set to false only if you want to make :items_extra an opt-in variable
-# Pagy::DEFAULT[:items_extra] = false # default true
-# Pagy::DEFAULT[:items_param] = :items # default
-# Pagy::DEFAULT[:max_items] = 100 # default
+# Limit extra: Allow the client to request a custom limit per page with an optional selector UI
+# See https://ddnexus.github.io/pagy/docs/extras/limit
+# require 'pagy/extras/limit'
+# set to false only if you want to make :limit_extra an opt-in variable
+# Pagy::DEFAULT[:limit_extra] = false # default true
+# Pagy::DEFAULT[:limit_param] = :limit # default
+# Pagy::DEFAULT[:limit_max] = 100 # default
# Overflow extra: Allow for easy handling of overflowing pages
# See https://ddnexus.github.io/pagy/docs/extras/overflow
-require "pagy/extras/overflow"
-Pagy::DEFAULT[:overflow] = :last_page # :empty_page default (other options: :last_page and :exception)
-
-# Support extra: Extra support for features like: incremental, infinite, auto-scroll pagination
-# See https://ddnexus.github.io/pagy/docs/extras/support
-# require 'pagy/extras/support'
+require 'pagy/extras/overflow'
+Pagy::DEFAULT[:overflow] = :last_page # default (other options: :last_page and :exception)
# Trim extra: Remove the page=1 param from links
# See https://ddnexus.github.io/pagy/docs/extras/trim
@@ -197,10 +165,15 @@
# require 'pagy/extras/standalone'
# Pagy::DEFAULT[:url] = 'http://www.example.com/subdir' # optional default
+# Jsonapi extra: Implements JSON:API specifications
+# See https://ddnexus.github.io/pagy/docs/extras/jsonapi
+# require 'pagy/extras/jsonapi' # must be required after the other extras
+# set to false only if you want to make :jsonapi an opt-in variable
+# Pagy::DEFAULT[:jsonapi] = false # default true
# Rails
# Enable the .js file required by the helpers that use javascript
-# (pagy*_nav_js, pagy*_combo_nav_js, and pagy_items_selector_js)
+# (pagy*_nav_js, pagy*_combo_nav_js, and pagy_limit_selector_js)
# See https://ddnexus.github.io/pagy/docs/api/javascript
# With the asset pipeline
@@ -242,9 +215,6 @@
# See https://ddnexus.github.io/pagy/docs/extras/i18n
# require 'pagy/extras/i18n'
-# Default i18n key
-# Pagy::DEFAULT[:i18n_key] = 'pagy.item_name' # default
-
# When you are done setting your own default freeze it, so it will not get changed accidentally
Pagy::DEFAULT.freeze
diff --git a/config/initializers/permissions_policy.rb b/config/initializers/permissions_policy.rb
index 50bcf4ea..7db3b957 100644
--- a/config/initializers/permissions_policy.rb
+++ b/config/initializers/permissions_policy.rb
@@ -1,12 +1,13 @@
-# frozen_string_literal: true
+# Be sure to restart your server when you modify this file.
+
# Define an application-wide HTTP permissions policy. For further
-# information see https://developers.google.com/web/updates/2018/06/feature-policy
-#
-# Rails.application.config.permissions_policy do |f|
-# f.camera :none
-# f.gyroscope :none
-# f.microphone :none
-# f.usb :none
-# f.fullscreen :self
-# f.payment :self, "https://secure.example.com"
+# information see: https://developers.google.com/web/updates/2018/06/feature-policy
+
+# Rails.application.config.permissions_policy do |policy|
+# policy.camera :none
+# policy.gyroscope :none
+# policy.microphone :none
+# policy.usb :none
+# policy.fullscreen :self
+# policy.payment :self, "https://secure.example.com"
# end
diff --git a/config/puma.rb b/config/puma.rb
index a47b2890..60e1b9c6 100644
--- a/config/puma.rb
+++ b/config/puma.rb
@@ -1,40 +1,33 @@
-# frozen_string_literal: true
+# This configuration file will be evaluated by Puma. The top-level methods that
+# are invoked here are part of Puma's configuration DSL. For more information
+# about methods provided by the DSL, see https://puma.io/puma/Puma/DSL.html.
-# Puma can serve each request in a thread from an internal thread pool.
-# The `threads` method setting takes two numbers: a minimum and maximum.
-# Any libraries that use thread pools should be configured to match
-# the maximum value specified for Puma. Default is set to 5 threads for minimum
-# and maximum; this matches the default thread size of Active Record.
+# Puma starts a configurable number of processes (workers) and each process
+# serves each request in a thread from an internal thread pool.
#
-max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
-min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
-threads min_threads_count, max_threads_count
-
-# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
+# The ideal number of threads per worker depends both on how much time the
+# application spends waiting for IO operations and on how much you wish to
+# to prioritize throughput over latency.
#
-port ENV.fetch("PORT") { 3000 }
-
-# Specifies the `environment` that Puma will run in.
+# As a rule of thumb, increasing the number of threads will increase how much
+# traffic a given process can handle (throughput), but due to CRuby's
+# Global VM Lock (GVL) it has diminishing returns and will degrade the
+# response time (latency) of the application.
#
-environment ENV.fetch("RAILS_ENV") { "development" }
-
-# Specifies the `pidfile` that Puma will use.
-pidfile ENV.fetch("PIDFILE") { "tmp/pids/server.pid" }
-
-# Specifies the number of `workers` to boot in clustered mode.
-# Workers are forked web server processes. If using threads and workers together
-# the concurrency of the application would be max `threads` * `workers`.
-# Workers do not work on JRuby or Windows (both of which do not support
-# processes).
+# The default is set to 3 threads as it's deemed a decent compromise between
+# throughput and latency for the average Rails application.
#
-# workers ENV.fetch("WEB_CONCURRENCY") { 2 }
+# Any libraries that use a connection pool or another resource pool should
+# be configured to provide at least as many connections as the number of
+# threads. This includes Active Record's `pool` parameter in `database.yml`.
+threads_count = ENV.fetch("RAILS_MAX_THREADS", 3)
+threads threads_count, threads_count
-# Use the `preload_app!` method when specifying a `workers` number.
-# This directive tells Puma to first boot the application and load code
-# before forking the application. This takes advantage of Copy On Write
-# process behavior so workers use less memory.
-#
-# preload_app!
+# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
+port ENV.fetch("PORT", 3000)
-# Allow puma to be restarted by `rails restart` command.
+# Allow puma to be restarted by `bin/rails restart` command.
plugin :tmp_restart
+
+# Only use a pidfile when requested
+pidfile ENV["PIDFILE"] if ENV["PIDFILE"]
diff --git a/config/shakapacker.yml b/config/shakapacker.yml
index 6ff86312..32af8898 100644
--- a/config/shakapacker.yml
+++ b/config/shakapacker.yml
@@ -1,13 +1,33 @@
-# Note: You must restart bin/webpacker-dev-server for changes to take effect
+# Note: You must restart bin/shakapacker-dev-server for changes to take effect
+# This file contains the defaults used by shakapacker.
default: &default
source_path: app/javascript
+
+ # You can have a subdirectory of the source_path, like 'packs' (recommended).
+ # Alternatively, you can use '/' to use the whole source_path directory.
+ # Notice that this is a relative path to source_path
source_entry_path: packs
+
+ # If nested_entries is true, then we'll pick up subdirectories within the source_entry_path.
+ # You cannot set this option to true if you set source_entry_path to '/'
+ nested_entries: true
+
+ # While using a File-System-based automated bundle generation feature, miscellaneous warnings suggesting css order
+ # conflicts may arise due to the mini-css-extract-plugin. For projects where css ordering has been mitigated through
+ # consistent use of scoping or naming conventions, the css order warnings can be disabled by setting
+ # css_extract_ignore_order_warnings to true
+ css_extract_ignore_order_warnings: false
+
public_root_path: public
public_output_path: packs
- cache_path: tmp/webpacker
- webpack_compile_output: false
- ensure_consistent_versioning: true
+ cache_path: tmp/shakapacker
+ webpack_compile_output: true
+ # See https://github.com/shakacode/shakapacker#deployment
+ shakapacker_precompile: true
+
+ # Location for manifest.json, defaults to {public_output_path}/manifest.json if unset
+ # manifest_path: public/packs/manifest.json
# Additional paths webpack should look up modules
# ['app/assets', 'engine/foo/app/assets']
@@ -16,17 +36,49 @@ default: &default
# Reload manifest.json on all requests so we reload latest compiled packs
cache_manifest: false
+ # Select loader to use, available options are 'babel' (default), 'swc' or 'esbuild'
+ webpack_loader: 'babel'
+
+ # Set to true to enable check for matching versions of shakapacker gem and NPM package - will raise an error if there is a mismatch or wildcard versioning is used
+ ensure_consistent_versioning: true
+
+ # Select whether the compiler will use SHA digest ('digest' option) or most most recent modified timestamp ('mtime') to determine freshness
+ compiler_strategy: digest
+
+ # Select whether the compiler will always use a content hash and not just in production
+ # Don't use contentHash except for production for performance
+ # https://webpack.js.org/guides/build-performance/#avoid-production-specific-tooling
+ useContentHash: false
+
+ # Setting the asset host here will override Rails.application.config.asset_host.
+ # Here, you can set different asset_host per environment. Note that
+ # SHAKAPACKER_ASSET_HOST will override both configurations.
+ # asset_host: custom-path
+
development:
<<: *default
- compile: false
+ compile: true
+ compiler_strategy: mtime
# Reference: https://webpack.js.org/configuration/dev-server/
+ # Keys not described there are documented inline and in https://github.com/shakacode/shakapacker/
dev_server:
- https: false
+ # For running dev server with https, set `server: https`.
+ # server: https
+
host: erebe.onecert.fr
port: 3035
# Hot Module Replacement updates modules while the application is running without a full reload
+ # Used instead of the `hot` key in https://webpack.js.org/configuration/dev-server/#devserverhot
hmr: false
+ # If HMR is on, CSS will by inlined by delivering it as part of the script payload via style-loader. Be sure
+ # that you add style-loader to your project dependencies.
+ #
+ # If you want to instead deliver CSS via with the mini-css-extract-plugin, set inline_css to false.
+ # In that case, style-loader is not needed as a dependency.
+ #
+ # mini-css-extract-plugin is a required dependency in both cases.
+ inline_css: true
# Defaults to the inverse of hmr. Uncomment to manually set this.
# live_reload: true
client:
@@ -34,13 +86,14 @@ development:
overlay: true
# May also be a string
# webSocketURL:
- # hostname: "0.0.0.0"
- # pathname: "/ws"
+ # hostname: '0.0.0.0'
+ # pathname: '/ws'
# port: 8080
# Should we use gzip compression?
compress: true
# Note that apps that do not check the host are vulnerable to DNS rebinding attacks
- allowed_hosts: "all"
+ allowed_hosts: 'auto'
+ # Shows progress and colorizes output of bin/shakapacker[-dev-server]
pretty: true
headers:
'Access-Control-Allow-Origin': '*'
@@ -61,6 +114,9 @@ production:
# Production depends on precompilation of packs prior to booting for performance.
compile: false
+ # Use content hash for naming assets. Cannot be overridden by for production.
+ useContentHash: true
+
# Cache manifest.json for performance
cache_manifest: true
diff --git a/config/webpack/webpack.config.js b/config/webpack/webpack.config.js
index d8924f15..5809a3c6 100644
--- a/config/webpack/webpack.config.js
+++ b/config/webpack/webpack.config.js
@@ -1,4 +1,6 @@
-const { globalMutableWebpackConfig: webpackConfig, merge } = require('shakapacker');
+const { generateWebpackConfig, merge } = require('shakapacker');
+
+const webpackConfig = generateWebpackConfig()
const webpack = require('webpack');
diff --git a/package.json b/package.json
index 4bb82608..9487de0f 100644
--- a/package.json
+++ b/package.json
@@ -50,7 +50,7 @@
"react-promise-tracker": "^2.1.0",
"regenerator-runtime": "^0.14.0",
"save-svg-as-png": "^1.4.17",
- "shakapacker": "7.2.2",
+ "shakapacker": "^8.0.1",
"style-loader": "^3.3.1",
"swagger-ui-react": "^5.0.0",
"terser-webpack-plugin": "5",
@@ -85,5 +85,6 @@
"eslint-plugin-react-hooks": "^4.1.0",
"eslint-webpack-plugin": "^4.0.0",
"webpack-dev-server": "^4.9.0"
- }
-}
+ },
+ "packageManager": "yarn@1.22.19"
+}
\ No newline at end of file
diff --git a/public/404.html b/public/404.html
index b612547f..2be3af26 100644
--- a/public/404.html
+++ b/public/404.html
@@ -4,7 +4,7 @@
The page you were looking for doesn't exist (404)
-
+
diff --git a/public/406-unsupported-browser.html b/public/406-unsupported-browser.html
new file mode 100644
index 00000000..7cf1e168
--- /dev/null
+++ b/public/406-unsupported-browser.html
@@ -0,0 +1,66 @@
+
+
+
+ Your browser is not supported (406)
+
+
+
+
+
+
+
+
+
Your browser is not supported.
+
Please upgrade your browser to continue.
+
+
+
+
diff --git a/public/422.html b/public/422.html
index a21f82b3..c08eac0d 100644
--- a/public/422.html
+++ b/public/422.html
@@ -4,7 +4,7 @@
The change you wanted was rejected (422)
-
+
diff --git a/public/500.html b/public/500.html
index 061abc58..78a030af 100644
--- a/public/500.html
+++ b/public/500.html
@@ -4,7 +4,7 @@
We're sorry, but something went wrong (500)
-
+