From 79f5a88ebe52b537d0a5615c6846ac2705104082 Mon Sep 17 00:00:00 2001 From: Kat Date: Tue, 30 Apr 2024 12:22:36 +0100 Subject: [PATCH] Add rails-admin and openai client --- Gemfile | 3 + Gemfile.lock | 47 ++++++++++++++ app/assets/stylesheets/rails_admin.scss | 2 + app/frontend/rails_admin.js | 1 + app/javascript/rails_admin.js | 1 + app/models/validation.rb | 2 + config/initializers/assets.rb | 1 + config/initializers/rails_admin.rb | 42 +++++++++++++ config/routes.rb | 1 + package.json | 4 +- webpack.config.js | 3 +- yarn.lock | 82 +++++++++++++++++++++++++ 12 files changed, 187 insertions(+), 2 deletions(-) create mode 100644 app/assets/stylesheets/rails_admin.scss create mode 100644 app/frontend/rails_admin.js create mode 100644 app/javascript/rails_admin.js create mode 100644 app/models/validation.rb create mode 100644 config/initializers/assets.rb create mode 100644 config/initializers/rails_admin.rb diff --git a/Gemfile b/Gemfile index d80a159dd..6ffbeb5fc 100644 --- a/Gemfile +++ b/Gemfile @@ -62,9 +62,11 @@ gem "possessive" # Strip whitespace from active record attributes gem "auto_strip_attributes" # Use sidekiq for background processing +gem "ruby-openai" gem "sidekiq" gem "sidekiq-cron" gem "unread" +gem 'rails_admin', '~> 3.0' group :development, :test do # Check gems for known vulnerabilities @@ -106,3 +108,4 @@ end # Windows does not include zoneinfo files, so bundle the tzinfo-data gem gem "tzinfo-data", platforms: %i[mingw mswin x64_mingw jruby] +gem "cssbundling-rails" diff --git a/Gemfile.lock b/Gemfile.lock index 47895d4f1..d033215ee 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -51,6 +51,10 @@ GEM globalid (>= 0.3.6) activemodel (7.0.8.1) activesupport (= 7.0.8.1) + activemodel-serializers-xml (1.0.2) + activemodel (> 5.x) + activesupport (> 5.x) + builder (~> 3.1) activerecord (7.0.8.1) activemodel (= 7.0.8.1) activesupport (= 7.0.8.1) @@ -130,6 +134,8 @@ GEM bigdecimal rexml crass (1.0.6) + cssbundling-rails (1.4.0) + railties (>= 6.0.0) date (3.3.4) devise (4.9.3) bcrypt (~> 3.0) @@ -160,6 +166,7 @@ GEM erubi (1.12.0) et-orbi (1.2.7) tzinfo + event_stream_parser (1.0.0) excon (0.109.0) factory_bot (6.4.6) activesupport (>= 5.0.0) @@ -168,6 +175,12 @@ GEM railties (>= 5.0.0) faker (3.2.3) i18n (>= 1.8.11, < 2) + faraday (2.9.0) + faraday-net_http (>= 2.0, < 3.2) + faraday-multipart (1.0.4) + multipart-post (~> 2) + faraday-net_http (3.1.0) + net-http ffi (1.16.3) fugit (1.10.0) et-orbi (~> 1, >= 1.2.7) @@ -199,6 +212,18 @@ GEM addressable (>= 2.8) jwt (2.8.0) base64 + kaminari (1.2.2) + activesupport (>= 4.1.0) + 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.2) + kaminari-activerecord (1.2.2) + activerecord + kaminari-core (= 1.2.2) + kaminari-core (1.2.2) launchy (2.5.2) addressable (~> 2.8) listen (3.9.0) @@ -218,6 +243,10 @@ GEM mini_mime (1.1.5) minitest (5.22.2) msgpack (1.7.2) + multipart-post (2.4.0) + nested_form (0.3.2) + net-http (0.4.1) + uri net-imap (0.4.10) date net-protocol @@ -304,6 +333,12 @@ GEM rails-html-sanitizer (1.6.0) loofah (~> 2.21) nokogiri (~> 1.14) + rails_admin (3.1.2) + activemodel-serializers-xml (>= 1.0) + kaminari (>= 0.14, < 2.0) + nested_form (~> 0.3) + rails (>= 6.0, < 8) + turbo-rails (~> 1.0) railties (7.0.8.1) actionpack (= 7.0.8.1) activesupport (= 7.0.8.1) @@ -377,6 +412,10 @@ GEM rubocop (~> 1.0) rubocop-rspec (2.7.0) rubocop (~> 1.19) + ruby-openai (6.5.0) + event_stream_parser (>= 0.3.0, < 2.0.0) + faraday (>= 1) + faraday-multipart (>= 1) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) rubyzip (2.3.2) @@ -411,12 +450,17 @@ GEM thor (1.3.0) timecop (0.9.8) timeout (0.4.1) + turbo-rails (1.5.0) + actionpack (>= 6.0.0) + activejob (>= 6.0.0) + railties (>= 6.0.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) uk_postcode (2.1.8) unicode-display_width (2.5.0) unread (0.13.1) activerecord (>= 6.1) + uri (0.13.0) view_component (3.10.0) activesupport (>= 5.2.0, < 8.0) concurrent-ruby (~> 1.0) @@ -459,6 +503,7 @@ DEPENDENCIES capybara capybara-lockstep capybara-screenshot + cssbundling-rails devise devise_two_factor_authentication dotenv-rails @@ -487,12 +532,14 @@ DEPENDENCIES rack-attack rack-mini-profiler (~> 2.0) rails (~> 7.0.2) + rails_admin (~> 3.0) redis (~> 4.8) roo rspec-rails rubocop-govuk (= 4.3.0) rubocop-performance rubocop-rails + ruby-openai selenium-webdriver sentry-rails sentry-ruby diff --git a/app/assets/stylesheets/rails_admin.scss b/app/assets/stylesheets/rails_admin.scss new file mode 100644 index 000000000..031f53d6c --- /dev/null +++ b/app/assets/stylesheets/rails_admin.scss @@ -0,0 +1,2 @@ +$fa-font-path: "."; +@import "rails_admin/src/rails_admin/styles/base"; diff --git a/app/frontend/rails_admin.js b/app/frontend/rails_admin.js new file mode 100644 index 000000000..d0c3beda5 --- /dev/null +++ b/app/frontend/rails_admin.js @@ -0,0 +1 @@ +import "rails_admin/src/rails_admin/base"; diff --git a/app/javascript/rails_admin.js b/app/javascript/rails_admin.js new file mode 100644 index 000000000..d0c3beda5 --- /dev/null +++ b/app/javascript/rails_admin.js @@ -0,0 +1 @@ +import "rails_admin/src/rails_admin/base"; diff --git a/app/models/validation.rb b/app/models/validation.rb new file mode 100644 index 000000000..172d31ebc --- /dev/null +++ b/app/models/validation.rb @@ -0,0 +1,2 @@ +class Validation < ApplicationRecord +end diff --git a/config/initializers/assets.rb b/config/initializers/assets.rb new file mode 100644 index 000000000..e4e6a0e6c --- /dev/null +++ b/config/initializers/assets.rb @@ -0,0 +1 @@ +Rails.application.config.assets.paths << Rails.root.join("node_modules/@fortawesome/fontawesome-free/webfonts") diff --git a/config/initializers/rails_admin.rb b/config/initializers/rails_admin.rb new file mode 100644 index 000000000..71fbaf5fa --- /dev/null +++ b/config/initializers/rails_admin.rb @@ -0,0 +1,42 @@ +RailsAdmin.config do |config| + config.asset_source = :webpack + + ### Popular gems integration + + ## == Devise == + # config.authenticate_with do + # warden.authenticate! scope: :user + # end + # config.current_user_method(&:current_user) + + ## == CancanCan == + # config.authorize_with :cancancan + + ## == Pundit == + # config.authorize_with :pundit + + ## == PaperTrail == + # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0 + + ### More at https://github.com/railsadminteam/rails_admin/wiki/Base-configuration + + ## == Gravatar integration == + ## To disable Gravatar integration in Navigation Bar set to false + # config.show_gravatar = true + config.included_models = ['Validation'] + config.actions do + dashboard # mandatory + index # mandatory + new + export + bulk_delete + show + edit + delete + show_in_app + + ## With an audit adapter, you can add: + # history_index + # history_show + end +end diff --git a/config/routes.rb b/config/routes.rb index b6b362569..d598270b4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,5 +1,6 @@ # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html Rails.application.routes.draw do + mount RailsAdmin::Engine => '/admin', as: 'rails_admin' mount_sidekiq = -> { mount Sidekiq::Web => "/sidekiq" } authenticate(:user, :support?.to_proc, &mount_sidekiq) diff --git a/package.json b/package.json index dedf7b6b7..40fd90036 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "html5shiv": "^3.7.3", "intersection-observer": "^0.12.0", "mini-css-extract-plugin": "^2.6.0", + "rails_admin": "3.1.2", "regenerator-runtime": "^0.13.9", "sass": "^1.49.9", "sass-loader": "^12.6.0", @@ -60,6 +61,7 @@ "extends": "stylelint-config-gds/scss" }, "scripts": { - "build": "webpack --config webpack.config.js" + "build": "webpack --config webpack.config.js", + "build:css": "sass ./app/assets/stylesheets/rails_admin.scss:./app/assets/builds/rails_admin.css --no-source-map --load-path=node_modules" } } diff --git a/webpack.config.js b/webpack.config.js index 8a4f8600b..f2cac0621 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -13,7 +13,8 @@ module.exports = { entry: { application: [ './app/frontend/application.js' - ] + ], + rails_admin: "./app/javascript/rails_admin.js", }, module: { rules: [ diff --git a/yarn.lock b/yarn.lock index e67ab3514..f0678b8f5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -950,6 +950,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.16.7": + version "7.24.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.4.tgz#de795accd698007a66ba44add6cc86542aff1edd" + integrity sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" @@ -1042,11 +1049,29 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" +"@fortawesome/fontawesome-free@>=5.15.0 <7.0.0": + version "6.5.2" + resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-6.5.2.tgz#310fe90cb5a8dee9698833171b98e7835404293d" + integrity sha512-hRILoInAx8GNT5IMkrtIt9blOdrqHOnPBH+k70aWUAqPZPgopb9G5EQJFpaBx/S8zp2fC+mPW349Bziuk1o28Q== + "@hotwired/stimulus@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@hotwired/stimulus/-/stimulus-3.1.0.tgz#20215251e5afe6e0a3787285181ba1bfc9097df0" integrity sha512-iDMHUhiEJ1xFeicyHcZQQgBzhtk5mPR0QZO3L6wtqzMsJEk2TKECuCQTGKjm+KJTHVY0dKq1dOOAWvODjpd2Mg== +"@hotwired/turbo-rails@^7.1.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@hotwired/turbo-rails/-/turbo-rails-7.3.0.tgz#422c21752509f3edcd6c7b2725bbe9e157815f51" + integrity sha512-fvhO64vp/a2UVQ3jue9WTc2JisMv9XilIC7ViZmXAREVwiQ2S4UC7Go8f9A1j4Xu7DBI6SbFdqILk5ImqVoqyA== + dependencies: + "@hotwired/turbo" "^7.3.0" + "@rails/actioncable" "^7.0" + +"@hotwired/turbo@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@hotwired/turbo/-/turbo-7.3.0.tgz#2226000fff1aabda9fd9587474565c9929dbf15d" + integrity sha512-Dcu+NaSvHLT7EjrDrkEmH4qET2ZJZ5IcCWmNXxNQTBwlnE5tBZfN6WxZ842n5cHV52DH/AKNirbPBtcEXDLW4g== + "@humanwhocodes/config-array@^0.10.4": version "0.10.5" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.10.5.tgz#bb679745224745fff1e9a41961c1d45a49f81c04" @@ -1158,6 +1183,21 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@popperjs/core@^2.11.0": + version "2.11.8" + resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.11.8.tgz#6b79032e760a0899cd4204710beede972a3a185f" + integrity sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A== + +"@rails/actioncable@^7.0": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@rails/actioncable/-/actioncable-7.1.3.tgz#4db480347775aeecd4dde2405659eef74a458881" + integrity sha512-ojNvnoZtPN0pYvVFtlO7dyEN9Oml1B6IDM+whGKVak69MMYW99lC2NOWXWeE3bmwEydbP/nn6ERcpfjHVjYQjA== + +"@rails/ujs@^6.1.4-1": + version "6.1.7" + resolved "https://registry.yarnpkg.com/@rails/ujs/-/ujs-6.1.7.tgz#b09dc5b2105dd267e8374c47e4490240451dc7f6" + integrity sha512-0e7WQ4LE/+LEfW2zfAw9ppsB6A8RmxbdAUPAF++UT80epY+7emuQDkKXmaK0a9lp6An50RvzezI0cIQjp1A58w== + "@socket.io/component-emitter@~3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz#96116f2a912e0c02817345b3c10751069920d553" @@ -1789,6 +1829,11 @@ body-parser@1.20.2, body-parser@^1.20.2: type-is "~1.6.18" unpipe "1.0.0" +bootstrap@^5.1.3: + version "5.3.3" + resolved "https://registry.yarnpkg.com/bootstrap/-/bootstrap-5.3.3.tgz#de35e1a765c897ac940021900fcbb831602bac38" + integrity sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -3020,6 +3065,11 @@ flat-cache@^3.0.4: flatted "^3.1.0" rimraf "^3.0.2" +flatpickr@^4.6.9: + version "4.6.13" + resolved "https://registry.yarnpkg.com/flatpickr/-/flatpickr-4.6.13.tgz#8a029548187fd6e0d670908471e43abe9ad18d94" + integrity sha512-97PMG/aywoYpB4IvbvUJi0RQi8vearvU0oov1WW3k0WZPBMrTQVqekSX5CjSG/M4Q3i6A/0FKXC7RyAoAUUSPw== + flatted@^3.1.0: version "3.2.7" resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" @@ -3719,6 +3769,18 @@ jest-worker@^27.4.5: merge-stream "^2.0.0" supports-color "^8.0.0" +jquery-ui@^1.12.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.13.2.tgz#de03580ae6604773602f8d786ad1abfb75232034" + integrity sha512-wBZPnqWs5GaYJmo1Jj0k/mrSkzdQzKDwhXNtHKcBdAcKVxMM3KNYFq+iJ2i1rwiG53Z8M4mTn3Qxrm17uH1D4Q== + dependencies: + jquery ">=1.8.0 <4.0.0" + +"jquery@>=1.8.0 <4.0.0", jquery@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== + js-sdsl@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6" @@ -4629,6 +4691,21 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +rails_admin@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/rails_admin/-/rails_admin-3.1.2.tgz#00d6d85b7a00c89c69b5dbf5f1f4620702626504" + integrity sha512-uIQHN27lBvlav6s5ppmOtVxKN8GIxyhHuDFc9ZbvWgFknR4zgG4/xEUGzKzQ9R34AEsfZ/t8cZbvtvgj+aXp4A== + dependencies: + "@babel/runtime" "^7.16.7" + "@fortawesome/fontawesome-free" ">=5.15.0 <7.0.0" + "@hotwired/turbo-rails" "^7.1.0" + "@popperjs/core" "^2.11.0" + "@rails/ujs" "^6.1.4-1" + bootstrap "^5.1.3" + flatpickr "^4.6.9" + jquery "^3.6.0" + jquery-ui "^1.12.1" + random-bytes@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" @@ -4751,6 +4828,11 @@ regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.9: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + regenerator-transform@^0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537"