Compare commits

..

421 Commits

Author SHA1 Message Date
Renovate Bot
f550b8d92c Update dependency rubocop-rspec to v3.4.0
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m55s
Add copyright notice / copyright_notice (pull_request) Successful in 2m55s
Run unit tests / unit_tests (pull_request) Successful in 5m3s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 13m25s
Check usage of free licenses / check-licenses (push) Successful in 47s
Run unit tests / unit_tests (push) Successful in 1m50s
Build Nginx-based docker image / build-static-assets (push) Successful in 11m57s
2025-01-21 03:03:34 +00:00
7c968f555f Merge pull request 'Use group affinities in discomfort calculator' (#215) from discomfort-calculation-revamp into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 34s
Run unit tests / unit_tests (push) Successful in 1m40s
Build Nginx-based docker image / build-static-assets (push) Successful in 17m44s
Reviewed-on: #215
2025-01-19 20:19:10 +00:00
1f0c6c2aac Use group affinities in discomfort calculator
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 50s
Add copyright notice / copyright_notice (pull_request) Successful in 1m11s
Run unit tests / unit_tests (pull_request) Successful in 1m58s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 19m18s
2025-01-19 20:58:42 +01:00
390899524b Fix rubocop ofenses
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m5s
Run unit tests / unit_tests (pull_request) Successful in 2m49s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m7s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 22m13s
Check usage of free licenses / check-licenses (push) Successful in 42s
Run unit tests / unit_tests (push) Successful in 1m32s
Build Nginx-based docker image / build-static-assets (push) Successful in 26m19s
2025-01-19 19:44:22 +01:00
Renovate Bot
59e7653064 Update dependency rubocop-rails to v2.29.0
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 49s
Run unit tests / unit_tests (pull_request) Failing after 48s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 24m24s
Add copyright notice / copyright_notice (pull_request) Successful in 1m51s
2025-01-19 03:18:52 +00:00
d6fd72a45c Merge pull request 'Fix duplicate row index on upsert statement' (#213) from fix-upsert-index into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 51s
Run unit tests / unit_tests (push) Successful in 1m48s
Build Nginx-based docker image / build-static-assets (push) Successful in 12m11s
Reviewed-on: #213
2025-01-14 22:11:43 +00:00
889485eaab Merge branch 'main' into fix-upsert-index
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m51s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m9s
Run unit tests / unit_tests (pull_request) Successful in 3m18s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 15m7s
2025-01-14 21:08:36 +00:00
105a0ad30c Merge pull request 'Upgrade to ruby 3.4' (#196) from ruby-3-4 into main
Some checks failed
Run unit tests / unit_tests (push) Failing after 17s
Check usage of free licenses / check-licenses (push) Successful in 39s
Build Nginx-based docker image / build-static-assets (push) Successful in 25m52s
Reviewed-on: #196
2025-01-14 20:39:46 +00:00
d03ef173e6 Merge branch 'main' into ruby-3-4
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 58s
Add copyright notice / copyright_notice (pull_request) Successful in 1m31s
Run unit tests / unit_tests (pull_request) Successful in 3m1s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 29m24s
2025-01-14 20:10:18 +00:00
b86d537cdc Install missing libyaml dependencies
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 2m10s
Check usage of free licenses / check-licenses (pull_request) Successful in 48s
Add copyright notice / copyright_notice (pull_request) Successful in 1m22s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 30m20s
2025-01-14 20:59:30 +01:00
c1774a1c6c Upgrade Nokogiri to the latest version
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 41s
Run unit tests / unit_tests (pull_request) Successful in 2m9s
Build Nginx-based docker image / build-static-assets (pull_request) Failing after 10m38s
Add copyright notice / copyright_notice (pull_request) Successful in 1m15s
2025-01-14 20:16:02 +01:00
23d09df543 Fix version of GH action
Some checks failed
Build Nginx-based docker image / build-static-assets (pull_request) Failing after 11m42s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m0s
Add copyright notice / copyright_notice (pull_request) Successful in 1m13s
Run unit tests / unit_tests (pull_request) Successful in 1m54s
2025-01-14 20:11:59 +01:00
44dbb7e005 Run bundle lock --normalize-platforms 2025-01-14 20:11:34 +01:00
8a9d0bfdb8 Use the lateste version of ruby/setup-ruby
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Failing after 47s
Add copyright notice / copyright_notice (pull_request) Successful in 1m16s
Run unit tests / unit_tests (pull_request) Successful in 4m34s
Build Nginx-based docker image / build-static-assets (pull_request) Failing after 11m25s
2025-01-14 19:51:29 +01:00
c6c5a87d8b Fix duplicate row index on upsert statement
Some checks failed
Add copyright notice / copyright_notice (pull_request) Successful in 1m22s
Run unit tests / unit_tests (pull_request) Successful in 2m59s
Build Nginx-based docker image / build-static-assets (pull_request) Failing after 8m46s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m49s
2025-01-14 19:13:40 +01:00
acf3b7b82a Merge pull request 'Update copyright assignment to cover 2025 and include all contributors' (#212) from copyright-2025 into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 42s
Run unit tests / unit_tests (push) Successful in 2m3s
Build Nginx-based docker image / build-static-assets (push) Successful in 12m11s
Reviewed-on: #212
2025-01-13 21:04:10 +00:00
0ade367fb5 Merge pull request 'Define an endpoint to reset the discomfort between all groups' (#211) from full-affinity-reset into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m0s
Run unit tests / unit_tests (push) Successful in 1m35s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #211
2025-01-13 20:57:43 +00:00
91bbae1c63 Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 59s
Add copyright notice / copyright_notice (pull_request) Successful in 2m21s
Run unit tests / unit_tests (pull_request) Successful in 3m2s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 25m17s
2025-01-13 20:38:47 +00:00
e20a366410 Update copyright assignment to cover 2025 and include all contributors
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 56s
Add copyright notice / copyright_notice (pull_request) Successful in 1m36s
Run unit tests / unit_tests (pull_request) Successful in 3m56s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 28m26s
2025-01-13 21:37:02 +01:00
a154e92b6c Define an endpoint to reset the discomfort between all groups
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m15s
Run unit tests / unit_tests (pull_request) Successful in 2m2s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m13s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 26m4s
2025-01-13 21:16:22 +01:00
65a265b900 Merge pull request 'Define an endpoint to return the default affinities of a group' (#209) from affinity-reset into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 36s
Run unit tests / unit_tests (push) Successful in 1m15s
Build Nginx-based docker image / build-static-assets (push) Successful in 12m1s
Reviewed-on: #209
2025-01-12 21:34:04 +00:00
f997657cd3 Define an endpoint to return the default affinities of a group
All checks were successful
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 16m44s
Add copyright notice / copyright_notice (pull_request) Successful in 1m45s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m10s
Run unit tests / unit_tests (pull_request) Successful in 9m16s
2025-01-12 20:41:01 +01:00
37bbc1e4f1 Merge pull request 'Update dependency factory_bot_rails to v6.4.4' (#206) from renovate/factory_bot_rails-6.x-lockfile into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 42s
Run unit tests / unit_tests (push) Successful in 1m59s
Build Nginx-based docker image / build-static-assets (push) Failing after 1h53m59s
Reviewed-on: #206
2025-01-12 18:31:51 +00:00
Renovate Bot
088c609a44 Update dependency rubytree to v2.1.1
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m47s
Add copyright notice / copyright_notice (pull_request) Successful in 2m10s
Run unit tests / unit_tests (pull_request) Successful in 3m54s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 20m51s
Check usage of free licenses / check-licenses (push) Successful in 41s
Run unit tests / unit_tests (push) Successful in 1m31s
Build Nginx-based docker image / build-static-assets (push) Successful in 20m4s
2025-01-12 03:06:30 +00:00
Renovate Bot
fd40fb61b5 Update dependency factory_bot_rails to v6.4.4
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m44s
Add copyright notice / copyright_notice (pull_request) Successful in 2m17s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 14m23s
Run unit tests / unit_tests (pull_request) Successful in 3m32s
2025-01-12 03:06:19 +00:00
Renovate Bot
5db5281d9f Update dependency rubocop to v1.70.0
All checks were successful
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 39m41s
Check usage of free licenses / check-licenses (push) Successful in 1m9s
Run unit tests / unit_tests (push) Successful in 2m38s
Build Nginx-based docker image / build-static-assets (push) Successful in 20m11s
Add copyright notice / copyright_notice (pull_request) Successful in 2m28s
Check usage of free licenses / check-licenses (pull_request) Successful in 2m44s
Run unit tests / unit_tests (pull_request) Successful in 5m52s
2025-01-11 03:10:32 +00:00
492c8e362a Upgrade to ruby 3.4.1
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Failing after 30s
Run unit tests / unit_tests (pull_request) Failing after 1m20s
Add copyright notice / copyright_notice (pull_request) Successful in 1m21s
Build Nginx-based docker image / build-static-assets (pull_request) Failing after 8m9s
2024-12-30 08:15:56 +00:00
c5c7ea6d54 WIP: Upgrade to ruby 3.4 2024-12-30 08:15:56 +00:00
e175a3dd34 Merge pull request 'Build image on PR instead of on push' (#204) from build-image-on-pr into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 28s
Run unit tests / unit_tests (push) Successful in 1m32s
Build Nginx-based docker image / build-static-assets (push) Successful in 14m58s
Reviewed-on: #204
2024-12-30 07:37:28 +00:00
a8f0302bb9 Build image on PR instead of on push
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m2s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m10s
Run unit tests / unit_tests (pull_request) Successful in 1m52s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 11m15s
2024-12-29 16:23:52 +01:00
1e533702fd Merge pull request 'Configure build and cache for intermediate layers' (#203) from optimize-docker-build into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 36s
Run unit tests / unit_tests (push) Successful in 1m46s
Build Nginx-based docker image / build-static-assets (push) Successful in 1m50s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m0s
Add copyright notice / copyright_notice (pull_request) Successful in 1m34s
Run unit tests / unit_tests (pull_request) Successful in 2m5s
Reviewed-on: #203
2024-12-29 12:42:40 +00:00
9c3c766175 Configure build and cache for intermediate layers
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m5s
Check usage of free licenses / check-licenses (pull_request) Successful in 2m12s
Run unit tests / unit_tests (pull_request) Successful in 4m59s
Build Nginx-based docker image / build-static-assets (push) Successful in 17m31s
2024-12-29 13:25:02 +01:00
Renovate Bot
d2841a449e Update dependency solid_queue to v1.1.2
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 3m37s
Add copyright notice / copyright_notice (pull_request) Successful in 5m8s
Run unit tests / unit_tests (pull_request) Successful in 8m7s
Run unit tests / unit_tests (push) Failing after 1m18s
Check usage of free licenses / check-licenses (push) Successful in 1m22s
Build Nginx-based docker image / build-static-assets (push) Successful in 25m50s
2024-12-29 01:08:54 +00:00
802ec2761c Merge pull request 'rubocop-autocorrect' (#202) from rubocop-autocorrect into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 45s
Build Nginx-based docker image / build-static-assets (push) Failing after 1m30s
Run unit tests / unit_tests (push) Successful in 2m3s
Reviewed-on: #202
2024-12-28 18:26:28 +00:00
eded3946de Restore source in gemfile
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 2m45s
Add copyright notice / copyright_notice (pull_request) Successful in 2m57s
Run unit tests / unit_tests (pull_request) Successful in 3m59s
2024-12-28 18:39:25 +01:00
55e6cfcd36 Fix order of Ruby's magic string comment and Copyright assignment
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Failing after 1m53s
Run unit tests / unit_tests (pull_request) Failing after 3m11s
Add copyright notice / copyright_notice (pull_request) Successful in 3m16s
2024-12-28 18:37:47 +01:00
5f2778c97a Restore original name
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Failing after 1m24s
Run unit tests / unit_tests (pull_request) Failing after 2m11s
Add copyright notice / copyright_notice (pull_request) Successful in 2m12s
2024-12-28 18:35:42 +01:00
20cca87cdd Run rubocop checks as part of CI
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Failing after 40s
Run unit tests and Rubocop / unit_tests (pull_request) Failing after 1m28s
Add copyright notice / copyright_notice (pull_request) Failing after 1m39s
2024-12-28 18:35:04 +01:00
cb10d50d9e Rename .github -> .gitea 2024-12-28 18:32:46 +01:00
b16ef1e237 Run Rubocop autocorrect on the rest of the project 2024-12-28 18:30:54 +01:00
0c7c69ee5e Run Rubocop autocorrect on app/controllers 2024-12-28 18:28:38 +01:00
4fc95185fb Run Rubocop autocorrect on app/helpers 2024-12-28 18:21:16 +01:00
02fcd03b0e Run Rubocop autocorrect on app/services 2024-12-28 18:20:09 +01:00
fbc6926402 Run Rubocop autocorrect on app/queries 2024-12-28 18:16:36 +01:00
19dcb551fa Run Rubocop autocorrect on app/models 2024-12-28 18:13:57 +01:00
2fc8a6340b Run Rubocop autocorrect on spec/ 2024-12-28 18:07:40 +01:00
c15d0806a8 Add exception to some Rubocop offenses 2024-12-28 17:49:00 +01:00
27c7feebee Run Rubocop autocorrect on spec/queries 2024-12-28 17:37:49 +01:00
b85e2ef932 Run Rubocop autocorrect on spec/extensions 2024-12-28 17:37:49 +01:00
c7b9c83f37 Add copyright notice
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Failing after 47s
Add copyright notice / copyright_notice (pull_request) Successful in 1m21s
Run unit tests / unit_tests (pull_request) Failing after 1m25s
2024-12-28 16:31:27 +00:00
82f17056be Run rubocop autocorrect on factory files
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Failing after 46s
Run unit tests / unit_tests (pull_request) Failing after 1m29s
Add copyright notice / copyright_notice (pull_request) Successful in 1m37s
2024-12-28 17:28:16 +01:00
4d69863974 Run Rubocop autocorrect on spec/models 2024-12-28 17:27:45 +01:00
5fcac34a52 Install Rubocop extensions 2024-12-28 17:08:57 +01:00
ad88fb0909 Merge pull request 'Define model and endpoints to store affinity between group pairs' (#200) from affinities-controller into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 40s
Run unit tests / unit_tests (push) Successful in 2m17s
Build Nginx-based docker image / build-static-assets (push) Failing after 2m43s
Reviewed-on: #200
2024-12-28 15:47:57 +00:00
9fe649f8b8 Update swagger documentation
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 37s
Add copyright notice / copyright_notice (pull_request) Successful in 55s
Run unit tests / unit_tests (pull_request) Successful in 1m42s
2024-12-28 16:43:58 +01:00
5784c89b79 Refine endpoint to receive an affinity value and transform it into a discomfort equivalent
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 49s
Add copyright notice / copyright_notice (pull_request) Successful in 1m14s
Run unit tests / unit_tests (pull_request) Successful in 3m25s
2024-12-28 14:19:06 +01:00
0780b17f4b Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m20s
Add copyright notice / copyright_notice (pull_request) Successful in 41s
Run unit tests / unit_tests (pull_request) Successful in 2m11s
2024-12-26 19:30:32 +00:00
6c6ae62e5a Define model and endpoints to store affinity between group pairs
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m7s
Add copyright notice / copyright_notice (pull_request) Successful in 1m18s
Run unit tests / unit_tests (pull_request) Successful in 2m16s
2024-12-26 20:29:06 +01:00
3b2f52da9b Update dependency pry to v0.15.2 (#195)
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 38s
Run unit tests / unit_tests (push) Successful in 1m45s
Build Nginx-based docker image / build-static-assets (push) Successful in 24m14s
2024-12-25 07:18:03 +00:00
Renovate Bot
9ac8b9b783 Update dependency pry to v0.15.2
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m33s
Add copyright notice / copyright_notice (pull_request) Successful in 2m19s
Run unit tests / unit_tests (pull_request) Successful in 3m42s
2024-12-25 01:05:11 +00:00
Renovate Bot
1318f34cec Update dependency csv to v3.3.2
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m27s
Add copyright notice / copyright_notice (pull_request) Successful in 3m2s
Run unit tests / unit_tests (pull_request) Successful in 4m57s
Check usage of free licenses / check-licenses (push) Successful in 1m2s
Run unit tests / unit_tests (push) Successful in 2m16s
Build Nginx-based docker image / build-static-assets (push) Successful in 21m38s
2024-12-24 01:04:34 +00:00
bd4e0a0135 Merge pull request 'Update dependency factory_bot_rails to v6.4.4' (#189) from renovate/factory_bot_rails-6.x-lockfile into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 51s
Run unit tests / unit_tests (push) Successful in 3m46s
Build Nginx-based docker image / build-static-assets (push) Successful in 26m1s
Reviewed-on: #189
2024-12-23 18:21:20 +00:00
Renovate Bot
4f2c3ee1a6 Update dependency importmap-rails to v2.1.0
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 2m20s
Add copyright notice / copyright_notice (pull_request) Successful in 4m57s
Run unit tests / unit_tests (pull_request) Successful in 6m11s
Check usage of free licenses / check-licenses (push) Successful in 1m47s
Run unit tests / unit_tests (push) Successful in 3m44s
Build Nginx-based docker image / build-static-assets (push) Successful in 22m45s
2024-12-23 01:05:11 +00:00
Renovate Bot
a7e40f3d63 Update dependency factory_bot_rails to v6.4.4
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 2m23s
Add copyright notice / copyright_notice (pull_request) Successful in 3m35s
Run unit tests / unit_tests (pull_request) Successful in 4m52s
2024-12-23 01:05:04 +00:00
43f4143df3 Merge pull request 'Upgrade bundler version and include gem checksums' (#191) from bundler-update into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 48s
Run unit tests / unit_tests (push) Successful in 2m3s
Build Nginx-based docker image / build-static-assets (push) Successful in 21m31s
Reviewed-on: #191
2024-12-21 08:34:09 +00:00
d05900f2a6 Upgrade bundler version and include gem checksums
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 56s
Add copyright notice / copyright_notice (pull_request) Successful in 1m19s
Run unit tests / unit_tests (pull_request) Successful in 1m56s
2024-12-21 09:31:06 +01:00
Renovate Bot
663e26bda3 Update dependency debug to v1.10.0
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 4m38s
Check usage of free licenses / check-licenses (pull_request) Successful in 2m29s
Run unit tests / unit_tests (pull_request) Successful in 6m50s
Check usage of free licenses / check-licenses (push) Successful in 28s
Run unit tests / unit_tests (push) Successful in 1m28s
Build Nginx-based docker image / build-static-assets (push) Successful in 21m41s
2024-12-19 01:06:12 +00:00
Renovate Bot
511273280f Update dependency rails to v8.0.1
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 35s
Run unit tests / unit_tests (push) Successful in 1m56s
Build Nginx-based docker image / build-static-assets (push) Successful in 21m31s
2024-12-17 01:17:06 +00:00
Renovate Bot
f1ff39ceb1 Update dependency csv to v3.3.1
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 4m24s
Add copyright notice / copyright_notice (pull_request) Successful in 6m30s
Run unit tests / unit_tests (pull_request) Successful in 9m43s
Check usage of free licenses / check-licenses (push) Successful in 1m48s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Run unit tests / unit_tests (push) Has been cancelled
2024-12-17 01:05:02 +00:00
2c6a05ee06 Merge pull request 'Redo TablesArrangements#show to display arrangement ID and discomfort breakdown' (#188) from table-discomfort-breakdown into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 1m47s
Run unit tests / unit_tests (push) Successful in 3m49s
Build Nginx-based docker image / build-static-assets (push) Successful in 24m52s
Reviewed-on: #188
2024-12-16 22:18:23 +00:00
3bfe889747 Redo TablesArrangements#show to display arrangement ID and discomfort breakdown
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 32s
Add copyright notice / copyright_notice (pull_request) Successful in 1m4s
Run unit tests / unit_tests (pull_request) Successful in 2m33s
2024-12-16 18:52:34 +01:00
Renovate Bot
e44043f572 Update dependency rubocop to v1.69.2
Some checks failed
Run unit tests / unit_tests (push) Failing after 17s
Check usage of free licenses / check-licenses (push) Failing after 19s
Build Nginx-based docker image / build-static-assets (push) Failing after 29m12s
2024-12-16 08:03:14 +00:00
28386df1d8 Merge pull request 'Update dependency factory_bot_rails to v6.4.4' (#182) from renovate/factory_bot_rails-6.x-lockfile into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 36s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Run unit tests / unit_tests (push) Has been cancelled
Reviewed-on: #182
2024-12-16 08:01:57 +00:00
Renovate Bot
998706da97 Update dependency factory_bot_rails to v6.4.4
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 2m14s
Check usage of free licenses / check-licenses (pull_request) Successful in 4m55s
Run unit tests / unit_tests (pull_request) Successful in 6m36s
2024-12-15 01:17:10 +00:00
bab5cd3161 Merge pull request 'Define an endpoint with a global summary of expenses and attendance' (#184) from dashboard into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 54s
Run unit tests / unit_tests (push) Successful in 3m22s
Build Nginx-based docker image / build-static-assets (push) Successful in 22m47s
Reviewed-on: #184
2024-12-11 22:44:35 +00:00
4e61ee2f22 Include real data in the guests summary of the dashboard
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m19s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m30s
Run unit tests / unit_tests (pull_request) Successful in 2m5s
2024-12-11 23:42:25 +01:00
f68caca5a4 Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m15s
Add copyright notice / copyright_notice (pull_request) Successful in 2m8s
Run unit tests / unit_tests (pull_request) Successful in 3m8s
2024-12-11 08:03:02 +00:00
da8f3c7618 Define an endpoint with a global summary of expenses and attendance
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m31s
Add copyright notice / copyright_notice (pull_request) Successful in 1m34s
Run unit tests / unit_tests (pull_request) Successful in 3m55s
2024-12-11 09:01:35 +01:00
Renovate Bot
d18adb2806 Update dependency rails to v8.0.0.1
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 9m35s
Add copyright notice / copyright_notice (pull_request) Successful in 27m12s
Run unit tests / unit_tests (pull_request) Successful in 30m49s
Check usage of free licenses / check-licenses (push) Successful in 3m37s
Run unit tests / unit_tests (push) Successful in 10m17s
Build Nginx-based docker image / build-static-assets (push) Successful in 51m29s
2024-12-11 01:08:44 +00:00
70bbf79a5a Merge pull request 'Group attendance properties into a json key' (#181) from groups-attendance-format into main
Some checks failed
Run unit tests / unit_tests (push) Failing after 1m47s
Check usage of free licenses / check-licenses (push) Successful in 1m9s
Build Nginx-based docker image / build-static-assets (push) Successful in 25m7s
Reviewed-on: #181
2024-12-10 07:46:20 +00:00
98c1c0d18c Group attendance properties into a json key
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 33s
Add copyright notice / copyright_notice (pull_request) Successful in 1m20s
Run unit tests / unit_tests (pull_request) Successful in 2m15s
2024-12-10 08:41:10 +01:00
71eecf94a6 Merge pull request 'Define and document CRUD endpoints for expenses' (#180) from expenses-crud into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 1m15s
Run unit tests / unit_tests (push) Successful in 2m39s
Build Nginx-based docker image / build-static-assets (push) Successful in 22m1s
Reviewed-on: #180
2024-12-09 18:31:59 +00:00
be40c97f2f Define and document CRUD endpoints for expenses
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 56s
Add copyright notice / copyright_notice (pull_request) Successful in 1m33s
Run unit tests / unit_tests (pull_request) Successful in 2m55s
2024-12-09 19:28:32 +01:00
ac09d67f4f Merge pull request 'Configure librecaptcha configuration for the development environment' (#179) from disable-librecaptcha-demo into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 1m4s
Run unit tests / unit_tests (push) Successful in 2m32s
Build Nginx-based docker image / build-static-assets (push) Successful in 23m0s
Reviewed-on: #179
2024-12-09 17:29:04 +00:00
e8543d8fb4 Configure librecaptcha configuration for the development environment
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m5s
Add copyright notice / copyright_notice (pull_request) Successful in 1m47s
Run unit tests / unit_tests (pull_request) Successful in 2m33s
2024-12-09 18:25:47 +01:00
ead48c2588 Merge pull request 'Avoid stack too deep erros due to excessive recursion' (#178) from stack-error-vns into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 25s
Run unit tests / unit_tests (push) Successful in 1m21s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #178
2024-12-09 17:16:40 +00:00
dfb50ed2dc Avoid stack too deep erros due to excessive recursion
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 56s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m32s
Run unit tests / unit_tests (pull_request) Successful in 1m52s
2024-12-09 18:14:21 +01:00
ff0e0b6931 Merge pull request 'Document tables arrangements controller' (#175) from tables-arrangements-api into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 1m23s
Run unit tests / unit_tests (push) Successful in 3m17s
Build Nginx-based docker image / build-static-assets (push) Successful in 24m40s
Reviewed-on: #175
2024-12-08 13:06:00 +00:00
5cbc81c498 Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m14s
Add copyright notice / copyright_notice (pull_request) Successful in 2m5s
Run unit tests / unit_tests (pull_request) Successful in 3m46s
2024-12-08 13:02:08 +00:00
9d90ade40c Document tables arrangements controller
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 34s
Add copyright notice / copyright_notice (pull_request) Successful in 1m9s
Run unit tests / unit_tests (pull_request) Successful in 3m51s
2024-12-08 14:00:53 +01:00
b38e845b90 Merge pull request 'Allow the creation of guests associated to no group' (#174) from allow-creation-groupless-guests into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 1m1s
Run unit tests / unit_tests (push) Successful in 2m57s
Build Nginx-based docker image / build-static-assets (push) Successful in 23m24s
Reviewed-on: #174
2024-12-08 12:13:03 +00:00
83e36df14e Allow the creation of guests associated to no group
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 45s
Add copyright notice / copyright_notice (pull_request) Successful in 1m31s
Run unit tests / unit_tests (pull_request) Successful in 2m0s
2024-12-08 13:10:49 +01:00
cbcb7b70e3 Merge pull request 'Define CUD endpoints for the Groups model' (#173) from groups-endpoints into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 56s
Run unit tests / unit_tests (push) Successful in 2m28s
Build Nginx-based docker image / build-static-assets (push) Successful in 22m36s
Reviewed-on: #173
2024-12-08 10:52:59 +00:00
9f0773647f Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 2m37s
Add copyright notice / copyright_notice (pull_request) Successful in 3m11s
Run unit tests / unit_tests (pull_request) Successful in 4m23s
2024-12-08 10:41:24 +00:00
20127398c6 Fix summary query to leverage ActsAsTenant scopes
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m10s
Add copyright notice / copyright_notice (pull_request) Successful in 1m35s
Run unit tests / unit_tests (pull_request) Successful in 5m11s
2024-12-08 11:39:50 +01:00
9e097361d0 Define endpoints to create, update, and delete groups 2024-12-08 11:30:38 +01:00
dae2e3bace Merge pull request 'Define a dummy endpoint to return a valid CSRF token' (#172) from token-endpoint into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 57s
Run unit tests / unit_tests (push) Successful in 2m42s
Build Nginx-based docker image / build-static-assets (push) Successful in 22m1s
Reviewed-on: #172
2024-12-08 08:39:39 +00:00
98877166dd Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m34s
Add copyright notice / copyright_notice (pull_request) Successful in 3m1s
Run unit tests / unit_tests (pull_request) Successful in 4m39s
2024-12-08 08:34:55 +00:00
438de103ec Define a dummy endpoint to return a valid CSRF token
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m18s
Add copyright notice / copyright_notice (pull_request) Successful in 2m29s
Run unit tests / unit_tests (pull_request) Successful in 5m33s
2024-12-08 09:32:34 +01:00
9fab79044d Merge pull request 'Configure allowed hosts' (#171) from configure-host into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 1m14s
Run unit tests / unit_tests (push) Successful in 2m57s
Build Nginx-based docker image / build-static-assets (push) Successful in 23m4s
Reviewed-on: #171
2024-12-08 07:56:02 +00:00
84684b90d7 Configure allowed hosts
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 54s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m33s
Run unit tests / unit_tests (pull_request) Successful in 1m57s
2024-12-08 08:53:51 +01:00
64f34a71dc Merge pull request 'Temporarily allow insecure cookies' (#169) from temp-allow-insecure-cookie into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m9s
Run unit tests / unit_tests (push) Successful in 3m9s
Build Nginx-based docker image / build-static-assets (push) Failing after 10m47s
Reviewed-on: #169
2024-12-07 23:49:29 +00:00
1fb6c483ed Temporarily allow insecure cookies
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 31s
Add copyright notice / copyright_notice (pull_request) Successful in 1m16s
Run unit tests / unit_tests (pull_request) Successful in 2m55s
2024-12-08 00:48:42 +01:00
278faa7319 Merge pull request 'Refine registration endpoint' (#165) from remove-wedding-date into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 47s
Run unit tests / unit_tests (push) Successful in 2m0s
Build Nginx-based docker image / build-static-assets (push) Successful in 22m55s
Add copyright notice / copyright_notice (pull_request) Successful in 20m54s
Check usage of free licenses / check-licenses (pull_request) Successful in 16m0s
Run unit tests / unit_tests (pull_request) Successful in 27m57s
renovate/artifacts Artifact file update failure
Reviewed-on: #165
2024-12-07 22:45:15 +00:00
93d907cdc8 Remove leftovers of the date attribute
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 47s
Add copyright notice / copyright_notice (pull_request) Successful in 1m13s
Run unit tests / unit_tests (pull_request) Successful in 1m50s
2024-12-07 23:43:21 +01:00
fdef94be9a Revert "Fix tenant-related error retrieving captcha"
Some checks failed
Add copyright notice / copyright_notice (pull_request) Successful in 1m23s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m50s
Run unit tests / unit_tests (pull_request) Failing after 2m26s
This reverts commit 3996ffc85c1fe3a912db14cbb317158fe9bcd8e2.
2024-12-07 23:18:23 +01:00
c62bb137ce Merge branch 'main' into remove-wedding-date
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 38s
Add copyright notice / copyright_notice (pull_request) Successful in 1m3s
Run unit tests / unit_tests (pull_request) Failing after 2m51s
2024-12-07 22:17:30 +00:00
054561faa6 Merge pull request 'Fix tenant-related error retrieving captcha' (#168) from fix-tenant-captcha into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 55s
Run unit tests / unit_tests (push) Successful in 3m2s
Build Nginx-based docker image / build-static-assets (push) Successful in 25m30s
Reviewed-on: #168
2024-12-07 22:03:18 +00:00
3996ffc85c Fix tenant-related error retrieving captcha
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 53s
Add copyright notice / copyright_notice (pull_request) Successful in 1m37s
Run unit tests / unit_tests (pull_request) Successful in 3m0s
2024-12-07 22:53:30 +01:00
82c543b167 Merge pull request 'Fix build of Docker image' (#167) from fix-build into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 1m4s
Run unit tests / unit_tests (push) Successful in 2m24s
Build Nginx-based docker image / build-static-assets (push) Successful in 22m41s
Reviewed-on: #167
2024-12-07 19:29:38 +00:00
dfe914a0b8 Fix build of Docker image
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 58s
Add copyright notice / copyright_notice (pull_request) Successful in 1m17s
Run unit tests / unit_tests (pull_request) Successful in 1m53s
2024-12-07 20:27:28 +01:00
0e234b34a0 Merge pull request 'Fix production DB host' (#166) from fix-prod-db-host into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 45s
Run unit tests / unit_tests (push) Successful in 1m50s
Build Nginx-based docker image / build-static-assets (push) Failing after 11m36s
Reviewed-on: #166
2024-12-07 19:02:30 +00:00
2ab966faf8 Fix production DB host
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m1s
Add copyright notice / copyright_notice (pull_request) Successful in 1m23s
Run unit tests / unit_tests (pull_request) Successful in 1m50s
2024-12-07 19:59:59 +01:00
9b612ce01d Add copyright notice
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 1m37s
Add copyright notice / copyright_notice (pull_request) Successful in 2m38s
Run unit tests / unit_tests (pull_request) Failing after 4m38s
2024-12-07 18:09:21 +00:00
a3f14f4fec Include slug in root_url
Some checks failed
Add copyright notice / copyright_notice (pull_request) Successful in 51s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m39s
Run unit tests / unit_tests (pull_request) Failing after 4m28s
2024-12-07 19:07:06 +01:00
022b58bb38 Fix issues with tenant during registration 2024-12-07 12:43:08 +01:00
8527b20075 Remove wedding date attribute 2024-12-07 12:39:43 +01:00
Renovate Bot
2c4befbcf6 Update dependency solid_queue to v1.1.0
Some checks failed
Add copyright notice / copyright_notice (pull_request) Successful in 5m15s
Check usage of free licenses / check-licenses (pull_request) Successful in 4m58s
Run unit tests / unit_tests (pull_request) Successful in 17m59s
Check usage of free licenses / check-licenses (push) Successful in 9m24s
Run unit tests / unit_tests (push) Successful in 6m19s
Build Nginx-based docker image / build-static-assets (push) Failing after 57m5s
2024-12-07 01:06:02 +00:00
Renovate Bot
70e9f74207 Update dependency rubocop to v1.69.1
Some checks failed
Add copyright notice / copyright_notice (pull_request) Successful in 1m44s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m31s
Run unit tests / unit_tests (pull_request) Successful in 4m37s
Check usage of free licenses / check-licenses (push) Successful in 8m26s
Run unit tests / unit_tests (push) Successful in 13m17s
Build Nginx-based docker image / build-static-assets (push) Failing after 31m39s
2024-12-04 01:06:43 +00:00
85eb85e841 Merge pull request 'Update dependency factory_bot_rails to v6.4.4' (#160) from renovate/factory_bot_rails-6.x-lockfile into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 51s
Run unit tests / unit_tests (push) Successful in 5m0s
Build Nginx-based docker image / build-static-assets (push) Failing after 16m26s
Reviewed-on: #160
2024-12-03 07:32:33 +00:00
Renovate Bot
6aba5e234f Update dependency factory_bot_rails to v6.4.4
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m22s
Add copyright notice / copyright_notice (pull_request) Successful in 2m48s
Run unit tests / unit_tests (pull_request) Successful in 6m35s
2024-12-03 01:06:02 +00:00
e0a34df7b7 Merge pull request 'fix-tenant-scope' (#159) from fix-tenant-scope into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m2s
Run unit tests / unit_tests (push) Successful in 2m57s
Build Nginx-based docker image / build-static-assets (push) Failing after 15m23s
Reviewed-on: #159
2024-12-02 19:35:36 +00:00
a96be2a79e Do not require a tenant scope for running tests
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 47s
Add copyright notice / copyright_notice (pull_request) Successful in 1m35s
Run unit tests / unit_tests (pull_request) Successful in 2m24s
2024-12-02 20:33:05 +01:00
3ea1d1e7ec Add copyright notice
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 1m39s
Add copyright notice / copyright_notice (pull_request) Successful in 1m56s
Run unit tests / unit_tests (pull_request) Failing after 2m44s
2024-12-02 08:05:46 +00:00
3fca449461 Limit visibility per tenant
Some checks failed
Add copyright notice / copyright_notice (pull_request) Successful in 57s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m29s
Run unit tests / unit_tests (pull_request) Failing after 3m28s
2024-12-02 09:04:48 +01:00
ef573c5f73 Require a tenant to be configured for all queries 2024-12-02 08:57:10 +01:00
822b2b0fad Merge pull request 'Require a LibreCaptcha challenge for the signup action' (#157) from libre-captcha into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 48s
Run unit tests / unit_tests (push) Successful in 1m42s
Build Nginx-based docker image / build-static-assets (push) Failing after 17m20s
Reviewed-on: #157
2024-12-01 19:03:56 +00:00
71046b9a1c Avoid exposing internal port and unnecessary endpoints
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 40s
Add copyright notice / copyright_notice (pull_request) Successful in 1m8s
Run unit tests / unit_tests (pull_request) Successful in 1m40s
2024-12-01 20:01:00 +01:00
5f01741943 Validate the Captcha challenge for account signup
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Failing after 51s
Add copyright notice / copyright_notice (pull_request) Successful in 1m0s
Run unit tests / unit_tests (pull_request) Successful in 1m40s
2024-12-01 19:57:01 +01:00
be9ca9e6b0 Add copyright notice
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 1m55s
Add copyright notice / copyright_notice (pull_request) Successful in 1m58s
Run unit tests / unit_tests (pull_request) Failing after 2m46s
2024-12-01 18:43:28 +00:00
b237239a1f Define an endpoint to retrieve a LibreCaptcha captcha
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Failing after 48s
Add copyright notice / copyright_notice (pull_request) Successful in 57s
Run unit tests / unit_tests (pull_request) Failing after 3m28s
2024-12-01 19:42:25 +01:00
241668b84d Merge pull request 'Indicate in the README that the application is multi-tenant' (#156) from wedding-creation into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m8s
Run unit tests / unit_tests (push) Successful in 3m12s
Build Nginx-based docker image / build-static-assets (push) Failing after 17m14s
Reviewed-on: #156
2024-12-01 17:26:24 +00:00
f708191ede Indicate in the README that the application is multi-tenant
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 56s
Add copyright notice / copyright_notice (pull_request) Successful in 1m51s
Run unit tests / unit_tests (pull_request) Successful in 4m21s
2024-12-01 18:21:33 +01:00
5f66373d50 Merge pull request 'Configure Devise to send emails using the tenant's slug for the URL' (#155) from wedding-creation into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 48s
Run unit tests / unit_tests (push) Successful in 2m11s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #155
2024-12-01 17:19:14 +00:00
9d08ef6f18 Update wedding slug rules to accept numbers and other chars
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 38s
Add copyright notice / copyright_notice (pull_request) Successful in 1m7s
Run unit tests / unit_tests (pull_request) Successful in 1m34s
2024-12-01 18:17:37 +01:00
f588b97e18 Add copyright notice
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 56s
Add copyright notice / copyright_notice (pull_request) Successful in 1m21s
Run unit tests / unit_tests (pull_request) Failing after 2m9s
2024-12-01 13:05:22 +00:00
7a80f1f5ef Make wedding object required for the swagger specs
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 41s
Add copyright notice / copyright_notice (pull_request) Successful in 59s
Run unit tests / unit_tests (pull_request) Failing after 2m40s
2024-12-01 14:04:03 +01:00
279093ad98 Configure registration endpoint to create a wedding as well 2024-12-01 14:03:23 +01:00
e6cf0da814 Merge pull request 'Make the application multi-tenant based on a wedding model' (#153) from wedding-model into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 50s
Run unit tests / unit_tests (push) Successful in 1m30s
Build Nginx-based docker image / build-static-assets (push) Failing after 12m10s
Reviewed-on: #153
2024-12-01 10:11:24 +00:00
4f1aa9dd2d Merge branch 'wedding-model' of https://gitea.bustikiller.com/bustikiller/wedding-planner into wedding-model
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m5s
Add copyright notice / copyright_notice (pull_request) Successful in 1m35s
Run unit tests / unit_tests (pull_request) Successful in 2m7s
2024-12-01 10:41:45 +01:00
4d9563cab7 Adapt background job to use acts as tenant 2024-12-01 10:41:05 +01:00
70b44e1b96 Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m32s
Add copyright notice / copyright_notice (pull_request) Successful in 2m40s
Run unit tests / unit_tests (pull_request) Successful in 3m45s
2024-12-01 09:00:01 +00:00
8429b3952b Adapt factories to use a wedding object
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m11s
Add copyright notice / copyright_notice (pull_request) Successful in 1m38s
Run unit tests / unit_tests (pull_request) Successful in 4m35s
2024-12-01 09:58:39 +01:00
e4dad698ea Merge branch 'wedding-model' of https://gitea.bustikiller.com/bustikiller/wedding-planner into wedding-model
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 33s
Add copyright notice / copyright_notice (pull_request) Successful in 47s
Run unit tests / unit_tests (pull_request) Failing after 1m14s
2024-11-30 21:11:43 +01:00
be3497ad64 Configure current tenant in a before_action of the ApplicationController 2024-11-30 21:11:25 +01:00
6d61e8452a Add copyright notice
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 57s
Add copyright notice / copyright_notice (pull_request) Successful in 1m28s
Run unit tests / unit_tests (pull_request) Failing after 2m3s
2024-11-30 20:07:45 +00:00
63bb32f2a7 Include users in the list of models affected by tenant
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 1m3s
Add copyright notice / copyright_notice (pull_request) Successful in 1m30s
Run unit tests / unit_tests (pull_request) Failing after 3m6s
2024-11-30 21:06:21 +01:00
682b5cb5fd Merge remote-tracking branch 'origin/main' into wedding-model
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 41s
Add copyright notice / copyright_notice (pull_request) Successful in 52s
Run unit tests / unit_tests (pull_request) Failing after 1m20s
2024-11-30 20:56:33 +01:00
cb90a93ef3 Add copyright notice
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 1m7s
Add copyright notice / copyright_notice (pull_request) Successful in 1m59s
Run unit tests / unit_tests (pull_request) Failing after 3m6s
2024-11-30 19:07:36 +00:00
5b3c1fdfac Adapt seeds file to use ActsAsTenant
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 40s
Add copyright notice / copyright_notice (pull_request) Successful in 1m9s
Run unit tests / unit_tests (pull_request) Failing after 3m30s
2024-11-30 20:06:43 +01:00
8bff98b165 Create DB associations 2024-11-30 20:06:43 +01:00
988e158d99 Install acts_as_tenant gem and update documentation 2024-11-30 20:06:43 +01:00
cf6ca5aa17 Create a seed user for the develoment environment 2024-11-30 20:06:43 +01:00
9e222f59be Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m47s
Add copyright notice / copyright_notice (pull_request) Successful in 2m49s
Run unit tests / unit_tests (pull_request) Successful in 3m26s
2024-11-30 18:31:48 +00:00
24c39f331a Define a simple wedding model
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m6s
Add copyright notice / copyright_notice (pull_request) Successful in 1m53s
Run unit tests / unit_tests (pull_request) Successful in 4m17s
2024-11-30 19:30:04 +01:00
bc4e9cc63e Merge pull request 'Create a seed user for the develoment environment' (#152) from seed-user into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 2m8s
Run unit tests / unit_tests (push) Successful in 5m20s
Build Nginx-based docker image / build-static-assets (push) Failing after 15m46s
Reviewed-on: #152
2024-11-30 18:28:25 +00:00
5700532ac7 Create a seed user for the develoment environment
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 1m22s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m26s
Add copyright notice / copyright_notice (pull_request) Successful in 2m33s
2024-11-30 19:19:22 +01:00
7df4ab1c56 Merge pull request 'Remove noisy log messages' (#151) from fix/noisy-output into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m9s
Run unit tests / unit_tests (push) Successful in 2m37s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #151
2024-11-30 18:18:27 +00:00
06f8039f40 Merge pull request 'Configure letter opener to read emails via web UI' (#150) from letter-opener into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 38s
Run unit tests / unit_tests (push) Has been cancelled
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #150
2024-11-30 18:17:46 +00:00
7803df7494 Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m33s
Add copyright notice / copyright_notice (pull_request) Successful in 2m13s
Run unit tests / unit_tests (pull_request) Successful in 2m42s
2024-11-30 18:14:58 +00:00
2889dc5c98 Update README
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m56s
Add copyright notice / copyright_notice (pull_request) Successful in 3m11s
Run unit tests / unit_tests (pull_request) Successful in 5m5s
2024-11-30 19:12:13 +01:00
918bc0c1a8 Remove noisy log messages
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m45s
Add copyright notice / copyright_notice (pull_request) Successful in 3m20s
Run unit tests / unit_tests (pull_request) Successful in 5m42s
2024-11-30 19:10:16 +01:00
b892d4006f Configure letter opener to read emails via web UI
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 1m25s
Add copyright notice / copyright_notice (pull_request) Failing after 2m19s
Run unit tests / unit_tests (pull_request) Successful in 5m32s
2024-11-30 19:09:36 +01:00
271ad270a4 Merge pull request 'Install and configure Devise for user authentication' (#149) from devise into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 43s
Run unit tests / unit_tests (push) Successful in 1m49s
Build Nginx-based docker image / build-static-assets (push) Failing after 11m5s
Reviewed-on: #149
2024-11-30 17:50:42 +00:00
598cb553c9 Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m6s
Add copyright notice / copyright_notice (pull_request) Successful in 2m5s
Run unit tests / unit_tests (pull_request) Successful in 3m9s
2024-11-30 17:47:30 +00:00
b0124fbd26 Configure email confirmation flow
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 45s
Add copyright notice / copyright_notice (pull_request) Successful in 1m7s
Run unit tests / unit_tests (pull_request) Successful in 3m38s
2024-11-30 18:46:31 +01:00
5458c6dd8c Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m57s
Add copyright notice / copyright_notice (pull_request) Successful in 3m5s
Run unit tests / unit_tests (pull_request) Successful in 3m48s
2024-11-30 13:27:21 +00:00
f5038f5b96 Code cleanup
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m43s
Add copyright notice / copyright_notice (pull_request) Successful in 2m37s
Run unit tests / unit_tests (pull_request) Successful in 5m40s
2024-11-30 14:25:01 +01:00
b8e6df732c Generate user model, document some endpoints (missing email verification)
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 41s
Add copyright notice / copyright_notice (pull_request) Failing after 1m30s
Run unit tests / unit_tests (pull_request) Successful in 4m41s
2024-11-30 14:24:02 +01:00
ed7207d707 Require user authentication by default 2024-11-30 11:04:45 +01:00
13bdaf0bd2 Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m47s
Add copyright notice / copyright_notice (pull_request) Successful in 1m51s
Run unit tests / unit_tests (pull_request) Successful in 2m29s
2024-11-30 10:03:46 +00:00
63c7bc8772 Refine columns in the users table
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m20s
Add copyright notice / copyright_notice (pull_request) Successful in 2m15s
Run unit tests / unit_tests (pull_request) Successful in 3m52s
2024-11-30 11:01:44 +01:00
306fa41187 Merge pull request 'Revert user authentication' (#148) from revert-authentication into main
Some checks failed
Check usage of free licenses / check-licenses (push) Failing after 28s
Run unit tests / unit_tests (push) Failing after 34s
Build Nginx-based docker image / build-static-assets (push) Failing after 16m17s
Reviewed-on: #148
2024-11-30 09:59:42 +00:00
d9ab2f5091 Install devise gem
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 1m22s
Add copyright notice / copyright_notice (pull_request) Failing after 2m35s
Run unit tests / unit_tests (pull_request) Successful in 3m54s
2024-11-30 10:59:28 +01:00
3d424c304e Revert user authentication
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m9s
Add copyright notice / copyright_notice (pull_request) Successful in 1m17s
Run unit tests / unit_tests (pull_request) Successful in 2m43s
This reverts commit b215e8a3b40be089e7359cfd424f807c2d54b1c2.
2024-11-30 10:45:17 +01:00
Renovate Bot
50c0a80dec Update dependency rubocop to v1.69.0
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 5m59s
Run unit tests / unit_tests (pull_request) Successful in 8m57s
Add copyright notice / copyright_notice (pull_request) Successful in 56s
Check usage of free licenses / check-licenses (push) Successful in 1m3s
Run unit tests / unit_tests (push) Successful in 2m15s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
2024-11-30 01:07:31 +00:00
993e4e5e57 Merge pull request 'Install Rails' authentication generator' (#142) from authentication into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m21s
Run unit tests / unit_tests (push) Successful in 2m50s
Build Nginx-based docker image / build-static-assets (push) Failing after 12m46s
Reviewed-on: #142
2024-11-29 19:44:50 +00:00
1a760af3e8 Merge pull request 'Update dependency factory_bot_rails to v6.4.4' (#145) from renovate/factory_bot_rails-6.x-lockfile into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 2m22s
Run unit tests / unit_tests (push) Successful in 3m57s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #145
2024-11-29 19:38:56 +00:00
Renovate Bot
d8ee5972aa Update dependency factory_bot_rails to v6.4.4
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 3m48s
Add copyright notice / copyright_notice (pull_request) Successful in 4m44s
Run unit tests / unit_tests (pull_request) Successful in 7m45s
2024-11-29 01:05:48 +00:00
515d841c11 Merge pull request 'Update dependency factory_bot_rails to v6.4.4' (#143) from renovate/factory_bot_rails-6.x-lockfile into main
Some checks failed
Run unit tests / unit_tests (push) Successful in 9m33s
Check usage of free licenses / check-licenses (push) Successful in 42s
Build Nginx-based docker image / build-static-assets (push) Failing after 20m28s
Reviewed-on: #143
2024-11-26 06:26:17 +00:00
Renovate Bot
d2eaa21df2 Update dependency factory_bot_rails to v6.4.4
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 2m53s
Check usage of free licenses / check-licenses (pull_request) Successful in 3m19s
Run unit tests / unit_tests (pull_request) Successful in 10m45s
2024-11-25 01:08:54 +00:00
Renovate Bot
3bde27ddce Update dependency puma to v6.5.0
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 2m43s
Add copyright notice / copyright_notice (pull_request) Successful in 7m55s
Run unit tests / unit_tests (pull_request) Successful in 13m21s
Check usage of free licenses / check-licenses (push) Successful in 8m7s
Build Nginx-based docker image / build-static-assets (push) Failing after 1h32m32s
Run unit tests / unit_tests (push) Failing after 3h10m32s
2024-11-24 01:05:23 +00:00
b215e8a3b4 Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m29s
Add copyright notice / copyright_notice (pull_request) Successful in 2m14s
Run unit tests / unit_tests (pull_request) Successful in 3m12s
2024-11-19 07:57:42 +00:00
0e0da9c765 Refine and document controllers
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m2s
Check usage of free licenses / check-licenses (pull_request) Successful in 1m34s
Run unit tests / unit_tests (pull_request) Successful in 4m2s
2024-11-19 08:56:51 +01:00
8b33616436 Remove unnecessary views
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 50s
Add copyright notice / copyright_notice (pull_request) Successful in 1m2s
Run unit tests / unit_tests (pull_request) Successful in 1m32s
2024-11-19 00:34:11 +01:00
3e38630eb4 Refine controllers 2024-11-19 00:33:53 +01:00
134bf27955 Add copyright notice
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m13s
Check usage of free licenses / check-licenses (pull_request) Successful in 2m4s
Run unit tests / unit_tests (pull_request) Successful in 2m34s
2024-11-18 23:27:50 +00:00
aa0986986f Install Rails' authentication generator
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m1s
Check usage of free licenses / check-licenses (pull_request) Successful in 2m56s
Run unit tests / unit_tests (pull_request) Successful in 3m27s
2024-11-19 00:26:44 +01:00
300524956b Merge pull request 'Refine guest controller' (#140) from refine-guest-controller into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m57s
Run unit tests / unit_tests (push) Successful in 3m0s
Build Nginx-based docker image / build-static-assets (push) Failing after 12m9s
Reviewed-on: #140
2024-11-17 19:05:59 +00:00
80c1c9b99d Refine guest controller
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m26s
Add copyright notice / copyright_notice (pull_request) Successful in 2m19s
Run unit tests / unit_tests (pull_request) Successful in 3m39s
2024-11-17 20:02:08 +01:00
1f81dabff4 Merge pull request 'Define an endpoint to remove guests' (#139) from delete-guest-endpoint into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m4s
Run unit tests / unit_tests (push) Successful in 3m42s
Build Nginx-based docker image / build-static-assets (push) Failing after 17m24s
Reviewed-on: #139
2024-11-17 17:28:13 +00:00
f1d1ea825c Recalculate simulations after removing a guest
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 56s
Add copyright notice / copyright_notice (pull_request) Successful in 1m20s
Run unit tests / unit_tests (pull_request) Successful in 2m4s
2024-11-17 18:25:38 +01:00
7542c6361c Define an endpoint to destroy guests 2024-11-17 18:24:43 +01:00
7bdfb4f789 Merge pull request 'Remove unused bulk update endpoint' (#138) from remove-guest-bulk-update into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 52s
Run unit tests / unit_tests (push) Successful in 2m7s
Build Nginx-based docker image / build-static-assets (push) Failing after 11m29s
Reviewed-on: #138
2024-11-17 16:11:53 +00:00
31d41ea2ea Remove unused bulk update endpoint
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m39s
Add copyright notice / copyright_notice (pull_request) Successful in 2m48s
Run unit tests / unit_tests (pull_request) Successful in 3m46s
2024-11-17 17:07:29 +01:00
29c9764450 Merge pull request 'Define an endpoint to create new guests' (#137) from api-create-guest into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m1s
Run unit tests / unit_tests (push) Successful in 2m54s
Build Nginx-based docker image / build-static-assets (push) Failing after 15m35s
Reviewed-on: #137
2024-11-17 10:51:01 +00:00
1b2c0f0d0a Define an endpoint to create new guests
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m36s
Add copyright notice / copyright_notice (pull_request) Successful in 2m17s
Run unit tests / unit_tests (pull_request) Successful in 3m32s
2024-11-17 11:47:12 +01:00
08f7c1e584 Merge pull request 'Merge docker compose up and build into a single command' (#136) from readme-change into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m22s
Run unit tests / unit_tests (push) Successful in 3m43s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #136
2024-11-17 10:32:14 +00:00
b3cfde445c Merge docker compose up and build into a single command
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m54s
Check usage of free licenses / check-licenses (pull_request) Successful in 2m41s
Run unit tests / unit_tests (pull_request) Successful in 4m7s
2024-11-17 11:27:38 +01:00
Renovate Bot
b008777c20 Update dependency solid_queue to v1.0.2
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 2m57s
Run unit tests / unit_tests (pull_request) Successful in 4m39s
Add copyright notice / copyright_notice (pull_request) Successful in 26s
Check usage of free licenses / check-licenses (push) Successful in 42s
Run unit tests / unit_tests (push) Successful in 1m42s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
2024-11-17 01:08:15 +00:00
b0ee052b64 Merge pull request 'Remove / server from Swagger configuration' (#133) from remove-localhost-swagger-server into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m2s
Run unit tests / unit_tests (push) Successful in 3m0s
Build Nginx-based docker image / build-static-assets (push) Failing after 13m43s
Reviewed-on: #133
2024-11-16 11:32:32 +00:00
5f47b923d5 Remove / server from Swagger configuration
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 51s
Add copyright notice / copyright_notice (pull_request) Successful in 1m41s
Run unit tests / unit_tests (pull_request) Successful in 2m14s
2024-11-16 12:30:05 +01:00
17c796c375 Merge pull request 'Document expenses endpoint and add some specs' (#132) from document-expenses-controller into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 2m28s
Run unit tests / unit_tests (push) Successful in 6m46s
Build Nginx-based docker image / build-static-assets (push) Failing after 19m30s
Reviewed-on: #132
2024-11-16 09:32:36 +00:00
73e02a9d95 Add copyright notice
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m58s
Add copyright notice / copyright_notice (pull_request) Successful in 6m38s
Run unit tests / unit_tests (pull_request) Successful in 8m40s
2024-11-16 09:23:51 +00:00
86b9d0b56c Document expenses endpoint and add some specs
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 1m5s
Add copyright notice / copyright_notice (pull_request) Successful in 1m49s
Run unit tests / unit_tests (pull_request) Successful in 8m24s
2024-11-16 10:22:10 +01:00
8e799bfd2b Merge pull request 'Remove leftover code from Swagger-CSRF experiment' (#131) from remove-swagger-csrf into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m19s
Run unit tests / unit_tests (push) Successful in 2m58s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #131
2024-11-16 09:12:35 +00:00
6e5bbb7b1b Remove leftover code from Swagger-CSRF experiment
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 2m25s
Run unit tests / unit_tests (pull_request) Successful in 4m54s
Add copyright notice / copyright_notice (pull_request) Successful in 1m16s
2024-11-16 09:59:19 +01:00
d73f59b05c Merge pull request 'Update format of guests API and document endpoints' (#130) from guests-api-changes into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 3m20s
Run unit tests / unit_tests (push) Successful in 8m10s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #130
2024-11-16 08:56:38 +00:00
5ba1591b02 Merge branch 'main' into guests-api-changes
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 2m32s
Add copyright notice / copyright_notice (pull_request) Successful in 3m51s
Run unit tests / unit_tests (pull_request) Successful in 5m13s
2024-11-16 08:51:21 +00:00
b7714051e4 Merge pull request 'Update dependency pry to v0.15.0' (#129) from renovate/pry-0.x-lockfile into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 2m19s
Run unit tests / unit_tests (push) Successful in 4m34s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #129
2024-11-16 08:51:02 +00:00
a8c9c051f0 Add copyright notice
Some checks failed
Add copyright notice / copyright_notice (pull_request) Failing after 8m14s
Check usage of free licenses / check-licenses (pull_request) Failing after 7m54s
Run unit tests / unit_tests (pull_request) Failing after 6m48s
2024-11-16 01:52:48 +00:00
6f6a6aaabf Update format of guests API and document endpoints
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 4m31s
Add copyright notice / copyright_notice (pull_request) Successful in 18m9s
Run unit tests / unit_tests (pull_request) Successful in 17m2s
2024-11-16 02:16:19 +01:00
Renovate Bot
6709c6b1f1 Update dependency pry to v0.15.0
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 8m43s
Add copyright notice / copyright_notice (pull_request) Successful in 11m8s
Run unit tests / unit_tests (pull_request) Successful in 15m23s
2024-11-16 01:08:16 +00:00
21d3aa5f4b Merge pull request 'Document the API using OpenAPI' (#127) from rswag-documentation into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 1m5s
Run unit tests / unit_tests (push) Successful in 3m9s
Build Nginx-based docker image / build-static-assets (push) Failing after 12m50s
Reviewed-on: #127
2024-11-15 18:49:11 +00:00
cc3c8fdd63 Improve documentation of groups endpoint
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 39s
Add copyright notice / copyright_notice (pull_request) Successful in 1m26s
Run unit tests / unit_tests (pull_request) Successful in 1m54s
2024-11-15 19:46:47 +01:00
94b1066c17 Include OpenAPI information in the README
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 55s
Add copyright notice / copyright_notice (pull_request) Successful in 1m58s
Run unit tests / unit_tests (pull_request) Successful in 2m34s
2024-11-15 19:09:55 +01:00
ca0b1b18d3 Use different server URLs for development and testing
All checks were successful
Check usage of free licenses / check-licenses (pull_request) Successful in 41s
Add copyright notice / copyright_notice (pull_request) Successful in 1m33s
Run unit tests / unit_tests (pull_request) Successful in 2m9s
2024-11-15 19:04:30 +01:00
41cb719bf4 Add copyright notice
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 1m38s
Add copyright notice / copyright_notice (pull_request) Successful in 2m0s
Run unit tests / unit_tests (pull_request) Failing after 2m39s
2024-11-15 17:29:56 +00:00
bcbcf9b469 MVP of swagger documentation
Some checks failed
Check usage of free licenses / check-licenses (pull_request) Successful in 40s
Add copyright notice / copyright_notice (pull_request) Successful in 1m23s
Run unit tests / unit_tests (pull_request) Failing after 3m5s
2024-11-15 18:28:45 +01:00
2bbcdfbd98 Merge pull request 'Update dependency factory_bot_rails to v6.4.4' (#125) from renovate/factory_bot_rails-6.x-lockfile into main
All checks were successful
Check usage of free licenses / check-licenses (push) Successful in 1m14s
Run unit tests / unit_tests (push) Successful in 2m26s
Build Nginx-based docker image / build-static-assets (push) Successful in 24m23s
Reviewed-on: #125
2024-11-15 07:47:45 +00:00
8a3469447b Install rswag gem with default configuration 2024-11-15 08:45:56 +01:00
Renovate Bot
c37713af8f Update dependency factory_bot_rails to v6.4.4
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 4m26s
Check usage of free licenses / check-licenses (pull_request) Successful in 5m11s
Run unit tests / unit_tests (pull_request) Successful in 10m21s
2024-11-15 07:43:39 +00:00
b8484edf26 Merge pull request 'Fix ruby version used to run license finder' (#126) from fix-ruby-version into main
Some checks failed
Check usage of free licenses / check-licenses (push) Successful in 42s
Run unit tests / unit_tests (push) Successful in 3m45s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #126
2024-11-15 07:43:31 +00:00
4cd3f24032 Fix ruby version used to run license finder
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 4m6s
Check usage of free licenses / check-licenses (pull_request) Successful in 4m28s
Run unit tests / unit_tests (pull_request) Successful in 6m5s
2024-11-15 08:33:31 +01:00
891741d740 Merge pull request 'Update dependency ruby to v3.3.6' (#97) from renovate/ruby-3.x into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Failing after 39s
Run unit tests / unit_tests (push) Successful in 2m11s
Build Nginx-based docker image / build-static-assets (push) Failing after 22m23s
Reviewed-on: #97
2024-11-14 08:43:13 +00:00
2fc4e2debd Use a setup-ruby version that has ruby 3.3.6
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m27s
Add copyright notice / copyright_notice (pull_request) Successful in 1m41s
Run unit tests / unit_tests (pull_request) Successful in 2m13s
2024-11-14 09:40:53 +01:00
8d746e21b9 Merge pull request 'Merge pull request 'Introduce endpoint to retrieve a summary of groups and invite attendance' (#122) from groups-index-stats into main' (#124) from annotate-gem into main
All checks were successful
Check usage of free licenses / build-static-assets (push) Successful in 1m29s
Run unit tests / unit_tests (push) Successful in 3m17s
Build Nginx-based docker image / build-static-assets (push) Successful in 40m36s
Reviewed-on: #124
2024-11-14 07:39:04 +00:00
42f5f7b246 Add copyright notice
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 2m32s
Add copyright notice / copyright_notice (pull_request) Successful in 3m46s
Run unit tests / unit_tests (pull_request) Successful in 5m33s
2024-11-14 07:33:24 +00:00
d75b117c60 Merge pull request 'Introduce endpoint to retrieve a summary of groups and invite attendance' (#122) from groups-index-stats into main
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m39s
Add copyright notice / copyright_notice (pull_request) Successful in 2m20s
Run unit tests / unit_tests (pull_request) Successful in 5m23s
Reviewed-on: #122
2024-11-14 08:30:27 +01:00
c64c440272 Merge pull request 'Update dependency factory_bot_rails to v6.4.4' (#123) from renovate/factory_bot_rails-6.x-lockfile into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 3m3s
Run unit tests / unit_tests (push) Successful in 6m40s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #123
2024-11-14 07:28:05 +00:00
Renovate Bot
1a4067859d Update dependency factory_bot_rails to v6.4.4
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 8m33s
Check usage of free licenses / build-static-assets (pull_request) Successful in 7m8s
Run unit tests / unit_tests (pull_request) Successful in 7m52s
2024-11-14 01:06:51 +00:00
f15545d13a Merge pull request 'Introduce endpoint to retrieve a summary of groups and invite attendance' (#122) from groups-index-stats into main
All checks were successful
Check usage of free licenses / build-static-assets (push) Successful in 45s
Run unit tests / unit_tests (push) Successful in 2m10s
Build Nginx-based docker image / build-static-assets (push) Successful in 19m58s
Reviewed-on: #122
2024-11-13 08:12:46 +00:00
4be1fc6cad Add copyright notice
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 2m24s
Add copyright notice / copyright_notice (pull_request) Successful in 5m47s
Run unit tests / unit_tests (pull_request) Successful in 4m14s
2024-11-13 07:59:07 +00:00
452b5b2040 Introduce endpoint to retrieve a summary of groups and invite attendance
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 45s
Add copyright notice / copyright_notice (pull_request) Successful in 1m47s
Run unit tests / unit_tests (pull_request) Successful in 5m4s
2024-11-13 08:57:20 +01:00
ef10fafae8 Merge pull request 'Update dependency factory_bot_rails to v6.4.4' (#120) from renovate/factory_bot_rails-6.x-lockfile into main
All checks were successful
Check usage of free licenses / build-static-assets (push) Successful in 2m33s
Run unit tests / unit_tests (push) Successful in 4m47s
Build Nginx-based docker image / build-static-assets (push) Successful in 24m22s
Reviewed-on: #120
2024-11-12 08:49:27 +00:00
Renovate Bot
94bf707723 Update dependency factory_bot_rails to v6.4.4
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m31s
Add copyright notice / copyright_notice (pull_request) Successful in 2m49s
Run unit tests / unit_tests (pull_request) Successful in 4m26s
2024-11-12 01:07:37 +00:00
402a4a3e5e Merge pull request 'Define endpoint to update expenses' (#119) from update-expenses into main
All checks were successful
Check usage of free licenses / build-static-assets (push) Successful in 1m46s
Run unit tests / unit_tests (push) Successful in 4m28s
Build Nginx-based docker image / build-static-assets (push) Successful in 33m9s
Reviewed-on: #119
2024-11-11 07:23:40 +00:00
88a7785b46 Define endpoint to update expenses
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 4m56s
Check usage of free licenses / build-static-assets (pull_request) Successful in 38s
Add copyright notice / copyright_notice (pull_request) Successful in 1m28s
2024-11-11 08:08:49 +01:00
f7c0fc91b1 Merge pull request 'Merge first and last name and expose guest update endpoint' (#118) from update-guests into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 2m41s
Run unit tests / unit_tests (push) Successful in 9m26s
Build Nginx-based docker image / build-static-assets (push) Failing after 15m48s
Reviewed-on: #118
2024-11-11 07:02:47 +00:00
3b9ca24bcd Add copyright notice
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m27s
Add copyright notice / copyright_notice (pull_request) Successful in 3m5s
Run unit tests / unit_tests (pull_request) Successful in 5m2s
2024-11-11 06:57:39 +00:00
bd5c4f5482 Merge first and last name and expose guest update endpoint
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m42s
Add copyright notice / copyright_notice (pull_request) Successful in 3m5s
Run unit tests / unit_tests (pull_request) Successful in 5m4s
2024-11-11 07:55:03 +01:00
d2974edcc1 Merge pull request 'Define an endpoint to expose the list of expenses' (#116) from expenses-list-endpoints into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 2m17s
Run unit tests / unit_tests (push) Successful in 5m23s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #116
2024-11-11 06:50:18 +00:00
810d0740f3 Define an endpoint to expose the list of expenses
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 44s
Add copyright notice / copyright_notice (pull_request) Successful in 2m30s
Run unit tests / unit_tests (pull_request) Successful in 6m1s
2024-11-10 20:40:37 +01:00
b1ec1281b5 Merge pull request 'Remove rake task leftover' (#115) from remove-rake into main
Some checks failed
Build Nginx-based docker image / build-static-assets (push) Failing after 12s
Check usage of free licenses / build-static-assets (push) Successful in 49s
Run unit tests / unit_tests (push) Successful in 1m41s
Reviewed-on: #115
2024-11-10 19:39:55 +00:00
6f19e4f1bd Remove rake task leftover
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 39s
Add copyright notice / copyright_notice (pull_request) Successful in 1m8s
Run unit tests / unit_tests (pull_request) Successful in 1m46s
2024-11-10 20:37:58 +01:00
8d74d25574 Merge pull request 'Increase penalty for tables under minimum capacity' (#113) from increase-penalty-undercapacity-tables into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 52s
Build Nginx-based docker image / build-static-assets (push) Failing after 1m55s
Run unit tests / unit_tests (push) Successful in 2m17s
Reviewed-on: #113
2024-11-10 18:01:16 +00:00
b389ae0a41 Merge pull request 'Run perturbations in both orders' (#114) from vns-combinations into main
Some checks failed
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Check usage of free licenses / build-static-assets (push) Has been cancelled
Run unit tests / unit_tests (push) Has been cancelled
Reviewed-on: #114
2024-11-10 18:01:15 +00:00
fe91f75ec0 Add copyright notice
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m30s
Add copyright notice / copyright_notice (pull_request) Successful in 2m18s
Run unit tests / unit_tests (pull_request) Successful in 3m38s
2024-11-10 17:57:29 +00:00
f2e91c8d7a Run perturbations in both orders
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m27s
Add copyright notice / copyright_notice (pull_request) Successful in 2m13s
Run unit tests / unit_tests (pull_request) Successful in 4m44s
2024-11-10 18:55:04 +01:00
5b36526c59 Increase penalty for tables under minimum capacity
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 56s
Add copyright notice / copyright_notice (pull_request) Successful in 2m1s
Run unit tests / unit_tests (pull_request) Successful in 3m44s
2024-11-10 18:40:26 +01:00
b084328d79 Merge pull request 'Implement shift operation for VNS algorithm' (#111) from shift into main
All checks were successful
Check usage of free licenses / build-static-assets (push) Successful in 50s
Run unit tests / unit_tests (push) Successful in 2m5s
Build Nginx-based docker image / build-static-assets (push) Successful in 24m44s
Reviewed-on: #111
2024-11-10 17:12:04 +00:00
bcf00fabf0 Add copyright notice
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m9s
Add copyright notice / copyright_notice (pull_request) Successful in 1m7s
Run unit tests / unit_tests (pull_request) Successful in 1m57s
2024-11-10 17:01:57 +00:00
1fcca38576 Implement shift perturbation
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 51s
Run unit tests / unit_tests (pull_request) Successful in 2m11s
Add copyright notice / copyright_notice (pull_request) Successful in 56s
2024-11-10 17:53:52 +01:00
c16e8f564c Merge pull request 'Use sets instead of arrays to represent tables' (#112) from table-set into main
All checks were successful
Check usage of free licenses / build-static-assets (push) Successful in 39s
Run unit tests / unit_tests (push) Successful in 3m26s
Build Nginx-based docker image / build-static-assets (push) Successful in 31m37s
Reviewed-on: #112
2024-11-10 16:31:49 +00:00
29d9d21916 Use sets instead of arrays to represent tables
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 44s
Add copyright notice / copyright_notice (pull_request) Successful in 59s
Run unit tests / unit_tests (pull_request) Successful in 1m33s
2024-11-10 17:30:01 +01:00
aef55abe54 Merge pull request 'Assign similar colors to child groups' (#110) from chosen-colors into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 57s
Build Nginx-based docker image / build-static-assets (push) Failing after 1m59s
Run unit tests / unit_tests (push) Successful in 2m18s
Reviewed-on: #110
2024-11-10 11:26:54 +00:00
4089ff63ba Add copyright notice
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m10s
Add copyright notice / copyright_notice (pull_request) Successful in 1m45s
Run unit tests / unit_tests (pull_request) Successful in 2m42s
2024-11-10 11:24:07 +00:00
fa3d3cf13b Assign similar colors to child groups
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 35s
Add copyright notice / copyright_notice (pull_request) Successful in 55s
Run unit tests / unit_tests (pull_request) Successful in 3m11s
2024-11-10 12:22:58 +01:00
172193b0dc Merge pull request 'Use average discomfort instead of sum' (#109) from fix/discomfort-average into main
Some checks failed
Build Nginx-based docker image / build-static-assets (push) Failing after 1m19s
Check usage of free licenses / build-static-assets (push) Successful in 1m29s
Run unit tests / unit_tests (push) Successful in 1m52s
Reviewed-on: #109
2024-11-10 10:38:35 +00:00
021b82b28e Use average discomfort instead of sum
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m1s
Add copyright notice / copyright_notice (pull_request) Successful in 1m29s
Run unit tests / unit_tests (pull_request) Successful in 2m14s
2024-11-10 11:34:26 +01:00
2d96f1c7c2 Merge pull request 'Apply a penalty if table sizes are not honored' (#108) from table-size-discomfort into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 35s
Run unit tests / unit_tests (push) Successful in 1m27s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #108
2024-11-10 10:25:37 +00:00
f3b70f5a31 Apply a penalty if table sizes are not honored
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 33s
Add copyright notice / copyright_notice (pull_request) Successful in 47s
Run unit tests / unit_tests (pull_request) Successful in 1m18s
2024-11-10 11:22:51 +01:00
2deaaa64a5 Merge pull request 'Modify initial distribution of tables to guarantee there is no single-person table' (#107) from fix/initial-group-creation into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 31s
Run unit tests / unit_tests (push) Successful in 1m25s
Build Nginx-based docker image / build-static-assets (push) Failing after 3m58s
Reviewed-on: #107
2024-11-10 09:46:53 +00:00
c12e2fc6a4 Add copyright notice
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 48s
Run unit tests / unit_tests (pull_request) Successful in 1m22s
Add copyright notice / copyright_notice (pull_request) Successful in 20s
2024-11-10 09:17:34 +00:00
19d309a2cf Modify initial distribution of tables to guarantee there is no single-person table
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 35s
Add copyright notice / copyright_notice (pull_request) Successful in 1m7s
Run unit tests / unit_tests (pull_request) Successful in 1m44s
2024-11-10 10:16:22 +01:00
Renovate Bot
9190348ff2 Update dependency rspec-rails to '~> 7.1.0'
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m10s
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m15s
Run unit tests / unit_tests (pull_request) Successful in 1m46s
Check usage of free licenses / build-static-assets (push) Successful in 36s
Run unit tests / unit_tests (push) Successful in 1m51s
Build Nginx-based docker image / build-static-assets (push) Successful in 25m9s
2024-11-10 01:24:55 +00:00
b3bbeff739 Merge pull request 'Update dependency rails to v8' (#99) from renovate/rails-8.x into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 50s
Build Nginx-based docker image / build-static-assets (push) Failing after 2m13s
Run unit tests / unit_tests (push) Successful in 2m45s
Reviewed-on: #99
2024-11-09 16:56:10 +00:00
ffc7fa3801 Update dependency rails to v8
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m54s
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m55s
Run unit tests / unit_tests (pull_request) Successful in 1m30s
2024-11-09 17:51:12 +01:00
91ebb9afee Merge pull request 'Install shoulda matchers, improve guests specs and change enum syntax' (#104) from deprecation-warning-rails-8 into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 47s
Run unit tests / unit_tests (push) Successful in 2m10s
Build Nginx-based docker image / build-static-assets (push) Failing after 3m27s
Reviewed-on: #104
2024-11-09 16:48:32 +00:00
9035df5178 Install shoulda matchers, improve guests specs and change enum syntax
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m18s
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m28s
Run unit tests / unit_tests (pull_request) Successful in 1m0s
2024-11-09 17:45:23 +01:00
60a7b1342f Add license finder as a development dependency
Some checks failed
Add copyright notice / copyright_notice (pull_request) Successful in 1m0s
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m28s
Run unit tests / unit_tests (pull_request) Successful in 2m11s
Check usage of free licenses / build-static-assets (push) Successful in 45s
Run unit tests / unit_tests (push) Successful in 2m33s
Build Nginx-based docker image / build-static-assets (push) Failing after 20s
2024-11-09 08:52:40 +01:00
Renovate Bot
d04f7211e7 Update dependency solid_queue to v1.0.1
Some checks failed
Check usage of free licenses / build-static-assets (pull_request) Failing after 2m53s
Add copyright notice / copyright_notice (pull_request) Successful in 3m17s
Run unit tests / unit_tests (pull_request) Successful in 3m45s
2024-11-09 07:44:14 +00:00
61cfdd2424 Merge pull request 'Install project dependencies before running license finder' (#102) from fix-license-finder-action into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 3m57s
Build Nginx-based docker image / build-static-assets (push) Failing after 7m34s
Run unit tests / unit_tests (push) Successful in 5m6s
Reviewed-on: #102
2024-11-09 07:43:41 +00:00
004624687a Update dockerfile
Some checks failed
Add copyright notice / copyright_notice (pull_request) Failing after 26s
Check usage of free licenses / build-static-assets (pull_request) Failing after 22s
Run unit tests / unit_tests (pull_request) Failing after 3m47s
2024-11-09 08:39:57 +01:00
f7b227bc97 Update ruby version in Gemfile and .ruby-version
Some checks failed
Check usage of free licenses / build-static-assets (pull_request) Successful in 2m23s
Run unit tests / unit_tests (pull_request) Failing after 3m58s
Add copyright notice / copyright_notice (pull_request) Successful in 7m26s
2024-11-09 08:39:17 +01:00
9856974684 Install project dependencies before running license finder
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 2m21s
Add copyright notice / copyright_notice (pull_request) Successful in 5m15s
Run unit tests / unit_tests (pull_request) Successful in 6m57s
2024-11-09 08:35:57 +01:00
c23ecfbbad Merge pull request 'Update dependency factory_bot_rails to v6.4.4' (#100) from renovate/factory_bot_rails-6.x-lockfile into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 1m46s
Run unit tests / unit_tests (push) Successful in 5m1s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #100
2024-11-09 07:30:46 +00:00
Renovate Bot
b4664c5e1d Update dependency ruby to v3.3.6
Some checks failed
Add copyright notice / copyright_notice (pull_request) Failing after 11s
Check usage of free licenses / build-static-assets (pull_request) Failing after 9s
Run unit tests / unit_tests (pull_request) Failing after 1m17s
2024-11-09 01:08:10 +00:00
Renovate Bot
c70c0c5f60 Update dependency factory_bot_rails to v6.4.4
Some checks failed
renovate/artifacts Artifact file update failure
Check usage of free licenses / build-static-assets (pull_request) Successful in 3m6s
Add copyright notice / copyright_notice (pull_request) Successful in 7m45s
Run unit tests / unit_tests (pull_request) Successful in 10m41s
2024-11-09 01:07:47 +00:00
Renovate Bot
7a4aad29c1 Update dependency factory_bot_rails to v6.4.4
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 11m24s
Add copyright notice / copyright_notice (pull_request) Successful in 23s
Check usage of free licenses / build-static-assets (pull_request) Successful in 36s
Check usage of free licenses / build-static-assets (push) Successful in 59s
Run unit tests / unit_tests (push) Successful in 1m40s
Build Nginx-based docker image / build-static-assets (push) Successful in 20m53s
2024-11-08 01:08:59 +00:00
cded122f22 Merge pull request 'Choose light colors for the groups' (#96) from light-colors into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 48s
Run unit tests / unit_tests (push) Successful in 1m38s
Build Nginx-based docker image / build-static-assets (push) Failing after 2m18s
Reviewed-on: #96
2024-11-04 22:46:08 +00:00
5cceb1e6ed Choose light colors for the groups
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m13s
Run unit tests / unit_tests (pull_request) Successful in 1m54s
Check usage of free licenses / build-static-assets (pull_request) Successful in 27s
2024-11-04 23:39:44 +01:00
1a39364322 Merge pull request 'Initial version of the README' (#95) from documentation-setup into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 43s
Build Nginx-based docker image / build-static-assets (push) Failing after 1m58s
Run unit tests / unit_tests (push) Successful in 2m24s
Reviewed-on: #95
2024-11-04 22:21:54 +00:00
ca1a8a499f Initial version of the README
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 46s
Add copyright notice / copyright_notice (pull_request) Successful in 1m8s
Run unit tests / unit_tests (pull_request) Successful in 2m6s
2024-11-04 23:18:44 +01:00
231ea3fda8 Merge pull request 'Assign a color to every group and expose it via API' (#94) from group-color into main
All checks were successful
Check usage of free licenses / build-static-assets (push) Successful in 41s
Run unit tests / unit_tests (push) Successful in 1m40s
Build Nginx-based docker image / build-static-assets (push) Successful in 25m17s
Reviewed-on: #94
2024-11-03 13:50:56 +00:00
1e23ad8e50 Order guests within same table by color
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 39s
Add copyright notice / copyright_notice (pull_request) Successful in 1m2s
Run unit tests / unit_tests (pull_request) Successful in 1m56s
2024-11-03 14:48:54 +01:00
3ae90bfc4e Add copyright notice
Some checks failed
Add copyright notice / copyright_notice (pull_request) Failing after 17s
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m14s
Run unit tests / unit_tests (pull_request) Successful in 2m7s
2024-11-03 13:43:32 +00:00
a42f938530 Assign a color to every group and expose it via API
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 55s
Add copyright notice / copyright_notice (pull_request) Successful in 1m28s
Run unit tests / unit_tests (pull_request) Successful in 1m57s
2024-11-03 14:41:09 +01:00
01a00cf35f Merge pull request 'Enqueue some simulations after running the seed file' (#93) from seed-executions into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 34s
Run unit tests / unit_tests (push) Successful in 1m20s
Build Nginx-based docker image / build-static-assets (push) Failing after 1m56s
Reviewed-on: #93
2024-11-03 13:30:34 +00:00
a67696747b Enqueue some simulations after running the seed file
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 56s
Run unit tests / unit_tests (pull_request) Successful in 1m25s
Check usage of free licenses / build-static-assets (pull_request) Successful in 2m1s
2024-11-03 14:18:30 +01:00
ed0e307e33 Merge pull request 'compose-development' (#92) from compose-development into main
Some checks failed
Build Nginx-based docker image / build-static-assets (push) Failing after 1m5s
Check usage of free licenses / build-static-assets (push) Successful in 1m29s
Run unit tests / unit_tests (push) Successful in 2m30s
Reviewed-on: #92
2024-11-03 13:16:29 +00:00
da8086605d Enable hot reload in the frontend
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 59s
Add copyright notice / copyright_notice (pull_request) Successful in 1m42s
Run unit tests / unit_tests (pull_request) Successful in 3m9s
2024-11-03 14:13:13 +01:00
0d122b39d3 Merge pull request 'Fix undefined method' (#91) from fix/undefined-method into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 1m22s
Run unit tests / unit_tests (push) Failing after 1m51s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #91
2024-11-03 13:00:11 +00:00
a9016ed352 Enable hot reloading of modified code
Some checks failed
Check usage of free licenses / build-static-assets (pull_request) Failing after 35s
Add copyright notice / copyright_notice (pull_request) Failing after 35s
Run unit tests / unit_tests (pull_request) Successful in 3m4s
2024-11-03 13:59:35 +01:00
94d0a42ac1 Fix undefined method
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 54s
Add copyright notice / copyright_notice (pull_request) Successful in 1m31s
Run unit tests / unit_tests (pull_request) Successful in 3m42s
2024-11-03 13:56:10 +01:00
c2398c0d80 Avoid exposing internal ports
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 1m54s
Add copyright notice / copyright_notice (pull_request) Successful in 2m32s
Run unit tests / unit_tests (pull_request) Successful in 4m0s
2024-11-03 13:53:36 +01:00
c2989b216f Merge pull request 'Recreate simulations whenever a guest changes their attendance' (#85) from simulations-lifecycle into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 43s
Run unit tests / unit_tests (push) Successful in 1m46s
Build Nginx-based docker image / build-static-assets (push) Failing after 2m54s
Reviewed-on: #85
2024-11-03 12:51:13 +00:00
95651ee942 Merge remote-tracking branch 'origin/simulations-lifecycle' into compose-development 2024-11-03 13:50:19 +01:00
bae70b9884 Initial version 2024-11-03 13:40:50 +01:00
865e86e659 Merge branch 'main' into simulations-lifecycle
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 4m50s
Add copyright notice / copyright_notice (pull_request) Successful in 14m0s
Run unit tests / unit_tests (pull_request) Successful in 1m6s
2024-11-03 11:23:38 +00:00
47c6fc7568 Merge pull request 'Include a step to verify nonfree dependencies are not committed' (#87) from license_checks into main
Some checks failed
Check usage of free licenses / build-static-assets (push) Successful in 2m12s
Build Nginx-based docker image / build-static-assets (push) Failing after 13m54s
Run unit tests / unit_tests (push) Successful in 14m20s
Reviewed-on: #87
2024-11-03 11:23:27 +00:00
ba4384307d Merge remote-tracking branch 'origin/main' into simulations-lifecycle
Some checks failed
Add copyright notice / copyright_notice (pull_request) Failing after 10m12s
Run unit tests / unit_tests (pull_request) Successful in 11m32s
2024-11-03 12:04:54 +01:00
0d7f602441 Merge pull request 'Assign a name to every tables arrangement' (#83) from arrangement-names into main
Some checks failed
Run unit tests / unit_tests (push) Successful in 10m57s
Build Nginx-based docker image / build-static-assets (push) Failing after 13m23s
Reviewed-on: #83
2024-11-03 11:04:07 +00:00
956863a496 Merge pull request 'Install solid queues framework' (#84) from solid-queue-vns into main
Some checks failed
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Run unit tests / unit_tests (push) Has been cancelled
Reviewed-on: #84
2024-11-03 11:00:54 +00:00
89d9f722e1 Add ruby to the list of permitted licenses
All checks were successful
Check usage of free licenses / build-static-assets (pull_request) Successful in 3m40s
Run unit tests / unit_tests (pull_request) Successful in 11m43s
Add copyright notice / copyright_notice (pull_request) Successful in 6m20s
2024-11-03 11:58:53 +01:00
2fd4549b00 Add copyright notice
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 6m31s
Run unit tests / unit_tests (pull_request) Successful in 10m41s
2024-11-03 10:47:26 +00:00
a5c6def0b6 Merge branch 'main' into solid-queue-vns
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 8m59s
Run unit tests / unit_tests (pull_request) Successful in 12m12s
2024-11-03 11:43:39 +01:00
eb2b111472 Merge branch 'main' into arrangement-names
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 3m43s
Run unit tests / unit_tests (pull_request) Successful in 13m1s
2024-11-03 11:42:28 +01:00
3a8a83e60e Merge pull request 'Remove the email property from the guest model' (#90) from remove-emails into main
Some checks failed
Run unit tests / unit_tests (push) Successful in 6m40s
Build Nginx-based docker image / build-static-assets (push) Failing after 8m28s
Reviewed-on: #90
2024-11-03 10:41:52 +00:00
dacc0aa74e Merge pull request 'Stop redundant builds' (#86) from actions-concurrency into main
Some checks failed
Build Nginx-based docker image / build-static-assets (push) Failing after 3m19s
Run unit tests / unit_tests (push) Successful in 3m44s
Reviewed-on: #86
2024-11-03 10:31:34 +00:00
f0e8c570c9 Merge pull request 'Configure a build timeout of 30 minutes' (#88) from build-timeout into main
Some checks failed
Run unit tests / unit_tests (push) Has been cancelled
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #88
2024-11-03 10:29:07 +00:00
c08f7bd37c Add copyright notice
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 7m30s
Add copyright notice / copyright_notice (pull_request) Successful in 9m10s
2024-11-03 10:03:47 +00:00
f21aaa3723 Remove the email property from the guest model
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 9m38s
Run unit tests / unit_tests (pull_request) Successful in 15m56s
2024-11-03 10:43:06 +01:00
b78165fb08 Merge remote-tracking branch 'origin/main' into actions-concurrency
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 23m44s
Run unit tests / unit_tests (pull_request) Successful in 17m5s
2024-11-03 10:17:55 +01:00
d3d1e2c821 Merge branch 'main' into license_checks
Some checks failed
Add copyright notice / copyright_notice (pull_request) Failing after 13m49s
Check usage of free licenses / build-static-assets (pull_request) Failing after 9m16s
Run unit tests / unit_tests (pull_request) Successful in 16m22s
2024-11-03 09:16:30 +00:00
7a1a2f7107 Merge branch 'main' into build-timeout
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 10m17s
Run unit tests / unit_tests (pull_request) Successful in 16m4s
2024-11-03 09:16:20 +00:00
44972b7972 Merge pull request 'Stop building docker images on PR' (#89) from build-main-only into main
Some checks failed
Run unit tests / unit_tests (push) Successful in 3m56s
Build Nginx-based docker image / build-static-assets (push) Failing after 26m44s
Reviewed-on: #89
2024-11-03 09:13:29 +00:00
22fbdf5ca3 Stop building docker images on PR
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 3m12s
Run unit tests / unit_tests (pull_request) Successful in 5m6s
2024-11-03 10:07:08 +01:00
4f133ac3f5 Configure a build timeout of 30 minutes
Some checks failed
Build Nginx-based docker image / build-static-assets (pull_request) Has been cancelled
Add copyright notice / copyright_notice (pull_request) Failing after 36s
Run unit tests / unit_tests (pull_request) Failing after 30s
2024-11-03 09:40:57 +01:00
56a8be21cc Include a step to verify nonfree dependencies are not committed
Some checks failed
Build Nginx-based docker image / build-static-assets (pull_request) Has been cancelled
Add copyright notice / copyright_notice (pull_request) Failing after 44s
Check usage of free licenses / build-static-assets (pull_request) Failing after 18s
Run unit tests / unit_tests (pull_request) Failing after 44s
2024-11-03 09:38:51 +01:00
86e982164d Add copyright notice
Some checks failed
Build Nginx-based docker image / build-static-assets (pull_request) Waiting to run
Run unit tests / unit_tests (pull_request) Failing after 16m52s
Add copyright notice / copyright_notice (pull_request) Failing after 17m30s
2024-11-03 08:31:58 +00:00
33434db3f2 Stop redundant builds
Some checks failed
Build Nginx-based docker image / build-static-assets (pull_request) Waiting to run
Add copyright notice / copyright_notice (pull_request) Failing after 19m31s
Run unit tests / unit_tests (pull_request) Failing after 18m49s
2024-11-03 09:31:10 +01:00
35bf272ac8 Restart simulations whenever a guest changes their invitation status
Some checks failed
Build Nginx-based docker image / build-static-assets (pull_request) Waiting to run
Add copyright notice / copyright_notice (pull_request) Successful in 4m39s
Run unit tests / unit_tests (pull_request) Failing after 22m29s
2024-11-03 09:26:25 +01:00
50a5c90728 Only include potential guests in the simulation 2024-11-03 09:15:48 +01:00
15a5c51fb6 Add copyright notice
Some checks are pending
Build Nginx-based docker image / build-static-assets (pull_request) Waiting to run
Add copyright notice / copyright_notice (pull_request) Successful in 6m50s
Run unit tests / unit_tests (pull_request) Successful in 10m9s
2024-11-03 08:12:24 +00:00
8d09fd733f Define a job to generate table simulations 2024-11-03 09:06:45 +01:00
3be71406f8 Add copyright notice 2024-11-03 09:06:45 +01:00
d15096b3a7 Install solid queues framework 2024-11-03 09:06:42 +01:00
1f919644a3 Define a job to generate table simulations
Some checks are pending
Build Nginx-based docker image / build-static-assets (pull_request) Waiting to run
Add copyright notice / copyright_notice (pull_request) Successful in 6m46s
Run unit tests / unit_tests (pull_request) Successful in 9m49s
2024-11-03 09:06:17 +01:00
8d83c63fa6 Add copyright notice
Some checks are pending
Build Nginx-based docker image / build-static-assets (pull_request) Waiting to run
Add copyright notice / copyright_notice (pull_request) Successful in 4m10s
Run unit tests / unit_tests (pull_request) Successful in 8m20s
2024-11-03 08:01:59 +00:00
a1b5e55b39 Install solid queues framework
Some checks are pending
Build Nginx-based docker image / build-static-assets (pull_request) Waiting to run
Add copyright notice / copyright_notice (pull_request) Successful in 2m3s
Run unit tests / unit_tests (pull_request) Successful in 5m23s
2024-11-03 08:59:56 +01:00
066fdea504 Assign a name to every tables arrangement
Some checks failed
Add copyright notice / copyright_notice (pull_request) Successful in 3m52s
Run unit tests / unit_tests (pull_request) Successful in 7m40s
Build Nginx-based docker image / build-static-assets (pull_request) Failing after 1h10m25s
2024-11-03 08:44:31 +01:00
f75f903363 Merge pull request 'Expose tables via API' (#80) from arrangements-api into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 1m29s
Build Nginx-based docker image / build-static-assets (push) Successful in 34m23s
Reviewed-on: #80
2024-11-02 12:19:16 +00:00
d6182392f6 Return only the top 3 arrangements
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m9s
Run unit tests / unit_tests (pull_request) Successful in 2m29s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 28m27s
2024-11-02 12:50:45 +01:00
612cb9a789 Refine arrangement detail endpoint
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m21s
Run unit tests / unit_tests (pull_request) Successful in 2m17s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 25m8s
2024-11-02 11:23:00 +01:00
d4c1e5aab0 Rewrite table arrangements endpoints 2024-11-02 10:40:43 +01:00
83fbac76f6 Merge pull request 'Remove acts_as_taggable_on gem' (#82) from remove-acts-as-taggable into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 2m14s
Build Nginx-based docker image / build-static-assets (push) Successful in 25m23s
Reviewed-on: #82
2024-11-02 08:54:23 +00:00
bf970af2c5 Remove tags table as well
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 2m40s
Run unit tests / unit_tests (pull_request) Successful in 4m16s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 47m21s
2024-11-01 19:55:39 +00:00
eb85028eea Add copyright notice 2024-11-01 19:55:39 +00:00
5fef6f1011 Remove references to acts_as_taggable_on gem 2024-11-01 19:55:39 +00:00
ea129602b5 Uninstall acts as taggable on gem 2024-11-01 19:55:39 +00:00
7bb9d83c6e Merge pull request 'Remove HTML views and non-JSON endpoints' (#81) from remove-html-views into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 4m1s
Build Nginx-based docker image / build-static-assets (push) Successful in 49m11s
Reviewed-on: #81
2024-11-01 19:54:15 +00:00
db644c85be Remove HTML views
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m31s
Run unit tests / unit_tests (pull_request) Successful in 2m49s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 31m42s
2024-11-01 19:08:01 +01:00
1f93fe42c5 Clean up unused methods and non-API endpoints from controllers 2024-11-01 19:07:12 +01:00
62a7af6db3 Merge pull request 'Adapt discomfort calculator to use groups instead of affinity tags' (#79) from fix-hiearhy-load into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 1m11s
Build Nginx-based docker image / build-static-assets (push) Successful in 23m29s
Reviewed-on: #79
2024-11-01 11:22:13 +00:00
d37dd44cd3 Update discomfort calculator to use group ids
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 52s
Run unit tests / unit_tests (pull_request) Successful in 1m23s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 16m27s
2024-11-01 12:04:15 +01:00
b5693f549e Load groups hierarchy from data in DB 2024-11-01 11:55:32 +01:00
Renovate Bot
c1575bb7e1 Update dependency rubocop to v1.68.0
All checks were successful
Run unit tests / unit_tests (push) Successful in 3m9s
Build Nginx-based docker image / build-static-assets (push) Successful in 23m22s
2024-11-01 01:40:11 +00:00
7c0a525c64 Add copyright notice
Some checks failed
Add copyright notice / copyright_notice (pull_request) Successful in 1m41s
Run unit tests / unit_tests (pull_request) Successful in 6m7s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 48m54s
Run unit tests / unit_tests (push) Successful in 2m24s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
2024-10-31 23:34:15 +00:00
Renovate Bot
d8ef1f179c Update dependency rails to v7.2.2
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 4m38s
Run unit tests / unit_tests (pull_request) Successful in 11m45s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 1h57m15s
2024-10-31 23:08:25 +00:00
5aa86da10c Merge pull request 'Include the copyright notice in spec files' (#76) from copyright-specs into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 2m6s
Build Nginx-based docker image / build-static-assets (push) Successful in 59m14s
Reviewed-on: #76
2024-10-28 22:48:04 +00:00
69f35a1e60 Merge pull request 'Feature: Expense summary endpoint' (#75) from expenses-endpoint into main
Some checks failed
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Run unit tests / unit_tests (push) Has been cancelled
Reviewed-on: #75
2024-10-28 22:46:33 +00:00
658c2331ca Add copyright notice
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m1s
Run unit tests / unit_tests (pull_request) Successful in 2m8s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 40m9s
2024-10-28 22:07:35 +00:00
ace03a6654 Include the copyright notice in spec files
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m52s
Run unit tests / unit_tests (pull_request) Successful in 2m50s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 42m16s
2024-10-28 23:04:10 +01:00
253d6b0591 Add copyright notice
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 1m52s
Run unit tests / unit_tests (pull_request) Successful in 3m32s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 43m38s
2024-10-28 22:02:49 +00:00
0fb50ea59b Expose expense summary endpoint
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 58s
Run unit tests / unit_tests (pull_request) Successful in 3m55s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 43m42s
2024-10-28 23:01:46 +01:00
6c1bf75db8 Include guest count in the summary 2024-10-28 23:01:00 +01:00
d8884704d8 Implement query to get total expense summary 2024-10-28 22:57:03 +01:00
6eb2f858a3 Write tests for the totals query 2024-10-28 22:38:47 +01:00
e4dbbc78b7 Merge pull request 'Configure license and automated copyright notices' (#74) from license into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 1m51s
Build Nginx-based docker image / build-static-assets (push) Successful in 20m7s
Reviewed-on: #74
2024-10-27 22:14:47 +00:00
b7cabc1661 Add copyright notice
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 3m21s
Run unit tests / unit_tests (pull_request) Successful in 2m49s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 31m54s
2024-10-27 21:42:45 +00:00
f3172bb38f Configure license and automated copyright notices
All checks were successful
Add copyright notice / copyright_notice (pull_request) Successful in 2m51s
Run unit tests / unit_tests (pull_request) Successful in 5m45s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 39m50s
2024-10-27 22:30:04 +01:00
597a4a6b9c Merge pull request 'Feature: Allow changing the status of guests in bulk' (#71) from bulk-status-changes into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 3m11s
Build Nginx-based docker image / build-static-assets (push) Successful in 51m17s
Reviewed-on: #71
2024-10-27 19:45:53 +00:00
b4a30be77e Merge pull request 'Include an additional tentative status' (#73) from tentative-status into main
Some checks failed
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Run unit tests / unit_tests (push) Has been cancelled
Reviewed-on: #73
2024-10-27 19:43:46 +00:00
5ddcd780f0 Merge pull request 'Order guests consistently within the same group' (#72) from consistent-guest-order into main
Some checks failed
Run unit tests / unit_tests (push) Successful in 4m10s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #72
2024-10-27 19:36:21 +00:00
7338bbf0a8 Include an additional tentative status
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 7m14s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 57m52s
2024-10-27 19:25:24 +01:00
6219b74cb7 Order guests consistently within the same group
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 5m34s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 1h19m42s
2024-10-27 19:13:32 +01:00
b8dfcf326f Implement the actual status update
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 1m8s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 58m54s
2024-10-27 19:01:12 +01:00
9dc6dd3983 Update dependency ruby to v3.3.5 (#56)
All checks were successful
Run unit tests / unit_tests (push) Successful in 2m21s
Build Nginx-based docker image / build-static-assets (push) Successful in 21m4s
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ruby](https://www.ruby-lang.org) ([source](https://github.com/ruby/ruby)) | patch | `3.3.4` -> `3.3.5` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC42NC4xIiwidXBkYXRlZEluVmVyIjoiMzguNjQuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIl19-->

Co-authored-by: Renovate Bot <renovate@bustikiller.com>
Reviewed-on: #56
Co-authored-by: Manuel Bustillo <bustikiller@bustikiller.com>
Co-committed-by: Manuel Bustillo <bustikiller@bustikiller.com>
2024-10-27 17:36:40 +00:00
a0de5eb663 Define nginx configuration file (#70)
Some checks failed
Run unit tests / unit_tests (push) Successful in 3m0s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
Reviewed-on: #70
Co-authored-by: Manuel Bustillo <bustikiller@bustikiller.com>
Co-committed-by: Manuel Bustillo <bustikiller@bustikiller.com>
2024-10-27 17:10:11 +00:00
507d068459 Configure endpoint to support bulk updates
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 6m0s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 28m5s
2024-10-27 14:03:13 +01:00
Renovate Bot
50cc31a3cd Update dependency pg to v1.5.9
Some checks failed
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 1h7m59s
Run unit tests / unit_tests (pull_request) Successful in 42s
Run unit tests / unit_tests (push) Successful in 1m15s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
2024-10-25 22:12:26 +00:00
Renovate Bot
36d79b26f5 Update dependency rails to v7.2.1.2
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 3m4s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 1h12m52s
Run unit tests / unit_tests (push) Successful in 3m19s
Build Nginx-based docker image / build-static-assets (push) Successful in 22m24s
2024-10-24 22:07:40 +00:00
51b16e225a Merge pull request 'Update dependency rspec-rails to v7' (#55) from renovate/rspec-rails-7.x into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 1m18s
Build Nginx-based docker image / build-static-assets (push) Successful in 29m9s
Reviewed-on: #55
2024-10-21 09:33:59 +00:00
Renovate Bot
94a232ebb4 Update dependency rspec-rails to v7
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 3m57s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 30m18s
2024-10-20 22:10:18 +00:00
Renovate Bot
1c25cc5363 Update dependency faker to v3.5.1
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 8m14s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 1h38m39s
Run unit tests / unit_tests (push) Successful in 4m12s
Build Nginx-based docker image / build-static-assets (push) Successful in 23m53s
2024-10-19 22:10:25 +00:00
Renovate Bot
b076f8423b Update dependency turbo-rails to v2.0.11
Some checks failed
Run unit tests / unit_tests (pull_request) Successful in 5m51s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 54m54s
Run unit tests / unit_tests (push) Successful in 11m12s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
2024-10-18 22:08:39 +00:00
Renovate Bot
c017e12cce Update dependency importmap-rails to v2.0.3
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 4m18s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 44m57s
Run unit tests / unit_tests (push) Successful in 3m7s
Build Nginx-based docker image / build-static-assets (push) Successful in 22m35s
2024-10-16 22:04:49 +00:00
Renovate Bot
26dc4d1d16 Update dependency rubocop to v1.67.0
All checks were successful
Run unit tests / unit_tests (push) Successful in 6m23s
Build Nginx-based docker image / build-static-assets (push) Successful in 31m3s
2024-10-15 23:17:34 +00:00
Renovate Bot
2ac0d53d58 Update dependency rails to v7.2.1.1
Some checks failed
Run unit tests / unit_tests (pull_request) Successful in 2m55s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 58m59s
Run unit tests / unit_tests (push) Successful in 3m50s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
2024-10-15 22:07:02 +00:00
Renovate Bot
1ffb884e16 Update dependency puma to v6.4.3
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 5m7s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 56m15s
Run unit tests / unit_tests (push) Successful in 5m44s
Build Nginx-based docker image / build-static-assets (push) Successful in 22m6s
2024-10-07 22:05:08 +00:00
Renovate Bot
c4fea2c928 Update dependency importmap-rails to v2.0.2
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 13m31s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 2h24m20s
Run unit tests / unit_tests (push) Successful in 8m43s
Build Nginx-based docker image / build-static-assets (push) Successful in 1h9m15s
2024-10-06 22:08:26 +00:00
Renovate Bot
da05d24e7b Update dependency pg to v1.5.8
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 10m56s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 1h10m42s
Run unit tests / unit_tests (push) Successful in 4m37s
Build Nginx-based docker image / build-static-assets (push) Successful in 23m38s
2024-09-21 22:08:43 +00:00
Renovate Bot
c233b4bb27 Update dependency rubocop to v1.66.1
All checks were successful
Run unit tests / unit_tests (push) Successful in 10m57s
Build Nginx-based docker image / build-static-assets (push) Successful in 28m28s
2024-09-21 01:41:12 +00:00
Renovate Bot
ecab72dc6f Update dependency jbuilder to v2.13.0
Some checks failed
Run unit tests / unit_tests (pull_request) Successful in 4m3s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 1h8m30s
Run unit tests / unit_tests (push) Successful in 2m48s
Build Nginx-based docker image / build-static-assets (push) Has been cancelled
2024-09-20 22:21:02 +00:00
Renovate Bot
613344790b Update dependency turbo-rails to v2.0.9
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 2m54s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 1h8m15s
Run unit tests / unit_tests (push) Successful in 7m14s
Build Nginx-based docker image / build-static-assets (push) Successful in 1h52m43s
2024-09-20 20:13:39 +00:00
f43dbf0570 Merge pull request 'Match image name with repo name' (#58) from refactor-registry into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 1m22s
Build Nginx-based docker image / build-static-assets (push) Successful in 21m40s
Reviewed-on: #58
2024-09-07 14:29:37 +00:00
b4d80deeac Match image name with repo name
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 11m22s
Build Nginx-based docker image / build-static-assets (pull_request) Successful in 31m10s
2024-09-07 15:58:14 +02:00
Renovate Bot
0fa00b8521 Update dependency rails to '~> 7.2.0', '>= 7.2.1'
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 5m59s
Build docker image / build-static-assets (pull_request) Successful in 39m21s
Run unit tests / unit_tests (push) Successful in 4m28s
Build docker image / build-static-assets (push) Successful in 1h26m1s
2024-08-31 09:02:52 +00:00
Renovate Bot
4078b50cac Update dependency rspec-rails to v6.1.4
Some checks failed
Run unit tests / unit_tests (push) Successful in 1m44s
Build docker image / build-static-assets (push) Successful in 16m52s
Build docker image / build-static-assets (pull_request) Has been cancelled
Run unit tests / unit_tests (pull_request) Has been cancelled
renovate/artifacts Artifact file update failure
2024-08-29 18:02:30 +00:00
a9bd326df1 Merge pull request 'Update dependency acts-as-taggable-on to v11' (#48) from renovate/acts-as-taggable-on-11.x-lockfile into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 1m5s
Build docker image / build-static-assets (push) Successful in 15m56s
Reviewed-on: #48
2024-08-23 12:09:53 +00:00
Renovate Bot
c2a1aa5186 Update dependency acts-as-taggable-on to v11
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 1m31s
Build docker image / build-static-assets (pull_request) Successful in 16m4s
2024-08-23 10:02:21 +00:00
Renovate Bot
55486887b6 Update dependency redis to v5.3.0
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 10m14s
Build docker image / build-static-assets (pull_request) Successful in 1h31m56s
Run unit tests / unit_tests (push) Successful in 2m43s
Build docker image / build-static-assets (push) Successful in 21m17s
2024-08-21 08:04:18 +00:00
Renovate Bot
372bf7457b Update dependency stimulus-rails to v1.3.4
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 3m54s
Build docker image / build-static-assets (pull_request) Successful in 30m30s
Run unit tests / unit_tests (push) Successful in 1m5s
Build docker image / build-static-assets (push) Successful in 18m7s
2024-08-17 00:03:14 +00:00
Renovate Bot
fe6794ebc6 Update dependency rubytree to v2.1.0
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 4m55s
Build docker image / build-static-assets (pull_request) Successful in 51m4s
Run unit tests / unit_tests (push) Successful in 3m3s
Build docker image / build-static-assets (push) Successful in 1h2m7s
2024-08-12 23:03:46 +00:00
cd4866a476 Merge pull request 'Update docker/build-push-action action to v6' (#44) from renovate/docker-build-push-action-6.x into main
Some checks failed
Run unit tests / unit_tests (push) Successful in 2m20s
Build docker image / build-static-assets (push) Failing after 2h41m8s
Reviewed-on: #44
2024-08-12 11:50:28 +00:00
Renovate Bot
aa59cae9c9 Update docker/build-push-action action to v6
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 6m7s
Build docker image / build-static-assets (pull_request) Successful in 50m42s
2024-08-12 10:02:48 +00:00
812f1171b4 Merge pull request 'Add CI step to build docker image' (#40) from docker into main
Some checks failed
Run unit tests / unit_tests (push) Successful in 9m46s
Build docker image / build-static-assets (push) Failing after 1h10m51s
Reviewed-on: #40
2024-08-12 08:21:37 +00:00
Renovate Bot
01d22f32d2 Update dependency csv to v3.3.0
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 3m28s
Run unit tests / unit_tests (push) Successful in 7m43s
2024-08-11 23:16:01 +00:00
c28295c018 Merge pull request 'Install CSV as a gem instead of from stdlib' (#41) from csv-warning into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 24m28s
Reviewed-on: #41
2024-08-11 23:01:29 +00:00
7e16000833 Install CSV as a gem instead of from stdlib
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 14m23s
2024-08-11 23:09:07 +02:00
44274fddca Install nodejs to povide a javascript runtime environment
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 11m33s
Build docker image / build-static-assets (pull_request) Successful in 58m44s
2024-08-11 23:08:10 +02:00
6b3bea9985 Add CI step to build docker image
Some checks failed
Run unit tests / unit_tests (pull_request) Successful in 11m41s
Build docker image / build-static-assets (pull_request) Has been cancelled
2024-08-11 22:57:03 +02:00
071b721d0a Merge pull request 'Include confirmation status' (#39) from feature/confirmation-status into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 1m54s
Reviewed-on: #39
2024-08-11 17:27:14 +00:00
cb42b86136 Include confirmation status
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 2m39s
2024-08-11 19:24:24 +02:00
10c460aee8 Merge pull request 'remove-acts-as-taggable' (#38) from remove-acts-as-taggable into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 2m45s
Reviewed-on: #38
2024-08-11 17:23:27 +00:00
c177131672 Fix factories
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 2m12s
2024-08-11 18:59:27 +02:00
de93ffb643 Return number of guests per group 2024-08-11 18:56:38 +02:00
cca869a0c4 Display group name in the list of guests
Some checks failed
Run unit tests / unit_tests (pull_request) Failing after 1m8s
2024-08-11 18:25:12 +02:00
b18f526c78 Add rubocop as dev dependency 2024-08-11 17:47:32 +02:00
792f63ffa7 Merge pull request 'groups-structure' (#36) from groups-structure into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 53s
Reviewed-on: #36
2024-08-11 15:29:57 +00:00
cc45b4c16e Define a hierarchy of groups
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 1m35s
2024-08-11 17:26:43 +02:00
3bc7a0c58b Create model and controller 2024-08-11 16:29:10 +02:00
bd4e197cd3 Merge pull request 'Use jsonapi-rails to serialize API responses' (#35) from serialize-users into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 1m27s
Reviewed-on: #35
2024-08-11 14:23:36 +00:00
716b819de2 Use jsonapi-rails to serialize API responses
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 3m17s
2024-08-11 16:19:54 +02:00
7592479b38 Merge pull request 'Update dependency rspec-rails to v6.1.3' (#33) from renovate/rspec-rails-6.x-lockfile into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 3m10s
Reviewed-on: #33
2024-08-10 18:20:07 +00:00
Renovate Bot
bab0aacadc Update dependency rspec-rails to v6.1.3
Some checks failed
renovate/artifacts Artifact file update failure
Run unit tests / unit_tests (pull_request) Successful in 6m18s
2024-08-10 18:02:38 +00:00
8236f167a4 Merge pull request 'Update renovate.json' (#30) from bustikiller-patch-1 into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 2m30s
Reviewed-on: #30
2024-08-10 08:31:34 +00:00
32d796aa30 Update renovate.json
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 3m17s
2024-08-10 08:28:09 +00:00
5fbebbcec2 Merge pull request 'Remove dangling containers after failed execution' (#28) from remove-dangling-containers into main
All checks were successful
Run unit tests / unit_tests (push) Successful in 2m50s
Reviewed-on: #28
2024-08-09 18:25:11 +00:00
56852a8109 Remove dangling containers after failed execution
All checks were successful
Run unit tests / unit_tests (pull_request) Successful in 9m4s
2024-08-09 20:15:41 +02:00
186 changed files with 5981 additions and 1135 deletions

58
.annotaterb.yml Normal file
View File

@ -0,0 +1,58 @@
---
:position: before
:position_in_additional_file_patterns: before
:position_in_class: before
:position_in_factory: before
:position_in_fixture: before
:position_in_routes: before
:position_in_serializer: before
:position_in_test: before
:classified_sort: true
:exclude_controllers: true
:exclude_factories: true
:exclude_fixtures: false
:exclude_helpers: true
:exclude_scaffolds: true
:exclude_serializers: false
:exclude_sti_subclasses: false
:exclude_tests: true
:force: false
:format_markdown: false
:format_rdoc: false
:format_yard: false
:frozen: false
:ignore_model_sub_dir: false
:ignore_unknown_models: false
:include_version: false
:show_check_constraints: false
:show_complete_foreign_keys: false
:show_foreign_keys: true
:show_indexes: true
:simple_indexes: false
:sort: false
:timestamp: false
:trace: false
:with_comment: true
:with_column_comments: true
:with_table_comments: true
:active_admin: false
:command:
:debug: false
:hide_default_column_types: ''
:hide_limit_column_types: ''
:ignore_columns:
:ignore_routes:
:models: true
:routes: false
:skip_on_db_migrate: false
:target_action: :do_annotations
:wrapper:
:wrapper_close:
:wrapper_open:
:classes_default_to_s: []
:additional_file_patterns: []
:model_dir:
- app/models
:require: []
:root_dir:
- ''

View File

@ -35,3 +35,4 @@
/app/assets/builds/* /app/assets/builds/*
!/app/assets/builds/.keep !/app/assets/builds/.keep
/public/assets /public/assets
.docker-compose.yml

View File

@ -0,0 +1,46 @@
name: Build Nginx-based docker image
on:
push:
branches:
- main
pull_request:
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
build-static-assets:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to the private Docker registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.PRIVATE_REGISTRY_HOST }}
username: ${{ secrets.PRIVATE_REGISTRY_USERNAME }}
password: ${{ secrets.PRIVATE_REGISTRY_TOKEN }}
- name: Build and push intermediate stages (build)
uses: docker/build-push-action@v6
with:
context: .
target: build
push: ${{ github.ref == 'refs/heads/main' }}
tags: ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:build
cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:build
cache-to: type=inline
- name: Build and push (final)
uses: docker/build-push-action@v6
with:
context: .
push: ${{ github.ref == 'refs/heads/main' }}
tags: ${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:latest
cache-from: type=registry,ref=${{ secrets.PRIVATE_REGISTRY_HOST }}/${{ env.GITHUB_REPOSITORY }}:latest
cache-to: type=inline

View File

@ -0,0 +1,39 @@
name: Add copyright notice
on:
pull_request:
permissions:
contents: write
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
copyright_notice:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.ACTIONS_TOKEN }}
ref: ${{ github.head_ref }}
- uses: VinnyBabuManjaly/copyright-action@v1.0.0
with:
CopyrightString: '# Copyright (C) 2024 Manuel Bustillo\n\n'
FileType: '.rb'
Path: 'app/, config/, db/, spec/'
- uses: VinnyBabuManjaly/copyright-action@v1.0.0
with:
CopyrightString: '<%# Copyright (C) 2024 Manuel Bustillo %>\n\n'
FileType: '.erb'
Path: 'app/'
- name: Commit changes
run: |
git config --local user.email "bustikiller@bustikiller.com"
git config --local user.name "Manuel Bustillo"
git add .
if [ -n "$(git status --porcelain)" ]; then
echo "there are changes";
git commit -m "Add copyright notice"
git push
else
echo "no changes";
fi

View File

@ -0,0 +1,21 @@
name: Check usage of free licenses
on:
push:
branches:
- main
pull_request:
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
check-licenses:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- uses: ruby/setup-ruby@v1.207.0
- name: Install project dependencies
run: bundle install --jobs `getconf _NPROCESSORS_ONLN`
- name: Run license finder
run: license_finder

View File

@ -4,6 +4,9 @@ on:
branches: branches:
- main - main
pull_request: pull_request:
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs: jobs:
unit_tests: unit_tests:
runs-on: ubuntu-latest runs-on: ubuntu-latest
@ -19,8 +22,9 @@ jobs:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
token: ${{ secrets.GITHUB_TOKEN }} token: ${{ secrets.GITHUB_TOKEN }}
- uses: ruby/setup-ruby@v1 - uses: ruby/setup-ruby@v1.207.0
- run: bundle install - run: bundle install
- run: bundle exec rubocop --force-exclusion --parallel
- name: Wait until Postgres is ready to accept connections - name: Wait until Postgres is ready to accept connections
run: | run: |
apt-get update && apt-get install -f -y postgresql-client apt-get update && apt-get install -f -y postgresql-client
@ -35,3 +39,6 @@ jobs:
env: env:
RAILS_ENV: test RAILS_ENV: test
DATABASE_URL: postgres://postgres:postgres@postgres:5432/postgres DATABASE_URL: postgres://postgres:postgres@postgres:5432/postgres
- name: Clean up containers generated by this flow
if: failure()
run: docker ps --filter network=$JOB_CONTAINER_NAME-$GITHUB_JOB-network --filter name=$JOB_CONTAINER_NAME-* --format "{{.ID}}" | xargs docker rm -f

3
.gitignore vendored
View File

@ -33,3 +33,6 @@
# Ignore master key for decrypting credentials and more. # Ignore master key for decrypting credentials and more.
/config/master.key /config/master.key
# Ignore swagger generated documentation
swagger/v1/swagger.yaml

29
.rubocop.yml Normal file
View File

@ -0,0 +1,29 @@
require:
- rubocop-rails
- rubocop-factory_bot
- rubocop-rspec
- rubocop-rspec_rails
AllCops:
NewCops: enable
Exclude:
- 'db/**/*'
- 'config/**/*'
- 'script/**/*'
- 'bin/*'
- '*.yml'
Layout/LineLength:
Max: 120
RSpec/ExampleLength:
Enabled: false
Metrics/ModuleLength:
Enabled: false
RSpec/MultipleMemoizedHelpers:
Enabled: false
Style/Documentation:
Enabled: false
Metrics/MethodLength:
Max: 20
Rails/SkipsModelValidations:
Enabled: false
Metrics/AbcSize:
Enabled: false

View File

@ -1 +1 @@
ruby-3.3.4 ruby-3.4.1

660
COPYING.md Normal file
View File

@ -0,0 +1,660 @@
# GNU AFFERO GENERAL PUBLIC LICENSE
Version 3, 19 November 2007
Copyright (C) 2007 Free Software Foundation, Inc.
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
## Preamble
The GNU Affero General Public License is a free, copyleft license for
software and other kinds of works, specifically designed to ensure
cooperation with the community in the case of network server software.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
our General Public Licenses are intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains
free software for all its users.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
Developers that use our General Public Licenses protect your rights
with two steps: (1) assert copyright on the software, and (2) offer
you this License which gives you legal permission to copy, distribute
and/or modify the software.
A secondary benefit of defending all users' freedom is that
improvements made in alternate versions of the program, if they
receive widespread use, become available for other developers to
incorporate. Many developers of free software are heartened and
encouraged by the resulting cooperation. However, in the case of
software used on network servers, this result may fail to come about.
The GNU General Public License permits making a modified version and
letting the public access it on a server without ever releasing its
source code to the public.
The GNU Affero General Public License is designed specifically to
ensure that, in such cases, the modified source code becomes available
to the community. It requires the operator of a network server to
provide the source code of the modified version running there to the
users of that server. Therefore, public use of a modified version, on
a publicly accessible server, gives the public access to the source
code of the modified version.
An older license, called the Affero General Public License and
published by Affero, was designed to accomplish similar goals. This is
a different license, not a version of the Affero GPL, but Affero has
released a new version of the Affero GPL which permits relicensing
under this license.
The precise terms and conditions for copying, distribution and
modification follow.
## TERMS AND CONDITIONS
### 0. Definitions.
"This License" refers to version 3 of the GNU Affero General Public
License.
"Copyright" also means copyright-like laws that apply to other kinds
of works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of
an exact copy. The resulting work is called a "modified version" of
the earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user
through a computer network, with no transfer of a copy, is not
conveying.
An interactive user interface displays "Appropriate Legal Notices" to
the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
### 1. Source Code.
The "source code" for a work means the preferred form of the work for
making modifications to it. "Object code" means any non-source form of
a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users can
regenerate automatically from other parts of the Corresponding Source.
The Corresponding Source for a work in source code form is that same
work.
### 2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not convey,
without conditions so long as your license otherwise remains in force.
You may convey covered works to others for the sole purpose of having
them make modifications exclusively for you, or provide you with
facilities for running those works, provided that you comply with the
terms of this License in conveying all material for which you do not
control copyright. Those thus making or running the covered works for
you must do so exclusively on your behalf, under your direction and
control, on terms that prohibit them from making any copies of your
copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under the
conditions stated below. Sublicensing is not allowed; section 10 makes
it unnecessary.
### 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such
circumvention is effected by exercising rights under this License with
respect to the covered work, and you disclaim any intention to limit
operation or modification of the work as a means of enforcing, against
the work's users, your or third parties' legal rights to forbid
circumvention of technological measures.
### 4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
### 5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these
conditions:
- a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
- b) The work must carry prominent notices stating that it is
released under this License and any conditions added under
section 7. This requirement modifies the requirement in section 4
to "keep intact all notices".
- c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
- d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
### 6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms of
sections 4 and 5, provided that you also convey the machine-readable
Corresponding Source under the terms of this License, in one of these
ways:
- a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
- b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the Corresponding
Source from a network server at no charge.
- c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
- d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
- e) Convey the object code using peer-to-peer transmission,
provided you inform other peers where the object code and
Corresponding Source of the work are being offered to the general
public at no charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal,
family, or household purposes, or (2) anything designed or sold for
incorporation into a dwelling. In determining whether a product is a
consumer product, doubtful cases shall be resolved in favor of
coverage. For a particular product received by a particular user,
"normally used" refers to a typical or common use of that class of
product, regardless of the status of the particular user or of the way
in which the particular user actually uses, or expects or is expected
to use, the product. A product is a consumer product regardless of
whether the product has substantial commercial, industrial or
non-consumer uses, unless such uses represent the only significant
mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to
install and execute modified versions of a covered work in that User
Product from a modified version of its Corresponding Source. The
information must suffice to ensure that the continued functioning of
the modified object code is in no case prevented or interfered with
solely because modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or
updates for a work that has been modified or installed by the
recipient, or for the User Product in which it has been modified or
installed. Access to a network may be denied when the modification
itself materially and adversely affects the operation of the network
or violates the rules and protocols for communication across the
network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
### 7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders
of that material) supplement the terms of this License with terms:
- a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
- b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
- c) Prohibiting misrepresentation of the origin of that material,
or requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
- d) Limiting the use for publicity purposes of names of licensors
or authors of the material; or
- e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
- f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions
of it) with contractual assumptions of liability to the recipient,
for any liability that these contractual assumptions directly
impose on those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions; the
above requirements apply either way.
### 8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your license
from a particular copyright holder is reinstated (a) provisionally,
unless and until the copyright holder explicitly and finally
terminates your license, and (b) permanently, if the copyright holder
fails to notify you of the violation by some reasonable means prior to
60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
### 9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or run
a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
### 10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
### 11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims owned
or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within the
scope of its coverage, prohibits the exercise of, or is conditioned on
the non-exercise of one or more of the rights that are specifically
granted under this License. You may not convey a covered work if you
are a party to an arrangement with a third party that is in the
business of distributing software, under which you make payment to the
third party based on the extent of your activity of conveying the
work, and under which the third party grants, to any of the parties
who would receive the covered work from you, a discriminatory patent
license (a) in connection with copies of the covered work conveyed by
you (or copies made from those copies), or (b) primarily for and in
connection with specific products or compilations that contain the
covered work, unless you entered into that arrangement, or that patent
license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
### 12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under
this License and any other pertinent obligations, then as a
consequence you may not convey it at all. For example, if you agree to
terms that obligate you to collect a royalty for further conveying
from those to whom you convey the Program, the only way you could
satisfy both those terms and this License would be to refrain entirely
from conveying the Program.
### 13. Remote Network Interaction; Use with the GNU General Public License.
Notwithstanding any other provision of this License, if you modify the
Program, your modified version must prominently offer all users
interacting with it remotely through a computer network (if your
version supports such interaction) an opportunity to receive the
Corresponding Source of your version by providing access to the
Corresponding Source from a network server at no charge, through some
standard or customary means of facilitating copying of software. This
Corresponding Source shall include the Corresponding Source for any
work covered by version 3 of the GNU General Public License that is
incorporated pursuant to the following paragraph.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the work with which it is combined will remain governed by version
3 of the GNU General Public License.
### 14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Affero General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies that a certain numbered version of the GNU Affero General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU Affero General Public License, you may choose any version ever
published by the Free Software Foundation.
If the Program specifies that a proxy can decide which future versions
of the GNU Affero General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
### 15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT
WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND
PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
CORRECTION.
### 16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR
CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT
NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR
LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM
TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER
PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
### 17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
## How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these
terms.
To do so, attach the following notices to the program. It is safest to
attach them to the start of each source file to most effectively state
the exclusion of warranty; and each file should have at least the
"copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as
published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper
mail.
If your software can interact with users remotely through a computer
network, you should also make sure that it provides a way for users to
get its source. For example, if your program is a web application, its
interface could display a "Source" link that leads users to an archive
of the code. There are many ways you could offer source, and different
solutions will be better for different programs; see section 13 for
the specific requirements.
You should also get your employer (if you work as a programmer) or
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. For more information on this, and how to apply and follow
the GNU AGPL, see <https://www.gnu.org/licenses/>.

View File

@ -1,8 +1,8 @@
# syntax = docker/dockerfile:1 # syntax = docker/dockerfile:1
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile # Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.2.0 ARG RUBY_VERSION=3.4.1
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim as base FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim AS base
# Rails app lives here # Rails app lives here
WORKDIR /rails WORKDIR /rails
@ -13,13 +13,14 @@ ENV RAILS_ENV="production" \
BUNDLE_PATH="/usr/local/bundle" \ BUNDLE_PATH="/usr/local/bundle" \
BUNDLE_WITHOUT="development" BUNDLE_WITHOUT="development"
RUN apt-get update && apt-get install -y nodejs
# Throw-away build stage to reduce size of final image # Throw-away build stage to reduce size of final image
FROM base as build FROM base AS build
# Install packages needed to build gems # Install packages needed to build gems
RUN apt-get update -qq && \ RUN apt-get update -qq && \
apt-get install --no-install-recommends -y build-essential git libpq-dev libvips pkg-config apt-get install --no-install-recommends -y build-essential git libpq-dev libvips pkg-config libyaml-dev
# Install application gems # Install application gems
COPY Gemfile Gemfile.lock ./ COPY Gemfile Gemfile.lock ./

42
Dockerfile.dev Normal file
View File

@ -0,0 +1,42 @@
# syntax = docker/dockerfile:1
# Make sure RUBY_VERSION matches the Ruby version in .ruby-version and Gemfile
ARG RUBY_VERSION=3.4.1
FROM registry.docker.com/library/ruby:$RUBY_VERSION-slim as base
# Rails app lives here
WORKDIR /rails
RUN apt-get update && apt-get install -y nodejs
FROM base as build
# Install packages needed to build gems
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y build-essential git libpq-dev libvips pkg-config libyaml-dev
# Install application gems
COPY Gemfile Gemfile.lock ./
RUN bundle install
# Copy application code
COPY . .
# Final stage for app image
FROM base
# Install packages needed for deployment
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y curl libvips postgresql-client && \
rm -rf /var/lib/apt/lists /var/cache/apt/archives
# Copy built artifacts: gems, application
COPY --from=build /usr/local/bundle /usr/local/bundle
COPY --from=build /rails /rails
# Entrypoint prepares the database.
ENTRYPOINT ["/rails/bin/docker-entrypoint"]
# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD ["./bin/rails", "server", "--binding=0.0.0.0"]

99
Gemfile
View File

@ -1,70 +1,53 @@
source "https://rubygems.org" # frozen_string_literal: true
ruby "3.3.4" source 'https://rubygems.org'
# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main" ruby '3.4.1'
gem "rails", "~> 7.1.3", ">= 7.1.3.2" gem 'bootsnap', require: false
gem 'csv'
gem 'importmap-rails'
gem 'jbuilder'
gem 'money'
gem 'pg', '~> 1.1'
gem 'puma', '>= 5.0'
gem 'rails', '~> 8.0.0', '>= 8.0.0'
gem 'redis', '>= 4.0.1'
gem 'sprockets-rails'
gem 'stimulus-rails'
gem 'turbo-rails'
gem 'tzinfo-data', platforms: %i[windows jruby]
# The original asset pipeline for Rails [https://github.com/rails/sprockets-rails] gem 'acts_as_tenant'
gem "sprockets-rails" gem 'faker'
gem 'httparty'
# Use postgresql as the database for Active Record gem 'jsonapi-rails'
gem "pg", "~> 1.1" gem 'pluck_to_hash'
gem 'rack-cors'
# Use the Puma web server [https://github.com/puma/puma] gem 'react-rails'
gem "puma", ">= 5.0" gem 'rswag'
gem 'rubytree'
# Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails]
gem "importmap-rails"
# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
gem "turbo-rails"
# Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev]
gem "stimulus-rails"
# Build JSON APIs with ease [https://github.com/rails/jbuilder]
gem "jbuilder"
# Use Redis adapter to run Action Cable in production
gem "redis", ">= 4.0.1"
# Use Kredis to get higher-level data types in Redis [https://github.com/rails/kredis]
# gem "kredis"
# Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword]
# gem "bcrypt", "~> 3.1.7"
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem "tzinfo-data", platforms: %i[ windows jruby ]
# Reduces boot times through caching; required in config/boot.rb
gem "bootsnap", require: false
# Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
# gem "image_processing", "~> 1.2"
group :development, :test do group :development, :test do
# See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem gem 'annotaterb'
gem "debug", platforms: %i[ mri windows ] gem 'debug', platforms: %i[mri windows]
gem 'rspec-rails', '~> 6.1.0' gem 'factory_bot_rails'
gem 'faker' gem 'license_finder'
gem 'pry' gem 'pry'
gem "factory_bot_rails" gem 'rspec-rails', '~> 7.1.0'
gem 'shoulda-matchers', '~> 6.0'
end end
group :development do group :development do
# Use console on exceptions pages [https://github.com/rails/web-console] gem 'letter_opener_web'
gem "web-console" gem 'rubocop'
gem 'rubocop-factory_bot', require: false
# Add speed badges [https://github.com/MiniProfiler/rack-mini-profiler] gem 'rubocop-rails', require: false
# gem "rack-mini-profiler" gem 'rubocop-rspec', require: false
gem 'rubocop-rspec_rails', require: false
# Speed up commands on slow machines / big apps [https://github.com/rails/spring] gem 'web-console'
# gem "spring"
end end
gem "money" gem 'chroma'
gem 'acts-as-taggable-on' gem 'solid_queue', '~> 1.0'
gem "rubytree" gem 'devise', '~> 4.9'

View File

@ -1,123 +1,183 @@
GEM GEM
remote: https://rubygems.org/ remote: https://rubygems.org/
specs: specs:
actioncable (7.1.3.4) actioncable (8.0.1)
actionpack (= 7.1.3.4) actionpack (= 8.0.1)
activesupport (= 7.1.3.4) activesupport (= 8.0.1)
nio4r (~> 2.0) nio4r (~> 2.0)
websocket-driver (>= 0.6.1) websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6) zeitwerk (~> 2.6)
actionmailbox (7.1.3.4) actionmailbox (8.0.1)
actionpack (= 7.1.3.4) actionpack (= 8.0.1)
activejob (= 7.1.3.4) activejob (= 8.0.1)
activerecord (= 7.1.3.4) activerecord (= 8.0.1)
activestorage (= 7.1.3.4) activestorage (= 8.0.1)
activesupport (= 7.1.3.4) activesupport (= 8.0.1)
mail (>= 2.7.1) mail (>= 2.8.0)
net-imap actionmailer (8.0.1)
net-pop actionpack (= 8.0.1)
net-smtp actionview (= 8.0.1)
actionmailer (7.1.3.4) activejob (= 8.0.1)
actionpack (= 7.1.3.4) activesupport (= 8.0.1)
actionview (= 7.1.3.4) mail (>= 2.8.0)
activejob (= 7.1.3.4)
activesupport (= 7.1.3.4)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
actionpack (7.1.3.4) actionpack (8.0.1)
actionview (= 7.1.3.4) actionview (= 8.0.1)
activesupport (= 7.1.3.4) activesupport (= 8.0.1)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
racc
rack (>= 2.2.4) rack (>= 2.2.4)
rack-session (>= 1.0.1) rack-session (>= 1.0.1)
rack-test (>= 0.6.3) rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6) rails-html-sanitizer (~> 1.6)
actiontext (7.1.3.4) useragent (~> 0.16)
actionpack (= 7.1.3.4) actiontext (8.0.1)
activerecord (= 7.1.3.4) actionpack (= 8.0.1)
activestorage (= 7.1.3.4) activerecord (= 8.0.1)
activesupport (= 7.1.3.4) activestorage (= 8.0.1)
activesupport (= 8.0.1)
globalid (>= 0.6.0) globalid (>= 0.6.0)
nokogiri (>= 1.8.5) nokogiri (>= 1.8.5)
actionview (7.1.3.4) actionview (8.0.1)
activesupport (= 7.1.3.4) activesupport (= 8.0.1)
builder (~> 3.1) builder (~> 3.1)
erubi (~> 1.11) erubi (~> 1.11)
rails-dom-testing (~> 2.2) rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6) rails-html-sanitizer (~> 1.6)
activejob (7.1.3.4) activejob (8.0.1)
activesupport (= 7.1.3.4) activesupport (= 8.0.1)
globalid (>= 0.3.6) globalid (>= 0.3.6)
activemodel (7.1.3.4) activemodel (8.0.1)
activesupport (= 7.1.3.4) activesupport (= 8.0.1)
activerecord (7.1.3.4) activerecord (8.0.1)
activemodel (= 7.1.3.4) activemodel (= 8.0.1)
activesupport (= 7.1.3.4) activesupport (= 8.0.1)
timeout (>= 0.4.0) timeout (>= 0.4.0)
activestorage (7.1.3.4) activestorage (8.0.1)
actionpack (= 7.1.3.4) actionpack (= 8.0.1)
activejob (= 7.1.3.4) activejob (= 8.0.1)
activerecord (= 7.1.3.4) activerecord (= 8.0.1)
activesupport (= 7.1.3.4) activesupport (= 8.0.1)
marcel (~> 1.0) marcel (~> 1.0)
activesupport (7.1.3.4) activesupport (8.0.1)
base64 base64
benchmark (>= 0.3)
bigdecimal bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2) concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5) connection_pool (>= 2.2.5)
drb drb
i18n (>= 1.6, < 2) i18n (>= 1.6, < 2)
logger (>= 1.4.2)
minitest (>= 5.1) minitest (>= 5.1)
mutex_m securerandom (>= 0.3)
tzinfo (~> 2.0) tzinfo (~> 2.0, >= 2.0.5)
acts-as-taggable-on (10.0.0) uri (>= 0.13.1)
activerecord (>= 6.1, < 7.2) acts_as_tenant (1.0.1)
rails (>= 6.0)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
annotaterb (4.13.0)
ast (2.4.2)
babel-source (5.8.35)
babel-transpiler (0.7.0)
babel-source (>= 4.0, < 6)
execjs (~> 2.0)
base64 (0.2.0) base64 (0.2.0)
bigdecimal (3.1.8) bcrypt (3.1.20)
benchmark (0.4.0)
bigdecimal (3.1.9)
bindex (0.8.1) bindex (0.8.1)
bootsnap (1.18.4) bootsnap (1.18.4)
msgpack (~> 1.2) msgpack (~> 1.2)
builder (3.3.0) builder (3.3.0)
childprocess (5.1.0)
logger (~> 1.5)
chroma (0.2.0)
coderay (1.1.3) coderay (1.1.3)
concurrent-ruby (1.3.3) concurrent-ruby (1.3.4)
connection_pool (2.4.1) connection_pool (2.4.1)
crass (1.0.6) crass (1.0.6)
date (3.3.4) csv (3.3.2)
debug (1.9.2) date (3.4.1)
debug (1.10.0)
irb (~> 1.10) irb (~> 1.10)
reline (>= 0.3.8) reline (>= 0.3.8)
devise (4.9.4)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0)
responders
warden (~> 1.2.3)
diff-lcs (1.5.1) diff-lcs (1.5.1)
drb (2.2.1) drb (2.2.1)
erubi (1.13.0) erubi (1.13.1)
et-orbi (1.2.11)
tzinfo
execjs (2.9.1)
factory_bot (6.4.6) factory_bot (6.4.6)
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
factory_bot_rails (6.4.3) factory_bot_rails (6.4.3)
factory_bot (~> 6.4) factory_bot (~> 6.4)
railties (>= 5.0.0) railties (>= 5.0.0)
faker (3.4.2) faker (3.5.1)
i18n (>= 1.8.11, < 2) i18n (>= 1.8.11, < 2)
fugit (1.11.1)
et-orbi (~> 1, >= 1.2.11)
raabro (~> 1.4)
globalid (1.2.1) globalid (1.2.1)
activesupport (>= 6.1) activesupport (>= 6.1)
i18n (1.14.5) httparty (0.22.0)
csv
mini_mime (>= 1.0.0)
multi_xml (>= 0.5.2)
i18n (1.14.6)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
importmap-rails (2.0.1) importmap-rails (2.1.0)
actionpack (>= 6.0.0) actionpack (>= 6.0.0)
activesupport (>= 6.0.0) activesupport (>= 6.0.0)
railties (>= 6.0.0) railties (>= 6.0.0)
io-console (0.7.2) io-console (0.8.0)
irb (1.14.0) irb (1.14.3)
rdoc (>= 4.0.0) rdoc (>= 4.0.0)
reline (>= 0.4.2) reline (>= 0.4.2)
jbuilder (2.12.0) jbuilder (2.13.0)
actionview (>= 5.0.0) actionview (>= 5.0.0)
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
json (2.7.2) json (2.9.1)
loofah (2.22.0) json-schema (5.0.1)
addressable (~> 2.8)
jsonapi-deserializable (0.2.0)
jsonapi-parser (0.1.1)
jsonapi-rails (0.4.1)
jsonapi-parser (~> 0.1.0)
jsonapi-rb (~> 0.5.0)
jsonapi-rb (0.5.0)
jsonapi-deserializable (~> 0.2.0)
jsonapi-serializable (~> 0.3.0)
jsonapi-renderer (0.2.2)
jsonapi-serializable (0.3.1)
jsonapi-renderer (~> 0.2.0)
language_server-protocol (3.17.0.3)
launchy (3.0.1)
addressable (~> 2.8)
childprocess (~> 5.0)
letter_opener (1.10.0)
launchy (>= 2.2, < 4)
letter_opener_web (3.0.0)
actionmailer (>= 6.1)
letter_opener (~> 1.9)
railties (>= 6.1)
rexml
license_finder (7.2.1)
bundler
csv (~> 3.2)
rubyzip (>= 1, < 3)
thor (~> 1.2)
tomlrb (>= 1.3, < 2.1)
with_env (= 1.1.0)
xml-simple (~> 1.1.9)
logger (1.6.5)
loofah (2.23.1)
crass (~> 1.0.2) crass (~> 1.0.2)
nokogiri (>= 1.12.0) nokogiri (>= 1.12.0)
mail (2.8.1) mail (2.8.1)
@ -126,14 +186,16 @@ GEM
net-pop net-pop
net-smtp net-smtp
marcel (1.0.4) marcel (1.0.4)
method_source (1.0.0) method_source (1.1.0)
mini_mime (1.1.5) mini_mime (1.1.5)
minitest (5.24.1) mini_portile2 (2.8.8)
minitest (5.25.4)
money (6.19.0) money (6.19.0)
i18n (>= 0.6.4, <= 2) i18n (>= 0.6.4, <= 2)
msgpack (1.7.2) msgpack (1.7.2)
mutex_m (0.2.0) multi_xml (0.7.1)
net-imap (0.4.14) bigdecimal (~> 3.1)
net-imap (0.5.2)
date date
net-protocol net-protocol
net-pop (0.1.2) net-pop (0.1.2)
@ -142,93 +204,169 @@ GEM
timeout timeout
net-smtp (0.5.0) net-smtp (0.5.0)
net-protocol net-protocol
nio4r (2.7.3) nio4r (2.7.4)
nokogiri (1.16.7-aarch64-linux) nokogiri (1.18.1)
mini_portile2 (~> 2.8.2)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.16.7-arm-linux) nokogiri (1.18.1-aarch64-linux-gnu)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.16.7-arm64-darwin) nokogiri (1.18.1-arm-linux-gnu)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.16.7-x86-linux) nokogiri (1.18.1-arm64-darwin)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.16.7-x86_64-darwin) nokogiri (1.18.1-x86_64-darwin)
racc (~> 1.4) racc (~> 1.4)
nokogiri (1.16.7-x86_64-linux) nokogiri (1.18.1-x86_64-linux-gnu)
racc (~> 1.4) racc (~> 1.4)
pg (1.5.7) orm_adapter (0.5.0)
pry (0.14.2) parallel (1.26.3)
parser (3.3.7.0)
ast (~> 2.4.1)
racc
pg (1.5.9)
pluck_to_hash (1.0.2)
activerecord (>= 4.0.2)
activesupport (>= 4.0.2)
pry (0.15.2)
coderay (~> 1.1) coderay (~> 1.1)
method_source (~> 1.0) method_source (~> 1.0)
psych (5.1.2) psych (5.2.2)
date
stringio stringio
puma (6.4.2) public_suffix (6.0.1)
puma (6.5.0)
nio4r (~> 2.0) nio4r (~> 2.0)
raabro (1.4.0)
racc (1.8.1) racc (1.8.1)
rack (3.1.7) rack (3.1.8)
rack-cors (2.0.2)
rack (>= 2.0.0)
rack-session (2.0.0) rack-session (2.0.0)
rack (>= 3.0.0) rack (>= 3.0.0)
rack-test (2.1.0) rack-test (2.1.0)
rack (>= 1.3) rack (>= 1.3)
rackup (2.1.0) rackup (2.2.1)
rack (>= 3) rack (>= 3)
webrick (~> 1.8) rails (8.0.1)
rails (7.1.3.4) actioncable (= 8.0.1)
actioncable (= 7.1.3.4) actionmailbox (= 8.0.1)
actionmailbox (= 7.1.3.4) actionmailer (= 8.0.1)
actionmailer (= 7.1.3.4) actionpack (= 8.0.1)
actionpack (= 7.1.3.4) actiontext (= 8.0.1)
actiontext (= 7.1.3.4) actionview (= 8.0.1)
actionview (= 7.1.3.4) activejob (= 8.0.1)
activejob (= 7.1.3.4) activemodel (= 8.0.1)
activemodel (= 7.1.3.4) activerecord (= 8.0.1)
activerecord (= 7.1.3.4) activestorage (= 8.0.1)
activestorage (= 7.1.3.4) activesupport (= 8.0.1)
activesupport (= 7.1.3.4)
bundler (>= 1.15.0) bundler (>= 1.15.0)
railties (= 7.1.3.4) railties (= 8.0.1)
rails-dom-testing (2.2.0) rails-dom-testing (2.2.0)
activesupport (>= 5.0.0) activesupport (>= 5.0.0)
minitest minitest
nokogiri (>= 1.6) nokogiri (>= 1.6)
rails-html-sanitizer (1.6.0) rails-html-sanitizer (1.6.2)
loofah (~> 2.21) loofah (~> 2.21)
nokogiri (~> 1.14) nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
railties (7.1.3.4) railties (8.0.1)
actionpack (= 7.1.3.4) actionpack (= 8.0.1)
activesupport (= 7.1.3.4) activesupport (= 8.0.1)
irb irb (~> 1.13)
rackup (>= 1.0.0) rackup (>= 1.0.0)
rake (>= 12.2) rake (>= 12.2)
thor (~> 1.0, >= 1.2.2) thor (~> 1.0, >= 1.2.2)
zeitwerk (~> 2.6) zeitwerk (~> 2.6)
rainbow (3.1.1)
rake (13.2.1) rake (13.2.1)
rdoc (6.7.0) rdoc (6.10.0)
psych (>= 4.0.0) psych (>= 4.0.0)
redis (5.2.0) react-rails (3.2.1)
babel-transpiler (>= 0.7.0)
connection_pool
execjs
railties (>= 3.2)
tilt
redis (5.3.0)
redis-client (>= 0.22.0) redis-client (>= 0.22.0)
redis-client (0.22.2) redis-client (0.22.2)
connection_pool connection_pool
reline (0.5.9) regexp_parser (2.10.0)
reline (0.6.0)
io-console (~> 0.5) io-console (~> 0.5)
rspec-core (3.12.3) responders (3.1.1)
rspec-support (~> 3.12.0) actionpack (>= 5.2)
rspec-expectations (3.12.4) railties (>= 5.2)
rexml (3.3.9)
rspec-core (3.13.2)
rspec-support (~> 3.13.0)
rspec-expectations (3.13.3)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.12.0) rspec-support (~> 3.13.0)
rspec-mocks (3.12.7) rspec-mocks (3.13.2)
diff-lcs (>= 1.2.0, < 2.0) diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.12.0) rspec-support (~> 3.13.0)
rspec-rails (6.1.1) rspec-rails (7.1.0)
actionpack (>= 6.1) actionpack (>= 7.0)
activesupport (>= 6.1) activesupport (>= 7.0)
railties (>= 6.1) railties (>= 7.0)
rspec-core (~> 3.12) rspec-core (~> 3.13)
rspec-expectations (~> 3.12) rspec-expectations (~> 3.13)
rspec-mocks (~> 3.12) rspec-mocks (~> 3.13)
rspec-support (~> 3.12) rspec-support (~> 3.13)
rspec-support (3.12.2) rspec-support (3.13.1)
rubytree (2.0.3) rswag (2.16.0)
json (~> 2.0, > 2.3.1) rswag-api (= 2.16.0)
rswag-specs (= 2.16.0)
rswag-ui (= 2.16.0)
rswag-api (2.16.0)
activesupport (>= 5.2, < 8.1)
railties (>= 5.2, < 8.1)
rswag-specs (2.16.0)
activesupport (>= 5.2, < 8.1)
json-schema (>= 2.2, < 6.0)
railties (>= 5.2, < 8.1)
rspec-core (>= 2.14)
rswag-ui (2.16.0)
actionpack (>= 5.2, < 8.1)
railties (>= 5.2, < 8.1)
rubocop (1.70.0)
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 (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.36.2, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.37.0)
parser (>= 3.3.1.0)
rubocop-factory_bot (2.26.1)
rubocop (~> 1.61)
rubocop-rails (2.29.0)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.52.0, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rspec (3.4.0)
rubocop (~> 1.61)
rubocop-rspec_rails (2.30.0)
rubocop (~> 1.61)
rubocop-rspec (~> 3, >= 3.0.1)
ruby-progressbar (1.13.0)
rubytree (2.1.1)
json (~> 2.0, > 2.9)
rubyzip (2.3.2)
securerandom (0.4.1)
shoulda-matchers (6.4.0)
activesupport (>= 5.2.0)
solid_queue (1.1.2)
activejob (>= 7.1)
activerecord (>= 7.1)
concurrent-ruby (>= 1.3.1)
fugit (~> 1.11.0)
railties (>= 7.1)
thor (~> 1.3.1)
sprockets (4.2.1) sprockets (4.2.1)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
rack (>= 2.2.4, < 4) rack (>= 2.2.4, < 4)
@ -236,27 +374,35 @@ GEM
actionpack (>= 6.1) actionpack (>= 6.1)
activesupport (>= 6.1) activesupport (>= 6.1)
sprockets (>= 3.0.0) sprockets (>= 3.0.0)
stimulus-rails (1.3.3) stimulus-rails (1.3.4)
railties (>= 6.0.0) railties (>= 6.0.0)
stringio (3.1.1) stringio (3.1.2)
thor (1.3.1) thor (1.3.2)
timeout (0.4.1) tilt (2.4.0)
turbo-rails (2.0.6) timeout (0.4.3)
tomlrb (2.0.3)
turbo-rails (2.0.11)
actionpack (>= 6.0.0) actionpack (>= 6.0.0)
activejob (>= 6.0.0)
railties (>= 6.0.0) railties (>= 6.0.0)
tzinfo (2.0.6) tzinfo (2.0.6)
concurrent-ruby (~> 1.0) concurrent-ruby (~> 1.0)
unicode-display_width (2.6.0)
uri (1.0.2)
useragent (0.16.11)
warden (1.2.9)
rack (>= 2.0.9)
web-console (4.2.1) web-console (4.2.1)
actionview (>= 6.0.0) actionview (>= 6.0.0)
activemodel (>= 6.0.0) activemodel (>= 6.0.0)
bindex (>= 0.4.0) bindex (>= 0.4.0)
railties (>= 6.0.0) railties (>= 6.0.0)
webrick (1.8.1)
websocket-driver (0.7.6) websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0) websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5) websocket-extensions (0.1.5)
zeitwerk (2.6.17) with_env (1.1.0)
xml-simple (1.1.9)
rexml
zeitwerk (2.7.1)
PLATFORMS PLATFORMS
aarch64-linux aarch64-linux
@ -267,29 +413,206 @@ PLATFORMS
x86_64-linux x86_64-linux
DEPENDENCIES DEPENDENCIES
acts-as-taggable-on acts_as_tenant
annotaterb
bootsnap bootsnap
chroma
csv
debug debug
devise (~> 4.9)
factory_bot_rails factory_bot_rails
faker faker
httparty
importmap-rails importmap-rails
jbuilder jbuilder
jsonapi-rails
letter_opener_web
license_finder
money money
pg (~> 1.1) pg (~> 1.1)
pluck_to_hash
pry pry
puma (>= 5.0) puma (>= 5.0)
rails (~> 7.1.3, >= 7.1.3.2) rack-cors
rails (~> 8.0.0, >= 8.0.0)
react-rails
redis (>= 4.0.1) redis (>= 4.0.1)
rspec-rails (~> 6.1.0) rspec-rails (~> 7.1.0)
rswag
rubocop
rubocop-factory_bot
rubocop-rails
rubocop-rspec
rubocop-rspec_rails
rubytree rubytree
shoulda-matchers (~> 6.0)
solid_queue (~> 1.0)
sprockets-rails sprockets-rails
stimulus-rails stimulus-rails
turbo-rails turbo-rails
tzinfo-data tzinfo-data
web-console web-console
CHECKSUMS
actioncable (8.0.1) sha256=808bff2a4e3aba36f66f0cd65d7a1579ad52fb65e99304442c46051a79689d9b
actionmailbox (8.0.1) sha256=bbc7db779be857fb6eb5b53f313d3881cd8cda38a150c3aa25f89f2f9977b08c
actionmailer (8.0.1) sha256=7b074e9590e4ec5cebd2fc91d1f9ba4c61bbd4bbd4376f731527da187cd39952
actionpack (8.0.1) sha256=c764e4bfc0ad9d3505c09ef9b6fbf9eca4292793550c6b7e2ea93167181bfcba
actiontext (8.0.1) sha256=f232d303e854db2098f34d7331fe493a72dc2e53dfce80fbd517c7b93d4b05b2
actionview (8.0.1) sha256=3005e3de5ca49ea789bf1ad46002d63fe5aa543c61c341239d3c533757e64f8a
activejob (8.0.1) sha256=95acd9a32d498d3a458efbb317f6191fb678758cde0ebb6c68f0b25e0fe3477f
activemodel (8.0.1) sha256=f46292fd6dcc128e18d588854298a933fd9eb22544c412b414ec02821062dc78
activerecord (8.0.1) sha256=34a7f0610660bb704f0363025d4b8d35ffe8ddc8f5b8147e0809171f724b5306
activestorage (8.0.1) sha256=91a8f156638568fac971ff25962a617d9c58fdc0e44eb6bd0edff36aff7df205
activesupport (8.0.1) sha256=fd5bc74641c24ac3541055c2879789198ff42adee3e39c2933289ba008912e37
acts_as_tenant (1.0.1) sha256=6944e4d64533337938a8817a6b4ff9b11189c9dcc0b1333bb89f3821a4c14c53
addressable (2.8.7) sha256=462986537cf3735ab5f3c0f557f14155d778f4b43ea4f485a9deb9c8f7c58232
annotaterb (4.13.0) sha256=6f472912002fefa735665b4132de47d0134ebf1efb76a7ef05f579cc4a6b2ff1
ast (2.4.2) sha256=1e280232e6a33754cde542bc5ef85520b74db2aac73ec14acef453784447cc12
babel-source (5.8.35) sha256=79ef222a9dcb867ac2efa3b0da35b4bcb15a4bfa67b6b2dcbf1e9a29104498d9
babel-transpiler (0.7.0) sha256=4c06f4ad9e8e1cabe94f99e11df2f140bb72aca9ba067dbb49dc14d9b98d1570
base64 (0.2.0) sha256=0f25e9b21a02a0cc0cea8ef92b2041035d39350946e8789c562b2d1a3da01507
bcrypt (3.1.20) sha256=8410f8c7b3ed54a3c00cd2456bf13917d695117f033218e2483b2e40b0784099
benchmark (0.4.0) sha256=0f12f8c495545e3710c3e4f0480f63f06b4c842cc94cec7f33a956f5180e874a
bigdecimal (3.1.9) sha256=2ffc742031521ad69c2dfc815a98e426a230a3d22aeac1995826a75dabfad8cc
bindex (0.8.1) sha256=7b1ecc9dc539ed8bccfc8cb4d2732046227b09d6f37582ff12e50a5047ceb17e
bootsnap (1.18.4) sha256=ac4c42af397f7ee15521820198daeff545e4c360d2772c601fbdc2c07d92af55
builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f
childprocess (5.1.0) sha256=9a8d484be2fd4096a0e90a0cd3e449a05bc3aa33f8ac9e4d6dcef6ac1455b6ec
chroma (0.2.0) sha256=64bdcd36a4765fbcd45adc64960cc153101300b4918f90ffdd89f4e2eb954b54
coderay (1.1.3) sha256=dc530018a4684512f8f38143cd2a096c9f02a1fc2459edcfe534787a7fc77d4b
concurrent-ruby (1.3.4) sha256=d4aa926339b0a86b5b5054a0a8c580163e6f5dcbdfd0f4bb916b1a2570731c32
connection_pool (2.4.1) sha256=0f40cf997091f1f04ff66da67eabd61a9fe0d4928b9a3645228532512fab62f4
crass (1.0.6) sha256=dc516022a56e7b3b156099abc81b6d2b08ea1ed12676ac7a5657617f012bd45d
csv (3.3.2) sha256=6ff0c135e65e485d1864dde6c1703b60d34cc9e19bed8452834a0b28a519bd4e
date (3.4.1) sha256=bf268e14ef7158009bfeaec40b5fa3c7271906e88b196d958a89d4b408abe64f
debug (1.10.0) sha256=11e28ca74875979e612444104f3972bd5ffb9e79179907d7ad46dba44bd2e7a4
devise (4.9.4) sha256=920042fe5e704c548aa4eb65ebdd65980b83ffae67feb32c697206bfd975a7f8
diff-lcs (1.5.1) sha256=273223dfb40685548436d32b4733aa67351769c7dea621da7d9dd4813e63ddfe
drb (2.2.1) sha256=e9d472bf785f558b96b25358bae115646da0dbfd45107ad858b0bc0d935cb340
erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9
et-orbi (1.2.11) sha256=d26e868cc21db88280a9ec1a50aa3da5d267eb9b2037ba7b831d6c2731f5df64
execjs (2.9.1) sha256=e8fd066f6df60c8e8fbebc32c6fb356b5212c77374e8416a9019ca4bb154dcfb
factory_bot (6.4.6) sha256=1a9486ce98d318d740d8f5804b885a8265a28f326ecf2bcd4ce9fb27a71a6e04
factory_bot_rails (6.4.3) sha256=ea73ceac1c0ff3dc11fff390bf2ea8a2604066525ed8ecd3b3bc2c267226dcc8
faker (3.5.1) sha256=1ad1fbea279d882f486059c23fe3ddb816ccd1d7052c05a45014b4450d859bfc
fugit (1.11.1) sha256=e89485e7be22226d8e9c6da411664d0660284b4b1c08cacb540f505907869868
globalid (1.2.1) sha256=70bf76711871f843dbba72beb8613229a49429d1866828476f9c9d6ccc327ce9
httparty (0.22.0) sha256=78652a5c9471cf0093d3b2083c2295c9c8f12b44c65112f1846af2b71430fa6c
i18n (1.14.6) sha256=dc229a74f5d181f09942dd60ab5d6e667f7392c4ee826f35096db36d1fe3614c
importmap-rails (2.1.0) sha256=9f10c67d60651a547579f448100d033df311c5d5db578301374aeb774faae741
io-console (0.8.0) sha256=cd6a9facbc69871d69b2cb8b926fc6ea7ef06f06e505e81a64f14a470fddefa2
irb (1.14.3) sha256=c457f1f2f1438ae9ce5c5be3981ae2138dec7fb894c7d73777eeeb0a6c0d0752
jbuilder (2.13.0) sha256=7200a38a1c0081aa81b7a9757e7a299db75bc58cf1fd45ca7919a91627d227d6
json (2.9.1) sha256=d2bdef4644052fad91c1785d48263756fe32fcac08b96a20bb15840e96550d11
json-schema (5.0.1) sha256=bef71a82c600a42594911553522e143f7634affc198ed507ef3ded2f920a74a9
jsonapi-deserializable (0.2.0) sha256=5f0ca2d3f8404cce1584a314e8a3753be32a56054c942adfe997b87e92bce147
jsonapi-parser (0.1.1) sha256=9ee0dc031e88fc7548d56fab66f9716d1e1c06f972b529b8c4617bc42a097020
jsonapi-rails (0.4.1) sha256=fa68b927b58f194e8b81f578c0bf18e61575638f45a390f66c832de2e6d179ba
jsonapi-rb (0.5.0) sha256=7922a164278f506c43d56277f6bd0800a0b603cc985f7f63fe7241b2628bd105
jsonapi-renderer (0.2.2) sha256=b5c44b033d61b4abdb6500fa4ab84807ca0b36ea0e59e47a2c3ca7095a6e447b
jsonapi-serializable (0.3.1) sha256=221e657677659d798e268a33ec97a83ec5ea0e4233f931358db84e88056552e9
language_server-protocol (3.17.0.3) sha256=3d5c58c02f44a20d972957a9febe386d7e7468ab3900ce6bd2b563dd910c6b3f
launchy (3.0.1) sha256=b7fa60bda0197cf57614e271a250a8ca1f6a34ab889a3c73f67ec5d57c8a7f2c
letter_opener (1.10.0) sha256=2ff33f2e3b5c3c26d1959be54b395c086ca6d44826e8bf41a14ff96fdf1bdbb2
letter_opener_web (3.0.0) sha256=3f391efe0e8b9b24becfab5537dfb17a5cf5eb532038f947daab58cb4b749860
license_finder (7.2.1) sha256=179ead19b64b170638b72fd16024233813673ac9d20d5ba75ae0b4444887ef14
logger (1.6.5) sha256=c3cfe56d01656490ddd103d38b8993d73d86296adebc5f58cefc9ec03741e56b
loofah (2.23.1) sha256=d0a07422cb3b69272e124afa914ef6d517e30d5496b7f1c1fc5b95481f13f75e
mail (2.8.1) sha256=ec3b9fadcf2b3755c78785cb17bc9a0ca9ee9857108a64b6f5cfc9c0b5bfc9ad
marcel (1.0.4) sha256=0d5649feb64b8f19f3d3468b96c680bae9746335d02194270287868a661516a4
method_source (1.1.0) sha256=181301c9c45b731b4769bc81e8860e72f9161ad7d66dd99103c9ab84f560f5c5
mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef
mini_portile2 (2.8.8) sha256=8e47136cdac04ce81750bb6c09733b37895bf06962554e4b4056d78168d70a75
minitest (5.25.4) sha256=9cf2cae25ac4dfc90c988ebc3b917f53c054978b673273da1bd20bcb0778f947
money (6.19.0) sha256=ec936fa1e42f2783719241ed9fd52725d0efa628f928feea1eb5c37d5de7daf3
msgpack (1.7.2) sha256=59ab62fd8a4d0dfbde45009f87eb6f158ab2628a7c48886b0256f175166baaa8
multi_xml (0.7.1) sha256=4fce100c68af588ff91b8ba90a0bb3f0466f06c909f21a32f4962059140ba61b
net-imap (0.5.2) sha256=e955b55e539712518bdb4eb747c6514f9c8d56ec4eb8eb573a82a6885a9effea
net-pop (0.1.2) sha256=848b4e982013c15b2f0382792268763b748cce91c9e91e36b0f27ed26420dff3
net-protocol (0.2.2) sha256=aa73e0cba6a125369de9837b8d8ef82a61849360eba0521900e2c3713aa162a8
net-smtp (0.5.0) sha256=5fc0415e6ea1cc0b3dfea7270438ec22b278ca8d524986a3ae4e5ae8d087b42a
nio4r (2.7.4) sha256=d95dee68e0bb251b8ff90ac3423a511e3b784124e5db7ff5f4813a220ae73ca9
nokogiri (1.18.1) sha256=df18be7e96c34736b6abfdeda80c6e845134fb9afe2fe5d4fbc1cf1f89c68475
nokogiri (1.18.1-aarch64-linux-gnu) sha256=35837013800e34342fcbaca305f8c49231f6bd4f779bfa23fe7b4686ae82d5b8
nokogiri (1.18.1-arm-linux-gnu) sha256=3b873fd6b0cd1ad7c77e87af701075bdfd14c9a6b2f2965c5e00ed29a5627a37
nokogiri (1.18.1-arm64-darwin) sha256=d75193f284c899d225943a8944479faedd995a7573ddd5c8308ffbdf2ec55204
nokogiri (1.18.1-x86_64-darwin) sha256=d94e3aa6483577495fc8969d6b4b5c075840ce6b1ab09636a6d4177ad171051d
nokogiri (1.18.1-x86_64-linux-gnu) sha256=e516cf16ccde67ed4cc595a2621ca5ddd42562ecb24928914b0045a20a41620e
orm_adapter (0.5.0) sha256=aa5d0be5d540cbb46d3a93e88061f4ece6a25f6e97d6a47122beb84fe595e9b9
parallel (1.26.3) sha256=d86babb7a2b814be9f4b81587bf0b6ce2da7d45969fab24d8ae4bf2bb4d4c7ef
parser (3.3.7.0) sha256=7449011771e3e7881297859b849de26a6f4fccd515bece9520a87e7d2116119b
pg (1.5.9) sha256=761efbdf73b66516f0c26fcbe6515dc7500c3f0aa1a1b853feae245433c64fdc
pluck_to_hash (1.0.2) sha256=1599906239716f98262a41493dd7d4cb72e8d83ad3d76d666deacfc5de50a47e
pry (0.15.2) sha256=12d54b8640d3fa29c9211dd4ffb08f3fd8bf7a4fd9b5a73ce5b59c8709385b6b
psych (5.2.2) sha256=a4a9477c85d3e858086c38cf64e7096abe40d1b1eed248b01020dec0ff9906ab
public_suffix (6.0.1) sha256=61d44e1cab5cbbbe5b31068481cf16976dd0dc1b6b07bd95617ef8c5e3e00c6f
puma (6.5.0) sha256=94d1b75cab7f356d52e4f1b17b9040a090889b341dbeee6ee3703f441dc189f2
raabro (1.4.0) sha256=d4fa9ff5172391edb92b242eed8be802d1934b1464061ae5e70d80962c5da882
racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f
rack (3.1.8) sha256=d3fbcbca43dc2b43c9c6d7dfbac01667ae58643c42cea10013d0da970218a1b1
rack-cors (2.0.2) sha256=415d4e1599891760c5dc9ef0349c7fecdf94f7c6a03e75b2e7c2b54b82adda1b
rack-session (2.0.0) sha256=db04b2063e180369192a9046b4559af311990af38c6a93d4c600cee4eb6d4e81
rack-test (2.1.0) sha256=0c61fc61904049d691922ea4bb99e28004ed3f43aa5cfd495024cc345f125dfb
rackup (2.2.1) sha256=f737191fd5c5b348b7f0a4412a3b86383f88c43e13b8217b63d4c8d90b9e798d
rails (8.0.1) sha256=c86f4cd7834a67c1e5d04a77d35c88a5f56a20e2022ec416fa52c1af2cdc9491
rails-dom-testing (2.2.0) sha256=e515712e48df1f687a1d7c380fd7b07b8558faa26464474da64183a7426fa93b
rails-html-sanitizer (1.6.2) sha256=35fce2ca8242da8775c83b6ba9c1bcaad6751d9eb73c1abaa8403475ab89a560
railties (8.0.1) sha256=8f653c6b1b0721b553045bd0deda1f22074b9ddc2209526e6f7285fcf607ac51
rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a
rake (13.2.1) sha256=46cb38dae65d7d74b6020a4ac9d48afed8eb8149c040eccf0523bec91907059d
rdoc (6.10.0) sha256=db665021883ac9df3ba29cdf71aece960749888db1bf9615b4a584cfa3fa3eda
react-rails (3.2.1) sha256=2235db0b240517596b1cb3e26177ab5bc64d3a56579b0415ee242b1691f81f64
redis (5.3.0) sha256=6bf810c5ae889187f0c45f77db503310980310afa57cf1640d57f419ccda72b1
redis-client (0.22.2) sha256=31fee4b7cf04109b227327fabeaaf1fc5b652cf48a186a03bc607e40767bacc0
regexp_parser (2.10.0) sha256=cb6f0ddde88772cd64bff1dbbf68df66d376043fe2e66a9ef77fcb1b0c548c61
reline (0.6.0) sha256=57620375dcbe56ec09bac7192bfb7460c716bbf0054dc94345ecaa5438e539d2
responders (3.1.1) sha256=92f2a87e09028347368639cfb468f5fefa745cb0dc2377ef060db1cdd79a341a
rexml (3.3.9) sha256=d71875b85299f341edf47d44df0212e7658cbdf35aeb69cefdb63f57af3137c9
rspec-core (3.13.2) sha256=94fbda6e4738e478f1c7532b7cc241272fcdc8b9eac03a97338b1122e4573300
rspec-expectations (3.13.3) sha256=0e6b5af59b900147698ea0ff80456c4f2e69cac4394fbd392fbd1ca561f66c58
rspec-mocks (3.13.2) sha256=2327335def0e1665325a9b617e3af9ae20272741d80ac550336309a7c59abdef
rspec-rails (7.1.0) sha256=94585b69c4086ca79afae5cc8d2c5e314f6ad32a88c927f9c065b99596e3ee47
rspec-support (3.13.1) sha256=48877d4f15b772b7538f3693c22225f2eda490ba65a0515c4e7cf6f2f17de70f
rswag (2.16.0) sha256=f07ce41548b9bb51464c38bc7b95af22fee84b90f2d1197a515a623906353086
rswag-api (2.16.0) sha256=b653f7bd92e98be18b01ab4525d88950d7b0960e293a99f856b9efcee3ae6074
rswag-specs (2.16.0) sha256=8ba26085c408b0bd2ed21dc8015c80f417c7d34c63720ab7133c2549b5bd2a91
rswag-ui (2.16.0) sha256=a1f49e927dceda92e6e6e7c1000f1e217ee66c565f69e28131dc98b33cd3a04f
rubocop (1.70.0) sha256=96751f8440b36a0ac6e9a8ab596900803118d83d6b83f2037bf8b3d7a5bc440e
rubocop-ast (1.37.0) sha256=9513ac88aaf113d04b52912533ffe46475de1362d4aa41141b51b2455827c080
rubocop-factory_bot (2.26.1) sha256=8de13cd4edcee5ca800f255188167ecef8dbfc3d1fae9f15734e9d2e755392aa
rubocop-rails (2.29.0) sha256=35bffd140c80671453aafac0e2d5ab5b3dd65736a3fc8f3936ccca226b89c234
rubocop-rspec (3.4.0) sha256=8721c13b6a8c9530a7ac481cea9423022f946fcf72428bda8289f8b57e4d4885
rubocop-rspec_rails (2.30.0) sha256=888112e83f9d7ef7ad2397e9d69a0b9614a4bae24f072c399804a180f80c4c46
ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33
rubytree (2.1.1) sha256=4925016356a81730e982f1f8c3b5f8da461f18906c77d238bad4c4ba896abd41
rubyzip (2.3.2) sha256=3f57e3935dc2255c414484fbf8d673b4909d8a6a57007ed754dde39342d2373f
securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1
shoulda-matchers (6.4.0) sha256=9055bb7f4bb342125fb860809798855c630e05ef5e75837b3168b8e6ee1608b0
solid_queue (1.1.2) sha256=178c9396d1cf0dac595c7508da90ddb397d25848ca007b5c5ed48e6ac6fc360c
sprockets (4.2.1) sha256=951b13dd2f2fcae840a7184722689a803e0ff9d2702d902bd844b196da773f97
sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e
stimulus-rails (1.3.4) sha256=765676ffa1f33af64ce026d26b48e8ffb2e0b94e0f50e9119e11d6107d67cb06
stringio (3.1.2) sha256=204f1828f85cdb39d57cac4abc6dc44b04505a223f131587f2e20ae3729ba131
thor (1.3.2) sha256=eef0293b9e24158ccad7ab383ae83534b7ad4ed99c09f96f1a6b036550abbeda
tilt (2.4.0) sha256=df74f29a451daed26591a85e8e0cebb198892cb75b6573394303acda273fba4d
timeout (0.4.3) sha256=9509f079b2b55fe4236d79633bd75e34c1c1e7e3fb4b56cb5fda61f80a0fe30e
tomlrb (2.0.3) sha256=c2736acf24919f793334023a4ff396c0647d93fce702a73c9d348deaa815d4f7
turbo-rails (2.0.11) sha256=fc47674736372780abd2a4dc0d84bef242f5ca156a457cd7fa6308291e397fcf
tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b
unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a
uri (1.0.2) sha256=b303504ceb7e5905771fa7fa14b649652fa949df18b5880d69cfb12494791e27
useragent (0.16.11) sha256=700e6413ad4bb954bb63547fa098dddf7b0ebe75b40cc6f93b8d54255b173844
warden (1.2.9) sha256=46684f885d35a69dbb883deabf85a222c8e427a957804719e143005df7a1efd0
web-console (4.2.1) sha256=e7bcf37a10ea2b4ec4281649d1cee461b32232d0a447e82c786e6841fd22fe20
websocket-driver (0.7.6) sha256=f69400be7bc197879726ad8e6f5869a61823147372fd8928836a53c2c741d0db
websocket-extensions (0.1.5) sha256=1c6ba63092cda343eb53fc657110c71c754c56484aad42578495227d717a8241
with_env (1.1.0) sha256=50b3e4f0a6cda8f90d8a6bd87a6261f6c381429abafb161c4c69ad4a0cd0b6e4
xml-simple (1.1.9) sha256=d21131e519c86f1a5bc2b6d2d57d46e6998e47f18ed249b25cad86433dbd695d
zeitwerk (2.7.1) sha256=0945986050e4907140895378e74df1fe882a2271ed087cc6c6d6b00d415a2756
RUBY VERSION RUBY VERSION
ruby 3.3.4p94 ruby 3.4.1p0
BUNDLED WITH BUNDLED WITH
2.5.17 2.6.1

View File

@ -1,24 +1,96 @@
# README # Libre Wedding Planner
This README would normally document whatever steps are necessary to get the Libre Wedding Planner is Free, Open Source Software that helps organize several aspects of a wedding.
application up and running.
Things you may want to cover: The project is not production-ready yet.
* Ruby version ## Features
* System dependencies The follwing features are either developed or under active development:
* Configuration - Guests management
- Expense management
- Seating chart
* Database creation
* Database initialization ## Next steps
* How to run the test suite Some ideas we would like to implement next:
* Services (job queues, cache servers, search engines, etc.) - Authentication (required to make an instance public)
- Website with wedding information
- Attendance confirmation forms
- Multitenancy
* Deployment instructions # Development setup
Libre Wedding Planner is made of two main pieces:
- The backend (this repo), built with Ruby (on Rails)
- The frontend (repo [here](https://gitea.bustikiller.com/bustikiller/wedding-planner-frontend/)), built with NextJS and React. You will need both to have the service fully working.
Both repositories are expected to live have a common parent directory:
```
projects <or anything else>
|-> wedding-planner
|-> wedding-planner-frontend
```
## Docker compose
Docker compose is the recommended way to run Libre Wedding Planner for development purposes. After downloading both repositories, `cd` to the root of `wedding-planner` and run:
```bash
docker compose up --build
```
Several containers will be started:
- backend: starts a Rails server that will act as an API.
- workers: starts a runner of [solid queue](https://github.com/rails/solid_queue/) that takes .care of async tasks.
- frontend: starts a NextJS application in charge of the frontend.
- nginx: A reverse proxy that the backend and frontend under the same domain, and routes all requests to the upstream services.
- db: A Postgres instance used by the backend service.
The backend service will seed the database with fake data. It's worth noting that the Postgres container does not have a volume, so the application will be seeded every time the container is created.
The backend, frontend and workers have hot-reloading enabled, so changes made to the codebase should be reflected in the application on the next request.
Once all containers have started, visit http://libre-wedding-planner.app.localhost/default/dashboard to load the application.
## Multitenancy
LibreWeddingPlanner is designed to manage multiple weddings in a single host. All URLs (in the API and the frontend) are scoped under a slug that is unique per wedding. The slug is made of lowercase letters, numbers, and dashes (-).
The development environment is seeded with a wedding whose slug is `default`.
## Email delivery
In the development environment, real emails will not be sent. You can visit http://libre-wedding-planner.app.localhost/letter_opener/ to get a list of emails generated by the application.
## Testing
Unit tests can be executed with
```
bundle exec rspec
```
## API documentation
Generate the OpenAPI documentation with the command:
```
rake rswag:specs:swaggerize
```
The documentation is available in Swagger UI in http://libre-wedding-planner.app.localhost/api/api-docs/index.html. If testing the API through the UI, you will need to select the second server (which includes the `/api` path), intended for development.
## Contributing
Contributions of all kinds (code, UX/UI, testing, translations, etc.) are welcome. The procedures to contribute are still being defined, but don't hesitate to reach out in case you want to participate.
# License
This project is licensed under the GNU Affero General Public License (AGPL). Check [COPYING.md](./COPYING.md) for additional information.
* ...

View File

@ -1,6 +1,8 @@
# frozen_string_literal: true
# Add your own tasks in files placed in lib/tasks ending in .rake, # 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. # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
require_relative "config/application" require_relative 'config/application'
Rails.application.load_tasks Rails.application.load_tasks

View File

@ -1,3 +1,9 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module ApplicationCable module ApplicationCable
class Channel < ActionCable::Channel::Base class Channel < ActionCable::Channel::Base
end end

View File

@ -1,3 +1,9 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module ApplicationCable module ApplicationCable
class Connection < ActionCable::Connection::Base class Connection < ActionCable::Connection::Base
end end

View File

@ -0,0 +1,74 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class AffinitiesController < ApplicationController
before_action :set_group, except: :reset
def index
overridden = @group.affinities.each_with_object({}) do |affinity, acc|
acc[affinity.another_group(@group).id] = affinity.discomfort
end
for_each_group do |group_id|
overridden[group_id] || GroupAffinity::NEUTRAL
end
end
def bulk_update
affinities = params.expect(affinities: [%i[group_id affinity]]).map(&:to_h).map do |affinity|
{
group_a_id: @group.id,
group_b_id: affinity[:group_id],
discomfort: GroupAffinity::MAX_DISCOMFORT - affinity[:affinity]
}
end
GroupAffinity.upsert_all(affinities, unique_by: :uindex_group_pair)
render json: {}, status: :ok
rescue ActiveRecord::InvalidForeignKey
render json: { error: 'At least one of the group IDs provided does not exist.' }, status: :bad_request
rescue ActiveRecord::StatementInvalid
render json: { error: 'Invalid group ID or discomfort provided.' }, status: :bad_request
end
def default
hierarchy = AffinityGroupsHierarchy.new
for_each_group do |group_id|
hierarchy.default_discomfort(@group.id, group_id).to_f
end
end
def reset
hierarchy = AffinityGroupsHierarchy.new
affinities = Group.pluck(:id).combination(2).map do |(group_a_id, group_b_id)|
{
group_a_id:,
group_b_id:,
discomfort: hierarchy.default_discomfort(group_a_id, group_b_id).to_f
}
end
GroupAffinity.upsert_all(affinities, unique_by: :uindex_group_pair)
render json: {}, status: :ok
end
private
def for_each_group
Group.where.not(id: @group.id)
.pluck(:id)
.index_with { |group_id| GroupAffinity::MAX_DISCOMFORT - yield(group_id) }
.then { |affinities| render json: affinities }
end
def set_group
@group = Group.find(params[:group_id])
end
end

View File

@ -1,2 +1,70 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class ApplicationController < ActionController::Base class ApplicationController < ActionController::Base
set_current_tenant_through_filter
before_action :set_tenant
before_action :authenticate_user!
after_action :set_csrf_cookie
skip_before_action :verify_authenticity_token, if: :development_swagger?
rescue_from ActiveRecord::RecordInvalid do |exception|
render json: {
message: 'Record invalid',
errors: exception.record.errors.full_messages
}, status: :unprocessable_entity
end
rescue_from ActionController::ParameterMissing do |exception|
render json: {
message: 'Parameter missing',
errors: [exception.message]
}, status: :bad_request
end
rescue_from ActiveRecord::RecordNotFound do |exception|
render json: {
message: 'Record not found',
errors: [exception.message]
}, status: :not_found
end
private
def validate_captcha!
Rails.logger.info("Captcha params: #{captcha_params}")
return if LibreCaptcha.new.valid?(id: captcha_params[:id], answer: captcha_params[:answer])
render json: { error: 'Incorrect CAPTCHA solution' }, status: :unprocessable_entity
end
def captcha_params
params.expect(captcha: %i[id answer])
end
def default_url_options(options = {})
options.merge(path_params: { slug: ActsAsTenant.current_tenant&.slug })
end
def set_tenant
set_current_tenant(Wedding.find_by!(slug: params[:slug]))
end
def development_swagger?
Rails.env.test? ||
(Rails.env.development? && request.headers['referer']&.include?('/api-docs/index.html'))
end
def set_csrf_cookie
cookies['csrf-token'] = {
value: form_authenticity_token,
secure: false,
same_site: :strict
}
end
end end

View File

@ -0,0 +1,17 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class CaptchaController < ApplicationController
skip_before_action :authenticate_user!
skip_before_action :set_tenant
def create
id = LibreCaptcha.new.id
render json: {
id:,
media_url: media_captcha_index_url(id:)
}, status: :created
end
end

View File

@ -1,70 +1,36 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class ExpensesController < ApplicationController class ExpensesController < ApplicationController
before_action :set_expense, only: %i[ show edit update destroy ] def summary
render json: Expenses::TotalQuery.new.call
end
# GET /expenses or /expenses.json
def index def index
@expenses = Expense.all render json: Expense.order(pricing_type: :asc, amount: :desc).as_json(only: %i[id name amount pricing_type])
end end
# GET /expenses/1 or /expenses/1.json
def show
end
# GET /expenses/new
def new
@expense = Expense.new
end
# GET /expenses/1/edit
def edit
end
# POST /expenses or /expenses.json
def create def create
@expense = Expense.new(expense_params) Expense.create!(expense_params)
render json: {}, status: :created
respond_to do |format|
if @expense.save
format.html { redirect_to expense_url(@expense), notice: "Expense was successfully created." }
format.json { render :show, status: :created, location: @expense }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @expense.errors, status: :unprocessable_entity }
end
end
end end
# PATCH/PUT /expenses/1 or /expenses/1.json
def update def update
respond_to do |format| Expense.find(params[:id]).update!(expense_params)
if @expense.update(expense_params) render json: {}, status: :ok
format.html { redirect_to expense_url(@expense), notice: "Expense was successfully updated." }
format.json { render :show, status: :ok, location: @expense }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @expense.errors, status: :unprocessable_entity }
end
end
end end
# DELETE /expenses/1 or /expenses/1.json
def destroy def destroy
@expense.destroy! Expense.find(params[:id]).destroy!
render json: {}, status: :ok
respond_to do |format|
format.html { redirect_to expenses_url, notice: "Expense was successfully destroyed." }
format.json { head :no_content }
end
end end
private private
# Use callbacks to share common setup or constraints between actions.
def set_expense
@expense = Expense.find(params[:id])
end
# Only allow a list of trusted parameters through. def expense_params
def expense_params params.expect(expense: %i[name amount pricing_type])
params.require(:expense).permit(:name, :amount, :pricing_type) end
end
end end

View File

@ -0,0 +1,48 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class GroupsController < ApplicationController
def index
query_result = Groups::SummaryQuery.new.call.as_json.map(&:deep_symbolize_keys).map do |group|
{
id: group[:id],
name: group[:name],
icon: group[:icon],
color: group[:color],
parent_id: group[:parent_id],
attendance: group.slice(:total, :considered, :invited, :confirmed, :declined, :tentative)
}
end
render json: query_result
end
def create
group = Group.create!(**group_params, parent:)
render json: group.as_json(only: %i[id name icon color parent_id]), status: :created
end
def update
group = Group.find(params[:id])
group.update!(**group_params, parent:)
render json: group.as_json(only: %i[id name icon color parent_id]), status: :ok
end
def destroy
Group.find(params[:id]).destroy!
render json: {}, status: :ok
end
private
def parent
params[:group][:parent_id].present? ? Group.find(params[:group][:parent_id]) : nil
end
def group_params
params.expect(group: %i[name icon color])
end
end

View File

@ -1,88 +1,37 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
require 'csv' require 'csv'
class GuestsController < ApplicationController class GuestsController < ApplicationController
before_action :set_guest, only: %i[show edit update destroy]
# GET /guests or /guests.json
def index def index
@guests = Guest.all render json: Guest.includes(:group)
.left_outer_joins(:affinity_groups) .left_joins(:group)
.order('tags.name' => :asc) .order('groups.name' => :asc, name: :asc)
.includes(:affinity_groups, :unbreakable_bonds) .as_json(only: %i[id name status], include: { group: { only: %i[id name] } })
end end
# GET /guests/1 or /guests/1.json
def show; end
# GET /guests/new
def new
@guest = Guest.new
end
# GET /guests/1/edit
def edit; end
# POST /guests or /guests.json
def create def create
@guest = Guest.new(guest_params) Guest.create!(guest_params)
render json: {}, status: :created
respond_to do |format|
if @guest.save
format.html { redirect_to guest_url(@guest), notice: 'Guest was successfully created.' }
format.json { render :show, status: :created, location: @guest }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @guest.errors, status: :unprocessable_entity }
end
end
end end
# PATCH/PUT /guests/1 or /guests/1.json
def update def update
respond_to do |format| Guest.find(params[:id]).update!(guest_params)
if @guest.update(guest_params) render json: {}, status: :ok
format.html { redirect_to guest_url(@guest), notice: 'Guest was successfully updated.' }
format.json { render :show, status: :ok, location: @guest }
else
format.html { render :edit, status: :unprocessable_entity }
format.json { render json: @guest.errors, status: :unprocessable_entity }
end
end
end end
# DELETE /guests/1 or /guests/1.json
def destroy def destroy
@guest.destroy! Guest.find(params[:id]).destroy!
render json: {}, status: :ok
respond_to do |format|
format.html { redirect_to guests_url, notice: 'Guest was successfully destroyed.' }
format.json { head :no_content }
end
end
def import
csv = CSV.parse(params[:file].read, headers: true)
ActiveRecord::Base.transaction do
csv.each do |row|
guest = Guest.create!(first_name: row['name'])
guest.affinity_group_list.add(row['affinity_group'])
guest.save!
end
end
redirect_to guests_url
end end
private private
# Use callbacks to share common setup or constraints between actions.
def set_guest
@guest = Guest.find(params[:id])
end
# Only allow a list of trusted parameters through.
def guest_params def guest_params
params.require(:guest).permit(:first_name, :last_name, :email, :phone) params.expect(guest: %i[name group_id status])
end end
end end

View File

@ -0,0 +1,46 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class SummaryController < ApplicationController
def index
render json: {
expenses:,
guests:
}
end
private
def guests
guest_summary = Guest.group(:status).count
{
total: guest_summary.except('considered').values.sum,
confirmed: guest_summary['confirmed'].to_i,
declined: guest_summary['declined'].to_i,
tentative: guest_summary['tentative'].to_i,
invited: guest_summary['invited'].to_i
}
end
def expenses
expense_summary = Expenses::TotalQuery.new(wedding: ActsAsTenant.current_tenant).call
{
projected: {
total: expense_summary['total_projected'],
guests: expense_summary['projected_guests']
},
confirmed: {
total: expense_summary['total_confirmed'],
guests: expense_summary['confirmed_guests']
},
status: {
paid: 0
}
}
end
end

View File

@ -1,12 +1,42 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class TablesArrangementsController < ApplicationController class TablesArrangementsController < ApplicationController
def index def index
@tables_arrangements = TablesArrangement.all.order(discomfort: :asc).limit(10) render json: TablesArrangement.order(discomfort: :asc).limit(3).as_json(only: %i[id name discomfort])
end end
def show def show
@tables_arrangement = TablesArrangement.find(params[:id]) Guest.joins(:seats, :group)
@seats = @tables_arrangement.seats .where(seats: { tables_arrangement_id: params[:id] })
.includes(guest: %i[affinity_groups unbreakable_bonds]) .select('guests.*', 'groups.color', 'seats.table_number')
.group_by(&:table_number) .group_by(&:table_number)
.map { |number, guests| format(number:, guests:) }
.then { |result| render json: { id: params[:id], tables: result } }
end
private
def format(number:, guests:)
{
number: number,
discomfort: discomfort(guests: guests),
guests: guests.as_json(only: %i[id name color])
}
end
def discomfort(guests:)
table = Tables::Table.new(guests)
table.min_per_table = TableSimulatorJob::MIN_PER_TABLE
table.max_per_table = TableSimulatorJob::MAX_PER_TABLE
calculator = Tables::DiscomfortCalculator.new(table:)
{
discomfort: calculator.calculate,
breakdown: calculator.breakdown
}
end end
end end

View File

@ -0,0 +1,14 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class TokensController < ApplicationController
skip_before_action :authenticate_user!
skip_before_action :set_tenant
def show
head :ok
end
end

View File

@ -0,0 +1,29 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module Users
class ConfirmationsController < Devise::ConfirmationsController
clear_respond_to
respond_to :json
def show
super do |resource|
if resource.errors.empty?
respond_to do |format|
format.json { render json: resource, status: :ok }
format.any { redirect_to root_path }
end
else
render json: {
message: 'Record invalid',
errors: resource.errors.full_messages
}, status: :unprocessable_entity
end
return
end
end
end
end

View File

@ -0,0 +1,34 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module Users
class RegistrationsController < Devise::RegistrationsController
clear_respond_to
respond_to :json
before_action :validate_captcha!, only: :create
def create
wedding = Wedding.create(slug: params[:slug])
unless wedding.persisted?
render json: { errors: wedding.errors.full_messages }, status: :unprocessable_entity
return
end
ActsAsTenant.with_tenant(wedding) do
super do |user|
wedding.destroy unless user.persisted?
end
end
end
private
def set_tenant
set_current_tenant(nil)
end
end
end

View File

@ -0,0 +1,12 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module Users
class SessionsController < Devise::SessionsController
clear_respond_to
respond_to :json
end
end

View File

@ -1,3 +1,9 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module TreeNodeExtension module TreeNodeExtension
def distance_to_common_ancestor(another_node) def distance_to_common_ancestor(another_node)
return 0 if self == another_node return 0 if self == another_node

View File

@ -1,2 +1,8 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module ApplicationHelper module ApplicationHelper
end end

View File

@ -1,2 +1,8 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module ExpensesHelper module ExpensesHelper
end end

View File

@ -0,0 +1,8 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module GroupsHelper
end

View File

@ -1,2 +1,8 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module GuestsHelper module GuestsHelper
end end

View File

@ -1,2 +1,8 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module TablesArrangementsHelper module TablesArrangementsHelper
end end

View File

@ -1,3 +1,9 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class ApplicationJob < ActiveJob::Base class ApplicationJob < ActiveJob::Base
# Automatically retry jobs that encountered a deadlock # Automatically retry jobs that encountered a deadlock
# retry_on ActiveRecord::Deadlocked # retry_on ActiveRecord::Deadlocked

View File

@ -0,0 +1,32 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class TableSimulatorJob < ApplicationJob
queue_as :default
MIN_PER_TABLE = 8
MAX_PER_TABLE = 10
def perform(wedding_id)
ActsAsTenant.with_tenant(Wedding.find(wedding_id)) do
engine = VNS::Engine.new
engine.add_perturbation(Tables::Swap)
engine.add_perturbation(Tables::Shift)
initial_solution = Tables::Distribution.new(min_per_table: MIN_PER_TABLE, max_per_table: MAX_PER_TABLE)
initial_solution.random_distribution(Guest.potential.shuffle)
engine.initial_solution = initial_solution
engine.target_function(&:discomfort)
best_solution = engine.run
best_solution.save!
end
end
end

View File

@ -1,4 +1,10 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class ApplicationMailer < ActionMailer::Base class ApplicationMailer < ActionMailer::Base
default from: "from@example.com" default from: 'from@example.com'
layout "mailer" layout 'mailer'
end end

View File

@ -1,3 +1,9 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class ApplicationRecord < ActiveRecord::Base class ApplicationRecord < ActiveRecord::Base
primary_abstract_class primary_abstract_class
end end

View File

@ -1,2 +1,36 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
# == Schema Information
#
# Table name: expenses
#
# id :uuid not null, primary key
# amount :decimal(, )
# name :string
# pricing_type :enum default("fixed"), not null
# created_at :datetime not null
# updated_at :datetime not null
# wedding_id :uuid not null
#
# Indexes
#
# index_expenses_on_wedding_id (wedding_id)
#
# Foreign Keys
#
# fk_rails_... (wedding_id => weddings.id)
#
class Expense < ApplicationRecord class Expense < ApplicationRecord
acts_as_tenant :wedding
enum :pricing_type,
fixed: 'fixed',
per_person: 'per_person'
validates :name, presence: true
validates :amount, presence: true, numericality: { greater_than: 0 }
validates :pricing_type, presence: true
end end

79
app/models/group.rb Normal file
View File

@ -0,0 +1,79 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
# == Schema Information
#
# Table name: groups
#
# id :uuid not null, primary key
# color :string
# icon :string
# name :string not null
# order :integer default(1), not null
# created_at :datetime not null
# updated_at :datetime not null
# parent_id :uuid
# wedding_id :uuid not null
#
# Indexes
#
# index_groups_on_name (name) UNIQUE
# index_groups_on_parent_id (parent_id)
# index_groups_on_wedding_id (wedding_id)
#
# Foreign Keys
#
# fk_rails_... (parent_id => groups.id)
# fk_rails_... (wedding_id => weddings.id)
#
class Group < ApplicationRecord
acts_as_tenant :wedding
validates :name, uniqueness: true
validates :name, :order, presence: true
has_many :children, class_name: 'Group', foreign_key: 'parent_id', dependent: :nullify, inverse_of: :parent
belongs_to :parent, class_name: 'Group', optional: true
before_create :set_color
scope :roots, -> { where(parent_id: nil) }
has_many :guests, dependent: :nullify
def colorize_children(generation = 1)
children.zip(palette(generation)) do |child, raw_color|
final_color = raw_color.paint
final_color.brighten(60) if final_color.dark?
child.update!(color: final_color)
child.colorize_children(generation + 1)
end
end
def affinities
GroupAffinity.where(group_a_id: id).or(GroupAffinity.where(group_b_id: id))
end
private
def palette(generation)
if generation == 1
color.paint.palette.analogous(size: children.count)
else
color.paint.palette.decreasing_saturation
end
end
def set_color
return if color.present?
new_color = "##{SecureRandom.hex(3)}".paint
new_color = new_color.lighten(30) if new_color.dark?
self.color = new_color
end
end

View File

@ -0,0 +1,45 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
# == Schema Information
#
# Table name: group_affinities
#
# id :bigint not null, primary key
# discomfort :float not null
# created_at :datetime not null
# updated_at :datetime not null
# group_a_id :uuid not null
# group_b_id :uuid not null
#
# Indexes
#
# index_group_affinities_on_group_a_id (group_a_id)
# index_group_affinities_on_group_b_id (group_b_id)
# uindex_group_pair (LEAST(group_a_id, group_b_id), GREATEST(group_a_id, group_b_id)) UNIQUE
#
# Foreign Keys
#
# fk_rails_... (group_a_id => groups.id)
# fk_rails_... (group_b_id => groups.id)
#
class GroupAffinity < ApplicationRecord
NEUTRAL = 1
MIN_DISCOMFORT = 0
MAX_DISCOMFORT = 2
belongs_to :group_a, class_name: 'Group'
belongs_to :group_b, class_name: 'Group'
validates :discomfort,
numericality: { greater_than_or_equal_to: MIN_DISCOMFORT, less_than_or_equal_to: MAX_DISCOMFORT }
def another_group(group)
return nil if group != group_a && group != group_b
group == group_a ? group_b : group_a
end
end

View File

@ -1,7 +1,58 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
# == Schema Information
#
# Table name: guests
#
# id :uuid not null, primary key
# name :string
# phone :string
# status :integer default("considered")
# created_at :datetime not null
# updated_at :datetime not null
# group_id :uuid
# wedding_id :uuid not null
#
# Indexes
#
# index_guests_on_group_id (group_id)
# index_guests_on_wedding_id (wedding_id)
#
# Foreign Keys
#
# fk_rails_... (group_id => groups.id)
# fk_rails_... (wedding_id => weddings.id)
#
class Guest < ApplicationRecord class Guest < ApplicationRecord
acts_as_taggable_on :affinity_groups, :unbreakable_bonds acts_as_tenant :wedding
belongs_to :group, optional: true
def full_name
"#{first_name} #{last_name}" enum :status, {
considered: 0,
invited: 10,
confirmed: 20,
declined: 30,
tentative: 40
}, validate: true
validates :name, presence: true
scope :potential, -> { where.not(status: %i[declined considered]) }
after_destroy :recalculate_simulations
after_save :recalculate_simulations, if: :saved_change_to_status?
has_many :seats, dependent: :delete_all
private
def recalculate_simulations
TablesArrangement.delete_all
ActiveJob.perform_all_later(50.times.map { TableSimulatorJob.new(wedding_id) })
end end
end end

View File

@ -1,4 +1,35 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
# == Schema Information
#
# Table name: seats
#
# id :uuid not null, primary key
# table_number :integer
# created_at :datetime not null
# updated_at :datetime not null
# guest_id :uuid not null
# tables_arrangement_id :uuid not null
# wedding_id :uuid not null
#
# Indexes
#
# index_seats_on_guest_id (guest_id)
# index_seats_on_tables_arrangement_id (tables_arrangement_id)
# index_seats_on_wedding_id (wedding_id)
#
# Foreign Keys
#
# fk_rails_... (guest_id => guests.id)
# fk_rails_... (tables_arrangement_id => tables_arrangements.id) ON DELETE => cascade
# fk_rails_... (wedding_id => weddings.id)
#
class Seat < ApplicationRecord class Seat < ApplicationRecord
acts_as_tenant :wedding
belongs_to :guest belongs_to :guest
belongs_to :table_arrangement belongs_to :table_arrangement
end end

View File

@ -1,3 +1,38 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
# == Schema Information
#
# Table name: tables_arrangements
#
# id :uuid not null, primary key
# discomfort :integer
# name :string not null
# created_at :datetime not null
# updated_at :datetime not null
# wedding_id :uuid not null
#
# Indexes
#
# index_tables_arrangements_on_wedding_id (wedding_id)
#
# Foreign Keys
#
# fk_rails_... (wedding_id => weddings.id)
#
class TablesArrangement < ApplicationRecord class TablesArrangement < ApplicationRecord
has_many :seats acts_as_tenant :wedding
has_many :seats, dependent: :delete_all
has_many :guests, through: :seats
before_create :assign_name
private
def assign_name
self.name = "#{Faker::Adjective.positive} #{Faker::Creature::Animal.name}".capitalize
end
end end

44
app/models/user.rb Normal file
View File

@ -0,0 +1,44 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
# == Schema Information
#
# Table name: users
#
# id :uuid not null, primary key
# confirmation_sent_at :datetime
# confirmation_token :string
# confirmed_at :datetime
# email :string default(""), not null
# encrypted_password :string default(""), not null
# failed_attempts :integer default(0), not null
# locked_at :datetime
# reset_password_sent_at :datetime
# reset_password_token :string
# unconfirmed_email :string
# unlock_token :string
# created_at :datetime not null
# updated_at :datetime not null
# wedding_id :uuid not null
#
# Indexes
#
# index_users_on_confirmation_token (confirmation_token) UNIQUE
# index_users_on_email (email) UNIQUE
# index_users_on_reset_password_token (reset_password_token) UNIQUE
# index_users_on_unlock_token (unlock_token) UNIQUE
# index_users_on_wedding_id (wedding_id)
#
# Foreign Keys
#
# fk_rails_... (wedding_id => weddings.id)
#
class User < ApplicationRecord
acts_as_tenant :wedding
devise :database_authenticatable, :registerable,
:recoverable, :validatable, :confirmable, :lockable
end

24
app/models/wedding.rb Normal file
View File

@ -0,0 +1,24 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
# == Schema Information
#
# Table name: weddings
#
# id :uuid not null, primary key
# slug :string not null
# created_at :datetime not null
# updated_at :datetime not null
#
# Indexes
#
# index_weddings_on_slug (slug) UNIQUE
#
class Wedding < ApplicationRecord
SLUG_REGEX = /[a-z\d-]+/
validates :slug, presence: true, uniqueness: true, format: { with: /\A#{SLUG_REGEX}\z/ }
end

View File

@ -0,0 +1,52 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module Expenses
class TotalQuery
private attr_reader :wedding
def initialize(wedding:)
@wedding = wedding
end
def call
ActiveRecord::Base.connection.execute(
ActiveRecord::Base.sanitize_sql_array([query, { wedding_id: wedding.id }])
).first
end
private
def query
<<~SQL.squish
WITH guest_count AS (#{guest_count_per_status}),
expense_summary AS (#{expense_summary})
SELECT guest_count.confirmed as confirmed_guests,
guest_count.projected as projected_guests,
expense_summary.fixed + expense_summary.variable * guest_count.confirmed as total_confirmed,
expense_summary.fixed + expense_summary.variable * guest_count.projected as total_projected
FROM guest_count, expense_summary;
SQL
end
def expense_summary
<<~SQL.squish
SELECT coalesce(sum(amount) filter (where pricing_type = 'fixed'), 0) as fixed,
coalesce(sum(amount) filter (where pricing_type = 'per_person'), 0) as variable
FROM expenses
WHERE wedding_id = :wedding_id
SQL
end
def guest_count_per_status
<<~SQL.squish
SELECT COALESCE(count(*) filter(where status = #{Guest.statuses['confirmed']}), 0) as confirmed,
COALESCE(count(*) filter(where status IN (#{Guest.statuses.values_at('confirmed', 'invited', 'tentative').join(',')})), 0) as projected
FROM guests
WHERE wedding_id = :wedding_id
SQL
end
end
end

View File

@ -0,0 +1,33 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module Groups
class SummaryQuery
def call
Group.left_joins(:guests).group(:id).pluck_to_hash(
:id,
:name,
:icon,
:parent_id,
:color,
*count_expressions
)
end
private
def count_expressions
[
Arel.sql('count(*) filter (where status IS NOT NULL) as total'),
Arel.sql('count(*) filter (where status = 0) as considered'),
Arel.sql('count(*) filter (where status = 10) as invited'),
Arel.sql('count(*) filter (where status = 20) as confirmed'),
Arel.sql('count(*) filter (where status = 30) as declined'),
Arel.sql('count(*) filter (where status = 40) as tentative')
]
end
end
end

View File

@ -0,0 +1,17 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class SerializableGroup < JSONAPI::Serializable::Resource
type 'group'
attributes :name, :icon
has_many :children
attribute :guest_count do
@object.guests.count
end
end

View File

@ -0,0 +1,23 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class SerializableGuest < JSONAPI::Serializable::Resource
type 'guest'
attributes :id, :group_id, :status
attribute :name do
@object.name
end
attribute :group_name do
@object.group.name
end
attribute :status do
@object.status.capitalize
end
end

View File

@ -1,27 +1,79 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class AffinityGroupsHierarchy < Array class AffinityGroupsHierarchy < Array
include Singleton DEFAULT_DISCOMFORT = 1
def initialize def initialize
super super
@references = {} @references = {}
Group.roots.each do |group|
self << group.id
hydrate(group)
end
load_discomforts
freeze
end end
def find(name) def find(id)
@references[name] @references[id]
end end
def <<(name) def <<(id)
new_node = Tree::TreeNode.new(name) new_node = Tree::TreeNode.new(id)
super(new_node).tap { @references[name] = new_node } super(new_node).tap { @references[id] = new_node }
end end
def register_child(parent_name, child_name) def register_child(parent_id, child_id)
@references[parent_name] << Tree::TreeNode.new(child_name).tap { |child_node| @references[child_name] = child_node } @references[parent_id] << Tree::TreeNode.new(child_id).tap { |child_node| @references[child_id] = child_node }
end end
def distance(name_a, name_b) def distance(id_a, id_b)
return nil if @references[name_a].nil? || @references[name_b].nil? return nil if @references[id_a].nil? || @references[id_b].nil?
@references[name_a].distance_to_common_ancestor(@references[name_b]) @references[id_a].distance_to_common_ancestor(@references[id_b])
end
def discomfort(id_a, id_b)
return 0 if id_a == id_b
@discomforts[uuid_to_int(id_a) + uuid_to_int(id_b)] || DEFAULT_DISCOMFORT
end
def default_discomfort(id_a, id_b)
return 0 if id_a == id_b
dist = distance(id_a, id_b)
return DEFAULT_DISCOMFORT if dist.nil?
Rational(dist, dist + 1)
end
private
def load_discomforts
@load_discomforts ||= GroupAffinity.pluck(:group_a_id, :group_b_id,
:discomfort).each_with_object({}) do |(id_a, id_b, discomfort), acc|
acc[uuid_to_int(id_a) + uuid_to_int(id_b)] = discomfort
end
end
def uuid_to_int(uuid)
uuid.gsub('-', '').hex
end
def hydrate(group)
group.children.each do |child|
register_child(group.id, child.id)
hydrate(child)
end
end end
end end

View File

@ -0,0 +1,22 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
class LibreCaptcha
def id
HTTParty.post('http://libre-captcha:8888/v2/captcha',
body: {
input_type: 'text',
level: :hard,
media: 'image/png',
size: '350x100'
}.to_json).then { |raw| JSON.parse(raw)['id'] }
end
def valid?(id:, answer:)
HTTParty.post('http://libre-captcha:8888/v2/answer',
body: { id:, answer: }.to_json).then { |raw| JSON.parse(raw)['result'] == 'True' }
end
end

View File

@ -1,24 +1,56 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module Tables module Tables
class DiscomfortCalculator class DiscomfortCalculator
private attr_reader :table private attr_reader :table, :hierarchy
def initialize(table) def initialize(table:, hierarchy: AffinityGroupsHierarchy.new)
@table = table @table = table
@hierarchy = hierarchy
end end
def calculate def calculate
cohesion_penalty breakdown.values.sum
end
def breakdown
@breakdown ||= { table_size_penalty:, cohesion_penalty: }
end end
private private
#
# Calculates the penalty associated with violating the table size constraints. The penalty is
# zero when the limits are honored, and it increases linearly as the number of guests deviates
# from the limits. Overcapacity is penalized more severely than undercapacity.
#
# @return [Number] The penalty associated with violating the table size constraints.
#
def table_size_penalty
case table.size
when 0...table.min_per_table then 5 * (table.min_per_table - table.size)
when table.min_per_table..table.max_per_table then 0
else 5 * (table.size - table.max_per_table)
end
end
def cohesion_penalty def cohesion_penalty
table.map { |guest| guest.affinity_group_list.first }.tally.to_a.combination(2).sum do |(a, count_a), (b, count_b)| 10 * (cohesion_discomfort * 1.0 / table.size)
distance = AffinityGroupsHierarchy.instance.distance(a, b) end
next count_a * count_b if distance.nil? #
next 0 if distance.zero? # Calculates the discomfort of the table based on the cohesion of the guests. The total discomfort
# is calculated as the sum of the discomfort of each pair of guests. The discomfort of a pair of
count_a * count_b * Rational(distance, distance + 1) # guests is a rational number between 1 (unrelated groups) and 0 (same group).
#
# @return [Number] Total discomfort of the table.
#
def cohesion_discomfort
table.map(&:group_id).tally.to_a.combination(2).sum do |(a, count_a), (b, count_b)|
count_a * count_b * hierarchy.discomfort(a, b)
end end
end end
end end

View File

@ -1,67 +1,44 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
require_relative '../../extensions/tree_node_extension' require_relative '../../extensions/tree_node_extension'
module Tables module Tables
class Distribution class Distribution
attr_accessor :tables, :min_per_table, :max_per_table
def initialize(min_per_table:, max_per_table:) def initialize(min_per_table:, max_per_table:)
@min_per_table = min_per_table @min_per_table = min_per_table
@max_per_table = max_per_table @max_per_table = max_per_table
@tables = {} @hierarchy = AffinityGroupsHierarchy.new
end @tables = []
def tables
@tables.values.freeze
end
def deep_freeze
@tables.each_value(&:freeze)
@tables.freeze
freeze
end
def replace(table)
@tables[table.id] = table
end
def dup
super.tap do |new_distribution|
new_distribution.instance_variable_set(:@tables, @tables.dup)
end
end
def <<(array)
Table.new(array).tap do |table|
@tables[table.id] = table
end
end end
def random_distribution(people) def random_distribution(people)
@tables = {} min_tables = (people.count * 1.0 / @max_per_table).ceil
max_tables = (people.count * 1.0 / @min_per_table).ceil
self << people.slice!(0..rand(@min_per_table..@max_per_table)) while people.any? @tables = people.in_groups(rand(min_tables..max_tables), false)
.map { |group| Table.new(group) }
@tables.freeze .each { |table| table.min_per_table = @min_per_table }
freeze .each { |table| table.max_per_table = @max_per_table }
end end
def discomfort def discomfort
tables.map(&:discomfort).sum @tables.map do |table|
local_discomfort(table)
end.sum
end end
def inspect def inspect
"#{tables.count} tables, discomfort: #{discomfort}" "#{@tables.count} tables, discomfort: #{discomfort}"
end
def pretty_print
tables.map.with_index do |table, i|
"Table #{i + 1} (#{table.count} ppl): (#{table.discomfort}) #{table.map(&:full_name).join(', ')}"
end.join("\n")
end end
def deep_dup def deep_dup
self.class.new(min_per_table: @min_per_table, max_per_table: @max_per_table).tap do |new_distribution| self.class.new(min_per_table: @min_per_table, max_per_table: @max_per_table).tap do |new_distribution|
tables.each do |table| new_distribution.tables = @tables.map(&:dup)
new_distribution << table.dup
end
end end
end end
@ -82,5 +59,11 @@ module Tables
arrangement.update!(discomfort:) arrangement.update!(discomfort:)
end end
end end
private
def local_discomfort(table)
table.discomfort ||= DiscomfortCalculator.new(table:, hierarchy:).calculate
end
end end
end end

View File

@ -0,0 +1,34 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module Tables
class Shift
private attr_reader :initial_solution
def initialize(initial_solution)
@initial_solution = initial_solution
end
def each
@initial_solution.tables.permutation(2) do |table_a, table_b|
table_a.dup.each do |person|
original_discomfort_a = table_a.reset
original_discomfort_b = table_b.reset
table_a.delete(person)
table_b << person
yield(@initial_solution)
ensure
table_b.delete(person)
table_a << person
table_a.discomfort = original_discomfort_a
table_b.discomfort = original_discomfort_b
end
end
end
end
end

View File

@ -1,3 +1,9 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module Tables module Tables
class Swap class Swap
private attr_reader :initial_solution private attr_reader :initial_solution
@ -7,26 +13,26 @@ module Tables
def each def each
@initial_solution.tables.combination(2) do |table_a, table_b| @initial_solution.tables.combination(2) do |table_a, table_b|
table_a.swap_candidates.product(table_b.swap_candidates).each do |(person_a, person_b)| table_a.to_a.product(table_b.to_a).each do |(person_a, person_b)|
next if person_a.affinity_group_list.first == person_b.affinity_group_list.first original_discomfort_a = table_a.reset
original_discomfort_b = table_b.reset
new_solution = @initial_solution.dup table_a.delete(person_a)
table_b.delete(person_b)
new_table_a = table_a.dup table_a << person_b
new_table_b = table_b.dup table_b << person_a
new_solution.replace(new_table_a) yield(@initial_solution)
new_solution.replace(new_table_b) ensure
table_a.delete(person_b)
table_b.delete(person_a)
new_table_a.delete(person_a) table_a << person_a
new_table_b.delete(person_b) table_b << person_b
new_table_a << person_b table_a.discomfort = original_discomfort_a
new_table_b << person_a table_b.discomfort = original_discomfort_b
new_solution.freeze
yield(new_solution)
end end
end end
end end

View File

@ -1,25 +1,22 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module Tables module Tables
class Table < Array class Table < Set
attr_writer :discomfort attr_accessor :discomfort, :min_per_table, :max_per_table
attr_reader :id
def initialize(*args) def initialize(*args)
super super
@id = SecureRandom.uuid reset
end end
def discomfort def reset
@discomfort ||= DiscomfortCalculator.new(self).calculate original_discomfort = discomfort
end @discomfort = nil
original_discomfort
def swap_candidates
@swap_candidates ||= uniq { |person| person.affinity_group_list.first }
end
def dup
super.tap do |new_table|
new_table.discomfort = nil
end
end end
end end
end end

View File

@ -1,5 +1,18 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
module VNS module VNS
class Engine class Engine
class << self
def sequence(elements)
elements = elements.to_a
(elements + elements.reverse).chunk(&:itself).map(&:first)
end
end
def target_function(&function) def target_function(&function)
@target_function = function @target_function = function
end end
@ -19,11 +32,8 @@ module VNS
@best_solution = @initial_solution @best_solution = @initial_solution
@best_score = @target_function.call(@best_solution) @best_score = @target_function.call(@best_solution)
puts "Initial score: #{@best_score.to_f}" self.class.sequence(@perturbations).each do |perturbation|
optimize(perturbation)
@perturbations.each do |perturbation|
puts "Running perturbation: #{perturbation.name}"
optimize(perturbation.new(@best_solution))
end end
@best_solution @best_solution
@ -31,17 +41,22 @@ module VNS
private private
def optimize(perturbation) def optimize(perturbation_klass)
perturbation.each do |alternative_solution| loop do
score = @target_function.call(alternative_solution) optimized = false
next if score >= @best_score
@best_solution = alternative_solution.deep_dup perturbation_klass.new(@best_solution).each do |alternative_solution|
@best_score = score score = @target_function.call(alternative_solution)
next if score >= @best_score
puts "New lowest score: #{@best_score.to_f}" @best_solution = alternative_solution.deep_dup
@best_score = score
optimized = true
return optimize(perturbation.class.new(@best_solution)) break
end
return unless optimized
end end
end end
end end

View File

@ -1,17 +0,0 @@
<div id="<%= dom_id expense %>">
<p>
<strong>Name:</strong>
<%= expense.name %>
</p>
<p>
<strong>Amount:</strong>
<%= expense.amount %>
</p>
<p>
<strong>Pricing type:</strong>
<%= expense.pricing_type %>
</p>
</div>

View File

@ -1,32 +0,0 @@
<%= form_with(model: expense) do |form| %>
<% if expense.errors.any? %>
<div style="color: red">
<h2><%= pluralize(expense.errors.count, "error") %> prohibited this expense from being saved:</h2>
<ul>
<% expense.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>
<div>
<%= form.label :name, style: "display: block" %>
<%= form.text_field :name %>
</div>
<div>
<%= form.label :amount, style: "display: block" %>
<%= form.text_field :amount %>
</div>
<div>
<%= form.label :pricing_type, style: "display: block" %>
<%= form.text_field :pricing_type %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>

View File

@ -1,10 +0,0 @@
<h1>Editing expense</h1>
<%= render "form", expense: @expense %>
<br>
<div>
<%= link_to "Show this expense", @expense %> |
<%= link_to "Back to expenses", expenses_path %>
</div>

View File

@ -1,28 +0,0 @@
<p style="color: green"><%= notice %></p>
<h1>Expenses</h1>
<div id="expenses">
<table>
<tr>
<th>Name</th>
<th>Amount</th>
<th colspan="2"></th>
</tr>
<% @expenses.each do |expense| %>
<tr>
<td><%= expense.name %></td>
<td><%= expense.amount.to_currency %></td>
<td><%= link_to "Show", expense %></td>
<td><%= link_to "Edit", edit_expense_path(expense) %></td>
</tr>
<% end %>
<tr>
<td>Total</td>
<td><%= @expenses.sum(&:amount).to_currency %></td>
<td colspan="2"></td>
</tr>
</table>
</div>
<%= link_to "New expense", new_expense_path %>

View File

@ -1,9 +0,0 @@
<h1>New expense</h1>
<%= render "form", expense: @expense %>
<br>
<div>
<%= link_to "Back to expenses", expenses_path %>
</div>

View File

@ -1,10 +0,0 @@
<p style="color: green"><%= notice %></p>
<%= render @expense %>
<div>
<%= link_to "Edit this expense", edit_expense_path(@expense) %> |
<%= link_to "Back to expenses", expenses_path %>
<%= button_to "Destroy this expense", @expense, method: :delete %>
</div>

View File

@ -1,37 +0,0 @@
<%= form_with(model: guest) do |form| %>
<% if guest.errors.any? %>
<div style="color: red">
<h2><%= pluralize(guest.errors.count, "error") %> prohibited this guest from being saved:</h2>
<ul>
<% guest.errors.each do |error| %>
<li><%= error.full_message %></li>
<% end %>
</ul>
</div>
<% end %>
<div>
<%= form.label :first_name, style: "display: block" %>
<%= form.text_field :first_name %>
</div>
<div>
<%= form.label :last_name, style: "display: block" %>
<%= form.text_field :last_name %>
</div>
<div>
<%= form.label :email, style: "display: block" %>
<%= form.text_field :email %>
</div>
<div>
<%= form.label :phone, style: "display: block" %>
<%= form.text_field :phone %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>

View File

@ -1,22 +0,0 @@
<div id="<%= dom_id guest %>">
<p>
<strong>First name:</strong>
<%= guest.first_name %>
</p>
<p>
<strong>Last name:</strong>
<%= guest.last_name %>
</p>
<p>
<strong>Email:</strong>
<%= guest.email %>
</p>
<p>
<strong>Phone:</strong>
<%= guest.phone %>
</p>
</div>

View File

@ -1,10 +0,0 @@
<h1>Editing guest</h1>
<%= render "form", guest: @guest %>
<br>
<div>
<%= link_to "Show this guest", @guest %> |
<%= link_to "Back to guests", guests_path %>
</div>

View File

@ -1,37 +0,0 @@
<p style="color: green"><%= notice %></p>
<h1>Guests</h1>
<div id="guests">
<table>
<tr>
<th>Row #</th>
<th>Name</th>
<th>Email</th>
<th>Phone</th>
<th>Affinity groups</th>
<th>Unbreakable bonds</th>
<th colspan="2"></th>
</tr>
<% @guests.each_with_index do |guest, i| %>
<tr>
<td><%= i + 1 %></td>
<td><%= guest.full_name %></td>
<td><%= guest.email %></td>
<td><%= guest.phone %></td>
<td><%= guest.affinity_groups.pluck(:name).join(", ") %></td>
<td><%= guest.unbreakable_bonds.pluck(:name).join(", ") %></td>
<td><%= link_to "Show", guest %></td>
<td><%= link_to "Edit", edit_guest_path(guest) %></td>
</tr>
<% end %>
</table>
</div>
<%= link_to "New guest", new_guest_path %>
<%= form_with url: import_guests_path, method: :post do |form| %>
<%= form.label :file %>
<%= form.file_field :file %>
<%= form.submit "Import" %>
<% end %>

View File

@ -1,9 +0,0 @@
<h1>New guest</h1>
<%= render "form", guest: @guest %>
<br>
<div>
<%= link_to "Back to guests", guests_path %>
</div>

View File

@ -1,10 +0,0 @@
<p style="color: green"><%= notice %></p>
<%= render @guest %>
<div>
<%= link_to "Edit this guest", edit_guest_path(@guest) %> |
<%= link_to "Back to guests", guests_path %>
<%= button_to "Destroy this guest", @guest, method: :delete %>
</div>

View File

@ -1,16 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<title>WeddingPlanner</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<%= csrf_meta_tags %>
<%= csp_meta_tag %>
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
<%= javascript_importmap_tags %>
</head>
<body>
<%= yield %>
</body>
</html>

View File

@ -1,3 +1,7 @@
<%# Copyright (C) 2024 Manuel Bustillo %>
<%# Copyright (C) 2024-2025 LibreWeddingPlanner contributors %>
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>

View File

@ -1 +1,5 @@
<%# Copyright (C) 2024 Manuel Bustillo %>
<%# Copyright (C) 2024-2025 LibreWeddingPlanner contributors %>
<%= yield %> <%= yield %>

View File

@ -1,9 +0,0 @@
<h1>Tables arrangements</h1>
<ol>
<% @tables_arrangements.each_with_index do |tables_arrangement, i| %>
<li>
<p><%= link_to "Arrangement ##{i+1}", tables_arrangement_path(tables_arrangement) %> Discomfort: <%= tables_arrangement.discomfort %></p>
</li>
<% end %>
</ol>

View File

@ -1,16 +0,0 @@
<h1>ID: <%= @tables_arrangement.id %></h1>
<p>Discomfort: <%= @tables_arrangement.discomfort %></p>
<h2>Seats</h2>
<% @seats.each do |table_number, seats| %>
<h3>Table <%= table_number %></h3>
<ul>
<% seats.each do |seat| %>
<li><%= seat.guest.full_name %> (<%= seat.guest.affinity_groups.pluck(:name).join(", ") %>)</li>
<% end %>
</ul>
<% end %>

View File

@ -0,0 +1,9 @@
<%# Copyright (C) 2024 Manuel Bustillo %>
<%# Copyright (C) 2024-2025 LibreWeddingPlanner contributors %>
<p>Welcome <%= @email %>!</p>
<p>You can confirm your account email through the link below:</p>
<p><%= link_to 'Confirm my account', confirmation_url(slug: ActsAsTenant.current_tenant&.slug, confirmation_token: @token) %></p>

View File

@ -0,0 +1,11 @@
<%# Copyright (C) 2024 Manuel Bustillo %>
<%# Copyright (C) 2024-2025 LibreWeddingPlanner contributors %>
<p>Hello <%= @email %>!</p>
<% if @resource.try(:unconfirmed_email?) %>
<p>We're contacting you to notify you that your email is being changed to <%= @resource.unconfirmed_email %>.</p>
<% else %>
<p>We're contacting you to notify you that your email has been changed to <%= @resource.email %>.</p>
<% end %>

View File

@ -0,0 +1,7 @@
<%# Copyright (C) 2024 Manuel Bustillo %>
<%# Copyright (C) 2024-2025 LibreWeddingPlanner contributors %>
<p>Hello <%= @resource.email %>!</p>
<p>We're contacting you to notify you that your password has been changed.</p>

View File

@ -0,0 +1,12 @@
<%# Copyright (C) 2024 Manuel Bustillo %>
<%# Copyright (C) 2024-2025 LibreWeddingPlanner contributors %>
<p>Hello <%= @resource.email %>!</p>
<p>Someone has requested a link to change your password. You can do this through the link below.</p>
<p><%= link_to 'Change my password', edit_password_url(slug: ActsAsTenant.current_tenant&.slug, reset_password_token: @token) %></p>
<p>If you didn't request this, please ignore this email.</p>
<p>Your password won't change until you access the link above and create a new one.</p>

View File

@ -0,0 +1,11 @@
<%# Copyright (C) 2024 Manuel Bustillo %>
<%# Copyright (C) 2024-2025 LibreWeddingPlanner contributors %>
<p>Hello <%= @resource.email %>!</p>
<p>Your account has been locked due to an excessive number of unsuccessful sign in attempts.</p>
<p>Click the link below to unlock your account:</p>
<p><%= link_to 'Unlock my account', unlock_url(slug: ActsAsTenant.current_tenant&.slug, unlock_token: @token) %></p>

6
bin/jobs Executable file
View File

@ -0,0 +1,6 @@
#!/usr/bin/env ruby
require_relative "../config/environment"
require "solid_queue/cli"
SolidQueue::Cli.start(ARGV)

View File

@ -1,6 +1,8 @@
# frozen_string_literal: true
# This file is used by Rack-based servers to start the application. # This file is used by Rack-based servers to start the application.
require_relative "config/environment" require_relative 'config/environment'
run Rails.application run Rails.application
Rails.application.load_server Rails.application.load_server

View File

@ -1,3 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
require_relative 'boot' require_relative 'boot'
require 'rails' require 'rails'
@ -28,6 +32,9 @@ module WeddingPlanner
# Common ones are `templates`, `generators`, or `middleware`, for example. # Common ones are `templates`, `generators`, or `middleware`, for example.
config.autoload_lib(ignore: %w[assets tasks]) config.autoload_lib(ignore: %w[assets tasks])
# Use a real queuing backend for Active Job (and separate queues per environment).
config.active_job.queue_adapter = :solid_queue
# Configuration for the application, engines, and railties goes here. # Configuration for the application, engines, and railties goes here.
# #
# These settings can be overridden in specific environments using the files # These settings can be overridden in specific environments using the files

View File

@ -1,3 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__) ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../Gemfile", __dir__)
require "bundler/setup" # Set up gems listed in the Gemfile. require "bundler/setup" # Set up gems listed in the Gemfile.

View File

@ -83,6 +83,7 @@ test:
# #
production: production:
<<: *default <<: *default
host: db
database: wedding_planner_production database: wedding_planner_production
username: wedding_planner username: wedding_planner
password: <%= ENV["WEDDING_PLANNER_DATABASE_PASSWORD"] %> password: <%= ENV["WEDDING_PLANNER_DATABASE_PASSWORD"] %>

View File

@ -1,3 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# Load the Rails application. # Load the Rails application.
require_relative "application" require_relative "application"

View File

@ -1,3 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
require "active_support/core_ext/integer/time" require "active_support/core_ext/integer/time"
Rails.application.configure do Rails.application.configure do
@ -38,8 +42,10 @@ Rails.application.configure do
# Don't care if the mailer can't send. # Don't care if the mailer can't send.
config.action_mailer.raise_delivery_errors = false config.action_mailer.raise_delivery_errors = false
config.action_mailer.perform_caching = false config.action_mailer.perform_caching = false
config.action_mailer.default_url_options = { host: 'libre-wedding-planner.app.localhost/api' }
config.action_mailer.delivery_method = :letter_opener_web
config.action_mailer.perform_deliveries = true
# Print deprecation notices to the Rails logger. # Print deprecation notices to the Rails logger.
config.active_support.deprecation = :log config.active_support.deprecation = :log
@ -73,4 +79,6 @@ Rails.application.configure do
# Raise error when a before_action's only/except options reference missing actions # Raise error when a before_action's only/except options reference missing actions
config.action_controller.raise_on_missing_callback_actions = true config.action_controller.raise_on_missing_callback_actions = true
config.hosts << "libre-wedding-planner.app.localhost"
end end

View File

@ -1,3 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
require "active_support/core_ext/integer/time" require "active_support/core_ext/integer/time"
Rails.application.configure do Rails.application.configure do
@ -67,8 +71,6 @@ Rails.application.configure do
# Use a different cache store in production. # Use a different cache store in production.
# config.cache_store = :mem_cache_store # 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 = "wedding_planner_production" # config.active_job.queue_name_prefix = "wedding_planner_production"
config.action_mailer.perform_caching = false config.action_mailer.perform_caching = false
@ -92,6 +94,9 @@ Rails.application.configure do
# "example.com", # Allow requests from example.com # "example.com", # Allow requests from example.com
# /.*\.example\.com/ # Allow requests from subdomains like `www.example.com` # /.*\.example\.com/ # Allow requests from subdomains like `www.example.com`
# ] # ]
config.hosts << "app.libreweddingplanner.org"
# Skip DNS rebinding protection for the default health check endpoint. # Skip DNS rebinding protection for the default health check endpoint.
# config.host_authorization = { exclude: ->(request) { request.path == "/up" } } config.host_authorization = { exclude: ->(request) { request.path == "/up" } }
end end

View File

@ -1,3 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
require "active_support/core_ext/integer/time" require "active_support/core_ext/integer/time"
# The test environment is used exclusively to run your application's # The test environment is used exclusively to run your application's

View File

@ -1,3 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# Pin npm packages by running ./bin/importmap # Pin npm packages by running ./bin/importmap
pin "application" pin "application"

View File

@ -0,0 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
ActsAsTenant.configure do |config|
config.require_tenant = !Rails.env.test?
end

View File

@ -1,39 +0,0 @@
require_relative '../../app/services/affinity_groups_hierarchy'
hierarchy = AffinityGroupsHierarchy.instance
hierarchy << 'guests_a'
hierarchy << 'guests_b'
hierarchy << 'common_guests'
hierarchy.register_child('guests_a', 'family_a')
hierarchy.register_child('family_a', 'close_family_a')
hierarchy.register_child('family_a', 'cousins_a')
hierarchy.register_child('family_a', 'relatives_a')
hierarchy.register_child('guests_a', 'work_a')
hierarchy.register_child('work_a', 'besties_work_a')
hierarchy.register_child('guests_a', 'friends_a')
hierarchy.register_child('friends_a', 'college_friends_a')
hierarchy.register_child('friends_a', 'high_school_friends_a')
hierarchy.register_child('friends_a', 'childhood_friends_a')
hierarchy.register_child('guests_a', 'sports_a')
hierarchy.register_child('sports_a', 'basket_team_a')
hierarchy.register_child('sports_a', 'football_team_a')
hierarchy.register_child('guests_b', 'family_b')
hierarchy.register_child('family_b', 'close_family_b')
hierarchy.register_child('family_b', 'cousins_b')
hierarchy.register_child('family_b', 'relatives_b')
hierarchy.register_child('guests_b', 'work_b')
hierarchy.register_child('work_b', 'besties_work_b')
hierarchy.register_child('guests_b', 'friends_b')
hierarchy.register_child('friends_b', 'college_friends_b')
hierarchy.register_child('friends_b', 'high_school_friends_b')
hierarchy.register_child('friends_b', 'childhood_friends_b')
hierarchy.register_child('common_guests', 'dance_club')

View File

@ -1,3 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# Be sure to restart your server when you modify this file. # 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. # Version of your assets, change this if you want to expire all your assets.

View File

@ -0,0 +1,10 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
Chroma.define_palette :decreasing_saturation do
spin(20).desaturate(40)
spin(-20).desaturate(40)
spin(40).desaturate(40)
spin(-40).desaturate(40)
end

View File

@ -1,3 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# Define an application-wide content security policy. # Define an application-wide content security policy.

View File

@ -0,0 +1,12 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*', headers: :any, methods: [:get, :post, :patch, :put, :delete]
end
end

View File

@ -0,0 +1,317 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# frozen_string_literal: true
# Assuming you have not yet modified this file, each configuration option below
# is set to its default value. Note that some are commented out while others
# are not: uncommented lines are intended to protect your configuration from
# breaking changes in upgrades (i.e., in the event that future versions of
# Devise change the default values for those options).
#
# Use this hook to configure devise mailer, warden hooks and so forth.
# Many of these configuration options can be set straight in your model.
Devise.setup do |config|
# The secret key used by Devise. Devise uses this key to generate
# random tokens. Changing this key will render invalid all existing
# confirmation, reset password and unlock tokens in the database.
# Devise will use the `secret_key_base` as its `secret_key`
# by default. You can change it below and use your own secret key.
# config.secret_key = '11353ae8c2bf66dd638d9edff9ec82856aecf74bba6c598273559a8750c902d3439da1b301e40c47578577a971f1058dbf37211c107fba5107c29baa654e9888'
# ==> Controller configuration
# Configure the parent class to the devise controllers.
# config.parent_controller = 'DeviseController'
# ==> Mailer Configuration
# Configure the e-mail address which will be shown in Devise::Mailer,
# note that it will be overwritten if you use your own mailer class
# with default "from" parameter.
config.mailer_sender = 'noreply@libreweddingplanner.org'
# Configure the class responsible to send e-mails.
# config.mailer = 'Devise::Mailer'
# Configure the parent class responsible to send e-mails.
# config.parent_mailer = 'ActionMailer::Base'
# ==> ORM configuration
# Load and configure the ORM. Supports :active_record (default) and
# :mongoid (bson_ext recommended) by default. Other ORMs may be
# available as additional gems.
require 'devise/orm/active_record'
# ==> Configuration for any authentication mechanism
# Configure which keys are used when authenticating a user. The default is
# just :email. You can configure it to use [:username, :subdomain], so for
# authenticating a user, both parameters are required. Remember that those
# parameters are used only when authenticating and not when retrieving from
# session. If you need permissions, you should implement that in a before filter.
# You can also supply a hash where the value is a boolean determining whether
# or not authentication should be aborted when the value is not present.
# config.authentication_keys = [:email]
# Configure parameters from the request object used for authentication. Each entry
# given should be a request method and it will automatically be passed to the
# find_for_authentication method and considered in your model lookup. For instance,
# if you set :request_keys to [:subdomain], :subdomain will be used on authentication.
# The same considerations mentioned for authentication_keys also apply to request_keys.
# config.request_keys = []
# Configure which authentication keys should be case-insensitive.
# These keys will be downcased upon creating or modifying a user and when used
# to authenticate or find a user. Default is :email.
config.case_insensitive_keys = [:email]
# Configure which authentication keys should have whitespace stripped.
# These keys will have whitespace before and after removed upon creating or
# modifying a user and when used to authenticate or find a user. Default is :email.
config.strip_whitespace_keys = [:email]
# Tell if authentication through request.params is enabled. True by default.
# It can be set to an array that will enable params authentication only for the
# given strategies, for example, `config.params_authenticatable = [:database]` will
# enable it only for database (email + password) authentication.
# config.params_authenticatable = true
# Tell if authentication through HTTP Auth is enabled. False by default.
# It can be set to an array that will enable http authentication only for the
# given strategies, for example, `config.http_authenticatable = [:database]` will
# enable it only for database authentication.
# For API-only applications to support authentication "out-of-the-box", you will likely want to
# enable this with :database unless you are using a custom strategy.
# The supported strategies are:
# :database = Support basic authentication with authentication key + password
# config.http_authenticatable = false
# If 401 status code should be returned for AJAX requests. True by default.
# config.http_authenticatable_on_xhr = true
# The realm used in Http Basic Authentication. 'Application' by default.
# config.http_authentication_realm = 'Application'
# It will change confirmation, password recovery and other workflows
# to behave the same regardless if the e-mail provided was right or wrong.
# Does not affect registerable.
config.paranoid = true
# By default Devise will store the user in session. You can skip storage for
# particular strategies by setting this option.
# Notice that if you are skipping storage for all authentication paths, you
# may want to disable generating routes to Devise's sessions controller by
# passing skip: :sessions to `devise_for` in your config/routes.rb
config.skip_session_storage = [:http_auth]
# By default, Devise cleans up the CSRF token on authentication to
# avoid CSRF token fixation attacks. This means that, when using AJAX
# requests for sign in and sign up, you need to get a new CSRF token
# from the server. You can disable this option at your own risk.
# config.clean_up_csrf_token_on_authentication = true
# When false, Devise will not attempt to reload routes on eager load.
# This can reduce the time taken to boot the app but if your application
# requires the Devise mappings to be loaded during boot time the application
# won't boot properly.
# config.reload_routes = true
# ==> Configuration for :database_authenticatable
# For bcrypt, this is the cost for hashing the password and defaults to 12. If
# using other algorithms, it sets how many times you want the password to be hashed.
# The number of stretches used for generating the hashed password are stored
# with the hashed password. This allows you to change the stretches without
# invalidating existing passwords.
#
# Limiting the stretches to just one in testing will increase the performance of
# your test suite dramatically. However, it is STRONGLY RECOMMENDED to not use
# a value less than 10 in other environments. Note that, for bcrypt (the default
# algorithm), the cost increases exponentially with the number of stretches (e.g.
# a value of 20 is already extremely slow: approx. 60 seconds for 1 calculation).
config.stretches = Rails.env.test? ? 1 : 12
# Set up a pepper to generate the hashed password.
# config.pepper = '6f86425fd587f80f4a338a785a6abbbccf8de7322f70fcccf356118d982942c9421819445f9d236a296fa3c431ef5e509be20e6db03f90ec2b42aa78f3a7e526'
# Send a notification to the original email when the user's email is changed.
config.send_email_changed_notification = false
# Send a notification email when the user's password is changed.
config.send_password_change_notification = false
# ==> Configuration for :confirmable
# A period that the user is allowed to access the website even without
# confirming their account. For instance, if set to 2.days, the user will be
# able to access the website for two days without confirming their account,
# access will be blocked just in the third day.
# You can also set it to nil, which will allow the user to access the website
# without confirming their account.
# Default is 0.days, meaning the user cannot access the website without
# confirming their account.
# config.allow_unconfirmed_access_for = 2.days
# A period that the user is allowed to confirm their account before their
# token becomes invalid. For example, if set to 3.days, the user can confirm
# their account within 3 days after the mail was sent, but on the fourth day
# their account can't be confirmed with the token any more.
# Default is nil, meaning there is no restriction on how long a user can take
# before confirming their account.
config.confirm_within = 3.days
# If true, requires any email changes to be confirmed (exactly the same way as
# initial account confirmation) to be applied. Requires additional unconfirmed_email
# db field (see migrations). Until confirmed, new email is stored in
# unconfirmed_email column, and copied to email column on successful confirmation.
config.reconfirmable = true
# Defines which key will be used when confirming an account
# config.confirmation_keys = [:email]
# ==> Configuration for :rememberable
# The time the user will be remembered without asking for credentials again.
# config.remember_for = 2.weeks
# Invalidates all the remember me tokens when the user signs out.
config.expire_all_remember_me_on_sign_out = true
# If true, extends the user's remember period when remembered via cookie.
# config.extend_remember_period = false
# Options to be passed to the created cookie. For instance, you can set
# secure: true in order to force SSL only cookies.
# config.rememberable_options = {}
# ==> Configuration for :validatable
# Range for password length.
config.password_length = 15..128
# Email regex used to validate email formats. It simply asserts that
# one (and only one) @ exists in the given string. This is mainly
# to give user feedback and not to assert the e-mail validity.
config.email_regexp = /\A[^@\s]+@[^@\s]+\z/
# ==> Configuration for :timeoutable
# The time you want to timeout the user session without activity. After this
# time the user will be asked for credentials again. Default is 30 minutes.
# config.timeout_in = 30.minutes
# ==> Configuration for :lockable
# Defines which strategy will be used to lock an account.
# :failed_attempts = Locks an account after a number of failed attempts to sign in.
# :none = No lock strategy. You should handle locking by yourself.
config.lock_strategy = :failed_attempts
# Defines which key will be used when locking and unlocking an account
# config.unlock_keys = [:email]
# Defines which strategy will be used to unlock an account.
# :email = Sends an unlock link to the user email
# :time = Re-enables login after a certain amount of time (see :unlock_in below)
# :both = Enables both strategies
# :none = No unlock strategy. You should handle unlocking by yourself.
config.unlock_strategy = :both
# Number of authentication tries before locking an account if lock_strategy
# is failed attempts.
config.maximum_attempts = 10
# Time interval to unlock the account if :time is enabled as unlock_strategy.
config.unlock_in = 1.hour
# Warn on the last attempt before the account is locked.
# config.last_attempt_warning = true
# ==> Configuration for :recoverable
#
# Defines which key will be used when recovering the password for an account
# config.reset_password_keys = [:email]
# Time interval you can reset your password with a reset password key.
# Don't put a too small interval or your users won't have the time to
# change their passwords.
config.reset_password_within = 6.hours
# When set to false, does not sign a user in automatically after their password is
# reset. Defaults to true, so a user is signed in automatically after a reset.
config.sign_in_after_reset_password = true
# ==> Configuration for :encryptable
# Allow you to use another hashing or encryption algorithm besides bcrypt (default).
# You can use :sha1, :sha512 or algorithms from others authentication tools as
# :clearance_sha1, :authlogic_sha512 (then you should set stretches above to 20
# for default behavior) and :restful_authentication_sha1 (then you should set
# stretches to 10, and copy REST_AUTH_SITE_KEY to pepper).
#
# Require the `devise-encryptable` gem when using anything other than bcrypt
# config.encryptor = :sha512
# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
config.scoped_views = true
# Configure the default scope given to Warden. By default it's the first
# devise role declared in your routes (usually :user).
# config.default_scope = :user
# Set this configuration to false if you want /users/sign_out to sign out
# only the current scope. By default, Devise signs out all scopes.
# config.sign_out_all_scopes = true
# ==> Navigation configuration
# Lists the formats that should be treated as navigational. Formats like
# :html should redirect to the sign in page when the user does not have
# access, but formats like :xml or :json, should return 401.
#
# If you have any extra navigational formats, like :iphone or :mobile, you
# should add them to the navigational formats lists.
#
# The "*/*" below is required to match Internet Explorer requests.
# config.navigational_formats = ['*/*', :html, :turbo_stream]
# The default HTTP method used to sign out a resource. Default is :delete.
config.sign_out_via = :delete
# ==> OmniAuth
# Add a new OmniAuth provider. Check the wiki for more information on setting
# up on your models and hooks.
# config.omniauth :github, 'APP_ID', 'APP_SECRET', scope: 'user,public_repo'
# ==> Warden configuration
# If you want to use other strategies, that are not supported by Devise, or
# change the failure app, you can configure them inside the config.warden block.
#
# config.warden do |manager|
# manager.intercept_401 = false
# manager.default_strategies(scope: :user).unshift :some_external_strategy
# end
# ==> Mountable engine configurations
# When using Devise inside an engine, let's call it `MyEngine`, and this engine
# is mountable, there are some extra configurations to be taken into account.
# The following options are available, assuming the engine is mounted as:
#
# mount MyEngine, at: '/my_engine'
#
# The router that invoked `devise_for`, in the example above, would be:
# config.router_name = :my_engine
#
# When using OmniAuth, Devise cannot automatically set OmniAuth path,
# so you need to do it manually. For the users scope, it would be:
# config.omniauth_path_prefix = '/my_engine/users/auth'
# ==> Hotwire/Turbo configuration
# When using Devise with Hotwire/Turbo, the http status for error responses
# and some redirects must match the following. The default in Devise for existing
# apps is `200 OK` and `302 Found` respectively, but new apps are generated with
# these new defaults that match Hotwire/Turbo behavior.
# Note: These might become the new default in future versions of Devise.
config.responder.error_status = :unprocessable_entity
config.responder.redirect_status = :see_other
# ==> Configuration for :registerable
# When set to false, does not sign a user in automatically after their password is
# changed. Defaults to true, so a user is signed in automatically after changing a password.
# config.sign_in_after_change_password = true
end

View File

@ -1,3 +1,7 @@
# Copyright (C) 2024 Manuel Bustillo
# Copyright (C) 2024-2025 LibreWeddingPlanner contributors
# Be sure to restart your server when you modify this file. # Be sure to restart your server when you modify this file.
# Configure parameters to be partially matched (e.g. passw matches password) and filtered from the log file. # Configure parameters to be partially matched (e.g. passw matches password) and filtered from the log file.

Some files were not shown because too many files have changed in this diff Show More