From 9680e3d5fcae95102e09212fd4c50345dbe238ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Prod=27homme?= Date: Fri, 28 Jul 2023 15:09:29 +0200 Subject: [PATCH 1/3] =?UTF-8?q?=E2=9C=A8=20Extraie=20ImageFileInput=20et?= =?UTF-8?q?=20IconFileInput?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Depuis Hedwige --- .../captive-theme/forms/_icon_file.scss | 17 ++++++++++++ captive-theme/app/inputs/icon_file_input.rb | 8 ++++++ captive-theme/app/inputs/image_file_input.rb | 27 +++++++++++++++++++ 3 files changed, 52 insertions(+) create mode 100644 captive-theme/app/assets/stylesheets/captive-theme/forms/_icon_file.scss create mode 100644 captive-theme/app/inputs/icon_file_input.rb create mode 100644 captive-theme/app/inputs/image_file_input.rb diff --git a/captive-theme/app/assets/stylesheets/captive-theme/forms/_icon_file.scss b/captive-theme/app/assets/stylesheets/captive-theme/forms/_icon_file.scss new file mode 100644 index 00000000..983519e5 --- /dev/null +++ b/captive-theme/app/assets/stylesheets/captive-theme/forms/_icon_file.scss @@ -0,0 +1,17 @@ + +@mixin icon() { + object-fit: cover; + border-radius: 3px; +} + +.icon-preview { + @include icon; + width: 78px; + height: 78px; + + &__small { + @include icon; + width: 36px; + height: 36px; + } +} diff --git a/captive-theme/app/inputs/icon_file_input.rb b/captive-theme/app/inputs/icon_file_input.rb new file mode 100644 index 00000000..e3ecd976 --- /dev/null +++ b/captive-theme/app/inputs/icon_file_input.rb @@ -0,0 +1,8 @@ +class IconFileInput < ImageFileInput + def image_preview_html_options + options = super + options[:class] ||= '' + options[:class] += ' icon-preview' + options + end +end diff --git a/captive-theme/app/inputs/image_file_input.rb b/captive-theme/app/inputs/image_file_input.rb new file mode 100644 index 00000000..5b523c1d --- /dev/null +++ b/captive-theme/app/inputs/image_file_input.rb @@ -0,0 +1,27 @@ +class ImageFileInput < Formtastic::Inputs::FileInput + def to_html + input_wrapping do + label_html << + builder.file_field(method, input_html_options) << + image_preview_html + end + end + + def image_preview_html + if object.send(method)&.attached? + builder.template.image_tag(object.send(method), image_preview_html_options) + else + '' + end + end + + def input_html_options + { + accept: 'image/*', + }.merge(super) + end + + def image_preview_html_options + options[:image_preview_html] ||= { style: 'max-width: 100%;' } + end +end From f2910a774d69795a7ecc1cbbc8221a6664494685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Prod=27homme?= Date: Wed, 2 Aug 2023 19:30:55 +0200 Subject: [PATCH 2/3] =?UTF-8?q?=F0=9F=94=A7=20Configure=20les=20tests=20po?= =?UTF-8?q?ur=20captive-theme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Gemfile.lock | 3 + captive-theme/.rspec | 1 + captive-theme/Rakefile | 4 +- captive-theme/app/inputs/icon_file_input.rb | 4 +- captive-theme/app/inputs/image_file_input.rb | 6 +- captive-theme/bin/rails | 26 ++++ captive-theme/bin/test | 5 - captive-theme/captive-theme.gemspec | 6 +- captive-theme/lib/captive/theme/engine.rb | 14 +++ .../lib/templates/erb/scaffold/_form.html.erb | 11 ++ captive-theme/spec/dummy/Rakefile | 6 + .../spec/dummy/app/assets/config/manifest.js | 3 + .../spec/dummy/app/assets/images/.keep | 0 .../app/assets/stylesheets/application.css | 15 +++ .../app/channels/application_cable/channel.rb | 4 + .../channels/application_cable/connection.rb | 4 + .../app/controllers/application_controller.rb | 2 + .../spec/dummy/app/controllers/concerns/.keep | 0 .../dummy/app/helpers/application_helper.rb | 2 + .../spec/dummy/app/jobs/application_job.rb | 7 ++ .../dummy/app/mailers/application_mailer.rb | 4 + .../dummy/app/models/application_record.rb | 3 + .../spec/dummy/app/models/concerns/.keep | 0 .../app/views/layouts/application.html.erb | 15 +++ .../dummy/app/views/layouts/mailer.html.erb | 13 ++ .../dummy/app/views/layouts/mailer.text.erb | 1 + captive-theme/spec/dummy/bin/rails | 4 + captive-theme/spec/dummy/bin/rake | 4 + captive-theme/spec/dummy/bin/setup | 33 ++++++ captive-theme/spec/dummy/config.ru | 6 + .../spec/dummy/config/application.rb | 42 +++++++ captive-theme/spec/dummy/config/boot.rb | 5 + captive-theme/spec/dummy/config/cable.yml | 10 ++ captive-theme/spec/dummy/config/database.yml | 25 ++++ .../spec/dummy/config/environment.rb | 5 + .../dummy/config/environments/development.rb | 70 +++++++++++ .../dummy/config/environments/production.rb | 93 +++++++++++++++ .../spec/dummy/config/environments/test.rb | 60 ++++++++++ .../spec/dummy/config/initializers/assets.rb | 12 ++ .../initializers/content_security_policy.rb | 25 ++++ .../initializers/filter_parameter_logging.rb | 8 ++ .../dummy/config/initializers/formtastic.rb | 111 ++++++++++++++++++ .../dummy/config/initializers/inflections.rb | 16 +++ .../config/initializers/permissions_policy.rb | 11 ++ .../spec/dummy/config/locales/en.yml | 33 ++++++ captive-theme/spec/dummy/config/puma.rb | 43 +++++++ captive-theme/spec/dummy/config/routes.rb | 3 + captive-theme/spec/dummy/config/storage.yml | 33 ++++++ captive-theme/spec/dummy/db/test.sqlite3 | 0 captive-theme/spec/dummy/log/.keep | 0 captive-theme/spec/dummy/public/404.html | 67 +++++++++++ captive-theme/spec/dummy/public/422.html | 67 +++++++++++ captive-theme/spec/dummy/public/500.html | 66 +++++++++++ .../public/apple-touch-icon-precomposed.png | 0 .../spec/dummy/public/apple-touch-icon.png | 0 captive-theme/spec/dummy/public/favicon.ico | 0 captive-theme/spec/dummy/storage/.keep | 0 captive-theme/spec/rails_helper.rb | 66 +++++++++++ captive-theme/spec/spec_helper.rb | 98 ++++++++++++++-- 59 files changed, 1152 insertions(+), 23 deletions(-) create mode 100644 captive-theme/.rspec create mode 100755 captive-theme/bin/rails delete mode 100755 captive-theme/bin/test create mode 100644 captive-theme/lib/captive/theme/engine.rb create mode 100644 captive-theme/lib/templates/erb/scaffold/_form.html.erb create mode 100644 captive-theme/spec/dummy/Rakefile create mode 100644 captive-theme/spec/dummy/app/assets/config/manifest.js create mode 100644 captive-theme/spec/dummy/app/assets/images/.keep create mode 100644 captive-theme/spec/dummy/app/assets/stylesheets/application.css create mode 100644 captive-theme/spec/dummy/app/channels/application_cable/channel.rb create mode 100644 captive-theme/spec/dummy/app/channels/application_cable/connection.rb create mode 100644 captive-theme/spec/dummy/app/controllers/application_controller.rb create mode 100644 captive-theme/spec/dummy/app/controllers/concerns/.keep create mode 100644 captive-theme/spec/dummy/app/helpers/application_helper.rb create mode 100644 captive-theme/spec/dummy/app/jobs/application_job.rb create mode 100644 captive-theme/spec/dummy/app/mailers/application_mailer.rb create mode 100644 captive-theme/spec/dummy/app/models/application_record.rb create mode 100644 captive-theme/spec/dummy/app/models/concerns/.keep create mode 100644 captive-theme/spec/dummy/app/views/layouts/application.html.erb create mode 100644 captive-theme/spec/dummy/app/views/layouts/mailer.html.erb create mode 100644 captive-theme/spec/dummy/app/views/layouts/mailer.text.erb create mode 100755 captive-theme/spec/dummy/bin/rails create mode 100755 captive-theme/spec/dummy/bin/rake create mode 100755 captive-theme/spec/dummy/bin/setup create mode 100644 captive-theme/spec/dummy/config.ru create mode 100644 captive-theme/spec/dummy/config/application.rb create mode 100644 captive-theme/spec/dummy/config/boot.rb create mode 100644 captive-theme/spec/dummy/config/cable.yml create mode 100644 captive-theme/spec/dummy/config/database.yml create mode 100644 captive-theme/spec/dummy/config/environment.rb create mode 100644 captive-theme/spec/dummy/config/environments/development.rb create mode 100644 captive-theme/spec/dummy/config/environments/production.rb create mode 100644 captive-theme/spec/dummy/config/environments/test.rb create mode 100644 captive-theme/spec/dummy/config/initializers/assets.rb create mode 100644 captive-theme/spec/dummy/config/initializers/content_security_policy.rb create mode 100644 captive-theme/spec/dummy/config/initializers/filter_parameter_logging.rb create mode 100644 captive-theme/spec/dummy/config/initializers/formtastic.rb create mode 100644 captive-theme/spec/dummy/config/initializers/inflections.rb create mode 100644 captive-theme/spec/dummy/config/initializers/permissions_policy.rb create mode 100644 captive-theme/spec/dummy/config/locales/en.yml create mode 100644 captive-theme/spec/dummy/config/puma.rb create mode 100644 captive-theme/spec/dummy/config/routes.rb create mode 100644 captive-theme/spec/dummy/config/storage.yml create mode 100644 captive-theme/spec/dummy/db/test.sqlite3 create mode 100644 captive-theme/spec/dummy/log/.keep create mode 100644 captive-theme/spec/dummy/public/404.html create mode 100644 captive-theme/spec/dummy/public/422.html create mode 100644 captive-theme/spec/dummy/public/500.html create mode 100644 captive-theme/spec/dummy/public/apple-touch-icon-precomposed.png create mode 100644 captive-theme/spec/dummy/public/apple-touch-icon.png create mode 100644 captive-theme/spec/dummy/public/favicon.ico create mode 100644 captive-theme/spec/dummy/storage/.keep create mode 100644 captive-theme/spec/rails_helper.rb diff --git a/Gemfile.lock b/Gemfile.lock index 246246db..0e8ec73d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -21,6 +21,7 @@ PATH captive-authentication (= 0.2.8) captive-theme (= 0.2.8) captive-theme (0.2.8) + formtastic (~> 3.1, >= 3.1.4) GEM remote: https://rubygems.org/ @@ -132,6 +133,8 @@ GEM factory_bot_rails (6.2.0) factory_bot (~> 6.2.0) railties (>= 5.0.0) + formtastic (3.1.5) + actionpack (>= 3.2.13) globalid (1.2.1) activesupport (>= 6.1) hashdiff (1.0.1) diff --git a/captive-theme/.rspec b/captive-theme/.rspec new file mode 100644 index 00000000..c99d2e73 --- /dev/null +++ b/captive-theme/.rspec @@ -0,0 +1 @@ +--require spec_helper diff --git a/captive-theme/Rakefile b/captive-theme/Rakefile index 9a7fd8d7..624ead39 100644 --- a/captive-theme/Rakefile +++ b/captive-theme/Rakefile @@ -1,7 +1,7 @@ # frozen_string_literal: true -require "bundler/gem_tasks" -require "rspec/core/rake_task" +APP_RAKEFILE = File.expand_path("spec/dummy/Rakefile", __dir__) +load "rails/tasks/engine.rake" RSpec::Core::RakeTask.new(:spec) diff --git a/captive-theme/app/inputs/icon_file_input.rb b/captive-theme/app/inputs/icon_file_input.rb index e3ecd976..369a9bb8 100644 --- a/captive-theme/app/inputs/icon_file_input.rb +++ b/captive-theme/app/inputs/icon_file_input.rb @@ -1,8 +1,8 @@ class IconFileInput < ImageFileInput def image_preview_html_options options = super - options[:class] ||= '' - options[:class] += ' icon-preview' + options[:class] ||= "" + options[:class] += " icon-preview" options end end diff --git a/captive-theme/app/inputs/image_file_input.rb b/captive-theme/app/inputs/image_file_input.rb index 5b523c1d..92ea9cc1 100644 --- a/captive-theme/app/inputs/image_file_input.rb +++ b/captive-theme/app/inputs/image_file_input.rb @@ -11,17 +11,17 @@ def image_preview_html if object.send(method)&.attached? builder.template.image_tag(object.send(method), image_preview_html_options) else - '' + "" end end def input_html_options { - accept: 'image/*', + accept: "image/*", }.merge(super) end def image_preview_html_options - options[:image_preview_html] ||= { style: 'max-width: 100%;' } + options[:image_preview_html] ||= { style: "max-width: 100%;" } end end diff --git a/captive-theme/bin/rails b/captive-theme/bin/rails new file mode 100755 index 00000000..7e02b810 --- /dev/null +++ b/captive-theme/bin/rails @@ -0,0 +1,26 @@ +#!/usr/bin/env ruby +# This command will automatically be run when you run "rails" with Rails gems +# installed from the root of your application. + +ENGINE_ROOT = File.expand_path("..", __dir__) +ENGINE_PATH = File.expand_path("../lib/captive/theme/engine", __dir__) +APP_PATH = File.expand_path("../spec/dummy/config/application", __dir__) + +# Set up gems listed in the Gemfile. +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) +require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"]) + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "active_storage/engine" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_mailbox/engine" +require "action_text/engine" +require "action_view/railtie" +require "action_cable/engine" +# require "rails/test_unit/railtie" +require "rails/engine/commands" diff --git a/captive-theme/bin/test b/captive-theme/bin/test deleted file mode 100755 index 5516a12b..00000000 --- a/captive-theme/bin/test +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env ruby -$: << File.expand_path("../test", __dir__) - -require "bundler/setup" -require "rails/plugin/test" diff --git a/captive-theme/captive-theme.gemspec b/captive-theme/captive-theme.gemspec index d77d535e..ab4dbf95 100644 --- a/captive-theme/captive-theme.gemspec +++ b/captive-theme/captive-theme.gemspec @@ -21,5 +21,9 @@ Gem::Specification.new do |spec| Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"] end - # spec.add_dependency "rails", ">= 7.1.0.alpha" + spec.add_dependency "formtastic", "~> 3.1", ">= 3.1.4" + + spec.add_development_dependency "rspec-rails" + spec.add_development_dependency "rspec-mocks" + spec.add_development_dependency "rails-dummy" end diff --git a/captive-theme/lib/captive/theme/engine.rb b/captive-theme/lib/captive/theme/engine.rb new file mode 100644 index 00000000..9ae5dd97 --- /dev/null +++ b/captive-theme/lib/captive/theme/engine.rb @@ -0,0 +1,14 @@ +require "rails" + +module Captive + module Theme + class Engine < ::Rails::Engine + # require "formtastic" + # require "app/inputs/icon_file_input.rb" + + config.generators do |g| + g.test_framework :rspec + end + end + end +end diff --git a/captive-theme/lib/templates/erb/scaffold/_form.html.erb b/captive-theme/lib/templates/erb/scaffold/_form.html.erb new file mode 100644 index 00000000..d2b8b1e2 --- /dev/null +++ b/captive-theme/lib/templates/erb/scaffold/_form.html.erb @@ -0,0 +1,11 @@ +<%%= semantic_form_for @<%= singular_name %> do |f| %> + <%%= f.inputs do %> + <%- attributes.each do |attribute| -%> + <%%= f.input :<%= attribute.name %> %> + <%- end -%> + <%% end %> + + <%%= f.actions do %> + <%%= f.action :submit, :as => :input %> + <%% end %> +<%% end %> diff --git a/captive-theme/spec/dummy/Rakefile b/captive-theme/spec/dummy/Rakefile new file mode 100644 index 00000000..9a5ea738 --- /dev/null +++ b/captive-theme/spec/dummy/Rakefile @@ -0,0 +1,6 @@ +# Add your own tasks in files placed in lib/tasks ending in .rake, +# for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. + +require_relative "config/application" + +Rails.application.load_tasks diff --git a/captive-theme/spec/dummy/app/assets/config/manifest.js b/captive-theme/spec/dummy/app/assets/config/manifest.js new file mode 100644 index 00000000..080c071f --- /dev/null +++ b/captive-theme/spec/dummy/app/assets/config/manifest.js @@ -0,0 +1,3 @@ +//= link_tree ../images +//= link_directory ../stylesheets .css +//= link captive_theme_manifest.js diff --git a/captive-theme/spec/dummy/app/assets/images/.keep b/captive-theme/spec/dummy/app/assets/images/.keep new file mode 100644 index 00000000..e69de29b diff --git a/captive-theme/spec/dummy/app/assets/stylesheets/application.css b/captive-theme/spec/dummy/app/assets/stylesheets/application.css new file mode 100644 index 00000000..0ebd7fe8 --- /dev/null +++ b/captive-theme/spec/dummy/app/assets/stylesheets/application.css @@ -0,0 +1,15 @@ +/* + * This is a manifest file that'll be compiled into application.css, which will include all the files + * listed below. + * + * Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets, + * or any plugin's vendor/assets/stylesheets directory can be referenced here using a relative path. + * + * You're free to add application-wide styles to this file and they'll appear at the bottom of the + * compiled file so the styles you add here take precedence over styles defined in any other CSS/SCSS + * files in this directory. Styles in this file should be added after the last require_* statement. + * It is generally better to create a new file per style scope. + * + *= require_tree . + *= require_self + */ diff --git a/captive-theme/spec/dummy/app/channels/application_cable/channel.rb b/captive-theme/spec/dummy/app/channels/application_cable/channel.rb new file mode 100644 index 00000000..d6726972 --- /dev/null +++ b/captive-theme/spec/dummy/app/channels/application_cable/channel.rb @@ -0,0 +1,4 @@ +module ApplicationCable + class Channel < ActionCable::Channel::Base + end +end diff --git a/captive-theme/spec/dummy/app/channels/application_cable/connection.rb b/captive-theme/spec/dummy/app/channels/application_cable/connection.rb new file mode 100644 index 00000000..0ff5442f --- /dev/null +++ b/captive-theme/spec/dummy/app/channels/application_cable/connection.rb @@ -0,0 +1,4 @@ +module ApplicationCable + class Connection < ActionCable::Connection::Base + end +end diff --git a/captive-theme/spec/dummy/app/controllers/application_controller.rb b/captive-theme/spec/dummy/app/controllers/application_controller.rb new file mode 100644 index 00000000..09705d12 --- /dev/null +++ b/captive-theme/spec/dummy/app/controllers/application_controller.rb @@ -0,0 +1,2 @@ +class ApplicationController < ActionController::Base +end diff --git a/captive-theme/spec/dummy/app/controllers/concerns/.keep b/captive-theme/spec/dummy/app/controllers/concerns/.keep new file mode 100644 index 00000000..e69de29b diff --git a/captive-theme/spec/dummy/app/helpers/application_helper.rb b/captive-theme/spec/dummy/app/helpers/application_helper.rb new file mode 100644 index 00000000..de6be794 --- /dev/null +++ b/captive-theme/spec/dummy/app/helpers/application_helper.rb @@ -0,0 +1,2 @@ +module ApplicationHelper +end diff --git a/captive-theme/spec/dummy/app/jobs/application_job.rb b/captive-theme/spec/dummy/app/jobs/application_job.rb new file mode 100644 index 00000000..d394c3d1 --- /dev/null +++ b/captive-theme/spec/dummy/app/jobs/application_job.rb @@ -0,0 +1,7 @@ +class ApplicationJob < ActiveJob::Base + # Automatically retry jobs that encountered a deadlock + # retry_on ActiveRecord::Deadlocked + + # Most jobs are safe to ignore if the underlying records are no longer available + # discard_on ActiveJob::DeserializationError +end diff --git a/captive-theme/spec/dummy/app/mailers/application_mailer.rb b/captive-theme/spec/dummy/app/mailers/application_mailer.rb new file mode 100644 index 00000000..3c34c814 --- /dev/null +++ b/captive-theme/spec/dummy/app/mailers/application_mailer.rb @@ -0,0 +1,4 @@ +class ApplicationMailer < ActionMailer::Base + default from: "from@example.com" + layout "mailer" +end diff --git a/captive-theme/spec/dummy/app/models/application_record.rb b/captive-theme/spec/dummy/app/models/application_record.rb new file mode 100644 index 00000000..b63caeb8 --- /dev/null +++ b/captive-theme/spec/dummy/app/models/application_record.rb @@ -0,0 +1,3 @@ +class ApplicationRecord < ActiveRecord::Base + primary_abstract_class +end diff --git a/captive-theme/spec/dummy/app/models/concerns/.keep b/captive-theme/spec/dummy/app/models/concerns/.keep new file mode 100644 index 00000000..e69de29b diff --git a/captive-theme/spec/dummy/app/views/layouts/application.html.erb b/captive-theme/spec/dummy/app/views/layouts/application.html.erb new file mode 100644 index 00000000..f72b4ef0 --- /dev/null +++ b/captive-theme/spec/dummy/app/views/layouts/application.html.erb @@ -0,0 +1,15 @@ + + + + Dummy + + <%= csrf_meta_tags %> + <%= csp_meta_tag %> + + <%= stylesheet_link_tag "application" %> + + + + <%= yield %> + + diff --git a/captive-theme/spec/dummy/app/views/layouts/mailer.html.erb b/captive-theme/spec/dummy/app/views/layouts/mailer.html.erb new file mode 100644 index 00000000..cbd34d2e --- /dev/null +++ b/captive-theme/spec/dummy/app/views/layouts/mailer.html.erb @@ -0,0 +1,13 @@ + + + + + + + + + <%= yield %> + + diff --git a/captive-theme/spec/dummy/app/views/layouts/mailer.text.erb b/captive-theme/spec/dummy/app/views/layouts/mailer.text.erb new file mode 100644 index 00000000..37f0bddb --- /dev/null +++ b/captive-theme/spec/dummy/app/views/layouts/mailer.text.erb @@ -0,0 +1 @@ +<%= yield %> diff --git a/captive-theme/spec/dummy/bin/rails b/captive-theme/spec/dummy/bin/rails new file mode 100755 index 00000000..efc03774 --- /dev/null +++ b/captive-theme/spec/dummy/bin/rails @@ -0,0 +1,4 @@ +#!/usr/bin/env ruby +APP_PATH = File.expand_path("../config/application", __dir__) +require_relative "../config/boot" +require "rails/commands" diff --git a/captive-theme/spec/dummy/bin/rake b/captive-theme/spec/dummy/bin/rake new file mode 100755 index 00000000..4fbf10b9 --- /dev/null +++ b/captive-theme/spec/dummy/bin/rake @@ -0,0 +1,4 @@ +#!/usr/bin/env ruby +require_relative "../config/boot" +require "rake" +Rake.application.run diff --git a/captive-theme/spec/dummy/bin/setup b/captive-theme/spec/dummy/bin/setup new file mode 100755 index 00000000..ec47b79b --- /dev/null +++ b/captive-theme/spec/dummy/bin/setup @@ -0,0 +1,33 @@ +#!/usr/bin/env ruby +require "fileutils" + +# path to your application root. +APP_ROOT = File.expand_path("..", __dir__) + +def system!(*args) + system(*args) || abort("\n== Command #{args} failed ==") +end + +FileUtils.chdir APP_ROOT do + # This script is a way to set up or update your development environment automatically. + # This script is idempotent, so that you can run it at any time and get an expectable outcome. + # Add necessary setup steps to this file. + + puts "== Installing dependencies ==" + system! "gem install bundler --conservative" + system("bundle check") || system!("bundle install") + + # puts "\n== Copying sample files ==" + # 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" + + puts "\n== Removing old logs and tempfiles ==" + system! "bin/rails log:clear tmp:clear" + + puts "\n== Restarting application server ==" + system! "bin/rails restart" +end diff --git a/captive-theme/spec/dummy/config.ru b/captive-theme/spec/dummy/config.ru new file mode 100644 index 00000000..4a3c09a6 --- /dev/null +++ b/captive-theme/spec/dummy/config.ru @@ -0,0 +1,6 @@ +# This file is used by Rack-based servers to start the application. + +require_relative "config/environment" + +run Rails.application +Rails.application.load_server diff --git a/captive-theme/spec/dummy/config/application.rb b/captive-theme/spec/dummy/config/application.rb new file mode 100644 index 00000000..ed1ab748 --- /dev/null +++ b/captive-theme/spec/dummy/config/application.rb @@ -0,0 +1,42 @@ +require_relative "boot" + +require "rails" +# Pick the frameworks you want: +require "active_model/railtie" +require "active_job/railtie" +require "active_record/railtie" +require "active_storage/engine" +require "action_controller/railtie" +require "action_mailer/railtie" +require "action_mailbox/engine" +require "action_text/engine" +require "action_view/railtie" +require "action_cable/engine" +# require "rails/test_unit/railtie" + +require "formtastic" + +# Require the gems listed in Gemfile, including any gems +# you've limited to :test, :development, or :production. +Bundler.require(*Rails.groups) +require "captive/theme" + +module Dummy + class Application < Rails::Application + config.load_defaults Rails::VERSION::STRING.to_f + + # For compatibility with applications that use this config + config.action_controller.include_all_helpers = false + + # Configuration for the application, engines, and railties goes here. + # + # These settings can be overridden in specific environments using the files + # in config/environments, which are processed later. + # + # config.time_zone = "Central Time (US & Canada)" + # config.eager_load_paths << Rails.root.join("extras") + + # Don't generate system test files. + config.generators.system_tests = nil + end +end diff --git a/captive-theme/spec/dummy/config/boot.rb b/captive-theme/spec/dummy/config/boot.rb new file mode 100644 index 00000000..116591a4 --- /dev/null +++ b/captive-theme/spec/dummy/config/boot.rb @@ -0,0 +1,5 @@ +# Set up gems listed in the Gemfile. +ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../../Gemfile", __dir__) + +require "bundler/setup" if File.exist?(ENV["BUNDLE_GEMFILE"]) +$LOAD_PATH.unshift File.expand_path("../../../lib", __dir__) diff --git a/captive-theme/spec/dummy/config/cable.yml b/captive-theme/spec/dummy/config/cable.yml new file mode 100644 index 00000000..98367f89 --- /dev/null +++ b/captive-theme/spec/dummy/config/cable.yml @@ -0,0 +1,10 @@ +development: + adapter: async + +test: + adapter: test + +production: + adapter: redis + url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %> + channel_prefix: dummy_production diff --git a/captive-theme/spec/dummy/config/database.yml b/captive-theme/spec/dummy/config/database.yml new file mode 100644 index 00000000..fcba57f1 --- /dev/null +++ b/captive-theme/spec/dummy/config/database.yml @@ -0,0 +1,25 @@ +# SQLite. Versions 3.8.0 and up are supported. +# gem install sqlite3 +# +# Ensure the SQLite 3 gem is defined in your Gemfile +# gem "sqlite3" +# +default: &default + adapter: sqlite3 + pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> + timeout: 5000 + +development: + <<: *default + database: db/development.sqlite3 + +# Warning: The database defined as "test" will be erased and +# re-generated from your development database when you run "rake". +# Do not set this db to the same as development or production. +test: + <<: *default + database: db/test.sqlite3 + +production: + <<: *default + database: db/production.sqlite3 diff --git a/captive-theme/spec/dummy/config/environment.rb b/captive-theme/spec/dummy/config/environment.rb new file mode 100644 index 00000000..cac53157 --- /dev/null +++ b/captive-theme/spec/dummy/config/environment.rb @@ -0,0 +1,5 @@ +# Load the Rails application. +require_relative "application" + +# Initialize the Rails application. +Rails.application.initialize! diff --git a/captive-theme/spec/dummy/config/environments/development.rb b/captive-theme/spec/dummy/config/environments/development.rb new file mode 100644 index 00000000..e87643e0 --- /dev/null +++ b/captive-theme/spec/dummy/config/environments/development.rb @@ -0,0 +1,70 @@ +require "active_support/core_ext/integer/time" + +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # In the development environment your application's code is reloaded 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 + + # Do not eager load code on boot. + config.eager_load = false + + # Show full error reports. + config.consider_all_requests_local = true + + # Enable server timing + config.server_timing = true + + # Enable/disable caching. By default caching is disabled. + # Run rails dev:cache to toggle caching. + if Rails.root.join("tmp/caching-dev.txt").exist? + config.action_controller.perform_caching = true + config.action_controller.enable_fragment_cache_logging = true + + config.cache_store = :memory_store + config.public_file_server.headers = { + "Cache-Control" => "public, max-age=#{2.days.to_i}", + } + else + config.action_controller.perform_caching = false + + config.cache_store = :null_store + end + + # Store uploaded files on the local file system (see config/storage.yml for options). + config.active_storage.service = :local + + # Don't care if the mailer can't send. + config.action_mailer.raise_delivery_errors = false + + config.action_mailer.perform_caching = false + + # Print deprecation notices to the Rails logger. + config.active_support.deprecation = :log + + # Raise exceptions for disallowed deprecations. + config.active_support.disallowed_deprecation = :raise + + # Tell Active Support which deprecation messages to disallow. + config.active_support.disallowed_deprecation_warnings = [] + + # Raise an error on page load if there are pending migrations. + config.active_record.migration_error = :page_load + + # Highlight code that triggered database queries in logs. + config.active_record.verbose_query_logs = true + + # Suppress logger output for asset requests. + config.assets.quiet = true + + # Raises error for missing translations. + # config.i18n.raise_on_missing_translations = true + + # Annotate rendered view with file names. + # 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 +end diff --git a/captive-theme/spec/dummy/config/environments/production.rb b/captive-theme/spec/dummy/config/environments/production.rb new file mode 100644 index 00000000..b86a8b0d --- /dev/null +++ b/captive-theme/spec/dummy/config/environments/production.rb @@ -0,0 +1,93 @@ +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 + + # Eager load code on boot. This eager loads most of Rails and + # your application in memory, allowing both threaded web servers + # and those relying on copy on write to perform better. + # Rake tasks automatically ignore this option for performance. + config.eager_load = true + + # Full error reports are disabled and caching is turned on. + 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). + # 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? + + # Compress CSS using a preprocessor. + # config.assets.css_compressor = :sass + + # Do not fallback to assets pipeline if a precompiled asset is missed. + config.assets.compile = false + + # Enable serving of images, stylesheets, and JavaScripts from an asset server. + # config.asset_host = "http://assets.example.com" + + # Specifies the header that your server uses for sending files. + # config.action_dispatch.x_sendfile_header = "X-Sendfile" # for Apache + # config.action_dispatch.x_sendfile_header = "X-Accel-Redirect" # for NGINX + + # Store uploaded files on the local file system (see config/storage.yml for options). + config.active_storage.service = :local + + # Mount Action Cable outside main process or domain. + # config.action_cable.mount_path = nil + # config.action_cable.url = "wss://example.com/cable" + # config.action_cable.allowed_request_origins = [ "http://example.com", /http:\/\/example.*/ ] + + # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. + # 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 + + # Prepend all log lines with the following tags. + config.log_tags = [:request_id] + + # 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 = "dummy_production" + + 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.raise_delivery_errors = false + + # 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 + + # 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 +end diff --git a/captive-theme/spec/dummy/config/environments/test.rb b/captive-theme/spec/dummy/config/environments/test.rb new file mode 100644 index 00000000..22f9fc0c --- /dev/null +++ b/captive-theme/spec/dummy/config/environments/test.rb @@ -0,0 +1,60 @@ +require "active_support/core_ext/integer/time" + +# The test environment is used exclusively to run your application's +# test suite. You never need to work with it otherwise. Remember that +# your test database is "scratch space" for the test suite and is wiped +# and recreated between test runs. Don't rely on the data there! + +Rails.application.configure do + # Settings specified here will take precedence over those in config/application.rb. + + # Turn false under Spring and add config.action_view.cache_template_loading = true. + config.cache_classes = true + + # Eager loading loads your whole application. When running a single test locally, + # this probably isn't necessary. It's a good idea to do in a continuous integration + # system, or in some way before deploying your code. + config.eager_load = ENV["CI"].present? + + # Configure public file server for tests with Cache-Control for performance. + config.public_file_server.enabled = true + config.public_file_server.headers = { + "Cache-Control" => "public, max-age=#{1.hour.to_i}", + } + + # Show full error reports and disable caching. + 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 = false + + # Disable request forgery protection in test environment. + config.action_controller.allow_forgery_protection = false + + # Store uploaded files on the local file system in a temporary directory. + config.active_storage.service = :test + + config.action_mailer.perform_caching = false + + # Tell Action Mailer not to deliver emails to the real world. + # The :test delivery method accumulates sent emails in the + # ActionMailer::Base.deliveries array. + config.action_mailer.delivery_method = :test + + # Print deprecation notices to the stderr. + config.active_support.deprecation = :stderr + + # Raise exceptions for disallowed deprecations. + config.active_support.disallowed_deprecation = :raise + + # Tell Active Support which deprecation messages to disallow. + config.active_support.disallowed_deprecation_warnings = [] + + # Raises error for missing translations. + # config.i18n.raise_on_missing_translations = true + + # Annotate rendered view with file names. + # config.action_view.annotate_rendered_view_with_filenames = true +end diff --git a/captive-theme/spec/dummy/config/initializers/assets.rb b/captive-theme/spec/dummy/config/initializers/assets.rb new file mode 100644 index 00000000..d6156df0 --- /dev/null +++ b/captive-theme/spec/dummy/config/initializers/assets.rb @@ -0,0 +1,12 @@ +# 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 + +# 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/captive-theme/spec/dummy/config/initializers/content_security_policy.rb b/captive-theme/spec/dummy/config/initializers/content_security_policy.rb new file mode 100644 index 00000000..54f47cf1 --- /dev/null +++ b/captive-theme/spec/dummy/config/initializers/content_security_policy.rb @@ -0,0 +1,25 @@ +# Be sure to restart your server when you modify this file. + +# Define an application-wide content security policy. +# See the Securing Rails Applications Guide for more information: +# https://guides.rubyonrails.org/security.html#content-security-policy-header + +# Rails.application.configure do +# config.content_security_policy do |policy| +# policy.default_src :self, :https +# policy.font_src :self, :https, :data +# policy.img_src :self, :https, :data +# policy.object_src :none +# policy.script_src :self, :https +# policy.style_src :self, :https +# # Specify URI for violation reports +# # policy.report_uri "/csp-violation-report-endpoint" +# end +# +# # Generate session nonces for permitted importmap and inline scripts +# config.content_security_policy_nonce_generator = ->(request) { request.session.id.to_s } +# config.content_security_policy_nonce_directives = %w(script-src) +# +# # Report violations without enforcing the policy. +# # config.content_security_policy_report_only = true +# end diff --git a/captive-theme/spec/dummy/config/initializers/filter_parameter_logging.rb b/captive-theme/spec/dummy/config/initializers/filter_parameter_logging.rb new file mode 100644 index 00000000..ec958072 --- /dev/null +++ b/captive-theme/spec/dummy/config/initializers/filter_parameter_logging.rb @@ -0,0 +1,8 @@ +# Be sure to restart your server when you modify this file. + +# Configure parameters to be filtered from the log file. Use this to limit dissemination of +# sensitive information. See the ActiveSupport::ParameterFilter documentation for supported +# notations and behaviors. +Rails.application.config.filter_parameters += [ + :passw, :secret, :token, :_key, :crypt, :salt, :certificate, :otp, :ssn, +] diff --git a/captive-theme/spec/dummy/config/initializers/formtastic.rb b/captive-theme/spec/dummy/config/initializers/formtastic.rb new file mode 100644 index 00000000..a50ea310 --- /dev/null +++ b/captive-theme/spec/dummy/config/initializers/formtastic.rb @@ -0,0 +1,111 @@ +# encoding: utf-8 + +# Set the default text field size when input is a string. Default is nil. +# Formtastic::FormBuilder.default_text_field_size = 50 + +# Set the default text area height when input is a text. Default is 20. +# Formtastic::FormBuilder.default_text_area_height = 5 + +# Set the default text area width when input is a text. Default is nil. +# Formtastic::FormBuilder.default_text_area_width = 50 + +# Should all fields be considered "required" by default? +# Defaults to true. +# Formtastic::FormBuilder.all_fields_required_by_default = true + +# Should select fields have a blank option/prompt by default? +# Defaults to true. +# Formtastic::FormBuilder.include_blank_for_select_by_default = true + +# Set the string that will be appended to the labels/fieldsets which are required. +# It accepts string or procs and the default is a localized version of +# '*'. In other words, if you configure formtastic.required +# in your locale, it will replace the abbr title properly. But if you don't want to use +# abbr tag, you can simply give a string as below. +# Formtastic::FormBuilder.required_string = "(required)" + +# Set the string that will be appended to the labels/fieldsets which are optional. +# Defaults to an empty string ("") and also accepts procs (see required_string above). +# Formtastic::FormBuilder.optional_string = "(optional)" + +# Set the way inline errors will be displayed. +# Defaults to :sentence, valid options are :sentence, :list, :first and :none +# Formtastic::FormBuilder.inline_errors = :sentence +# Formtastic uses the following classes as default for hints, inline_errors and error list + +# If you override the class here, please ensure to override it in your stylesheets as well. +# Formtastic::FormBuilder.default_hint_class = "inline-hints" +# Formtastic::FormBuilder.default_inline_error_class = "inline-errors" +# Formtastic::FormBuilder.default_error_list_class = "errors" + +# Set the method to call on label text to transform or format it for human-friendly +# reading when formtastic is used without object. Defaults to :humanize. +# Formtastic::FormBuilder.label_str_method = :humanize + +# Set the array of methods to try calling on parent objects in :select and :radio inputs +# for the text inside each @