Compare commits

..

270 Commits

Author SHA1 Message Date
Daniel O'Connor
6ee86b6b38 Merge branch 'dev' into refactor-hardcoded-emails 2026-04-27 00:36:06 +09:30
Daniel O'Connor
573daa8c8a Swap to modern expect style (#4571) 2026-04-26 22:58:04 +09:30
Daniel O'Connor
5174b1236e Merge pull request #4567 from Growstuff/memory-optimisation-3
Members - Nearest To - Memory improvements
2026-04-26 22:57:01 +09:30
Daniel O'Connor
5a349f8f1b Swap to modern expect style 2026-04-26 13:21:15 +00:00
Daniel O'Connor
0d850804cf Merge pull request #4570 from Growstuff/rubocop-tweaks
Rubocop fixes
2026-04-26 22:47:46 +09:30
Daniel O'Connor
161a934811 Merge pull request #4569 from Growstuff/plant_part_spec
Rubocop: Fix no expectation errors
2026-04-26 22:44:49 +09:30
Daniel O'Connor
8cfef5ce1a Rubocop fixes 2026-04-26 13:09:00 +00:00
Daniel O'Connor
6dacb0af74 Swap to modern expect style 2026-04-26 13:03:46 +00:00
Daniel O'Connor
7e2d36f99a Swap to modern expect style 2026-04-26 12:55:58 +00:00
Daniel O'Connor
3406d9e7bc Merge pull request #4568 from Growstuff/memory-usage-4
Posts - memory usage
2026-04-26 19:05:56 +09:30
Daniel O'Connor
7a91746f73 Update .dockerignore to remove .ruby-version
Remove .ruby-version from .dockerignore
2026-04-26 19:05:41 +09:30
Daniel O'Connor
209973e72b Memory usage 2026-04-26 09:26:52 +00:00
Daniel O'Connor
4848302eab Merge pull request #4565 from Growstuff/memory-usage-1
Admin - Members - optimise memory usage
2026-04-26 18:45:12 +09:30
Daniel O'Connor
920a28a144 Merge pull request #4566 from Growstuff/memory-usage-2
GBIF - optimise memory usage
2026-04-26 18:44:58 +09:30
Daniel O'Connor
fff7a14635 GBIF - optimise memory usage 2026-04-26 09:03:45 +00:00
Daniel O'Connor
0131c9b531 Admin - Members - optimise memory usage 2026-04-26 09:01:18 +00:00
Daniel O'Connor
1b091b2f6f Merge pull request #4453 from Growstuff/add-mark-as-failed-to-crop-view-13853484652230549508
Add "mark as failed" action to crop view
2026-04-26 14:44:09 +09:30
google-labs-jules[bot]
3b60e8f974 Implement blocking feature (#4199)
* Implement blocking feature

This commit introduces a blocking feature that allows members to block other members.

A blocked member is prevented from:
- following the blocker
- sending private messages to the blocker
- replying to the blocker's posts
- liking the blocker's content

The implementation includes:
- A new `Block` model and a corresponding database table.
- Updates to the `Member` model to include associations for blocks.
- A new `BlocksController` to handle blocking and unblocking actions.
- New routes for the `BlocksController`.
- UI changes to add block/unblock buttons to the member profile page.
- Validations in the `Follow`, `Comment`, and `Like` models to enforce the blocking rules.
- A check in the `MessagesController` to prevent sending messages to a member who has blocked the sender.
- A callback in the `Block` model to destroy the follow relationship when a block is created.
- New feature and model specs to test the blocking functionality.

* Implement blocking feature and fix failing tests

This commit introduces a blocking feature that allows members to block other members.

A blocked member is prevented from:
- following the blocker
- sending private messages to the blocker
- replying to the blocker's posts
- liking the blocker's content

The implementation includes:
- A new `Block` model and a corresponding database table.
- Updates to the `Member` model to include associations for blocks.
- A new `BlocksController` to handle blocking and unblocking actions.
- New routes for the `BlocksController`.
- UI changes to add block/unblock buttons to the member profile page.
- Validations in the `Follow`, `Comment`, and `Like` models to enforce the blocking rules.
- A check in the `MessagesController` to prevent sending messages to a member who has blocked the sender.
- A callback in the `Block` model to destroy the follow relationship when a block is created.
- New feature and model specs to test the blocking functionality.

This commit also fixes a failing test in the blocking feature. The error was caused by the validation being called even when the `member` association was `nil`. A guard has been added to the validation methods in the `Like`, `Follow`, and `Comment` models to prevent this from happening.

* Generate schema

* Fix tests

* Add permissions

* Define Block permissions in Ability model

The feature specs for member blocking were failing because the "Block"
link was not being rendered on member profiles. This was due to the
lack of explicit create and destroy permissions for the Block resource
in the Ability model, which is used by CanCanCan to authorize actions
and by the view to conditionally show links.

This change adds the necessary permissions to `member_abilities`:
- Allows members to create blocks (except for blocking themselves).
- Allows members to destroy blocks where they are the blocker.

These rules ensure that the "Block" and "Unblock" links are correctly
rendered and authorized for signed-in members.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>

* Comment out specs for now

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Daniel O'Connor <daniel.oconnor@gmail.com>
Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-04-26 14:22:32 +09:30
google-labs-jules[bot]
7ed3a97263 Improve test coverage of ability_spec (#4283)
* Improve test coverage of ability_spec

* Fix specs

* Rubocop

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: Daniel O'Connor <daniel.oconnor@gmail.com>
Co-authored-by: Daniel O'Connor <365751+CloCkWeRX@users.noreply.github.com>
2026-04-26 14:21:36 +09:30
Daniel O'Connor
2aa697a6d6 Add comprehensive test coverage for forums (#4561)
* Add comprehensive test coverage for forums

- Added `spec/controllers/forums_controller_spec.rb` to test all CRUD actions and authorization for guest, member, and admin roles.
- Added `spec/features/forums_spec.rb` to cover user-facing features such as browsing forums and creating posts from within a forum.
- Updated `spec/requests/forums_spec.rb` to cover basic request flow and JSON response formats.

Note: Tests were verified for content and logic but execution in the sandbox environment was blocked by missing infrastructure (PostgreSQL and Elasticsearch).

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>

* Fix specs

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-04-26 14:18:28 +09:30
Daniel O'Connor
ed87d23ece Merge pull request #4560 from Growstuff/fix-i18n-locale-texts-16171345716630423189
Fix Rails/I18nLocaleTexts RuboCop errors
2026-04-26 13:36:10 +09:30
Daniel O'Connor
c20160e3db Merge pull request #4559 from Growstuff/update-crop-wrangling-links-4812587945321495224
Update crop wrangling guide links to GitHub wiki
2026-04-26 12:40:09 +09:30
google-labs-jules[bot]
700cb76e3a Update crop wrangling guide links to GitHub wiki
Updated links to the crop wrangling guide in the scientific names and
alternate names forms to point to the new GitHub wiki location.
Verified that other occurrences in the codebase already use the new
URL.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-04-26 01:46:35 +00:00
Daniel O'Connor
5f834c475f Merge pull request #4557 from Growstuff/fix-rspec-expect-in-hook-16350019958417127399
Fix RSpec/ExpectInHook issues
2026-04-26 04:25:16 +09:30
google-labs-jules[bot]
6c7903c2a5 Fix RSpec/ExpectInHook offenses
- Move expectations from `before` hooks to `it` blocks.
- Ensure controller actions are called after expectations are set in controller specs.
- Replace synchronization expectations in hooks with Capybara `find` calls.
- Remove RSpec/ExpectInHook from .rubocop_todo.yml.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-04-25 18:39:43 +00:00
Daniel O'Connor
dfa963cd65 Rubocop: RSpec/EmptyExampleGroup (#4554)
* Rubocop: RSpec/EmptyExampleGroup

* Undo renaming

* Apply suggestion from @CloCkWeRX

* Apply suggestion from @CloCkWeRX
2026-04-26 03:18:50 +09:30
Daniel O'Connor
163289e853 Fix RSpec/IndexedLet RuboCop issues in spec files (#4556)
* Fix RSpec/IndexedLet RuboCop issues in spec files

Replace indexed let variable names with descriptive names across 11 spec files.
This improves readability and complies with the RSpec/IndexedLet rule.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>

* Rubocop

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-04-26 03:10:03 +09:30
Daniel O'Connor
2001b355c4 Add Docker and CI Support (#4461)
* Add Docker, Docker Compose, and GitHub Actions CI support

- Added a production-ready `Dockerfile` based on Ruby 3.3.8-bullseye.
- Added `entrypoint.sh` to handle Rails server PID cleanup.
- Added `.dockerignore` to optimize build context.
- Added `docker-compose.yml` for local orchestration of Rails, PostgreSQL 17, and Elasticsearch 7.4.0.
- Added GitHub Actions workflow in `.github/workflows/docker-build-push.yml` to build and push the image to GHCR on pushes to the `dev` branch.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>

* Swap to 3.4.8

* Node 22

* Apply suggestion from @CloCkWeRX

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-04-26 03:07:31 +09:30
Daniel O'Connor
6a0b09b047 Merge pull request #4555 from Growstuff/remove-old-compass-rails
Remove old compass rails
2026-04-26 03:00:37 +09:30
Daniel O'Connor
4b7e0cf5d7 Merge pull request #4553 from Growstuff/RSpec/EmptyLineAfterExample
Rubocop: RSpec/EmptyLineAfterExample
2026-04-26 02:37:58 +09:30
Daniel O'Connor
a3af82d935 Merge pull request #4552 from Growstuff/Lint/SymbolConversion
Rubocop: Lint/SymbolConversion
2026-04-26 02:37:48 +09:30
Daniel O'Connor
051509b59f Merge pull request #4551 from Growstuff/Style/PercentLiteralDelimiters
Rubocop: Style/PercentLiteralDelimiters
2026-04-26 02:25:43 +09:30
Daniel O'Connor
a133eddf21 Rubocop: RSpec/EmptyLineAfterExample 2026-04-25 16:52:34 +00:00
Daniel O'Connor
0577c73833 Rubocop: Lint/SymbolConversion 2026-04-25 16:48:31 +00:00
Daniel O'Connor
7522d992b4 Rubocop: Style/PercentLiteralDelimiters 2026-04-25 16:46:15 +00:00
Daniel O'Connor
83de2fe889 Regenerate 2026-04-25 16:45:00 +00:00
Daniel O'Connor
bbe75df0ad Merge pull request #4550 from Growstuff/Style/FrozenStringLiteralComment
Rubocop: Style/FrozenStringLiteralComment
2026-04-24 08:41:23 +09:30
Daniel O'Connor
279cc88162 Update growstuff_markdown_spec.rb 2026-04-24 00:15:18 +09:30
Daniel O'Connor
fe4dd5c185 Merge pull request #4549 from Growstuff/Rails/WhereMissing
Rubocop: Rails/WhereMissing
2026-04-24 00:13:37 +09:30
Daniel O'Connor
dc11a1674d Merge branch 'dev' into refactor-hardcoded-emails 2026-04-24 00:03:30 +09:30
Daniel O'Connor
d625eb2dbd Rubocop: Style/FrozenStringLiteralComment 2026-04-23 14:30:02 +00:00
Daniel O'Connor
2019d0e952 Rubocop: Rails/WhereMissing 2026-04-23 14:27:10 +00:00
Daniel O'Connor
e7659a75a4 Merge pull request #4548 from Growstuff/RSpecRails/HaveHttpStatus
Rubocop: RSpecRails/HaveHttpStatus
2026-04-23 23:52:40 +09:30
Daniel O'Connor
4a66bdc9fe Merge pull request #4546 from Growstuff/Rails/RedundantActiveRecordAllMethod
Rubocop: Rails/RedundantActiveRecordAllMethod
2026-04-23 23:46:39 +09:30
Daniel O'Connor
8de6b083f9 Rubocop: RSpecRails/HaveHttpStatus 2026-04-23 14:13:47 +00:00
Daniel O'Connor
accab7f84c Merge pull request #4545 from Growstuff/RSpecRails/InferredSpecType
Rubocop: RSpecRails/InferredSpecType
2026-04-23 23:29:17 +09:30
Daniel O'Connor
3f6dd59dfa Rubocop: Rails/RedundantActiveRecordAllMethod 2026-04-23 13:48:17 +00:00
Daniel O'Connor
0a71b44dea Merge pull request #4542 from Growstuff/RSpec/ContextMethod
Rubocop: RSpec/ContextMethod
2026-04-23 23:10:33 +09:30
Daniel O'Connor
ba75afb3f5 Rubocop: RSpecRails/InferredSpecType 2026-04-23 13:39:46 +00:00
Daniel O'Connor
aa1c9ceb05 Merge pull request #4543 from Growstuff/RSpec/ExpectChange
Rubocop: RSpec/ExpectChange
2026-04-23 23:02:03 +09:30
Daniel O'Connor
ea5f93f929 Merge pull request #4541 from Growstuff/Lint/EmptyBlock
Rubocop: Lint/EmptyBlock
2026-04-23 22:53:40 +09:30
Daniel O'Connor
6f59635ca7 Rubocop: RSpec/ExpectChange 2026-04-23 13:23:14 +00:00
Daniel O'Connor
6736ae3142 Rubocop: RSpec/ContextMethod 2026-04-23 13:20:47 +00:00
Daniel O'Connor
8d8ee7069c Merge pull request #4540 from Growstuff/Bundler/OrderedGems
Rubocop: Bundler/OrderedGems
2026-04-23 22:46:10 +09:30
Daniel O'Connor
5d112e9134 Rubocop: Capybara/RSpec/HaveSelector (#4539)
* Rubocop: Capybara/RSpec/HaveSelector

* Rubocop: Capybara/RSpec/HaveSelector
2026-04-23 22:45:58 +09:30
Daniel O'Connor
6ba4f39b4a Rubocop: Lint/EmptyBlock 2026-04-23 13:14:39 +00:00
Daniel O'Connor
a38d99ed4a Rubocop: Bundler/OrderedGems 2026-04-23 13:07:38 +00:00
Daniel O'Connor
f1acb35520 Merge pull request #4537 from Growstuff/FactoryBot/SyntaxMethods
Rubocop: FactoryBot/SyntaxMethods
2026-04-23 22:29:24 +09:30
Daniel O'Connor
267560aff1 Merge pull request #4494 from Growstuff/dependabot/bundler/puma-8.0.0
Bump puma from 7.2.0 to 8.0.0
2026-04-23 22:26:31 +09:30
dependabot[bot]
e862a5c5b8 Bump puma from 7.2.0 to 8.0.0
Bumps [puma](https://github.com/puma/puma) from 7.2.0 to 8.0.0.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/main/History.md)
- [Commits](https://github.com/puma/puma/compare/v7.2.0...v8.0.0)

---
updated-dependencies:
- dependency-name: puma
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 12:47:21 +00:00
Daniel O'Connor
c0edfb9eed Merge pull request #4536 from Growstuff/Capybara/NegationMatcher
Rubocop: Capybara/NegationMatcher
2026-04-23 22:15:53 +09:30
Daniel O'Connor
a8d0c6e32e Rubocop: Layout/TrailingWhitespace (#4535) 2026-04-23 22:15:42 +09:30
Daniel O'Connor
f381ba29cc Merge pull request #4534 from Growstuff/Layout/HeredocIndentation
Rubocop: Layout/HeredocIndentation
2026-04-23 22:07:41 +09:30
Daniel O'Connor
c1f171b09e Rubocop: Capybara/NegationMatcher 2026-04-23 12:30:06 +00:00
Daniel O'Connor
b9dcd95c00 Rubocop: Layout/TrailingWhitespace 2026-04-23 12:27:06 +00:00
Daniel O'Connor
400db178e4 Merge pull request #4533 from Growstuff/Rails/RedirectBackOrTo
Rubocop: Rails/RedirectBackOrTo
2026-04-23 21:54:19 +09:30
Daniel O'Connor
aecde837cc Merge pull request #4459 from Growstuff/dependabot/github_actions/actions/upload-artifact-7
Bump actions/upload-artifact from 5 to 7
2026-04-23 21:52:13 +09:30
Daniel O'Connor
316351fb1c Merge pull request #4532 from Growstuff/Layout/IndentationWidth
Rubocop: Layout/IndentationWidth
2026-04-23 21:51:15 +09:30
Daniel O'Connor
34ce4e216f Merge pull request #4531 from Growstuff/EmptyLinesAroundClassBody
Rubocop: Layout/EmptyLinesAroundClassBody
2026-04-23 21:49:49 +09:30
Daniel O'Connor
7b8c7f4ff5 Rubocop: Rails/RedirectBackOrTo 2026-04-23 12:15:30 +00:00
Daniel O'Connor
6fe9f7f5d3 Merge pull request #4530 from Growstuff/drop-jshint
Drop jshint
2026-04-23 21:40:46 +09:30
Daniel O'Connor
ae5c125a96 Rubocop: Layout/IndentationWidth 2026-04-23 12:10:09 +00:00
Daniel O'Connor
8a70156b61 Rubocop: Layout/EmptyLinesAroundClassBody 2026-04-23 12:07:56 +00:00
dependabot[bot]
f1fde20500 Bump actions/upload-artifact from 5 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 12:05:35 +00:00
Daniel O'Connor
d32d28c5de Merge branch 'dev' of https://github.com/Growstuff/growstuff into drop-jshint 2026-04-23 11:59:08 +00:00
Daniel O'Connor
ed884c5ac6 Merge pull request #4527 from Growstuff/eslint-10
ESLint 10
2026-04-23 21:26:35 +09:30
Daniel O'Connor
84d61a7596 Merge pull request #4529 from Growstuff/eslint-9
ESLint 9
2026-04-23 21:26:22 +09:30
Daniel O'Connor
181431ce94 Merge pull request #4528 from Growstuff/eslint-8
ESLint 8
2026-04-23 21:26:14 +09:30
Daniel O'Connor
da73548695 Drop jshint 2026-04-23 11:48:07 +00:00
Daniel O'Connor
3e95581c06 Merge pull request #4526 from Growstuff/eslint
Eslint 7
2026-04-23 21:14:09 +09:30
Daniel O'Connor
37ce3d28aa ESLint 10 2026-04-23 11:42:44 +00:00
Daniel O'Connor
b7bf5d932a ESLint 9 2026-04-23 11:41:27 +00:00
Daniel O'Connor
247106d10f ESLint 8 2026-04-23 11:40:03 +00:00
Daniel O'Connor
39534eab02 eslint 7 2026-04-23 11:36:16 +00:00
Daniel O'Connor
076ba9844a Merge pull request #4525 from Growstuff/eslint
Upgrade eslint
2026-04-23 21:00:29 +09:30
Daniel O'Connor
727c754499 Upgrade eslint 2026-04-23 11:23:16 +00:00
Daniel O'Connor
ce17ec1620 Merge pull request #4522 from Growstuff/node-24
Node 24
2026-04-23 20:13:50 +09:30
Daniel O'Connor
9500de3815 Merge pull request #4521 from Growstuff/node-22
Node 22
2026-04-23 20:10:20 +09:30
Daniel O'Connor
d89e284c3a Merge pull request #4516 from Growstuff/upgrade-eslint
Bump eslint
2026-04-23 20:09:46 +09:30
Daniel O'Connor
4e7a719787 Merge pull request #4520 from Growstuff/node-20
Node 20
2026-04-23 20:04:37 +09:30
Daniel O'Connor
40e402d06a Merge pull request #4519 from Growstuff/node-18
Node 18
2026-04-23 20:04:25 +09:30
Daniel O'Connor
5cada51fad Node 24 2026-04-23 10:31:28 +00:00
Daniel O'Connor
b1c1955ed3 Merge branch 'dev' into upgrade-eslint 2026-04-23 19:59:27 +09:30
Daniel O'Connor
4fbdd2a92b Merge pull request #4518 from Growstuff/node-16
Node 16
2026-04-23 19:58:16 +09:30
Daniel O'Connor
3379526be3 Node 22 2026-04-23 10:27:01 +00:00
Daniel O'Connor
6d2a5884cb Node 20 2026-04-23 10:24:31 +00:00
Daniel O'Connor
2971bd61dd Node 18 2026-04-23 10:23:06 +00:00
Daniel O'Connor
3553165ebe Node 16 2026-04-23 10:20:50 +00:00
Daniel O'Connor
410ee0050f Merge branch 'dev' into upgrade-eslint 2026-04-23 19:47:15 +09:30
Daniel O'Connor
6ba21bd280 Merge pull request #4517 from Growstuff/node-14
Node 14
2026-04-23 19:46:54 +09:30
Daniel O'Connor
96d290d3fe Node 14 2026-04-23 10:10:16 +00:00
Daniel O'Connor
a24548defb Bump eslint 2026-04-23 09:59:45 +00:00
Daniel O'Connor
5493ecfc5e Merge pull request #4515 from Growstuff/lodash
Bump jshint
2026-04-23 19:28:01 +09:30
Daniel O'Connor
b21111e4ce Merge pull request #4514 from Growstuff/bump-addressable
Bump addressable
2026-04-23 19:25:27 +09:30
Daniel O'Connor
702ec2c47c Merge pull request #4513 from Growstuff/bump-rack
Bump rack
2026-04-23 19:24:17 +09:30
Daniel O'Connor
742bc12c89 Upgrade jshint 2026-04-23 09:50:54 +00:00
Daniel O'Connor
27b552aa8e Bump addressable 2026-04-23 09:42:43 +00:00
Daniel O'Connor
5cb6d8afba Bump rack 2026-04-23 09:41:56 +00:00
Daniel O'Connor
0729e07e55 Merge pull request #4511 from Growstuff/dependabot/bundler/bullet-8.1.1
Bump bullet from 8.1.0 to 8.1.1
2026-04-23 19:06:41 +09:30
Daniel O'Connor
28997f6053 Merge pull request #4512 from Growstuff/dependabot/bundler/aws-sdk-s3-1.220.0
Bump aws-sdk-s3 from 1.219.0 to 1.220.0
2026-04-23 19:06:31 +09:30
dependabot[bot]
732604d507 Bump aws-sdk-s3 from 1.219.0 to 1.220.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.219.0 to 1.220.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.220.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 07:07:01 +00:00
dependabot[bot]
e461fdd27e Bump bullet from 8.1.0 to 8.1.1
Bumps [bullet](https://github.com/flyerhzm/bullet) from 8.1.0 to 8.1.1.
- [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/8.1.0...8.1.1)

---
updated-dependencies:
- dependency-name: bullet
  dependency-version: 8.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-23 07:03:51 +00:00
Daniel O'Connor
3b40c28288 Merge pull request #4510 from Growstuff/dependabot/bundler/oj-3.17.0
Bump oj from 3.16.17 to 3.17.0
2026-04-20 17:03:57 +09:30
dependabot[bot]
a50b9dcb2a Bump oj from 3.16.17 to 3.17.0
Bumps [oj](https://github.com/ohler55/oj) from 3.16.17 to 3.17.0.
- [Release notes](https://github.com/ohler55/oj/releases)
- [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/ohler55/oj/compare/v3.16.17...v3.17.0)

---
updated-dependencies:
- dependency-name: oj
  dependency-version: 3.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-20 07:18:18 +00:00
Daniel O'Connor
ea0a5bfad4 Merge pull request #4508 from Growstuff/dependabot/bundler/scout_apm-6.2.0
Bump scout_apm from 6.1.1 to 6.2.0
2026-04-17 22:57:03 +09:30
dependabot[bot]
77e3db1924 Bump scout_apm from 6.1.1 to 6.2.0
Bumps [scout_apm](https://github.com/scoutapp/scout_apm_ruby) from 6.1.1 to 6.2.0.
- [Changelog](https://github.com/scoutapp/scout_apm_ruby/blob/master/CHANGELOG.markdown)
- [Commits](https://github.com/scoutapp/scout_apm_ruby/compare/v6.1.1...v6.2.0)

---
updated-dependencies:
- dependency-name: scout_apm
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 07:37:59 +00:00
Daniel O'Connor
34290be6be Merge pull request #4507 from Growstuff/dependabot/bundler/faker-3.8.0
Bump faker from 3.7.1 to 3.8.0
2026-04-17 17:06:30 +09:30
Daniel O'Connor
02e0473faa Merge pull request #4509 from Growstuff/dependabot/bundler/axe-core-rspec-4.11.2
Bump axe-core-rspec from 4.11.1 to 4.11.2
2026-04-17 17:06:14 +09:30
dependabot[bot]
95f7cefe0f Bump axe-core-rspec from 4.11.1 to 4.11.2
Bumps [axe-core-rspec](https://github.com/dequelabs/axe-core-gems) from 4.11.1 to 4.11.2.
- [Release notes](https://github.com/dequelabs/axe-core-gems/releases)
- [Changelog](https://github.com/dequelabs/axe-core-gems/blob/v4.11.2/CHANGELOG.md)
- [Commits](https://github.com/dequelabs/axe-core-gems/compare/v4.11.1...v4.11.2)

---
updated-dependencies:
- dependency-name: axe-core-rspec
  dependency-version: 4.11.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 07:09:39 +00:00
dependabot[bot]
bcf6690a0d Bump faker from 3.7.1 to 3.8.0
Bumps [faker](https://github.com/faker-ruby/faker) from 3.7.1 to 3.8.0.
- [Release notes](https://github.com/faker-ruby/faker/releases)
- [Changelog](https://github.com/faker-ruby/faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faker-ruby/faker/compare/v3.7.1...v3.8.0)

---
updated-dependencies:
- dependency-name: faker
  dependency-version: 3.8.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-17 07:05:21 +00:00
Daniel O'Connor
734aa4795a Merge pull request #4505 from Growstuff/dependabot/bundler/rake-13.4.2
Bump rake from 13.4.1 to 13.4.2
2026-04-16 18:56:07 +09:30
dependabot[bot]
3729016770 Bump rake from 13.4.1 to 13.4.2
Bumps [rake](https://github.com/ruby/rake) from 13.4.1 to 13.4.2.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v13.4.1...v13.4.2)

---
updated-dependencies:
- dependency-name: rake
  dependency-version: 13.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-16 07:08:45 +00:00
Daniel O'Connor
a37589cdc6 Merge pull request #4504 from Growstuff/dependabot/bundler/faker-3.7.1
Bump faker from 3.6.1 to 3.7.1
2026-04-15 21:16:41 +09:30
dependabot[bot]
e86e834d94 Bump faker from 3.6.1 to 3.7.1
Bumps [faker](https://github.com/faker-ruby/faker) from 3.6.1 to 3.7.1.
- [Release notes](https://github.com/faker-ruby/faker/releases)
- [Changelog](https://github.com/faker-ruby/faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faker-ruby/faker/compare/v3.6.1...v3.7.1)

---
updated-dependencies:
- dependency-name: faker
  dependency-version: 3.7.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 09:06:05 +00:00
Daniel O'Connor
c73c435d01 Merge pull request #4500 from Growstuff/dependabot/bundler/timecop-0.9.11
Bump timecop from 0.9.10 to 0.9.11
2026-04-15 18:35:01 +09:30
Daniel O'Connor
0375299ec8 Merge pull request #4499 from Growstuff/dependabot/bundler/oj-3.16.17
Bump oj from 3.16.16 to 3.16.17
2026-04-15 18:34:49 +09:30
Daniel O'Connor
27fe8d58dd Merge pull request #4501 from Growstuff/dependabot/bundler/xmlrpc-0.3.4
Bump xmlrpc from 0.3.3 to 0.3.4
2026-04-15 18:34:36 +09:30
Daniel O'Connor
171792b6fd Merge pull request #4503 from Growstuff/dependabot/bundler/rake-13.4.1
Bump rake from 13.3.1 to 13.4.1
2026-04-15 18:34:23 +09:30
dependabot[bot]
83eae50449 Bump rake from 13.3.1 to 13.4.1
Bumps [rake](https://github.com/ruby/rake) from 13.3.1 to 13.4.1.
- [Release notes](https://github.com/ruby/rake/releases)
- [Changelog](https://github.com/ruby/rake/blob/master/History.rdoc)
- [Commits](https://github.com/ruby/rake/compare/v13.3.1...v13.4.1)

---
updated-dependencies:
- dependency-name: rake
  dependency-version: 13.4.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-15 07:03:18 +00:00
dependabot[bot]
bf65e77700 Bump xmlrpc from 0.3.3 to 0.3.4
Bumps [xmlrpc](https://github.com/ruby/xmlrpc) from 0.3.3 to 0.3.4.
- [Release notes](https://github.com/ruby/xmlrpc/releases)
- [Changelog](https://github.com/ruby/xmlrpc/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/xmlrpc/compare/v0.3.3...v0.3.4)

---
updated-dependencies:
- dependency-name: xmlrpc
  dependency-version: 0.3.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 07:09:10 +00:00
dependabot[bot]
fd3e81a059 Bump timecop from 0.9.10 to 0.9.11
Bumps [timecop](https://github.com/travisjeffery/timecop) from 0.9.10 to 0.9.11.
- [Changelog](https://github.com/travisjeffery/timecop/blob/master/History.md)
- [Commits](https://github.com/travisjeffery/timecop/compare/v0.9.10...v0.9.11)

---
updated-dependencies:
- dependency-name: timecop
  dependency-version: 0.9.11
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 07:08:25 +00:00
dependabot[bot]
5ffbcd4e63 Bump oj from 3.16.16 to 3.16.17
Bumps [oj](https://github.com/ohler55/oj) from 3.16.16 to 3.16.17.
- [Release notes](https://github.com/ohler55/oj/releases)
- [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/ohler55/oj/compare/v3.16.16...v3.16.17)

---
updated-dependencies:
- dependency-name: oj
  dependency-version: 3.16.17
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-13 07:05:35 +00:00
Daniel O'Connor
5d3118f833 Update nutritional data link to new URL 2026-04-11 15:12:18 +09:30
Daniel O'Connor
2073b443fa Merge pull request #4498 from Growstuff/CloCkWeRX-patch-2
Add conditional rendering for harvest thumbnail image
2026-04-11 14:57:57 +09:30
Daniel O'Connor
55934bcc4a Add conditional rendering for harvest thumbnail image 2026-04-11 14:57:36 +09:30
Daniel O'Connor
ba25755fdc Merge pull request #4495 from Growstuff/dependabot/bundler/rubocop-1.86.1
Bump rubocop from 1.86.0 to 1.86.1
2026-04-10 19:47:09 +09:30
dependabot[bot]
7d29724fd8 Bump rubocop from 1.86.0 to 1.86.1
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.86.0 to 1.86.1.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.86.0...v1.86.1)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.86.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 10:16:56 +00:00
Daniel O'Connor
d9c387d4f9 Merge pull request #4496 from Growstuff/dependabot/bundler/selenium-webdriver-4.43.0
Bump selenium-webdriver from 4.41.0 to 4.43.0
2026-04-10 19:46:39 +09:30
Daniel O'Connor
73487456f3 Merge pull request #4497 from Growstuff/dependabot/bundler/recaptcha-5.21.2
Bump recaptcha from 5.21.1 to 5.21.2
2026-04-10 19:45:19 +09:30
dependabot[bot]
342f7edfb1 Bump recaptcha from 5.21.1 to 5.21.2
Bumps [recaptcha](https://github.com/ambethia/recaptcha) from 5.21.1 to 5.21.2.
- [Changelog](https://github.com/ambethia/recaptcha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ambethia/recaptcha/compare/v5.21.1...v5.21.2)

---
updated-dependencies:
- dependency-name: recaptcha
  dependency-version: 5.21.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 07:07:18 +00:00
dependabot[bot]
0a1e8d8036 Bump selenium-webdriver from 4.41.0 to 4.43.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.41.0 to 4.43.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.41.0...selenium-4.43.0)

---
updated-dependencies:
- dependency-name: selenium-webdriver
  dependency-version: 4.43.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-10 07:05:41 +00:00
Daniel O'Connor
bf588a31ae Merge pull request #4492 from Growstuff/dependabot/bundler/haml_lint-0.73.0
Bump haml_lint from 0.72.0 to 0.73.0
2026-04-08 17:22:45 +09:30
Daniel O'Connor
2761886c7c Merge pull request #4493 from Growstuff/dependabot/bundler/aws-sdk-s3-1.219.0
Bump aws-sdk-s3 from 1.218.0 to 1.219.0
2026-04-08 17:22:26 +09:30
dependabot[bot]
a71e5fa61f Bump aws-sdk-s3 from 1.218.0 to 1.219.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.218.0 to 1.219.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.219.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-08 07:05:00 +00:00
dependabot[bot]
1eddd89bee Bump haml_lint from 0.72.0 to 0.73.0
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.72.0 to 0.73.0.
- [Release notes](https://github.com/sds/haml-lint/releases)
- [Changelog](https://github.com/sds/haml-lint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sds/haml-lint/compare/v0.72.0...v0.73.0)

---
updated-dependencies:
- dependency-name: haml_lint
  dependency-version: 0.73.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-07 07:06:38 +00:00
Daniel O'Connor
6511c2682b Merge pull request #4491 from Growstuff/dependabot/bundler/active_median-1.0.0
Bump active_median from 0.6.0 to 1.0.0
2026-04-06 19:17:21 +09:30
dependabot[bot]
78b395704f Bump active_median from 0.6.0 to 1.0.0
Bumps [active_median](https://github.com/ankane/active_median) from 0.6.0 to 1.0.0.
- [Changelog](https://github.com/ankane/active_median/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ankane/active_median/compare/v0.6.0...v1.0.0)

---
updated-dependencies:
- dependency-name: active_median
  dependency-version: 1.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-06 07:04:49 +00:00
Daniel O'Connor
9fa9d14616 Merge pull request #4490 from Growstuff/dependabot/bundler/aws-sdk-s3-1.218.0
Bump aws-sdk-s3 from 1.217.0 to 1.218.0
2026-04-04 09:00:24 +10:30
dependabot[bot]
8e42e63359 Bump aws-sdk-s3 from 1.217.0 to 1.218.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.217.0 to 1.218.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.218.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-04-01 07:26:50 +00:00
Daniel O'Connor
5004ace754 Merge pull request #4420 from Growstuff/dependabot/bundler/byebug-13.0.0
Bump byebug from 12.0.0 to 13.0.0
2026-03-26 18:10:50 +09:30
Daniel O'Connor
b6a2af6e3d Merge pull request #4404 from Growstuff/dependabot/bundler/vcr-6.4.0
Bump vcr from 6.3.1 to 6.4.0
2026-03-26 18:10:39 +09:30
dependabot[bot]
c192814d09 Bump vcr from 6.3.1 to 6.4.0
Bumps [vcr](https://github.com/vcr/vcr) from 6.3.1 to 6.4.0.
- [Release notes](https://github.com/vcr/vcr/releases)
- [Changelog](https://github.com/vcr/vcr/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vcr/vcr/compare/v6.3.1...v6.4.0)

---
updated-dependencies:
- dependency-name: vcr
  dependency-version: 6.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 08:23:21 +00:00
Daniel O'Connor
9ba7d8ba86 Merge pull request #4424 from Growstuff/dependabot/bundler/puma-7.2.0
Bump puma from 7.1.0 to 7.2.0
2026-03-26 17:52:22 +09:30
dependabot[bot]
19fdfc3682 Bump byebug from 12.0.0 to 13.0.0
Bumps [byebug](https://github.com/deivid-rodriguez/byebug) from 12.0.0 to 13.0.0.
- [Release notes](https://github.com/deivid-rodriguez/byebug/releases)
- [Changelog](https://github.com/deivid-rodriguez/byebug/blob/main/CHANGELOG.md)
- [Commits](https://github.com/deivid-rodriguez/byebug/compare/v12.0.0...v13.0.0)

---
updated-dependencies:
- dependency-name: byebug
  dependency-version: 13.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 08:14:25 +00:00
dependabot[bot]
9a15c28782 Bump puma from 7.1.0 to 7.2.0
Bumps [puma](https://github.com/puma/puma) from 7.1.0 to 7.2.0.
- [Release notes](https://github.com/puma/puma/releases)
- [Changelog](https://github.com/puma/puma/blob/main/History.md)
- [Commits](https://github.com/puma/puma/compare/v7.1.0...v7.2.0)

---
updated-dependencies:
- dependency-name: puma
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 08:13:15 +00:00
Daniel O'Connor
aff780a19a Merge pull request #4482 from Growstuff/dependabot/bundler/terser-1.2.7
Bump terser from 1.2.6 to 1.2.7
2026-03-26 17:39:59 +09:30
Daniel O'Connor
2ade7c9226 Merge pull request #4466 from Growstuff/dependabot/bundler/faker-3.6.1
Bump faker from 3.6.0 to 3.6.1
2026-03-26 17:39:11 +09:30
Daniel O'Connor
0431d11c51 Merge pull request #4474 from Growstuff/dependabot/bundler/loofah-2.25.1
Bump loofah from 2.25.0 to 2.25.1
2026-03-26 17:39:05 +09:30
Daniel O'Connor
781c63edd7 Merge pull request #4478 from Growstuff/dependabot/bundler/icalendar-2.12.2
Bump icalendar from 2.12.1 to 2.12.2
2026-03-26 17:38:57 +09:30
Daniel O'Connor
a0590b972d Merge pull request #4484 from Growstuff/dependabot/npm_and_yarn/picomatch-2.3.2
Bump picomatch from 2.3.1 to 2.3.2
2026-03-26 17:38:47 +09:30
dependabot[bot]
06e839a527 Bump picomatch from 2.3.1 to 2.3.2
Bumps [picomatch](https://github.com/micromatch/picomatch) from 2.3.1 to 2.3.2.
- [Release notes](https://github.com/micromatch/picomatch/releases)
- [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/picomatch/compare/2.3.1...2.3.2)

---
updated-dependencies:
- dependency-name: picomatch
  dependency-version: 2.3.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 07:58:51 +00:00
dependabot[bot]
6de2ad7fe9 Bump faker from 3.6.0 to 3.6.1
Bumps [faker](https://github.com/faker-ruby/faker) from 3.6.0 to 3.6.1.
- [Release notes](https://github.com/faker-ruby/faker/releases)
- [Changelog](https://github.com/faker-ruby/faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faker-ruby/faker/compare/v3.6.0...v3.6.1)

---
updated-dependencies:
- dependency-name: faker
  dependency-version: 3.6.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 07:50:38 +00:00
dependabot[bot]
f768dc6c3c Bump loofah from 2.25.0 to 2.25.1
Bumps [loofah](https://github.com/flavorjones/loofah) from 2.25.0 to 2.25.1.
- [Release notes](https://github.com/flavorjones/loofah/releases)
- [Changelog](https://github.com/flavorjones/loofah/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flavorjones/loofah/compare/v2.25.0...v2.25.1)

---
updated-dependencies:
- dependency-name: loofah
  dependency-version: 2.25.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 07:50:33 +00:00
dependabot[bot]
87a433be8e Bump icalendar from 2.12.1 to 2.12.2
Bumps [icalendar](https://github.com/icalendar/icalendar) from 2.12.1 to 2.12.2.
- [Changelog](https://github.com/icalendar/icalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/icalendar/icalendar/compare/v2.12.1...v2.12.2)

---
updated-dependencies:
- dependency-name: icalendar
  dependency-version: 2.12.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 07:50:32 +00:00
dependabot[bot]
8bfb013cfb Bump terser from 1.2.6 to 1.2.7
Bumps [terser](https://github.com/ahorek/terser-ruby) from 1.2.6 to 1.2.7.
- [Release notes](https://github.com/ahorek/terser-ruby/releases)
- [Changelog](https://github.com/ahorek/terser-ruby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ahorek/terser-ruby/compare/1.2.6...1.2.7)

---
updated-dependencies:
- dependency-name: terser
  dependency-version: 1.2.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 07:50:25 +00:00
Daniel O'Connor
79e5ddd8dd Merge pull request #4473 from Growstuff/dependabot/bundler/devise-5.0.3
Bump devise from 5.0.2 to 5.0.3
2026-03-26 17:19:10 +09:30
Daniel O'Connor
6ec37b1d2b Merge pull request #4472 from Growstuff/dependabot/bundler/oj-3.16.16
Bump oj from 3.16.15 to 3.16.16
2026-03-26 17:18:58 +09:30
Daniel O'Connor
56753f2869 Merge pull request #4486 from Growstuff/refactor-signup-spec-10681697950343780211
Refactor existing username signup spec
2026-03-26 17:18:35 +09:30
google-labs-jules[bot]
477812f06b Refactor signup feature spec to use direct database setup
- Rewrote the 'sign up for new account with existing username' test in
  spec/features/signup_spec.rb.
- Replaced UI-driven setup of an existing user with FactoryBot's `create`.
- Replaced UI navigation with a direct call to `new_member_registration_path`.
- Added an explicit assertion for the 'has already been taken' error
  message.
- Ensured a unique email is used for the second signup attempt to isolate
  the username validation check.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-03-26 06:34:32 +00:00
dependabot[bot]
e972cd4d56 Bump devise from 5.0.2 to 5.0.3
Bumps [devise](https://github.com/heartcombo/devise) from 5.0.2 to 5.0.3.
- [Release notes](https://github.com/heartcombo/devise/releases)
- [Changelog](https://github.com/heartcombo/devise/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heartcombo/devise/compare/v5.0.2...v5.0.3)

---
updated-dependencies:
- dependency-name: devise
  dependency-version: 5.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 06:18:55 +00:00
dependabot[bot]
3039ae0dc2 Bump oj from 3.16.15 to 3.16.16
Bumps [oj](https://github.com/ohler55/oj) from 3.16.15 to 3.16.16.
- [Release notes](https://github.com/ohler55/oj/releases)
- [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/ohler55/oj/compare/v3.16.15...v3.16.16)

---
updated-dependencies:
- dependency-name: oj
  dependency-version: 3.16.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 06:18:55 +00:00
Daniel O'Connor
bd1da7cad0 Merge pull request #4475 from Growstuff/dependabot/bundler/aws-sdk-s3-1.217.0
Bump aws-sdk-s3 from 1.213.0 to 1.217.0
2026-03-26 15:47:23 +09:30
dependabot[bot]
38c0dd3a63 Bump aws-sdk-s3 from 1.213.0 to 1.217.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.213.0 to 1.217.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.217.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-26 05:57:54 +00:00
Daniel O'Connor
5e24ba113f Merge pull request #4485 from Growstuff/flaky-test-admin-forums
Decrease failures by checking for the save message first in admin tests
2026-03-26 15:25:51 +09:30
Daniel O'Connor
f94f5638c8 Decrease failures by checking for the save message first 2026-03-26 05:47:00 +00:00
dependabot[bot]
90c177408d Bump rubocop from 1.85.0 to 1.86.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.85.0 to 1.86.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.85.0...v1.86.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.86.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-24 20:29:42 +13:00
Daniel O'Connor
baca934a70 Merge pull request #4481 from Growstuff/dependabot/bundler/activesupport-7.2.3.1
Bump activesupport from 7.2.3 to 7.2.3.1
2026-03-24 11:53:12 +09:30
dependabot[bot]
397517547e Bump activesupport from 7.2.3 to 7.2.3.1
Bumps [activesupport](https://github.com/rails/rails) from 7.2.3 to 7.2.3.1.
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/v8.1.2.1/activesupport/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v7.2.3...v7.2.3.1)

---
updated-dependencies:
- dependency-name: activesupport
  dependency-version: 7.2.3.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-24 02:06:17 +00:00
Daniel O'Connor
07f6bc8b76 Merge pull request #4476 from Growstuff/dependabot/bundler/json-2.19.2
Bump json from 2.19.0 to 2.19.2
2026-03-20 18:37:52 +09:30
dependabot[bot]
8eaca222a0 Bump json from 2.19.0 to 2.19.2
Bumps [json](https://github.com/ruby/json) from 2.19.0 to 2.19.2.
- [Release notes](https://github.com/ruby/json/releases)
- [Changelog](https://github.com/ruby/json/blob/master/CHANGES.md)
- [Commits](https://github.com/ruby/json/compare/v2.19.0...v2.19.2)

---
updated-dependencies:
- dependency-name: json
  dependency-version: 2.19.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-19 12:57:30 +00:00
Daniel O'Connor
f0afcadc51 Merge pull request #4471 from Growstuff/dependabot/bundler/rspec-rails-8.0.4
Bump rspec-rails from 8.0.3 to 8.0.4
2026-03-13 18:52:54 +10:30
dependabot[bot]
adbf3cc609 Bump rspec-rails from 8.0.3 to 8.0.4
Bumps [rspec-rails](https://github.com/rspec/rspec-rails) from 8.0.3 to 8.0.4.
- [Changelog](https://github.com/rspec/rspec-rails/blob/main/Changelog.md)
- [Commits](https://github.com/rspec/rspec-rails/compare/v8.0.3...v8.0.4)

---
updated-dependencies:
- dependency-name: rspec-rails
  dependency-version: 8.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-13 07:04:28 +00:00
Daniel O'Connor
152e843ca4 Merge pull request #4465 from Growstuff/dependabot/bundler/haml_lint-0.72.0
Bump haml_lint from 0.71.0 to 0.72.0
2026-03-07 14:07:37 +10:30
dependabot[bot]
21f4349b08 Bump haml_lint from 0.71.0 to 0.72.0
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.71.0 to 0.72.0.
- [Release notes](https://github.com/sds/haml-lint/releases)
- [Changelog](https://github.com/sds/haml-lint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sds/haml-lint/compare/v0.71.0...v0.72.0)

---
updated-dependencies:
- dependency-name: haml_lint
  dependency-version: 0.72.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-07 03:07:58 +00:00
Daniel O'Connor
7d8ed6f681 Merge pull request #4463 from Growstuff/remove-travis
Remove travis
2026-03-07 13:36:35 +10:30
Daniel O'Connor
857fceda55 Merge pull request #4452 from Growstuff/dependabot/bundler/selenium-webdriver-4.41.0
Bump selenium-webdriver from 4.40.0 to 4.41.0
2026-03-01 16:49:47 +10:30
dependabot[bot]
2583470966 Bump selenium-webdriver from 4.40.0 to 4.41.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.40.0 to 4.41.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.40.0...selenium-4.41.0)

---
updated-dependencies:
- dependency-name: selenium-webdriver
  dependency-version: 4.41.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 05:57:20 +00:00
Daniel O'Connor
14f8f36d4a Merge pull request #4393 from Growstuff/dependabot/github_actions/actions/cache-5
Bump actions/cache from 4 to 5
2026-03-01 16:21:47 +10:30
Daniel O'Connor
65adc7a2f9 Merge pull request #4419 from Growstuff/dependabot/bundler/haml-7.2.0
Bump haml from 7.1.0 to 7.2.0
2026-03-01 16:19:45 +10:30
Daniel O'Connor
1e9fe31e2e Merge pull request #4457 from Growstuff/dependabot/bundler/haml_lint-0.71.0
Bump haml_lint from 0.68.0 to 0.71.0
2026-03-01 16:18:46 +10:30
Daniel O'Connor
3393d6710b Merge pull request #4454 from Growstuff/dependabot/bundler/scout_apm-6.1.1
Bump scout_apm from 6.0.2 to 6.1.1
2026-03-01 16:17:39 +10:30
Daniel O'Connor
5767b62b0f Merge pull request #4425 from Growstuff/dependabot/npm_and_yarn/lodash-4.17.23
Bump lodash from 4.17.21 to 4.17.23
2026-03-01 16:16:27 +10:30
dependabot[bot]
5e0d2b153a Bump scout_apm from 6.0.2 to 6.1.1
Bumps [scout_apm](https://github.com/scoutapp/scout_apm_ruby) from 6.0.2 to 6.1.1.
- [Changelog](https://github.com/scoutapp/scout_apm_ruby/blob/master/CHANGELOG.markdown)
- [Commits](https://github.com/scoutapp/scout_apm_ruby/compare/v6.0.2...v6.1.1)

---
updated-dependencies:
- dependency-name: scout_apm
  dependency-version: 6.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 05:46:24 +00:00
Daniel O'Connor
2c864f2f59 Merge pull request #4426 from Growstuff/dependabot/bundler/faker-3.6.0
Bump faker from 3.5.3 to 3.6.0
2026-03-01 16:15:55 +10:30
Daniel O'Connor
21a23af522 Merge pull request #4432 from Growstuff/dependabot/bundler/aws-sdk-s3-1.213.0
Bump aws-sdk-s3 from 1.212.0 to 1.213.0
2026-03-01 16:15:26 +10:30
Daniel O'Connor
9a4396c7c3 Merge pull request #4455 from Growstuff/dependabot/bundler/dalli-5.0.2
Bump dalli from 5.0.1 to 5.0.2
2026-03-01 16:15:08 +10:30
Daniel O'Connor
43b8ac1da8 Bump rubocop from 1.82.1 to 1.85.0 (#4458)
* Bump rubocop from 1.82.1 to 1.85.0

Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.82.1 to 1.85.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.82.1...v1.85.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.85.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Bump rubocop from 1.82.1 to 1.85.0

Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.82.1 to 1.85.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.82.1...v1.85.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.85.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Regenerate TODO

* Update exclusions

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Daniel O'Connor <daniel.oconnor@gmail.com>
2026-03-01 15:51:34 +10:30
Daniel O'Connor
282a369d0d Update exclusions 2026-03-01 05:21:20 +00:00
Daniel O'Connor
a860cfe5a3 Regenerate TODO 2026-03-01 05:18:56 +00:00
Daniel O'Connor
4711be9fe6 Merge branch 'dependabot/bundler/rubocop-1.85.0' of https://github.com/Growstuff/growstuff into dependabot/bundler/rubocop-1.85.0 2026-03-01 05:15:54 +00:00
Daniel O'Connor
93bb82f938 Merge branch 'dev' of https://github.com/Growstuff/growstuff into dependabot/bundler/rubocop-1.85.0 2026-03-01 05:15:45 +00:00
dependabot[bot]
d8917d3c54 Bump rubocop from 1.82.1 to 1.85.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.82.1 to 1.85.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.82.1...v1.85.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.85.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 05:12:32 +00:00
dependabot[bot]
fc6ee9db36 Bump haml_lint from 0.68.0 to 0.71.0
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.68.0 to 0.71.0.
- [Release notes](https://github.com/sds/haml-lint/releases)
- [Changelog](https://github.com/sds/haml-lint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sds/haml-lint/compare/v0.68.0...v0.71.0)

---
updated-dependencies:
- dependency-name: haml_lint
  dependency-version: 0.71.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 05:12:01 +00:00
dependabot[bot]
54d8f557e3 Bump dalli from 5.0.1 to 5.0.2
Bumps [dalli](https://github.com/petergoldstein/dalli) from 5.0.1 to 5.0.2.
- [Changelog](https://github.com/petergoldstein/dalli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/petergoldstein/dalli/compare/v5.0.1...v5.0.2)

---
updated-dependencies:
- dependency-name: dalli
  dependency-version: 5.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 05:11:50 +00:00
Daniel O'Connor
0aa182af14 Remove travis 2026-03-01 05:11:29 +00:00
Daniel O'Connor
ffc381ec6f Merge pull request #4462 from Growstuff/ruby-3.4
Ruby 3.4.8
2026-03-01 15:40:30 +10:30
dependabot[bot]
8517f2a1d9 Bump rubocop from 1.82.1 to 1.85.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.82.1 to 1.85.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.82.1...v1.85.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.85.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-01 03:45:22 +00:00
Daniel O'Connor
c628ed92a8 Merge pull request #4456 from Growstuff/dependabot/bundler/capybara-screenshot-1.0.27
Bump capybara-screenshot from 1.0.26 to 1.0.27
2026-03-01 14:13:56 +10:30
dependabot[bot]
81834d4f90 Bump capybara-screenshot from 1.0.26 to 1.0.27
Bumps [capybara-screenshot](https://github.com/mattheworiordan/capybara-screenshot) from 1.0.26 to 1.0.27.
- [Release notes](https://github.com/mattheworiordan/capybara-screenshot/releases)
- [Changelog](https://github.com/mattheworiordan/capybara-screenshot/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mattheworiordan/capybara-screenshot/compare/v1.0.26...v1.0.27)

---
updated-dependencies:
- dependency-name: capybara-screenshot
  dependency-version: 1.0.27
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-25 07:05:12 +00:00
dependabot[bot]
ccfab85c97 Bump aws-sdk-s3 from 1.212.0 to 1.213.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.212.0 to 1.213.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.213.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-22 22:37:56 +00:00
Daniel O'Connor
70379e222b Merge pull request #4451 from Growstuff/dependabot/bundler/platform-api-3.9.0
Bump platform-api from 3.8.0 to 3.9.0
2026-02-23 09:07:24 +10:30
Daniel O'Connor
2e488106e1 Merge pull request #4439 from Growstuff/dependabot/bundler/oj-3.16.15
Bump oj from 3.16.13 to 3.16.15
2026-02-23 09:06:36 +10:30
dependabot[bot]
08230ab2fd Bump platform-api from 3.8.0 to 3.9.0
Bumps [platform-api](https://github.com/heroku/platform-api) from 3.8.0 to 3.9.0.
- [Changelog](https://github.com/heroku/platform-api/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heroku/platform-api/compare/v3.8.0...v3.9.0)

---
updated-dependencies:
- dependency-name: platform-api
  dependency-version: 3.9.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-22 10:32:57 +00:00
dependabot[bot]
94c42d26c5 Bump oj from 3.16.13 to 3.16.15
Bumps [oj](https://github.com/ohler55/oj) from 3.16.13 to 3.16.15.
- [Release notes](https://github.com/ohler55/oj/releases)
- [Changelog](https://github.com/ohler55/oj/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/ohler55/oj/compare/v3.16.13...v3.16.15)

---
updated-dependencies:
- dependency-name: oj
  dependency-version: 3.16.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-22 10:32:50 +00:00
Daniel O'Connor
351025819d Merge pull request #4441 from Growstuff/dependabot/bundler/faraday-2.14.1
Bump faraday from 2.14.0 to 2.14.1
2026-02-22 21:01:25 +10:30
dependabot[bot]
98cd516500 Bump faraday from 2.14.0 to 2.14.1
Bumps [faraday](https://github.com/lostisland/faraday) from 2.14.0 to 2.14.1.
- [Release notes](https://github.com/lostisland/faraday/releases)
- [Changelog](https://github.com/lostisland/faraday/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lostisland/faraday/compare/v2.14.0...v2.14.1)

---
updated-dependencies:
- dependency-name: faraday
  dependency-version: 2.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-22 05:30:06 +00:00
Daniel O'Connor
c6b1450625 Merge pull request #4440 from Growstuff/dependabot/bundler/dalli-5.0.0
Bump dalli from 3.2.8 to 5.0.0
2026-02-22 15:58:36 +10:30
google-labs-jules[bot]
8bafba7f9d Ensure "mark as failed" option is available when viewing a crop
This change adds the "mark as failed" action to the crop view in two places:
1. In the "Crop Actions" button group, a new "Mark as failed" button is added if the current member has active plantings of that crop. Clicking it opens a modal to select which planting failed.
2. In the "See who's planted" list, an "Actions" dropdown is added to any plantings owned by the current member, which includes the "Mark as failed" option.

A new partial `app/views/plantings/_failed_modal.html.haml` was created to handle the planting selection modal.
`app/views/crops/_actions.html.haml` and `app/views/crops/_plantings.html.haml` were updated to include these new actions.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-02-22 00:08:58 +00:00
dependabot[bot]
3bca3de5c2 Bump dalli from 3.2.8 to 5.0.0
Bumps [dalli](https://github.com/petergoldstein/dalli) from 3.2.8 to 5.0.0.
- [Changelog](https://github.com/petergoldstein/dalli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/petergoldstein/dalli/compare/v3.2.8...v5.0.0)

---
updated-dependencies:
- dependency-name: dalli
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-21 23:50:55 +00:00
Daniel O'Connor
e2171fbe29 Merge pull request #4434 from Growstuff/dependabot/bundler/axe-core-capybara-4.11.1
Bump axe-core-capybara from 4.11.0 to 4.11.1
2026-02-22 10:19:58 +10:30
Daniel O'Connor
3feaaaa42e Merge pull request #4449 from Growstuff/dependabot/bundler/devise-5.0.2
Bump devise from 4.9.4 to 5.0.2
2026-02-22 10:19:24 +10:30
dependabot[bot]
e70dbcbaf3 Bump devise from 4.9.4 to 5.0.2
Bumps [devise](https://github.com/heartcombo/devise) from 4.9.4 to 5.0.2.
- [Release notes](https://github.com/heartcombo/devise/releases)
- [Changelog](https://github.com/heartcombo/devise/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heartcombo/devise/compare/v4.9.4...v5.0.2)

---
updated-dependencies:
- dependency-name: devise
  dependency-version: 5.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 07:03:45 +00:00
dependabot[bot]
de7e717bd1 Bump axe-core-capybara from 4.11.0 to 4.11.1
Bumps [axe-core-capybara](https://github.com/dequelabs/axe-core-gems) from 4.11.0 to 4.11.1.
- [Release notes](https://github.com/dequelabs/axe-core-gems/releases)
- [Changelog](https://github.com/dequelabs/axe-core-gems/blob/develop/CHANGELOG.md)
- [Commits](https://github.com/dequelabs/axe-core-gems/compare/v4.11.0...v4.11.1)

---
updated-dependencies:
- dependency-name: axe-core-capybara
  dependency-version: 4.11.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 00:42:11 +00:00
dependabot[bot]
6442603147 Bump faker from 3.5.3 to 3.6.0
Bumps [faker](https://github.com/faker-ruby/faker) from 3.5.3 to 3.6.0.
- [Release notes](https://github.com/faker-ruby/faker/releases)
- [Changelog](https://github.com/faker-ruby/faker/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faker-ruby/faker/compare/v3.5.3...v3.6.0)

---
updated-dependencies:
- dependency-name: faker
  dependency-version: 3.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-20 00:42:01 +00:00
Daniel O'Connor
85c1db6ffd Merge pull request #4446 from Growstuff/dependabot/bundler/rspec-rails-8.0.3
Bump rspec-rails from 8.0.2 to 8.0.3
2026-02-20 11:10:40 +10:30
dependabot[bot]
53548c745d Bump rspec-rails from 8.0.2 to 8.0.3
Bumps [rspec-rails](https://github.com/rspec/rspec-rails) from 8.0.2 to 8.0.3.
- [Changelog](https://github.com/rspec/rspec-rails/blob/main/Changelog.md)
- [Commits](https://github.com/rspec/rspec-rails/compare/v8.0.2...v8.0.3)

---
updated-dependencies:
- dependency-name: rspec-rails
  dependency-version: 8.0.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-18 07:02:48 +00:00
dependabot[bot]
8c894fdd54 Bump haml from 7.1.0 to 7.2.0
Bumps [haml](https://github.com/haml/haml) from 7.1.0 to 7.2.0.
- [Release notes](https://github.com/haml/haml/releases)
- [Changelog](https://github.com/haml/haml/blob/main/CHANGELOG.md)
- [Commits](https://github.com/haml/haml/compare/v7.1.0...v7.2.0)

---
updated-dependencies:
- dependency-name: haml
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-22 11:59:22 +00:00
Daniel O'Connor
b4df4fccda Merge pull request #4408 from Growstuff/dependabot/bundler/pry-0.16.0
Bump pry from 0.15.2 to 0.16.0
2026-01-22 22:28:17 +10:30
Daniel O'Connor
60de11e6d5 Merge pull request #4423 from Growstuff/dependabot/bundler/listen-3.10.0
Bump listen from 3.9.0 to 3.10.0
2026-01-22 22:28:05 +10:30
dependabot[bot]
905e8a0fe4 Bump lodash from 4.17.21 to 4.17.23
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23)

---
updated-dependencies:
- dependency-name: lodash
  dependency-version: 4.17.23
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-21 23:05:37 +00:00
dependabot[bot]
4d5edd3b05 Bump listen from 3.9.0 to 3.10.0
Bumps [listen](https://github.com/guard/listen) from 3.9.0 to 3.10.0.
- [Release notes](https://github.com/guard/listen/releases)
- [Commits](https://github.com/guard/listen/compare/v3.9.0...v3.10.0)

---
updated-dependencies:
- dependency-name: listen
  dependency-version: 3.10.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-20 06:47:52 +00:00
dependabot[bot]
5d835d908d Bump pry from 0.15.2 to 0.16.0
Bumps [pry](https://github.com/pry/pry) from 0.15.2 to 0.16.0.
- [Release notes](https://github.com/pry/pry/releases)
- [Changelog](https://github.com/pry/pry/blob/master/CHANGELOG.md)
- [Commits](https://github.com/pry/pry/compare/v0.15.2...v0.16.0)

---
updated-dependencies:
- dependency-name: pry
  dependency-version: 0.16.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-20 06:47:48 +00:00
Daniel O'Connor
3fb165e185 Merge pull request #4422 from Growstuff/dependabot/bundler/selenium-webdriver-4.40.0
Bump selenium-webdriver from 4.39.0 to 4.40.0
2026-01-20 17:16:25 +10:30
dependabot[bot]
6f62159813 Bump selenium-webdriver from 4.39.0 to 4.40.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.39.0 to 4.40.0.
- [Release notes](https://github.com/SeleniumHQ/selenium/releases)
- [Changelog](https://github.com/SeleniumHQ/selenium/blob/trunk/rb/CHANGES)
- [Commits](https://github.com/SeleniumHQ/selenium/compare/selenium-4.39.0...selenium-4.40.0)

---
updated-dependencies:
- dependency-name: selenium-webdriver
  dependency-version: 4.40.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-19 07:38:01 +00:00
Daniel O'Connor
7d5dc36d2c Merge pull request #4416 from Growstuff/dependabot/bundler/aws-sdk-s3-1.211.0
Bump aws-sdk-s3 from 1.208.0 to 1.211.0
2026-01-19 10:05:50 +10:30
dependabot[bot]
8b7da7eb35 Bump aws-sdk-s3 from 1.208.0 to 1.211.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.208.0 to 1.211.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.211.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-18 00:38:10 +00:00
Daniel O'Connor
32738450d1 Merge pull request #4409 from Growstuff/dependabot/bundler/pg-1.6.3
Bump pg from 1.6.2 to 1.6.3
2026-01-18 11:06:45 +10:30
dependabot[bot]
7fcb1600d7 Bump pg from 1.6.2 to 1.6.3
Bumps [pg](https://github.com/ged/ruby-pg) from 1.6.2 to 1.6.3.
- [Changelog](https://github.com/ged/ruby-pg/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ged/ruby-pg/compare/v1.6.2...v1.6.3)

---
updated-dependencies:
- dependency-name: pg
  dependency-version: 1.6.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-17 03:43:56 +00:00
Daniel O'Connor
593071507d Merge pull request #4406 from Growstuff/dependabot/bundler/hashie-5.1.0
Bump hashie from 5.0.0 to 5.1.0
2026-01-17 14:12:32 +10:30
dependabot[bot]
28dc25ed1f Bump hashie from 5.0.0 to 5.1.0
Bumps [hashie](https://github.com/hashie/hashie) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/hashie/hashie/releases)
- [Changelog](https://github.com/hashie/hashie/blob/master/CHANGELOG.md)
- [Commits](https://github.com/hashie/hashie/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: hashie
  dependency-version: 5.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-15 13:05:19 +00:00
Daniel O'Connor
39c4dab0f7 Merge pull request #4417 from Growstuff/dependabot/bundler/httparty-0.24.0
Bump httparty from 0.22.0 to 0.24.0
2026-01-15 23:34:01 +10:30
dependabot[bot]
e2c6197c8f Bump httparty from 0.22.0 to 0.24.0
Bumps [httparty](https://github.com/jnunemaker/httparty) from 0.22.0 to 0.24.0.
- [Release notes](https://github.com/jnunemaker/httparty/releases)
- [Changelog](https://github.com/jnunemaker/httparty/blob/main/Changelog.md)
- [Commits](https://github.com/jnunemaker/httparty/compare/v0.22.0...v0.24.0)

---
updated-dependencies:
- dependency-name: httparty
  dependency-version: 0.24.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 09:07:26 +00:00
Daniel O'Connor
41b861a952 Merge pull request #4407 from Growstuff/dependabot/bundler/rubocop-1.82.1
Bump rubocop from 1.82.0 to 1.82.1
2026-01-09 19:36:37 +10:30
Daniel O'Connor
a79fc59880 Merge pull request #4411 from Growstuff/dependabot/bundler/rubocop-rails-2.34.3
Bump rubocop-rails from 2.34.2 to 2.34.3
2026-01-09 19:36:23 +10:30
Daniel O'Connor
a53289936e Merge pull request #4415 from Growstuff/dependabot/bundler/rubocop-rspec-3.9.0
Bump rubocop-rspec from 3.8.0 to 3.9.0
2026-01-09 19:36:15 +10:30
dependabot[bot]
f1494a5b69 Bump rubocop-rspec from 3.8.0 to 3.9.0
Bumps [rubocop-rspec](https://github.com/rubocop/rubocop-rspec) from 3.8.0 to 3.9.0.
- [Release notes](https://github.com/rubocop/rubocop-rspec/releases)
- [Changelog](https://github.com/rubocop/rubocop-rspec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rspec/compare/v3.8.0...v3.9.0)

---
updated-dependencies:
- dependency-name: rubocop-rspec
  dependency-version: 3.9.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 08:36:13 +00:00
dependabot[bot]
f4ea01e83e Bump rubocop-rails from 2.34.2 to 2.34.3
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.34.2 to 2.34.3.
- [Release notes](https://github.com/rubocop/rubocop-rails/releases)
- [Changelog](https://github.com/rubocop/rubocop-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rails/compare/v2.34.2...v2.34.3)

---
updated-dependencies:
- dependency-name: rubocop-rails
  dependency-version: 2.34.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 08:36:05 +00:00
dependabot[bot]
f525c3e2de Bump rubocop from 1.82.0 to 1.82.1
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.82.0 to 1.82.1.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.82.0...v1.82.1)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.82.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-01-09 08:36:04 +00:00
Daniel O'Connor
a7230dbd7e Merge pull request #4410 from Growstuff/dependabot/bundler/uri-1.0.4
Bump uri from 1.0.3 to 1.0.4
2026-01-09 19:04:56 +10:30
dependabot[bot]
e7ad3f3077 Bump uri from 1.0.3 to 1.0.4
Bumps [uri](https://github.com/ruby/uri) from 1.0.3 to 1.0.4.
- [Release notes](https://github.com/ruby/uri/releases)
- [Commits](https://github.com/ruby/uri/compare/v1.0.3...v1.0.4)

---
updated-dependencies:
- dependency-name: uri
  dependency-version: 1.0.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-30 21:11:48 +00:00
Daniel O'Connor
fe7ed30c99 Merge pull request #4399 from Growstuff/dependabot/bundler/haml_lint-0.68.0
Bump haml_lint from 0.67.0 to 0.68.0
2025-12-26 14:00:09 +10:30
Daniel O'Connor
3bbd71edf2 Merge pull request #4403 from Growstuff/dependabot/bundler/scout_apm-6.0.2
Bump scout_apm from 6.0.1 to 6.0.2
2025-12-26 14:00:01 +10:30
dependabot[bot]
e0c56b8c8b Bump scout_apm from 6.0.1 to 6.0.2
Bumps [scout_apm](https://github.com/scoutapp/scout_apm_ruby) from 6.0.1 to 6.0.2.
- [Changelog](https://github.com/scoutapp/scout_apm_ruby/blob/master/CHANGELOG.markdown)
- [Commits](https://github.com/scoutapp/scout_apm_ruby/compare/v6.0.1...v6.0.2)

---
updated-dependencies:
- dependency-name: scout_apm
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-19 07:57:00 +00:00
dependabot[bot]
523a5b038a Bump haml_lint from 0.67.0 to 0.68.0
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.67.0 to 0.68.0.
- [Release notes](https://github.com/sds/haml-lint/releases)
- [Changelog](https://github.com/sds/haml-lint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sds/haml-lint/compare/v0.67.0...v0.68.0)

---
updated-dependencies:
- dependency-name: haml_lint
  dependency-version: 0.68.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-19 07:56:58 +00:00
Daniel O'Connor
ff6555f56c Merge pull request #4402 from Growstuff/dependabot/bundler/rubocop-1.82.0
Bump rubocop from 1.81.7 to 1.82.0
2025-12-19 18:25:51 +10:30
dependabot[bot]
d49e2ee3f8 Bump rubocop from 1.81.7 to 1.82.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.81.7 to 1.82.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.81.7...v1.82.0)

---
updated-dependencies:
- dependency-name: rubocop
  dependency-version: 1.82.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-18 07:20:20 +00:00
Daniel O'Connor
b958261e21 Merge pull request #4401 from Growstuff/dependabot/bundler/aws-sdk-s3-1.208.0
Bump aws-sdk-s3 from 1.207.0 to 1.208.0
2025-12-18 17:49:11 +10:30
dependabot[bot]
c12d838328 Bump aws-sdk-s3 from 1.207.0 to 1.208.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.207.0 to 1.208.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.208.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-17 07:02:52 +00:00
Daniel O'Connor
8bafc81005 Merge pull request #4392 from Growstuff/dependabot/bundler/sidekiq-7.3.10
Bump sidekiq from 7.3.9 to 7.3.10
2025-12-16 21:15:06 +10:30
Daniel O'Connor
8796f9d6f6 Merge pull request #4398 from Growstuff/dependabot/bundler/loofah-2.25.0
Bump loofah from 2.24.1 to 2.25.0
2025-12-16 21:14:57 +10:30
dependabot[bot]
f2b5aa3477 Bump loofah from 2.24.1 to 2.25.0
Bumps [loofah](https://github.com/flavorjones/loofah) from 2.24.1 to 2.25.0.
- [Release notes](https://github.com/flavorjones/loofah/releases)
- [Changelog](https://github.com/flavorjones/loofah/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flavorjones/loofah/compare/v2.24.1...v2.25.0)

---
updated-dependencies:
- dependency-name: loofah
  dependency-version: 2.25.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-16 10:13:09 +00:00
dependabot[bot]
bbc64d5e32 Bump sidekiq from 7.3.9 to 7.3.10
Bumps [sidekiq](https://github.com/sidekiq/sidekiq) from 7.3.9 to 7.3.10.
- [Changelog](https://github.com/sidekiq/sidekiq/blob/main/Changes.md)
- [Commits](https://github.com/sidekiq/sidekiq/compare/v7.3.9...v7.3.10)

---
updated-dependencies:
- dependency-name: sidekiq
  dependency-version: 7.3.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-16 10:13:02 +00:00
Daniel O'Connor
2996312c25 Merge pull request #4397 from Growstuff/dependabot/bundler/scout_apm-6.0.1
Bump scout_apm from 6.0.0 to 6.0.1
2025-12-16 20:41:55 +10:30
dependabot[bot]
5746cccb10 Bump scout_apm from 6.0.0 to 6.0.1
Bumps [scout_apm](https://github.com/scoutapp/scout_apm_ruby) from 6.0.0 to 6.0.1.
- [Changelog](https://github.com/scoutapp/scout_apm_ruby/blob/master/CHANGELOG.markdown)
- [Commits](https://github.com/scoutapp/scout_apm_ruby/compare/v6.0.0...v6.0.1)

---
updated-dependencies:
- dependency-name: scout_apm
  dependency-version: 6.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-16 08:30:39 +00:00
Daniel O'Connor
fc0f732e07 Merge pull request #4400 from Growstuff/dependabot/bundler/aws-sdk-s3-1.207.0
Bump aws-sdk-s3 from 1.205.0 to 1.207.0
2025-12-16 18:59:34 +10:30
dependabot[bot]
c1c026cd97 Bump aws-sdk-s3 from 1.205.0 to 1.207.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.205.0 to 1.207.0.
- [Release notes](https://github.com/aws/aws-sdk-ruby/releases)
- [Changelog](https://github.com/aws/aws-sdk-ruby/blob/version-3/gems/aws-sdk-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-ruby/commits)

---
updated-dependencies:
- dependency-name: aws-sdk-s3
  dependency-version: 1.207.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-16 07:03:57 +00:00
dependabot[bot]
64c33a5327 Bump actions/cache from 4 to 5
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-12-12 07:01:50 +00:00
Daniel O'Connor
4085014e06 Merge branch 'dev' into refactor-hardcoded-emails 2025-10-09 22:54:33 +10:30
Daniel O'Connor
18986ee133 Merge branch 'dev' into refactor-hardcoded-emails 2025-09-01 15:40:20 +09:30
google-labs-jules[bot]
f5a4ba60fe Refactor hardcoded emails to a central configuration 2025-08-31 05:38:33 +00:00
292 changed files with 4127 additions and 3646 deletions

View File

@@ -1,4 +1,4 @@
FROM mcr.microsoft.com/devcontainers/ruby:1-3.3-bullseye
FROM mcr.microsoft.com/devcontainers/ruby:3.4-trixie
# Install Rails
RUN gem install rails:7.0.8

30
.dockerignore Normal file
View File

@@ -0,0 +1,30 @@
.git
.github
.devcontainer
log/*
tmp/*
!tmp/keep
node_modules
public/assets
.env
.ruby-gemset
.editorconfig
.esignore
.eslintrc.json
.haml-lint.yml
.overcommit.yml
.rspec
.rubocop.yml
.rubocop_todo.yml
.scss-lint.yml
.travis.yml
.yamllint
CODE_OF_CONDUCT.md
CONTRIBUTING.md
CONTRIBUTORS.md
LICENSE.txt
README.md
TECH.md
docker-compose.yml
Dockerfile
.dockerignore

View File

@@ -61,36 +61,22 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -117,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -71,27 +71,12 @@ jobs:
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -118,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -71,27 +71,12 @@ jobs:
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -118,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -71,27 +71,12 @@ jobs:
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -118,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -71,27 +71,12 @@ jobs:
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -118,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -71,27 +71,12 @@ jobs:
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -118,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -71,27 +71,12 @@ jobs:
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -118,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -71,27 +71,12 @@ jobs:
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -118,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -71,27 +71,12 @@ jobs:
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -118,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -71,27 +71,12 @@ jobs:
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -118,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -86,24 +86,8 @@ jobs:
- name: Install required JS packages
run: yarn install
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
- name: install chrome
run: sudo apt-get install google-chrome-stable
- name: Prepare database for testing
run: bundle exec rails db:prepare
@@ -119,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -86,24 +86,8 @@ jobs:
- name: Install required JS packages
run: yarn install
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
- name: install chrome
run: sudo apt-get install google-chrome-stable
- name: Prepare database for testing
run: bundle exec rails db:prepare
@@ -119,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -86,24 +86,8 @@ jobs:
- name: Install required JS packages
run: yarn install
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
- name: install chrome
run: sudo apt-get install google-chrome-stable
- name: Prepare database for testing
run: bundle exec rails db:prepare
@@ -119,7 +103,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -76,7 +76,7 @@ jobs:
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -86,24 +86,8 @@ jobs:
- name: Install required JS packages
run: yarn install
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
- name: install chrome
run: sudo apt-get install google-chrome-stable
- name: Prepare database for testing
run: bundle exec rails db:prepare
@@ -128,7 +112,7 @@ jobs:
- name: Upload screenshots
if: failure()
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: screenshots
path: tmp/screenshots

View File

@@ -76,7 +76,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
uses: actions/cache@v4
uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
@@ -91,7 +91,7 @@ jobs:
- name: Install NodeJS
uses: actions/setup-node@v6
with:
node-version: '12'
node-version: '24'
- name: Install Ruby (version given by .ruby-version) and Bundler
uses: ruby/setup-ruby@v1
@@ -101,24 +101,8 @@ jobs:
- name: Install required JS packages
run: yarn install
- name: Install required OS packages
run: |
sudo apt-get -y install libpq-dev
- name: Cache Playwright Chromium browser
id: playwright-cache
uses: actions/cache@v4
with:
path: ~/.cache/ms-playwright
key: playwright-browsers-${{ runner.os }}-${{ hashFiles('yarn.lock') }}
- name: Install Playwright Chromium browser (with deps)
if: steps.playwright-cache.outputs.cache-hit != 'true'
run: yarn run playwright install --with-deps chromium
- name: Install Playwright Chromium browser deps
if: steps.playwright-cache.outputs.cache-hit == 'true'
run: yarn run playwright install-deps chromium
- name: install chrome
run: sudo apt-get install google-chrome-stable
- name: Prepare database for testing
run: bundle exec rails db:prepare

43
.github/workflows/docker-build-push.yml vendored Normal file
View File

@@ -0,0 +1,43 @@
name: Docker Build and Push
on:
push:
branches:
- mainline
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Log in to the Container registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository }}
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max

View File

@@ -24,6 +24,7 @@ Naming/FileName:
RSpec/DescribeClass:
Exclude:
- 'spec/tasks/import_spec.rb'
- 'spec/views/**/*.rb'
- 'spec/features/**/*.rb'
@@ -71,4 +72,7 @@ Layout/LineLength:
Rails/SkipsModelValidations:
Exclude:
- 'db/migrate/20190317023129_finished_boolean.rb'
- 'db/migrate/20251128200506_add_description_to_crops.rb'
- 'db/migrate/20240810160538_set_default_language_for_existing_alternate_names.rb'
- 'db/migrate/20240101010102_populate_crop_fields_from_openfarm_data.rb'
- 'db/seeds.rb'

View File

@@ -1,33 +1,22 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
# on 2024-07-13 05:47:38 UTC using RuboCop version 1.65.0.
# on 2026-04-25 16:44:38 UTC using RuboCop version 1.86.1.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
# Offense count: 231
# Configuration parameters: EnforcedStyle.
# SupportedStyles: link_or_button, strict
Capybara/ClickLinkOrButtonStyle:
Enabled: false
# Offense count: 39
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: DefaultSelector.
Capybara/RSpec/HaveSelector:
# Offense count: 19
Capybara/NegationMatcherAfterVisit:
Exclude:
- 'spec/features/conversations/index_spec.rb'
- 'spec/features/footer_spec.rb'
- 'spec/features/gardens/adding_gardens_spec.rb'
- 'spec/features/harvests/harvesting_a_crop_spec.rb'
- 'spec/features/members/list_spec.rb'
- 'spec/features/admin/reverting_crops_spec.rb'
- 'spec/features/crops/crop_detail_page_spec.rb'
- 'spec/features/crops/crop_wranglers_spec.rb'
- 'spec/features/gardens/gardens_spec.rb'
- 'spec/features/members/deletion_spec.rb'
- 'spec/features/members/following_spec.rb'
- 'spec/features/members/profile_spec.rb'
- 'spec/features/plantings/planting_a_crop_spec.rb'
- 'spec/features/seeds/adding_seeds_spec.rb'
- 'spec/features/shared_examples/crop_suggest.rb'
- 'spec/helpers/application_helper_spec.rb'
- 'spec/support/feature_helpers.rb'
- 'spec/views/posts/show.html.haml_spec.rb'
# Offense count: 14
Capybara/SpecificMatcher:
@@ -43,21 +32,22 @@ Capybara/VisibilityMatcher:
Exclude:
- 'spec/features/shared_examples/crop_suggest.rb'
# Offense count: 6
# Offense count: 8
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle, NonImplicitAssociationMethodNames.
# SupportedStyles: explicit, implicit
FactoryBot/AssociationStyle:
Exclude:
- 'spec/factories/alternate_names.rb'
- 'spec/factories/comments.rb'
- 'spec/factories/crop.rb'
- 'spec/factories/like.rb'
- 'spec/factories/notifications.rb'
- 'spec/factories/scientific_name.rb'
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AutoCorrect, Include, EnforcedStyle, ExplicitOnly.
# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb
# Configuration parameters: EnforcedStyle, ExplicitOnly.
# SupportedStyles: create_list, n_times
FactoryBot/CreateList:
Exclude:
@@ -66,31 +56,50 @@ FactoryBot/CreateList:
- 'spec/views/posts/index.html.haml_spec.rb'
# Offense count: 4
# Configuration parameters: Include, MaxAmount.
# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb
# Configuration parameters: MaxAmount.
FactoryBot/ExcessiveCreateList:
Exclude:
- 'spec/controllers/posts_controller_spec.rb'
- 'spec/features/crops/show_spec.rb'
- 'spec/features/percy/percy_spec.rb'
# Offense count: 1127
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Include.
# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb
FactoryBot/SyntaxMethods:
Enabled: false
# Offense count: 2
# Offense count: 312
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
# SupportedHashRocketStyles: key, separator, table
# SupportedColonStyles: key, separator, table
# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
Layout/HashAlignment:
Exclude:
- 'app/helpers/application_helper.rb'
- 'app/helpers/crops_helper.rb'
- 'app/models/concerns/search_harvests.rb'
- 'app/models/concerns/search_plantings.rb'
- 'app/models/crop.rb'
- 'config/sitemap.rb'
- 'lib/tasks/import.rake'
- 'spec/requests/api/v1/activities_request_spec.rb'
- 'spec/requests/api/v1/members_request_spec.rb'
# Offense count: 5
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings.
# URISchemes: http, https
Layout/LineLength:
Exclude:
- 'app/helpers/crops_helper.rb'
- 'Gemfile'
- 'app/controllers/admin/versions_controller.rb'
- 'app/models/concerns/predict_planting.rb'
- 'app/models/crop.rb'
- 'db/seeds.rb'
# Offense count: 3
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
Lint/AmbiguousOperatorPrecedence:
Exclude:
- 'app/controllers/activities_controller.rb'
# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: RequireParenthesesForMethodChains.
Lint/AmbiguousRange:
@@ -98,25 +107,33 @@ Lint/AmbiguousRange:
- 'app/models/concerns/search_activities.rb'
- 'app/models/concerns/search_harvests.rb'
- 'app/models/concerns/search_plantings.rb'
- 'db/seeds.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowSafeAssignment.
Lint/AssignmentInCondition:
Exclude:
- 'app/helpers/crops_helper.rb'
# Offense count: 1
# Configuration parameters: AllowedMethods.
# AllowedMethods: enums
Lint/ConstantDefinitionInBlock:
Exclude:
- 'lib/tasks/import.rake'
# Offense count: 2
# Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches.
# Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches, IgnoreDuplicateElseBranch.
Lint/DuplicateBranch:
Exclude:
- 'app/models/harvest.rb'
- 'lib/actions/oauth_signup_action.rb'
# Offense count: 8
# Configuration parameters: AllowComments, AllowEmptyLambdas.
Lint/EmptyBlock:
# Offense count: 1
Lint/DuplicateMethods:
Exclude:
- 'db/migrate/20171022032108_all_the_predictions.rb'
- 'spec/controllers/home_controller_spec.rb'
- 'spec/controllers/likes_controller_spec.rb'
- 'spec/controllers/plant_parts_controller_spec.rb'
- 'spec/factories/crop_companions.rb'
- 'spec/features/crops/crop_detail_page_spec.rb'
- 'spec/requests/authentications_spec.rb'
- 'app/models/planting.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
@@ -136,57 +153,80 @@ Lint/SuppressedException:
Exclude:
- 'lib/tasks/testing.rake'
# Offense count: 7
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AutoCorrect.
Lint/UselessAssignment:
# Offense count: 1
Lint/UselessConstantScoping:
Exclude:
- 'config.rb'
- 'config/compass.rb'
- 'app/controllers/members_controller.rb'
# Offense count: 52
# Offense count: 61
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
Metrics/AbcSize:
Max: 151
Max: 295
# Offense count: 14
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
# AllowedMethods: refine
Metrics/BlockLength:
Max: 115
Max: 294
# Offense count: 7
# Offense count: 10
# Configuration parameters: CountComments, CountAsOne.
Metrics/ClassLength:
Max: 188
Max: 298
# Offense count: 6
# Offense count: 1
# Configuration parameters: LengthThreshold.
Metrics/CollectionLiteralLength:
Exclude:
- 'lib/tasks/import.rake'
# Offense count: 10
# Configuration parameters: AllowedMethods, AllowedPatterns.
Metrics/CyclomaticComplexity:
Max: 32
# Offense count: 71
# Offense count: 82
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
Metrics/MethodLength:
Max: 127
Max: 296
# Offense count: 2
# Configuration parameters: CountComments, CountAsOne.
Metrics/ModuleLength:
Max: 125
Max: 144
# Offense count: 5
# Offense count: 8
# Configuration parameters: AllowedMethods, AllowedPatterns.
Metrics/PerceivedComplexity:
Max: 32
# Offense count: 2
# Configuration parameters: Mode, AllowedMethods, AllowedPatterns, AllowBangMethods, WaywardPredicates.
# AllowedMethods: call
# WaywardPredicates: infinite?, nonzero?
Naming/PredicateMethod:
Exclude:
- 'app/models/concerns/finishable.rb'
- 'app/models/seed.rb'
# Offense count: 3
RSpec/AnyInstance:
Exclude:
- 'spec/controllers/harvests_controller_spec.rb'
- 'spec/controllers/photos_controller_spec.rb'
# Offense count: 292
# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
RSpec/BeEq:
Exclude:
- 'spec/requests/api/v1/activities_request_spec.rb'
# Offense count: 1
RSpec/BeforeAfterAll:
Exclude:
- 'spec/tasks/import_spec.rb'
# Offense count: 298
# Configuration parameters: Prefixes, AllowedPatterns.
# Prefixes: when, with, without
RSpec/ContextWording:
@@ -202,48 +242,12 @@ RSpec/DescribedClass:
- 'spec/models/member_spec.rb'
- 'spec/services/timeline_service_spec.rb'
# Offense count: 13
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AutoCorrect.
RSpec/EmptyExampleGroup:
Exclude:
- 'spec/controllers/authentications_controller_spec.rb'
- 'spec/controllers/forums_controller_spec.rb'
- 'spec/controllers/home_controller_spec.rb'
- 'spec/controllers/likes_controller_spec.rb'
- 'spec/controllers/plant_parts_controller_spec.rb'
- 'spec/controllers/seeds_controller_spec.rb'
- 'spec/features/crops/crop_detail_page_spec.rb'
- 'spec/features/plantings/planting_a_crop_spec.rb'
- 'spec/requests/authentications_spec.rb'
- 'spec/views/home/index_spec.rb'
- 'spec/views/photos/edit.html.haml_spec.rb'
- 'spec/views/posts/_single.html.haml_spec.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowConsecutiveOneLiners.
RSpec/EmptyLineAfterExample:
Exclude:
- 'spec/models/ability_spec.rb'
# Offense count: 140
# Offense count: 146
# Configuration parameters: CountAsOne.
RSpec/ExampleLength:
Max: 25
Max: 27
# Offense count: 32
RSpec/ExpectInHook:
Exclude:
- 'spec/controllers/garden_types_controller_spec.rb'
- 'spec/controllers/gardens_controller_spec.rb'
- 'spec/features/admin/forums_spec.rb'
- 'spec/features/admin/plant_parts_spec.rb'
- 'spec/features/admin/roles_spec.rb'
- 'spec/features/crops/crop_photos_spec.rb'
- 'spec/features/members/list_spec.rb'
- 'spec/features/plantings/planting_a_crop_spec.rb'
- 'spec/features/shared_examples/append_date.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
@@ -255,11 +259,30 @@ RSpec/HookArgument:
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AutoCorrect.
RSpec/HooksBeforeExamples:
Exclude:
- 'spec/features/crops/creating_a_crop_spec.rb'
# Offense count: 53
# This cop supports unsafe autocorrection (--autocorrect-all).
RSpec/IncludeExamples:
Exclude:
- 'spec/features/conversations/index_spec.rb'
- 'spec/features/crops/alternate_name_spec.rb'
- 'spec/features/crops/browse_crops_spec.rb'
- 'spec/features/crops/creating_a_crop_spec.rb'
- 'spec/features/crops/crop_photos_spec.rb'
- 'spec/features/crops/delete_crop_spec.rb'
- 'spec/features/gardens/actions_spec.rb'
- 'spec/features/gardens/adding_gardens_spec.rb'
- 'spec/features/gardens/index_spec.rb'
- 'spec/features/likeable_spec.rb'
- 'spec/features/signout_spec.rb'
- 'spec/models/crop_spec.rb'
- 'spec/support/feature_helpers.rb'
- 'spec/views/photos/show.html.haml_spec.rb'
- 'spec/views/seeds/index.rss.haml_spec.rb'
# Offense count: 37
# Configuration parameters: Max, AllowedIdentifiers, AllowedPatterns.
RSpec/IndexedLet:
@@ -272,16 +295,15 @@ RSpec/IndexedLet:
- 'spec/features/percy/percy_spec.rb'
- 'spec/features/planting_reminder_spec.rb'
- 'spec/features/timeline/index_spec.rb'
- 'spec/models/crop_spec.rb'
- 'spec/models/member_spec.rb'
- 'spec/views/forums/index.html.haml_spec.rb'
# Offense count: 720
# Offense count: 719
# Configuration parameters: AssignmentOnly.
RSpec/InstanceVariable:
Enabled: false
# Offense count: 40
# Offense count: 41
RSpec/LetSetup:
Enabled: false
@@ -307,37 +329,38 @@ RSpec/MultipleDescribes:
Exclude:
- 'spec/features/crops/crop_wranglers_spec.rb'
# Offense count: 152
# Offense count: 191
RSpec/MultipleExpectations:
Max: 19
# Offense count: 138
# Offense count: 166
# Configuration parameters: AllowSubject.
RSpec/MultipleMemoizedHelpers:
Max: 20
Max: 16
# Offense count: 133
# Offense count: 183
# Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
# SupportedStyles: always, named_only
RSpec/NamedSubject:
Enabled: false
# Offense count: 111
# Offense count: 109
# Configuration parameters: AllowedGroups.
RSpec/NestedGroups:
Max: 6
# Offense count: 403
# Offense count: 407
# Configuration parameters: AllowedPatterns.
# AllowedPatterns: ^expect_, ^assert_
RSpec/NoExpectationExample:
Enabled: false
# Offense count: 3
# Offense count: 4
RSpec/PendingWithoutReason:
Exclude:
- 'spec/features/seeds/misc_seeds_spec.rb'
- 'spec/features/unsubscribing_spec.rb'
- 'spec/requests/api/v1/gardens_request_spec.rb'
# Offense count: 2
RSpec/RepeatedDescription:
@@ -358,15 +381,14 @@ RSpec/RepeatedExampleGroupBody:
# Offense count: 6
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AutoCorrect.
RSpec/ScatteredSetup:
Exclude:
- 'spec/features/percy/percy_spec.rb'
- 'spec/features/plantings/prediction_spec.rb'
# Offense count: 1
# Configuration parameters: Include, CustomTransform, IgnoreMethods, IgnoreMetadata.
# Include: **/*_spec.rb
# Configuration parameters: CustomTransform, IgnoreMethods, IgnoreMetadata, InflectorPath, EnforcedInflector.
# SupportedInflectors: default, active_support
RSpec/SpecFilePathFormat:
Exclude:
- 'spec/controllers/member_controller_spec.rb'
@@ -380,8 +402,6 @@ RSpec/StubbedMock:
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: constant, string
RSpec/VerifiedDoubleReference:
Exclude:
- 'spec/models/member_spec.rb'
@@ -394,47 +414,38 @@ RSpec/VerifiedDoubles:
- 'spec/controllers/gardens_controller_spec.rb'
- 'spec/views/devise/shared/_links_spec.rb'
# Offense count: 7
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: ResponseMethods.
# ResponseMethods: response, last_response
RSpecRails/HaveHttpStatus:
Exclude:
- 'spec/controllers/api/v1/plantings_controller_spec.rb'
- 'spec/controllers/harvests_controller_spec.rb'
- 'spec/controllers/likes_controller_spec.rb'
- 'spec/requests/harvests_spec.rb'
# Offense count: 16
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Inferences.
RSpecRails/InferredSpecType:
Enabled: false
# Offense count: 28
# Configuration parameters: Database, Include.
# Offense count: 30
# Configuration parameters: Database.
# SupportedDatabases: mysql, postgresql
# Include: db/**/*.rb
Rails/BulkChangeTable:
Enabled: false
# Offense count: 4
# Configuration parameters: Include.
# Include: db/**/*.rb
Rails/CreateTableWithTimestamps:
Exclude:
- 'db/migrate/20150201052245_create_cms.rb'
- 'db/migrate/20171022032108_all_the_predictions.rb'
# Offense count: 1
# Offense count: 8
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle, AllowToTime.
# SupportedStyles: strict, flexible
Rails/Date:
Exclude:
- 'app/controllers/activities_controller.rb'
- 'app/mailers/notifier_mailer.rb'
- 'app/models/concerns/search_seeds.rb'
- 'spec/features/activities/creating_a_recurring_activity_spec.rb'
# Offense count: 11
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: slashes, arguments
Rails/FilePath:
Exclude:
- 'lib/tasks/import.rake'
# Offense count: 12
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedMethods, AllowedPatterns.
# AllowedMethods: order, limit, select, lock
@@ -445,38 +456,35 @@ Rails/FindEach:
- 'db/migrate/20171129041341_create_photographings.rb'
- 'db/migrate/20190130090437_add_crop_to_photographings.rb'
- 'db/migrate/20191119030244_cms_tags.rb'
- 'lib/tasks/wikidata.rake'
# Offense count: 2
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/HasAndBelongsToMany:
Exclude:
- 'app/models/member.rb'
- 'app/models/role.rb'
# Offense count: 5
# Configuration parameters: Include.
# Include: app/models/**/*.rb
# Offense count: 6
Rails/HasManyOrHasOneDependent:
Exclude:
- 'app/models/crop.rb'
- 'app/models/member.rb'
# Offense count: 1
# Configuration parameters: Include.
# Include: spec/**/*.rb, test/**/*.rb
Rails/I18nLocaleAssignment:
Exclude:
- 'spec/features/locale_spec.rb'
# Offense count: 33
Rails/I18nLocaleTexts:
Enabled: false
# Offense count: 1
# Configuration parameters: IgnoreScopes.
Rails/InverseOf:
Exclude:
- 'app/models/member.rb'
# Offense count: 3
# Configuration parameters: Include.
# Include: app/controllers/**/*.rb, app/mailers/**/*.rb
# Offense count: 4
Rails/LexicallyScopedActionFilter:
Exclude:
- 'app/controllers/api/v1/base_controller.rb'
- 'app/controllers/data_controller.rb'
- 'app/controllers/registrations_controller.rb'
@@ -492,17 +500,23 @@ Rails/PluralizationGrammar:
Exclude:
- 'spec/requests/plantings_spec.rb'
# Offense count: 3
# This cop supports safe autocorrection (--autocorrect).
Rails/Presence:
Exclude:
- 'app/controllers/photos_controller.rb'
- 'app/controllers/plantings_controller.rb'
- 'app/models/concerns/open_farm_data.rb'
# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Include.
# Include: **/Rakefile, **/*.rake
Rails/RakeEnvironment:
Exclude:
- 'lib/tasks/hooks.rake'
- 'lib/tasks/i18n.rake'
- 'lib/tasks/testing.rake'
# Offense count: 9
# Offense count: 8
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedReceivers.
# AllowedReceivers: ActionMailer::Preview, ActiveSupport::TimeZone
@@ -513,9 +527,8 @@ Rails/RedundantActiveRecordAllMethod:
- 'app/controllers/forums_controller.rb'
- 'app/controllers/plant_parts_controller.rb'
- 'app/controllers/scientific_names_controller.rb'
- 'app/services/openfarm_service.rb'
- 'spec/features/members/deletion_spec.rb'
- 'spec/features/percy/percy_spec.rb'
- 'spec/models/harvest_spec.rb'
# Offense count: 5
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -526,14 +539,13 @@ Rails/RedundantPresenceValidationOnBelongsTo:
- 'app/models/planting.rb'
- 'app/models/scientific_name.rb'
# Offense count: 15
# Offense count: 16
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Include.
# Include: spec/controllers/**/*.rb, spec/requests/**/*.rb, test/controllers/**/*.rb, test/integration/**/*.rb
Rails/ResponseParsedBody:
Exclude:
- 'spec/controllers/api/v1/plantings_controller_spec.rb'
- 'spec/controllers/likes_controller_spec.rb'
- 'spec/requests/api/v1/activities_request_spec.rb'
- 'spec/requests/api/v1/crop_request_spec.rb'
- 'spec/requests/api/v1/gardens_request_spec.rb'
- 'spec/requests/api/v1/harvests_request_spec.rb'
@@ -543,29 +555,35 @@ Rails/ResponseParsedBody:
- 'spec/requests/api/v1/seeds_request_spec.rb'
# Offense count: 9
# Configuration parameters: Include.
# Include: db/**/*.rb
Rails/ReversibleMigration:
Exclude:
- 'db/migrate/20130326092227_change_planted_at_to_date.rb'
- 'db/migrate/20191119020643_upgrade_cms.rb'
# Offense count: 2
# Offense count: 6
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/RootPathnameMethods:
Exclude:
- 'app/controllers/crops_controller.rb'
- 'app/helpers/icons_helper.rb'
- 'config/application.rb'
- 'lib/tasks/import.rake'
- 'spec/rails_helper.rb'
# Offense count: 21
# Configuration parameters: Include.
# Include: db/**/*.rb
Rails/ThreeStateBooleanColumn:
Enabled: false
# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: strict, flexible
Rails/TimeZone:
Exclude:
- 'app/controllers/activities_controller.rb'
- 'spec/features/harvests/harvesting_a_crop_spec.rb'
# Offense count: 6
# Configuration parameters: Include.
# Include: app/models/**/*.rb
Rails/UniqueValidationWithoutIndex:
Exclude:
- 'app/models/follow.rb'
@@ -583,24 +601,28 @@ Rails/WhereEquals:
- 'app/models/harvest.rb'
- 'app/models/planting.rb'
# Offense count: 2
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/WhereRange:
Exclude:
- 'app/models/concerns/predict_planting.rb'
- 'app/models/garden.rb'
- 'app/models/seed.rb'
# Offense count: 1
Rake/MethodDefinitionInTask:
Exclude:
- 'lib/tasks/growstuff.rake'
# Offense count: 3
# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# Configuration parameters: EnforcedStyle, EnforcedStyleForClasses, EnforcedStyleForModules.
# SupportedStyles: nested, compact
# SupportedStylesForClasses: ~, nested, compact
# SupportedStylesForModules: ~, nested, compact
Style/ClassAndModuleChildren:
Exclude:
- 'app/controllers/admin/crops_controller.rb'
- 'lib/actions/oauth_signup_action.rb'
- 'lib/haml/filters/escaped_markdown.rb'
- 'lib/haml/filters/growstuff_markdown.rb'
@@ -615,30 +637,52 @@ Style/CommentedKeyword:
- 'spec/models/planting_spec.rb'
# Offense count: 3
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowedVars, DefaultToNil.
Style/FetchEnvVar:
Exclude:
- 'config/sitemap.rb'
# Offense count: 2
Style/FileOpen:
Exclude:
- 'app/helpers/application_helper.rb'
- 'db/seeds.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: left_coerce, right_coerce, single_coerce, fdiv
Style/FloatDivision:
Exclude:
- 'app/models/concerns/predict_planting.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, always_true, never
Style/FrozenStringLiteralComment:
Exclude:
- 'config/initializers/new_framework_defaults_6_0.rb'
- 'db/migrate/20200801084007_add_foreign_key_constraint_to_active_storage_attachments_for_blob_id.active_storage.rb'
- 'spec/lib/haml/filters/growstuff_markdown_spec.rb'
# Offense count: 3
# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/GlobalStdStream:
Exclude:
- 'config/environments/production.rb'
- 'lib/tasks/gbif.rake'
- 'lib/tasks/openfarm.rake'
# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/IdenticalConditionalBranches:
Exclude:
- 'lib/actions/oauth_signup_action.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedMethods.
# AllowedMethods: nonzero?
Style/IfWithBooleanLiteralBranches:
Style/MapIntoArray:
Exclude:
- 'app/controllers/gardens_controller.rb'
- 'app/helpers/crops_helper.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -660,12 +704,13 @@ Style/MutableConstant:
Exclude:
- 'app/models/activity.rb'
# Offense count: 5
# Offense count: 6
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle, AllowedMethods, AllowedPatterns.
# SupportedStyles: predicate, comparison
Style/NumericPredicate:
Exclude:
- 'app/controllers/activities_controller.rb'
- 'app/helpers/crops_helper.rb'
- 'app/helpers/harvests_helper.rb'
- 'app/helpers/plantings_helper.rb'
@@ -676,11 +721,12 @@ Style/OpenStructUse:
Exclude:
- 'spec/helpers/event_helper_spec.rb'
# Offense count: 2
# Offense count: 3
# Configuration parameters: AllowedMethods.
# AllowedMethods: respond_to_missing?
Style/OptionalBooleanParameter:
Exclude:
- 'app/helpers/application_helper.rb'
- 'app/models/concerns/member_newsletter.rb'
# Offense count: 1
@@ -697,20 +743,34 @@ Style/RedundantFetchBlock:
Exclude:
- 'config/puma.rb'
# Offense count: 2
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/RedundantInterpolation:
Exclude:
- 'app/helpers/buttons_helper.rb'
# Offense count: 4
# Configuration parameters: Max.
Style/SafeNavigationChainLength:
Exclude:
- 'app/models/ability.rb'
# Offense count: 3
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowModifier.
Style/SoleNestedConditional:
Exclude:
- 'app/controllers/activities_controller.rb'
- 'app/controllers/application_controller.rb'
- 'app/controllers/messages_controller.rb'
# Offense count: 24
# Offense count: 27
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Mode.
Style/StringConcatenation:
Exclude:
- 'app/controllers/messages_controller.rb'
- 'app/controllers/registrations_controller.rb'
- 'app/helpers/buttons_helper.rb'
- 'config/initializers/rswag_api.rb'
- 'spec/helpers/gardens_helper_spec.rb'

View File

@@ -1 +1 @@
3.3.8
3.4.8

View File

@@ -248,6 +248,3 @@ linters:
ZeroUnit:
enabled: true
Compass::*:
enabled: false

View File

@@ -1,31 +0,0 @@
sudo: required
language: ruby
dist: bionic
branches:
only:
- mainline
- dev
cache:
bundler: true
yarn: true
directories:
- tmp/cache/assets/test/sprockets
env:
global:
- secure: "Z5TpM2jEX4UCvNePnk/LwltQX48U2u9BRc+Iypr1x9QW2o228QJhPIOH39a8RMUrepGnkQIq9q3ZRUn98RfrJz1yThtlNFL3NmzdQ57gKgjGwfpa0e4Dwj/ZJqV2D84tDGjvdVYLP7zzaYZxQcwk/cgNpzKf/jq97HLNP7CYuf4="
before_deploy:
- bundle exec script/heroku_maintenance.rb on
deploy:
provider: heroku
api_key:
secure: "WrQxf0fEKkCdXrjcejurobOnNNz3he4dDwjBbToXbQTQNDObPp7NetJrLsfM8FiUFEeOuvhIHHiDQtMvY720zGGAGxDptvgFS+0QHCUqoTRZA/yFfUmHlG2jROXTzk5uVK0AE4k6Ion5kX8+mM0EnMT/7u+MTFiukrJctSiEXfg="
on:
repo: Growstuff/growstuff
app:
dev: growstuff-staging
mainline: growstuff-prod
run:
- "script/deploy-tasks.sh"
- restart
after_deploy:
- bundle exec script/heroku_maintenance.rb off

52
Dockerfile Normal file
View File

@@ -0,0 +1,52 @@
FROM ruby:3.4.8-trixie
# Install system dependencies
RUN apt-get update -qq && \
apt-get install -y --no-install-recommends \
build-essential \
libpq-dev \
git \
curl \
gnupg2 \
shared-mime-info \
libvips \
&& curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get install -y --no-install-recommends nodejs \
&& npm install -g yarn \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Set production environment
ENV RAILS_ENV=production \
BUNDLE_WITHOUT="development test" \
RAILS_SERVE_STATIC_FILES=true \
RAILS_LOG_TO_STDOUT=true
WORKDIR /app
# Install gems
COPY Gemfile Gemfile.lock ./
RUN bundle config set --local deployment 'true' && \
bundle config set --local without 'development test' && \
bundle install --jobs 4 --retry 3
# Install JavaScript dependencies
COPY package.json yarn.lock ./
RUN yarn install --check-files
# Copy the application code
COPY . .
# Precompile assets
# Secret key base is needed for asset compilation but doesn't need to be the real one
RUN RAILS_ENV=production SECRET_KEY_BASE_DUMMY=1 bundle exec rake assets:precompile
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]

10
Gemfile
View File

@@ -139,7 +139,7 @@ gem "msgpack"
# Pinned due to RAILS_ENV=production bundle exec rake assets:precompile failing with ArgumentError: wrong number of arguments (given 1, expected 0) (ArgumentError)
# /tmp/build_8301a541/vendor/bundle/ruby/3.3.0/gems/connection_pool-3.0.2/lib/connection_pool.rb:48:in `initialize'
# /tmp/build_8301a541/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.3/lib/active_support/cache/mem_cache_store.rb:63:in `new'
gem "connection_pool", "< 3"
gem "connection_pool", "< 3"
group :production do
gem 'bonsai-elasticsearch-rails' # Integration with Bonsa-Elasticsearch on heroku
@@ -195,18 +195,14 @@ group :test do
gem "percy-capybara", "~> 5.0.0"
gem 'rails-controller-testing'
gem "rspec-rebound"
gem 'capybara-playwright-driver'
gem 'selenium-webdriver'
gem 'timecop'
gem 'vcr'
end
group :travis do
gem 'platform-api'
end
gem "i18n_data", "~> 1.1"
gem "paper_trail", "~> 17.0"
gem 'sitemap_generator'
gem 'aws-sdk-s3', '~> 1', '>= 1.114.0'
gem 'sitemap_generator'

View File

@@ -33,29 +33,29 @@ GEM
GEM
remote: https://rubygems.org/
specs:
actioncable (7.2.3)
actionpack (= 7.2.3)
activesupport (= 7.2.3)
actioncable (7.2.3.1)
actionpack (= 7.2.3.1)
activesupport (= 7.2.3.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (7.2.3)
actionpack (= 7.2.3)
activejob (= 7.2.3)
activerecord (= 7.2.3)
activestorage (= 7.2.3)
activesupport (= 7.2.3)
actionmailbox (7.2.3.1)
actionpack (= 7.2.3.1)
activejob (= 7.2.3.1)
activerecord (= 7.2.3.1)
activestorage (= 7.2.3.1)
activesupport (= 7.2.3.1)
mail (>= 2.8.0)
actionmailer (7.2.3)
actionpack (= 7.2.3)
actionview (= 7.2.3)
activejob (= 7.2.3)
activesupport (= 7.2.3)
actionmailer (7.2.3.1)
actionpack (= 7.2.3.1)
actionview (= 7.2.3.1)
activejob (= 7.2.3.1)
activesupport (= 7.2.3.1)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
actionpack (7.2.3)
actionview (= 7.2.3)
activesupport (= 7.2.3)
actionpack (7.2.3.1)
actionview (= 7.2.3.1)
activesupport (= 7.2.3.1)
cgi
nokogiri (>= 1.8.5)
racc
@@ -65,15 +65,15 @@ GEM
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
actiontext (7.2.3)
actionpack (= 7.2.3)
activerecord (= 7.2.3)
activestorage (= 7.2.3)
activesupport (= 7.2.3)
actiontext (7.2.3.1)
actionpack (= 7.2.3.1)
activerecord (= 7.2.3.1)
activestorage (= 7.2.3.1)
activesupport (= 7.2.3.1)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (7.2.3)
activesupport (= 7.2.3)
actionview (7.2.3.1)
activesupport (= 7.2.3.1)
builder (~> 3.1)
cgi
erubi (~> 1.11)
@@ -82,29 +82,29 @@ GEM
active_link_to (1.0.5)
actionpack
addressable
active_median (0.6.0)
activesupport (>= 7.1)
active_median (1.0.0)
activesupport (>= 7.2)
active_record_union (1.4.0)
activerecord (>= 6.0)
active_utils (3.6.0)
activesupport (>= 4.2)
i18n
activejob (7.2.3)
activesupport (= 7.2.3)
activejob (7.2.3.1)
activesupport (= 7.2.3.1)
globalid (>= 0.3.6)
activemodel (7.2.3)
activesupport (= 7.2.3)
activerecord (7.2.3)
activemodel (= 7.2.3)
activesupport (= 7.2.3)
activemodel (7.2.3.1)
activesupport (= 7.2.3.1)
activerecord (7.2.3.1)
activemodel (= 7.2.3.1)
activesupport (= 7.2.3.1)
timeout (>= 0.4.0)
activestorage (7.2.3)
actionpack (= 7.2.3)
activejob (= 7.2.3)
activerecord (= 7.2.3)
activesupport (= 7.2.3)
activestorage (7.2.3.1)
actionpack (= 7.2.3.1)
activejob (= 7.2.3.1)
activerecord (= 7.2.3.1)
activesupport (= 7.2.3.1)
marcel (~> 1.0)
activesupport (7.2.3)
activesupport (7.2.3.1)
base64
benchmark (>= 0.3)
bigdecimal
@@ -113,17 +113,17 @@ GEM
drb
i18n (>= 1.6, < 2)
logger (>= 1.4.2)
minitest (>= 5.1)
minitest (>= 5.1, < 6)
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
addressable (2.9.0)
public_suffix (>= 2.0.2, < 8.0)
ast (2.4.3)
autoprefixer-rails (10.4.16.0)
execjs (~> 2)
aws-eventstream (1.4.0)
aws-partitions (1.1189.0)
aws-sdk-core (3.239.2)
aws-partitions (1.1240.0)
aws-sdk-core (3.245.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
@@ -131,24 +131,24 @@ GEM
bigdecimal
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.118.0)
aws-sdk-core (~> 3, >= 3.239.1)
aws-sdk-kms (1.123.0)
aws-sdk-core (~> 3, >= 3.244.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.205.0)
aws-sdk-core (~> 3, >= 3.234.0)
aws-sdk-s3 (1.220.0)
aws-sdk-core (~> 3, >= 3.244.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
axe-core-api (4.11.0)
axe-core-api (4.11.2)
dumb_delegator
ostruct
virtus
axe-core-capybara (4.11.0)
axe-core-api (= 4.11.0)
axe-core-capybara (4.11.2)
axe-core-api (= 4.11.2)
dumb_delegator
axe-core-rspec (4.11.0)
axe-core-api (= 4.11.0)
axe-core-rspec (4.11.2)
axe-core-api (= 4.11.2)
dumb_delegator
ostruct
virtus
@@ -157,13 +157,13 @@ GEM
ice_nine (~> 0.11.0)
thread_safe (~> 0.3, >= 0.3.1)
base64 (0.3.0)
bcrypt (3.1.20)
bcrypt (3.1.22)
benchmark (0.5.0)
better_errors (2.10.1)
erubi (>= 1.0.0)
rack (>= 0.9.0)
rouge (>= 1.0.0)
bigdecimal (3.3.1)
bigdecimal (4.1.2)
bluecloth (2.2.0)
bonsai-elasticsearch-rails (7.0.1)
elasticsearch-model (< 8)
@@ -177,10 +177,11 @@ GEM
actionpack (>= 6.1)
activemodel (>= 6.1)
builder (3.3.0)
bullet (8.1.0)
bullet (8.1.1)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
byebug (12.0.0)
byebug (13.0.0)
reline (>= 0.6.0)
cancancan (3.6.1)
capybara (3.40.0)
addressable
@@ -194,11 +195,7 @@ GEM
capybara-email (3.0.2)
capybara (>= 2.4, < 4.0)
mail
capybara-playwright-driver (0.5.7)
addressable
capybara
playwright-ruby-client (>= 1.16.0)
capybara-screenshot (1.0.26)
capybara-screenshot (1.0.27)
capybara (>= 1.0, < 4)
launchy
carrierwave (3.0.7)
@@ -208,9 +205,10 @@ GEM
image_processing (~> 1.1)
marcel (~> 1.0.0)
ssrf_filter (~> 1.0)
cgi (0.5.0)
cgi (0.5.1)
chartkick (5.2.1)
childprocess (5.0.0)
childprocess (5.1.0)
logger (~> 1.5)
coderay (1.1.3)
coercible (1.0.0)
descendants_tracker (~> 0.0.1)
@@ -223,7 +221,7 @@ GEM
coffee-script-source (1.12.2)
comfy_bootstrap_form (4.0.9)
rails (>= 5.0.0)
concurrent-ruby (1.3.5)
concurrent-ruby (1.3.6)
connection_pool (2.5.5)
crass (1.0.6)
crowdin-api (1.12.0)
@@ -238,20 +236,21 @@ GEM
csv_shaper (1.4.0)
activesupport (>= 3.0.0)
csv
dalli (3.2.8)
dalli (5.0.2)
logger
database_cleaner (2.1.0)
database_cleaner-active_record (>= 2, < 3)
database_cleaner-active_record (2.2.0)
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
date (3.5.0)
date (3.5.1)
descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1)
devise (4.9.4)
devise (5.0.3)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
railties (>= 4.1.0)
railties (>= 7.0)
responders
warden (~> 1.2.3)
diff-lcs (1.6.2)
@@ -277,26 +276,24 @@ GEM
elasticsearch-transport (7.0.0)
faraday
multi_json
erb (6.0.0)
erb (6.0.2)
erubi (1.13.1)
erubis (2.7.0)
excon (1.2.5)
logger
execjs (2.10.0)
factory_bot (6.5.5)
activesupport (>= 6.1.0)
factory_bot_rails (6.5.1)
factory_bot (~> 6.5)
railties (>= 6.1.0)
faker (3.5.3)
faker (3.8.0)
i18n (>= 1.8.11, < 2)
faraday (2.14.0)
faraday (2.14.1)
faraday-net_http (>= 2.0, < 3.5)
json
logger
faraday-net_http (3.4.1)
net-http (>= 0.5.0)
ffi (1.16.3)
faraday-net_http (3.4.2)
net-http (~> 0.5)
ffi (1.17.3)
ffi (1.17.3-x86_64-linux-gnu)
flickraw (0.9.10)
font-awesome-sass (5.15.1)
sassc (>= 1.11)
@@ -316,7 +313,7 @@ GEM
gravatar-ultimate (2.0.0)
activesupport (>= 2.3.14)
rack
haml (7.1.0)
haml (7.2.0)
temple (>= 0.8.2)
thor
tilt
@@ -325,30 +322,24 @@ GEM
activesupport (>= 5.1)
haml (>= 4.0.6)
railties (>= 5.1)
haml_lint (0.67.0)
haml_lint (0.73.0)
haml (>= 5.0)
parallel (~> 1.10)
parallel (>= 1.10)
rainbow
rubocop (>= 1.0)
sysexits (~> 1.1)
hashie (5.0.0)
heroics (0.1.3)
base64
erubis (~> 2.0)
excon
moneta
multi_json (>= 1.9.2)
webrick
hashie (5.1.0)
logger
highline (3.1.2)
reline
http-accept (1.7.0)
http-cookie (1.0.8)
domain_name (~> 0.5)
httparty (0.22.0)
httparty (0.24.0)
csv
mini_mime (>= 1.0.0)
multi_xml (>= 0.5.2)
i18n (1.14.7)
i18n (1.14.8)
concurrent-ruby (~> 1.0)
i18n-tasks (1.1.2)
activesupport (>= 4.0.2)
@@ -364,7 +355,7 @@ GEM
terminal-table (>= 1.5.1)
i18n_data (1.1.0)
simple_po_parser (~> 1.1)
icalendar (2.12.1)
icalendar (2.12.2)
base64
ice_cube (~> 0.16)
logger
@@ -374,9 +365,10 @@ GEM
image_processing (1.12.2)
mini_magick (>= 4.9.5, < 5)
ruby-vips (>= 2.0.17, < 3)
io-console (0.8.1)
irb (1.15.3)
io-console (0.8.2)
irb (1.17.0)
pp (>= 0.6.0)
prism (>= 1.3.0)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
jmespath (1.6.2)
@@ -384,10 +376,10 @@ GEM
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
json (2.16.0)
json-schema (6.0.0)
json (2.19.3)
json-schema (6.2.0)
addressable (~> 2.8)
bigdecimal (~> 3.1)
bigdecimal (>= 3.1, < 5)
jsonapi-resources (0.10.7)
activerecord (>= 4.1)
concurrent-ruby
@@ -397,20 +389,22 @@ GEM
kramdown (2.4.0)
rexml
language_server-protocol (3.17.0.5)
launchy (3.0.1)
launchy (3.1.1)
addressable (~> 2.8)
childprocess (~> 5.0)
logger (~> 1.6)
leaflet-rails (1.9.5)
actionpack (>= 4.2.0)
railties (>= 4.2.0)
letter_opener (1.10.0)
launchy (>= 2.2, < 4)
lint_roller (1.1.0)
listen (3.9.0)
listen (3.10.0)
logger
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.7.0)
loofah (2.24.1)
loofah (2.25.1)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.9.0)
@@ -428,7 +422,7 @@ GEM
sass (>= 3.5.2)
material_icons (4.0.0)
railties (>= 3.2)
matrix (0.4.2)
matrix (0.4.3)
memcachier (0.0.2)
method_source (1.1.0)
mime-types (3.7.0)
@@ -441,14 +435,13 @@ GEM
mini_magick (4.12.0)
mini_mime (1.1.5)
mini_portile2 (2.8.9)
minitest (5.26.2)
moneta (1.0.0)
minitest (5.27.0)
msgpack (1.8.0)
multi_json (1.15.0)
multi_xml (0.7.1)
bigdecimal (~> 3.1)
net-http (0.6.0)
uri
multi_json (1.19.1)
multi_xml (0.8.1)
bigdecimal (>= 3.1, < 5)
net-http (0.9.1)
uri (>= 0.11.1)
net-imap (0.5.12)
date
net-protocol
@@ -460,13 +453,13 @@ GEM
net-protocol
netrc (0.11.0)
nio4r (2.7.5)
nokogiri (1.18.10)
nokogiri (1.19.2)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
nokogiri (1.18.10-x86_64-linux-gnu)
nokogiri (1.19.2-x86_64-linux-gnu)
racc (~> 1.4)
oauth (0.5.6)
oj (3.16.13)
oj (3.17.0)
bigdecimal (>= 3.0)
ostruct (>= 0.2)
omniauth (1.9.2)
@@ -484,38 +477,32 @@ GEM
paper_trail (17.0.0)
activerecord (>= 7.1)
request_store (~> 1.4)
parallel (1.27.0)
parser (3.3.10.0)
parallel (2.0.1)
parser (3.3.11.1)
ast (~> 2.4.1)
racc
percy-capybara (5.0.0)
capybara (>= 3)
pg (1.6.2)
pg (1.6.2-x86_64-linux)
platform-api (3.8.0)
heroics (~> 0.1.1)
moneta (~> 1.0.0)
rate_throttle_client (~> 0.1.0)
playwright-ruby-client (1.57.0)
concurrent-ruby (>= 1.1.6)
mime-types (>= 3.0)
pg (1.6.3)
pg (1.6.3-x86_64-linux)
popper_js (2.11.8)
pp (0.6.3)
prettyprint
prettyprint (0.2.0)
prism (1.6.0)
pry (0.15.2)
prism (1.9.0)
pry (0.16.0)
coderay (~> 1.1)
method_source (~> 1.0)
psych (5.2.6)
reline (>= 0.6.0)
psych (5.3.1)
date
stringio
public_suffix (6.0.2)
puma (7.1.0)
public_suffix (7.0.5)
puma (8.0.0)
nio4r (~> 2.0)
query_diet (0.7.3)
racc (1.8.1)
rack (2.2.21)
rack (2.2.23)
rack-cors (2.0.2)
rack (>= 2.0.0)
rack-protection (3.2.0)
@@ -528,20 +515,20 @@ GEM
rackup (1.0.1)
rack (< 3)
webrick
rails (7.2.3)
actioncable (= 7.2.3)
actionmailbox (= 7.2.3)
actionmailer (= 7.2.3)
actionpack (= 7.2.3)
actiontext (= 7.2.3)
actionview (= 7.2.3)
activejob (= 7.2.3)
activemodel (= 7.2.3)
activerecord (= 7.2.3)
activestorage (= 7.2.3)
activesupport (= 7.2.3)
rails (7.2.3.1)
actioncable (= 7.2.3.1)
actionmailbox (= 7.2.3.1)
actionmailer (= 7.2.3.1)
actionpack (= 7.2.3.1)
actiontext (= 7.2.3.1)
actionview (= 7.2.3.1)
activejob (= 7.2.3.1)
activemodel (= 7.2.3.1)
activerecord (= 7.2.3.1)
activestorage (= 7.2.3.1)
activesupport (= 7.2.3.1)
bundler (>= 1.15.0)
railties (= 7.2.3)
railties (= 7.2.3.1)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -550,8 +537,8 @@ GEM
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
rails-html-sanitizer (1.6.2)
loofah (~> 2.21)
rails-html-sanitizer (1.7.0)
loofah (~> 2.25)
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
rails-i18n (7.0.10)
i18n (>= 0.7, < 2)
@@ -561,9 +548,9 @@ GEM
rails_stdout_logging
rails_serve_static_assets (0.0.5)
rails_stdout_logging (0.0.5)
railties (7.2.3)
actionpack (= 7.2.3)
activesupport (= 7.2.3)
railties (7.2.3.1)
actionpack (= 7.2.3.1)
activesupport (= 7.2.3.1)
cgi
irb (~> 1.13)
rackup (>= 1.0.0)
@@ -573,19 +560,18 @@ GEM
zeitwerk (~> 2.6)
rainbow (3.1.1)
raindrops (0.20.1)
rake (13.3.1)
rate_throttle_client (0.1.2)
rake (13.4.2)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
rb-inotify (0.11.1)
ffi (~> 1.0)
rdoc (6.17.0)
rdoc (7.2.0)
erb
psych (>= 4.0.0)
tsort
recaptcha (5.21.1)
redis-client (0.23.2)
recaptcha (5.21.2)
redis-client (0.26.2)
connection_pool
regexp_parser (2.11.3)
regexp_parser (2.12.0)
reline (0.6.3)
io-console (~> 0.5)
request_store (1.7.0)
@@ -613,20 +599,20 @@ GEM
rspec-expectations (3.13.5)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-mocks (3.13.5)
rspec-mocks (3.13.8)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
rspec-rails (8.0.2)
rspec-rails (8.0.4)
actionpack (>= 7.2)
activesupport (>= 7.2)
railties (>= 7.2)
rspec-core (~> 3.13)
rspec-expectations (~> 3.13)
rspec-mocks (~> 3.13)
rspec-support (~> 3.13)
rspec-core (>= 3.13.0, < 5.0.0)
rspec-expectations (>= 3.13.0, < 5.0.0)
rspec-mocks (>= 3.13.0, < 5.0.0)
rspec-support (>= 3.13.0, < 5.0.0)
rspec-rebound (0.2.1)
rspec-core (~> 3.3)
rspec-support (3.13.6)
rspec-support (3.13.7)
rspectre (0.2.0)
parser (>= 3.3.7.1)
prism (~> 1.3)
@@ -642,27 +628,27 @@ GEM
rswag-ui (2.17.0)
actionpack (>= 5.2, < 8.2)
railties (>= 5.2, < 8.2)
rubocop (1.81.7)
rubocop (1.86.1)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
parallel (~> 1.10)
parallel (>= 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
rubocop-ast (>= 1.47.1, < 2.0)
rubocop-ast (>= 1.49.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.48.0)
rubocop-ast (1.49.1)
parser (>= 3.3.7.2)
prism (~> 1.4)
prism (~> 1.7)
rubocop-capybara (2.22.1)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-factory_bot (2.28.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-rails (2.34.2)
rubocop-rails (2.34.3)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
@@ -671,7 +657,7 @@ GEM
rubocop-rake (0.7.1)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
rubocop-rspec (3.8.0)
rubocop-rspec (3.9.0)
lint_roller (~> 1.1)
rubocop (~> 1.81)
rubocop-rspec_rails (2.32.0)
@@ -696,24 +682,24 @@ GEM
sprockets (> 3.0)
sprockets-rails
tilt
scout_apm (6.0.0)
scout_apm (6.2.0)
parser
searchkick (5.3.1)
activemodel (>= 6.1)
hashie
securerandom (0.4.1)
selenium-webdriver (4.39.0)
selenium-webdriver (4.43.0)
base64 (~> 0.2)
logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 4.0)
websocket (~> 1.0)
sidekiq (7.3.9)
sidekiq (7.3.10)
base64
connection_pool (>= 2.3.0)
connection_pool (>= 2.3.0, < 3)
logger
rack (>= 2.2.4)
redis-client (>= 0.22.2)
rack (>= 2.2.4, < 3.3)
redis-client (>= 0.23.0, < 1)
simple_po_parser (1.1.6)
sitemap_generator (6.3.0)
builder (~> 3.0)
@@ -726,35 +712,34 @@ GEM
activesupport (>= 5.2)
sprockets (>= 3.0.0)
ssrf_filter (1.1.2)
stringio (3.1.9)
stringio (3.2.0)
sysexits (1.2.0)
temple (0.10.4)
terminal-table (4.0.0)
unicode-display_width (>= 1.1.1, < 4)
terser (1.2.6)
terser (1.2.7)
execjs (>= 0.3.0, < 3)
thor (1.4.0)
thor (1.5.0)
thread_safe (0.3.6)
tilt (2.6.1)
timecop (0.9.10)
tilt (2.7.0)
timecop (0.9.11)
timeout (0.5.0)
tsort (0.2.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (3.2.0)
unicode-emoji (~> 4.1)
unicode-emoji (4.1.0)
unicode-emoji (4.2.0)
unicorn (6.1.0)
kgio (~> 2.6)
raindrops (~> 0.7)
uniform_notifier (1.18.0)
uri (1.0.3)
uri (1.1.1)
useragent (0.16.11)
validate_url (1.0.15)
activemodel (>= 3.0.0)
public_suffix
vcr (6.3.1)
base64
vcr (6.4.0)
virtus (2.0.0)
axiom-types (~> 0.1)
coercible (~> 1.0)
@@ -774,11 +759,12 @@ GEM
will_paginate (4.0.1)
will_paginate-bootstrap-style (0.3.0)
will_paginate (~> 4.0, >= 4.0.0)
xmlrpc (0.3.3)
xmlrpc (0.3.4)
rexml
webrick
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.7.3)
zeitwerk (2.7.5)
PLATFORMS
ruby
@@ -803,7 +789,6 @@ DEPENDENCIES
cancancan
capybara
capybara-email
capybara-playwright-driver
capybara-screenshot
chartkick
coffee-rails
@@ -853,7 +838,6 @@ DEPENDENCIES
paper_trail (~> 17.0)
percy-capybara (~> 5.0.0)
pg
platform-api
pry
puma
query_diet
@@ -899,7 +883,7 @@ DEPENDENCIES
xmlrpc
RUBY VERSION
ruby 3.3.8p144
ruby 3.4.8p72
BUNDLED WITH
2.4.22

View File

@@ -15,7 +15,7 @@ module Admin
def create
@crop_companion = @crop.crop_companions.new(crop_companion_params)
if @crop_companion.save
redirect_to admin_crop_crop_companions_path(@crop), notice: 'Companion was successfully created.'
redirect_to admin_crop_crop_companions_path(@crop), notice: t('crop_companions.created')
else
render :new
end
@@ -24,7 +24,7 @@ module Admin
def destroy
@crop_companion = @crop.crop_companions.find(params[:id])
@crop_companion.destroy
redirect_to admin_crop_crop_companions_path(@crop), notice: 'Companion was successfully destroyed.'
redirect_to admin_crop_crop_companions_path(@crop), notice: t('crop_companions.deleted')
end
private

View File

@@ -8,9 +8,9 @@ module Admin
responders :flash
def index
@members = Member.all
@members = @members.where("login_name ILIKE ?", "%#{search_term}%") unless search_term.nil?
@members = @members.order(:login_name).paginate(page: params[:page])
@members = Member.order(:login_name)
@members = @members.where("login_name ILIKE ?", "%#{search_term}%") if search_term.present?
@members = @members.paginate(page: params[:page])
end
def edit

View File

@@ -9,9 +9,9 @@ module Admin
@version = PaperTrail::Version.find(params[:id])
@object = @version.reify
if @object.save
redirect_to admin_crops_path, notice: "Reverted to version from #{@version.created_at.strftime('%B %d, %Y')}"
redirect_to admin_crops_path, notice: t('messages.revert_success', date: @version.created_at.strftime('%B %d, %Y'))
else
redirect_to admin_crops_path, alert: "Could not revert to version from #{@version.created_at.strftime('%B %d, %Y')}. Errors: #{@object.errors.full_messages.to_sentence}"
redirect_to admin_crops_path, alert: t('messages.revert_error', date: @version.created_at.strftime('%B %d, %Y'), errors: @object.errors.full_messages.to_sentence)
end
end

View File

@@ -30,7 +30,7 @@ class AlternateNamesController < ApplicationController
@alternate_name = AlternateName.new(alternate_name_params)
if @alternate_name.save
redirect_to @alternate_name.crop, notice: 'Alternate name was successfully created.'
redirect_to @alternate_name.crop, notice: t('alternate_names.created')
else
render action: "new"
end
@@ -40,7 +40,7 @@ class AlternateNamesController < ApplicationController
# PUT /alternate_names/1.json
def update
if @alternate_name.update(alternate_name_params)
redirect_to @alternate_name.crop, notice: 'Alternate name was successfully updated.'
redirect_to @alternate_name.crop, notice: t('alternate_names.updated')
else
render action: "edit"
end
@@ -51,7 +51,7 @@ class AlternateNamesController < ApplicationController
def destroy
@crop = @alternate_name.crop
@alternate_name.destroy
redirect_to @crop, notice: 'Alternate name was successfully deleted.'
redirect_to @crop, notice: t('alternate_names.deleted')
end
private

View File

@@ -24,9 +24,9 @@ class AuthenticationsController < ApplicationController
name:
)
flash[:notice] = "Authentication successful."
flash[:notice] = t('messages.auth_success')
else
flash[:notice] = "Authentication failed."
flash[:notice] = t('messages.auth_failed')
end
redirect_to request.env['omniauth.origin'] || edit_member_registration_path
end

View File

@@ -0,0 +1,32 @@
# frozen_string_literal: true
class BlocksController < ApplicationController
load_and_authorize_resource
skip_load_resource only: :create
def create
@block = current_member.blocks.build(blocked: Member.find(params[:blocked]))
if @block.save
flash[:notice] = "Blocked #{@block.blocked.login_name}"
else
flash[:error] = "Already blocking or error while blocking."
end
redirect_back_or_to(root_path)
end
def destroy
@block = current_member.blocks.find(params[:id])
@unblocked = @block.blocked
@block.destroy
flash[:notice] = "Unblocked #{@unblocked.login_name}"
redirect_to @unblocked
end
private
def block_params
params.permit(:id, :blocked)
end
end

View File

@@ -160,7 +160,7 @@ class CropsController < ApplicationController
when 'youtube'
Crop.approved.where(en_youtube_url: [nil, '']).order(plantings_count: :desc)
when 'alternate_names'
Crop.approved.left_joins(:alternate_names).where(alternate_names: { id: nil }).order(plantings_count: :desc)
Crop.approved.where.missing(:alternate_names).order(plantings_count: :desc)
when 'wikidata'
crops_with_wikidata = Crop.joins(:scientific_names).where.not(scientific_names: { wikidata_id: nil }).distinct
Crop.approved.where.not(id: crops_with_wikidata).order(plantings_count: :desc)

View File

@@ -13,11 +13,11 @@ class FollowsController < ApplicationController
@follow = current_member.follows.build(followed: Member.find(params[:followed]))
if @follow.save
flash[:notice] = "Followed #{@follow.followed.login_name}"
flash[:notice] = t('messages.followed', name: @follow.followed.login_name)
else
flash[:error] = "Already following or error while following."
flash[:error] = t('messages.follow_error')
end
redirect_back fallback_location: root_path
redirect_back_or_to(root_path)
end
def destroy
@@ -25,7 +25,7 @@ class FollowsController < ApplicationController
@unfollowed = @follow.followed
@follow.destroy
flash[:notice] = "Unfollowed #{@unfollowed.login_name}"
flash[:notice] = t('messages.unfollowed', name: @unfollowed.login_name)
redirect_to @unfollowed
end

View File

@@ -32,14 +32,14 @@ class ForumsController < ApplicationController
# POST /forums.json
def create
@forum = Forum.new(forum_params)
flash[:notice] = 'Forum was successfully created.' if @forum.save
flash[:notice] = t('forums.created') if @forum.save
respond_with(@forum)
end
# PUT /forums/1
# PUT /forums/1.json
def update
flash[:notice] = 'Forum was successfully updated.' if @forum.update(forum_params)
flash[:notice] = t('forums.updated') if @forum.update(forum_params)
respond_with(@forum)
end
@@ -47,7 +47,7 @@ class ForumsController < ApplicationController
# DELETE /forums/1.json
def destroy
@forum.destroy
flash[:notice] = 'Forum was successfully deleted'
flash[:notice] = t('forums.deleted')
redirect_to forums_url
end

View File

@@ -14,7 +14,7 @@ class LikesController < ApplicationController
@like.likeable.reindex(refresh: true)
success(@like, liked_by_member: true, status_code: :created)
else
failed(@like, message: 'Unable to like')
failed(@like, message: t('messages.unable_to_like'))
end
end
@@ -29,7 +29,7 @@ class LikesController < ApplicationController
@like.likeable.reindex(refresh: true)
success(@like, liked_by_member: false, status_code: :ok)
else
failed(@like, message: 'Unable to unlike')
failed(@like, message: t('messages.unable_to_unlike'))
end
end

View File

@@ -27,10 +27,21 @@ class MessagesController < ApplicationController
def create
if params[:conversation_id].present?
@conversation = Mailboxer::Conversation.find(params[:conversation_id])
# Check if any of the recipients have blocked the sender
if @conversation.recipients.any? { |recipient| recipient.already_blocking?(current_member) }
flash[:error] = "You cannot reply to this conversation because one of the recipients has blocked you."
redirect_to conversation_path(@conversation)
return
end
current_member.reply_to_conversation(@conversation, params[:body])
redirect_to conversation_path(@conversation)
else
recipient = Member.find(params[:recipient_id])
if recipient.already_blocking?(current_member)
flash[:error] = "You cannot send a message to a member who has blocked you."
redirect_back_or_to(root_path)
return
end
body = params[:body]
subject = params[:subject]
@conversation = current_member.send_message(recipient, body, subject)

View File

@@ -10,7 +10,7 @@ require './lib/actions/oauth_signup_action'
#
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def failure
flash[:alert] = "Authentication failed."
flash[:alert] = t('messages.auth_failed')
redirect_to request.env['omniauth.origin'] || "/"
end

View File

@@ -33,7 +33,7 @@ class PlacesController < ApplicationController
def search
if params[:new_place].empty?
redirect_to places_path, alert: 'Please enter a valid location'
redirect_to places_path, alert: t('messages.invalid_location')
else
redirect_to place_path(params[:new_place])
end

View File

@@ -116,11 +116,11 @@ class PlantingsController < DataController
new_planting.finished_at = nil
if new_planting.save
redirect_to edit_planting_path(new_planting), notice: 'Planting was successfully transplanted.'
redirect_to edit_planting_path(new_planting), notice: t('messages.transplant_success')
else
# if the save fails, we should probably roll back the finishing of the original planting
@planting.update(finished: false, finished_at: nil)
redirect_to @planting, alert: "There was an error transplanting the planting: #{new_planting.errors.full_messages.to_sentence}"
redirect_to @planting, alert: t('messages.transplant_error', errors: new_planting.errors.full_messages.to_sentence)
end
end

View File

@@ -29,17 +29,17 @@ class PostsController < ApplicationController
def create
params[:post][:author_id] = current_member.id
@post = Post.new(post_params)
flash[:notice] = 'Post was successfully created.' if @post.save
flash[:notice] = t('posts.created') if @post.save
respond_with(@post)
end
def update
flash[:notice] = 'Post was successfully updated.' if @post.update(post_params)
flash[:notice] = t('posts.updated') if @post.update(post_params)
respond_with(@post)
end
def destroy
flash[:notice] = 'Post was deleted.' if @post.destroy
flash[:notice] = t('posts.deleted') if @post.destroy
respond_with(@post)
end

View File

@@ -54,7 +54,7 @@ class ScientificNamesController < ApplicationController
def destroy
@crop = @scientific_name.crop
@scientific_name.destroy
flash[:notice] = 'Scientific name was successfully deleted.'
flash[:notice] = t('scientific_names.deleted')
respond_with(@crop)
end

View File

@@ -61,7 +61,7 @@ class SeedsController < DataController
@seed.finished ||= false
@seed.owner = current_member
@seed.crop = @seed.parent_planting.crop if @seed.parent_planting
flash[:notice] = "Successfully added #{@seed.crop} seed to your stash." if @seed.save
flash[:notice] = t('seeds.added_to_stash', crop: @seed.crop) if @seed.save
if params[:return] == 'planting'
respond_with(@seed, location: @seed.parent_planting)
else
@@ -70,7 +70,7 @@ class SeedsController < DataController
end
def update
flash[:notice] = 'Seed was successfully updated.' if @seed.update(seed_params)
flash[:notice] = t('seeds.updated') if @seed.update(seed_params)
respond_with(@seed)
end

View File

@@ -5,7 +5,7 @@ class SessionsController < Devise::SessionsController
def create
super do |_resource|
flash[:alert] = "There are crops waiting to be wrangled." if Crop.pending_approval.present? && current_member.role?(:crop_wrangler)
flash[:alert] = t('messages.crops_waiting') if Crop.pending_approval.present? && current_member.role?(:crop_wrangler)
end
end
end

View File

@@ -62,7 +62,7 @@ module CropsHelper
'@type': 'Person',
name: post.author.login_name
},
'datePublished': post.created_at
datePublished: post.created_at
}
end

View File

@@ -1,6 +1,6 @@
# frozen_string_literal: true
class ApplicationMailer < ActionMailer::Base
default from: 'from@example.com'
default from: "Growstuff <#{Rails.configuration.x.email[:from]}>"
layout 'mailer'
end

View File

@@ -2,7 +2,7 @@
class NotifierMailer < ApplicationMailer
# include NotificationsHelper
default from: "Growstuff <#{ENV.fetch('GROWSTUFF_EMAIL', nil)}>"
default from: "Growstuff <#{Rails.configuration.x.email[:from]}>"
def verifier
unless ENV['RAILS_SECRET_TOKEN']

View File

@@ -164,6 +164,12 @@ class Ability
can :destroy, Follow
cannot :destroy, Follow, followed_id: member.id # can't unfollow yourself
# blocking/unblocking permissions
can :create, Block
cannot :create, Block, blocked_id: member.id # can't block yourself
can :destroy, Block, blocker_id: member.id # can only unblock your own blocks
cannot :create, GardenType
cannot :update, GardenType
cannot :destroy, GardenType

18
app/models/block.rb Normal file
View File

@@ -0,0 +1,18 @@
# frozen_string_literal: true
class Block < ApplicationRecord
belongs_to :blocker, class_name: "Member"
belongs_to :blocked, class_name: "Member"
validates :blocker_id, uniqueness: { scope: :blocked_id }
after_create :destroy_follow_relationship
private
def destroy_follow_relationship
# Destroy the follow relationship in both directions
Follow.where(follower: blocker, followed: blocked).destroy_all
Follow.where(follower: blocked, followed: blocker).destroy_all
end
end

View File

@@ -4,6 +4,7 @@ class Comment < ApplicationRecord
belongs_to :author, class_name: 'Member', inverse_of: :comments
belongs_to :commentable, polymorphic: true, counter_cache: true
# validates :body, presence: true
validate :author_is_not_blocked
scope :post_order, -> { order(created_at: :asc) } # for display on post page
@@ -25,4 +26,14 @@ class Comment < ApplicationRecord
def to_s
"#{author.login_name} commented on #{commentable.subject}"
end
private
def author_is_not_blocked
return unless author
return unless commentable.author.already_blocking?(author)
errors.add(:base, "You cannot comment on a post of a member who has blocked you.")
end
end

View File

@@ -57,13 +57,13 @@ class Crop < ApplicationRecord
validates :en_wikipedia_url,
format: {
with: %r{\Ahttps?://en\.wikipedia\.org/wiki/[[:alnum:]%_.()-]+\z},
message: 'is not a valid English Wikipedia URL'
message: :not_a_valid_wikipedia_url
},
if: :approved?
validates :en_youtube_url,
format: {
with: %r{\A(?:https?://)?(?:www\.)?(?:youtube(?:-nocookie)?\.com/(?:(?:v|e(?:mbed)?)/|\S*?[?&]v=)|youtu\.be/)[a-zA-Z0-9_-]{11}(?:[?&]\S*)?\z},
message: 'is not a valid YouTube URL'
message: :not_a_valid_youtube_url
},
allow_blank: true
validates :name, uniqueness: { scope: :approval_status }, if: :pending?
@@ -190,12 +190,12 @@ class Crop < ApplicationRecord
return if rejected?
return unless reason_for_rejection.present? || rejection_notes.present?
errors.add(:approval_status, "must be rejected if a reason for rejection is present")
errors.add(:approval_status, :rejection_reason_required)
end
def must_have_meaningful_reason_for_rejection
return unless reason_for_rejection == "other" && rejection_notes.blank?
errors.add(:rejection_notes, "must be added if the reason for rejection is \"other\"")
errors.add(:rejection_notes, :rejection_notes_required)
end
end

View File

@@ -4,6 +4,7 @@ class Follow < ApplicationRecord
belongs_to :follower, class_name: "Member", inverse_of: :follows
belongs_to :followed, class_name: "Member", inverse_of: :inverse_follows
validates :follower_id, uniqueness: { scope: :followed_id }
validate :follower_is_not_blocked
after_create do
Notification.create(
@@ -14,4 +15,14 @@ class Follow < ApplicationRecord
notifiable: self
)
end
private
def follower_is_not_blocked
return unless follower
return unless followed.already_blocking?(follower)
errors.add(:base, "You cannot follow a member who has blocked you.")
end
end

View File

@@ -32,7 +32,7 @@ class Garden < ApplicationRecord
validates :name, uniqueness: { scope: :owner_id }
validates :name,
format: { without: /\n/, message: "must contain no newlines" },
format: { without: /\n/, message: :no_newlines },
allow_blank: false, presence: true,
length: { maximum: 255 }
@@ -53,7 +53,7 @@ class Garden < ApplicationRecord
"acres" => "acre"
}.freeze
validates :area_unit, inclusion: { in: AREA_UNITS_VALUES.values,
message: "%<value>s is not a valid area unit" },
message: :not_a_valid_area_unit },
allow_blank: true
def cleanup_area

View File

@@ -11,7 +11,7 @@ class GardenCollaborator < ApplicationRecord
return unless member
return unless garden
errors.add(:member_id, "cannot be the garden owner") if garden.owner == member
errors.add(:member_id, :cannot_be_garden_owner) if garden.owner == member
end
def member_slug

View File

@@ -58,18 +58,18 @@ class Harvest < ApplicationRecord
##
## Validations
validates :crop, approved: true
validates :crop, presence: { message: "must be present and exist in our database" }
validates :plant_part, presence: { message: "must be present and exist in our database" }
validates :crop, presence: { message: :crop_not_found }
validates :plant_part, presence: { message: :crop_not_found }
validates :harvested_at, presence: true
validates :quantity, allow_nil: true, numericality: {
only_integer: false, greater_than_or_equal_to: 0
}
validates :unit, allow_blank: true, inclusion: {
in: UNITS_VALUES.values, message: "%<value>s is not a valid unit"
in: UNITS_VALUES.values, message: :not_a_valid_unit
}
validates :weight_quantity, allow_nil: true, numericality: { only_integer: false }
validates :weight_unit, allow_blank: true, inclusion: {
in: WEIGHT_UNITS_VALUES.values, message: "%<value>s is not a valid unit"
in: WEIGHT_UNITS_VALUES.values, message: :not_a_valid_unit
}
validate :crop_must_match_planting
validate :owner_must_match_planting
@@ -147,7 +147,7 @@ class Harvest < ApplicationRecord
def crop_must_match_planting
return if planting.blank? # only check if we are linked to a planting
errors.add(:planting, "must be the same crop") unless crop == planting.crop
errors.add(:planting, :same_crop_required) unless crop == planting.crop
end
def owner_must_match_planting
@@ -155,14 +155,13 @@ class Harvest < ApplicationRecord
return if owner == planting.owner || planting.garden.garden_collaborators.where(member_id: owner).any?
errors.add(:owner,
"of harvest must be the same as planting, or a collaborator on that garden")
errors.add(:owner, :same_owner_required)
end
def harvest_must_be_after_planting
# only check if we are linked to a planting
return unless harvested_at.present? && planting.present? && planting.planted_at.present?
errors.add(:planting, "cannot be harvested before planting") unless harvested_at > planting.planted_at
errors.add(:planting, :harvest_after_planted) unless harvested_at > planting.planted_at
end
end

View File

@@ -5,4 +5,24 @@ class Like < ApplicationRecord
belongs_to :likeable, polymorphic: true, counter_cache: true, touch: true
validates :member, :likeable, presence: true
validates :member, uniqueness: { scope: :likeable }
validate :member_is_not_blocked
def likeable_author
if likeable.respond_to?(:author)
likeable.author
elsif likeable.respond_to?(:owner)
likeable.owner
end
end
private
def member_is_not_blocked
return unless member
author = likeable_author
return unless author&.already_blocking?(member)
errors.add(:base, "You cannot like content of a member who has blocked you.")
end
end

View File

@@ -52,6 +52,15 @@ class Member < ApplicationRecord
has_many :followed, through: :follows
has_many :followers, through: :inverse_follows, source: :follower
#
# Blocking other members
has_many :blocks, class_name: "Block", foreign_key: "blocker_id", dependent: :destroy,
inverse_of: :blocker
has_many :inverse_blocks, class_name: "Block", foreign_key: "blocked_id",
dependent: :destroy, inverse_of: :blocked
has_many :blocked_members, through: :blocks, source: :blocked
has_many :blockers, through: :inverse_blocks, source: :blocker
#
# Global data records this member created
has_many :requested_crops, class_name: 'Crop', foreign_key: 'requester_id', dependent: :nullify,
@@ -96,21 +105,21 @@ class Member < ApplicationRecord
validates :tos_agreement, acceptance: { allow_nil: true, accept: true }
validates :login_name,
length: {
minimum: 2, maximum: 25, message: "should be between 2 and 25 characters long"
minimum: 2, maximum: 25, message: :login_name_length
},
exclusion: {
in: %w(growstuff admin moderator staff nearby), message: "name is reserved"
in: %w(growstuff admin moderator staff nearby), message: :login_name_reserved
},
format: {
with: /\A\w+\z/, message: "may only include letters, numbers, or underscores"
with: /\A\w+\z/, message: :login_name_format
},
uniqueness: {
case_sensitive: false
}
validates :website_url, format: { with: %r{\Ahttps?://}, message: "must start with http:// or https://" }, allow_blank: true
validates :other_url, format: { with: %r{\Ahttps?://}, message: "must start with http:// or https://" }, allow_blank: true
validates :website_url, format: { with: %r{\Ahttps?://}, message: :url_format }, allow_blank: true
validates :other_url, format: { with: %r{\Ahttps?://}, message: :url_format }, allow_blank: true
validates :instagram_handle, :facebook_handle, :bluesky_handle,
format: { without: %r{\Ahttps?://|/}, message: "should be a handle, not a URL" }, allow_blank: true
format: { without: %r{\Ahttps?://|/}, message: :handle_format }, allow_blank: true
#
# Triggers
@@ -164,12 +173,12 @@ class Member < ApplicationRecord
end
def self.nearest_to(place)
nearby_members = []
if place
latitude, longitude = Geocoder.coordinates(place, params: { limit: 1 })
nearby_members = Member.located.sort_by { |x| x.distance_from([latitude, longitude]) } if latitude && longitude
end
nearby_members
return [] if place.blank?
latitude, longitude = Geocoder.coordinates(place, params: { limit: 1 })
return [] unless latitude && longitude
Member.located.near([latitude, longitude], 1000)
end
def already_following?(member)
@@ -179,4 +188,12 @@ class Member < ApplicationRecord
def get_follow(member)
follows.find_by(followed_id: member.id) if already_following?(member)
end
def already_blocking?(member)
blocks.exists?(blocked_id: member.id)
end
def get_block(member)
blocks.find_by(blocked_id: member.id) if already_blocking?(member)
end
end

View File

@@ -29,12 +29,12 @@ class PhotoAssociation < ApplicationRecord
def photo_and_item_have_same_owner
return if photographable_type == 'Crop'
errors.add(:photo, "must have same owner as item it links to") unless photographable.owner_id == photo.owner_id
errors.add(:photo, :photo_owner_mismatch) unless photographable.owner_id == photo.owner_id
end
def crop_present
return unless %w(Planting Seed Harvest).include?(photographable_type)
errors.add(:crop_id, "failed to calculate crop") if crop_id.blank?
errors.add(:crop_id, :calculate_crop_failed) if crop_id.blank?
end
end

View File

@@ -72,7 +72,7 @@ class Planting < ApplicationRecord
##
## Validations
validates :garden, presence: true
validates :crop, presence: true, approved: { message: "must be present and exist in our database" }
validates :crop, presence: true, approved: { message: :crop_must_be_approved }
validate :finished_must_be_after_planted
validate :owner_must_match_garden_owner
validate :cannot_be_finished_and_failed
@@ -80,10 +80,10 @@ class Planting < ApplicationRecord
only_integer: true, greater_than_or_equal_to: 0
}
validates :sunniness, allow_blank: true, inclusion: {
in: SUNNINESS_VALUES, message: "%<value>s is not a valid sunniness value"
in: SUNNINESS_VALUES, message: :not_a_valid_sunniness
}
validates :planted_from, allow_blank: true, inclusion: {
in: PLANTED_FROM_VALUES, message: "%<value>s is not a valid planting method"
in: PLANTED_FROM_VALUES, message: :not_a_valid_planting_method
}
validates :overall_rating, allow_blank: true, numericality: {
only_integer: true, greater_than_or_equal_to: 1, less_than_or_equal_to: 5
@@ -132,20 +132,19 @@ class Planting < ApplicationRecord
private
def cannot_be_finished_and_failed
errors.add(:failed, "can't be true if planting is also finished") if finished && failed
errors.add(:failed, :failed_and_finished) if finished && failed
end
# check that any finished_at date occurs after planted_at
def finished_must_be_after_planted
return unless planted_at && finished_at # only check if we have both
errors.add(:finished_at, "must be after the planting date") unless planted_at < finished_at
errors.add(:finished_at, :finished_after_planted) unless planted_at < finished_at
end
def owner_must_match_garden_owner
return if owner == garden.owner || garden.garden_collaborators.where(member_id: owner).any?
errors.add(:owner,
"must be the same as garden, or a collaborator on that garden")
errors.add(:owner, :same_owner_required)
end
end

View File

@@ -49,9 +49,10 @@ class Post < ApplicationRecord
# return posts sorted by recent activity
def self.recently_active
Post.order(created_at: :desc).sort do |a, b|
b.recent_activity <=> a.recent_activity
end
left_joins(:comments)
.select('posts.*, COALESCE(MAX(comments.created_at), posts.created_at) AS last_activity_at')
.group('posts.id')
.order(Arel.sql('last_activity_at DESC'))
end
def owner_id

View File

@@ -28,7 +28,7 @@ class Seed < ApplicationRecord
#
# Validations
validates :crop, approved: true
validates :crop, presence: { message: "must be present and exist in our database" }
validates :crop, presence: { message: :crop_not_found }
validates :quantity, allow_nil: true,
numericality: { only_integer: true, greater_than_or_equal_to: 0 }
validates :days_until_maturity_min, allow_nil: true,
@@ -36,20 +36,15 @@ class Seed < ApplicationRecord
validates :days_until_maturity_max, allow_nil: true,
numericality: { only_integer: true, greater_than_or_equal_to: 0 }
validates :tradable_to, allow_blank: false,
inclusion: { in: TRADABLE_TO_VALUES, message: "You may only trade seed nowhere, " \
"locally, nationally, or internationally" }
inclusion: { in: TRADABLE_TO_VALUES, message: :tradable_to_inclusion }
validates :organic, allow_blank: false,
inclusion: { in: ORGANIC_VALUES, message: "You must say whether the seeds " \
"are organic or not, or that you don't know" }
inclusion: { in: ORGANIC_VALUES, message: :organic_inclusion }
validates :gmo, allow_blank: false,
inclusion: { in: GMO_VALUES, message: "You must say whether the seeds are " \
"genetically modified or not, or that you don't know" }
inclusion: { in: GMO_VALUES, message: :gmo_inclusion }
validates :heirloom, allow_blank: false,
inclusion: { in: HEIRLOOM_VALUES, message: "You must say whether the seeds" \
"are heirloom, hybrid, or unknown" }
inclusion: { in: HEIRLOOM_VALUES, message: :heirloom_inclusion }
validates :source, allow_blank: true,
inclusion: { in: SOURCE_VALUES, message: "You must say where the seeds are from," \
"or that you don't know" }
inclusion: { in: SOURCE_VALUES, message: :source_inclusion }
#
# Delegations

View File

@@ -85,7 +85,7 @@ class GbifService
end
def import!
Crop.order(updated_at: :desc).each do |crop|
Crop.order(updated_at: :desc).find_each do |crop|
Rails.logger.debug { "#{crop.id}, #{crop.name}" }
update_crop(crop) if crop.valid?
rescue ActiveRecord::RecordInvalid

View File

@@ -16,7 +16,7 @@
%p
%span.help-block
For detailed crop wrangling guidelines, please consult the
= link_to "crop wrangling guide", "http://wiki.growstuff.org/index.php/Crop_wrangling"
= link_to "crop wrangling guide", "https://github.com/Growstuff/growstuff/wiki/Crop-Wrangling"
on the Growstuff wiki.
.form-group

View File

@@ -1,6 +1,9 @@
- if crop.approved? && signed_in?
- active_plantings = current_member.plantings.where(crop: crop).active
.btn-group.crop-actions{"aria-label" => "Crop Actions", role: "group"}
= render 'plantings/modal', planting: Planting.new(crop: crop, owner: current_member)
= render 'harvests/modal', harvest: Harvest.new(crop: @crop, owner: current_member)
= render 'seeds/modal', seed: Seed.new(crop: @crop, owner: current_member)
- if active_plantings.any?
= render 'plantings/failed_modal', crop: crop, active_plantings: active_plantings

View File

@@ -35,4 +35,4 @@
%th Sodium
%td= "#{data.sodium_na_mg.to_f.round(1)} mg"
.card-footer
= link_to "See more", "https://afcd.foodstandards.gov.au/fooddetails.aspx?PFKID=#{data.public_food_key}", target: "_blank", rel: "noopener noreferrer"
= link_to "See more", "https://www.foodstandards.gov.au/science-data/food-nutrient-databases/afcd/search/food/#{data.public_food_key}", target: "_blank", rel: "noopener noreferrer"

View File

@@ -8,6 +8,8 @@
= link_to planting_path(planting), class: 'card-link' do
= planting_icon
= planting
- if can?(:edit, planting)
.float-right= render 'plantings/actions', planting: planting
.float-right= render 'members/location', member: planting.owner
.card-footer
- if crop.approved?

View File

@@ -6,6 +6,7 @@
- @forums.each do |forum|
%h2= forum
%p= forum.description
%p
= localize_plural(forum.posts, Post)
|

View File

@@ -9,4 +9,5 @@
%small.text-muted
harvested by #{harvest.owner_login_name}
%p.mb-2
= image_tag harvest.thumbnail_url, width: 75, class: 'rounded shadow', alt: "Image of #{harvest.crop_name} by #{harvest.owner}"
- if harvest.thumbnail_url
= image_tag harvest.thumbnail_url, width: 75, class: 'rounded shadow', alt: "Image of #{harvest.crop_name} by #{harvest.owner}"

View File

@@ -1,6 +1,11 @@
- if current_member && current_member != member # must be logged in, can't follow yourself
- block = current_member.get_block(member)
- follow = current_member.get_follow(member)
- if !follow && can?(:create, Follow) # not already following
- if !block && !follow && can?(:create, Follow) # not already following, and not blocking
= link_to 'Follow', follows_path(followed: member), method: :post, class: 'btn btn-block btn-success'
- if follow && can?(:destroy, follow) # already following
= link_to 'Unfollow', follow_path(follow), method: :delete, class: 'btn btn-block'
= link_to 'Unfollow', follow_path(follow), method: :delete, class: 'btn btn-block'
- if !block && can?(:create, Block) # not already blocking
= link_to 'Block', blocks_path(blocked: member), method: :post, class: 'btn btn-block btn-danger'
- if block && can?(:destroy, block) # already blocking
= link_to 'Unblock', block_path(block), method: :delete, class: 'btn btn-block'

View File

@@ -0,0 +1,26 @@
#modelFailedPlantingForm.modal.fade{"aria-hidden" => "true", "aria-labelledby" => "failed-planting-button", role: "dialog", tabindex: "-1"}
.modal-dialog{role: "document"}
.modal-content
.modal-header.text-center
%h4.modal-title.w-100.font-weight-bold Mark #{crop.name} planting as failed
%button.close{"aria-label" => "Close", "data-bs-dismiss" => "modal", type: "button"}
%span{"aria-hidden" => "true"} &#215;
.modal-body
%p Which planting would you like to mark as failed?
%ul.list-group
- active_plantings.each do |planting|
%li.list-group-item
= link_to planting_path(planting, planting: {failed: 1}), method: :put do
.d-flex.justify-content-between
%span
%h4= planting.garden.name
%p Planted #{planting.planted_at}
%span
= finished_icon
.mt-3.text-right
= link_to 'cancel', '', "data-bs-dismiss" => "modal", class: 'btn btn-secondary'
%a.btn#failed-planting-button{"data-bs-target" => "#modelFailedPlantingForm", "data-bs-toggle" => "modal", href: ""}
= finished_icon
Mark as failed

View File

@@ -11,7 +11,7 @@
%p
%span.help-block
For detailed crop wrangling guidelines, please consult the
= link_to "crop wrangling guide", "http://wiki.growstuff.org/index.php/Crop_wrangling"
= link_to "crop wrangling guide", "https://github.com/Growstuff/growstuff/wiki/Crop-Wrangling"
on the Growstuff wiki.
.form-group

View File

@@ -1,24 +0,0 @@
# frozen_string_literal: true
# Require any additional compass plugins here.
# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "app/assets/stylesheets"
sass_dir = "app/assets/stylesheets"
javascripts_dir = "app/assets/javascripts"
images_dir = "app/assets/images"
# You can select your preferred output style here (can be overridden via the command line):
# output_style = :expanded or :nested or :compact or :compressed
# To enable relative paths to assets via compass helper functions. Uncomment:
# relative_assets = true
# To disable debugging comments that display the original location of your selectors. Uncomment:
# line_comments = false
# If you prefer the indented syntax, you might want to regenerate this
# project again passing --syntax sass, or you can uncomment this:
preferred_syntax = :sass
# and then run:
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass

View File

@@ -62,9 +62,9 @@ module Growstuff
# Growstuff-specific configuration variables
config.currency = 'AUD'
config.bot_email = ENV.fetch('GROWSTUFF_EMAIL', nil)
config.bot_email = Rails.configuration.x.email[:from]
config.user_agent = 'Growstuff'
config.user_agent_email = "info@growstuff.org"
config.user_agent_email = Rails.configuration.x.email[:from]
Gibbon::API.api_key = ENV['GROWSTUFF_MAILCHIMP_APIKEY'] || 'notarealkey'
# API key can't be blank or tests fail

View File

@@ -1,4 +0,0 @@
# frozen_string_literal: true
# Require any additional compass plugins here.
project_type = :rails

View File

@@ -6,7 +6,7 @@ Devise.setup do |config|
# ==> 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 = "Growstuff <#{ENV.fetch('GROWSTUFF_EMAIL', nil)}>"
config.mailer_sender = "Growstuff <#{Rails.configuration.x.email[:from]}>"
config.secret_key = ENV.fetch('RAILS_SECRET_TOKEN', nil)

View File

@@ -0,0 +1,9 @@
module Growstuff
class Application < Rails::Application
config.x.email = {
from: ENV.fetch('GROWSTUFF_EMAIL', 'info@growstuff.org'),
admin: ENV.fetch('GROWSTUFF_ADMIN_EMAIL', 'sysadmin@growstuff.org'),
support: ENV.fetch('GROWSTUFF_SUPPORT_EMAIL', 'info@growstuff.org')
}
end
end

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
#
# This file contains migration options to ease your Rails 6.0 upgrade.

View File

@@ -63,6 +63,56 @@ en:
seed:
one: seed
other: seeds
errors:
messages:
crop_not_found: must be present and exist in our database
crop_must_be_approved: must be present and exist in our database
failed_and_finished: "can't be true if planting is also finished"
finished_after_planted: must be after the planting date
rejection_reason_required: must be rejected if a reason for rejection is present
rejection_notes_required: "must be added if the reason for rejection is \"other\""
same_crop_required: must be the same crop
harvest_after_planted: cannot be harvested before planting
cannot_be_garden_owner: cannot be the garden owner
same_owner_required: "of harvest must be the same as planting, or a collaborator on that garden"
photo_owner_mismatch: must have same owner as item it links to
calculate_crop_failed: failed to calculate crop
not_a_valid_wikipedia_url: is not a valid English Wikipedia URL
not_a_valid_youtube_url: is not a valid YouTube URL
not_a_valid_sunniness: "%{value} is not a valid sunniness value"
not_a_valid_planting_method: "%{value} is not a valid planting method"
not_a_valid_unit: "%{value} is not a valid unit"
not_a_valid_area_unit: "%{value} is not a valid area unit"
no_newlines: must contain no newlines
models:
member:
attributes:
login_name:
login_name_length: should be between 2 and 25 characters long
login_name_reserved: name is reserved
login_name_format: may only include letters, numbers, or underscores
website_url:
url_format: "must start with http:// or https://"
other_url:
url_format: "must start with http:// or https://"
instagram_handle:
handle_format: should be a handle, not a URL
facebook_handle:
handle_format: should be a handle, not a URL
bluesky_handle:
handle_format: should be a handle, not a URL
seed:
attributes:
tradable_to:
tradable_to_inclusion: "You may only trade seed nowhere, locally, nationally, or internationally"
organic:
organic_inclusion: "You must say whether the seeds are organic or not, or that you don't know"
gmo:
gmo_inclusion: "You must say whether the seeds are genetically modified or not, or that you don't know"
heirloom:
heirloom_inclusion: "You must say whether the seeds are heirloom, hybrid, or unknown"
source:
source_inclusion: "You must say where the seeds are from, or that you don't know"
application_helper:
title:
title:
@@ -112,6 +162,9 @@ en:
forums:
index:
title: Forums
created: Forum was successfully created.
updated: Forum was successfully updated.
deleted: Forum was successfully deleted.
gardens:
created: Garden was successfully created.
deleted: Garden was successfully deleted.
@@ -208,6 +261,8 @@ en:
trade_to: Will trade to
unspecified: unspecified
view_all: View all seeds
added_to_stash: Successfully added %{crop} seed to your stash.
updated: Seed was successfully updated.
stats:
member_linktext: "%{count} members"
message_html: So far, %{member} have planted %{number_crops} %{number_plantings} in %{number_gardens}; and %{contributors} people have contributed to our code on %{github}!
@@ -275,6 +330,21 @@ en:
links:
my_gardens: My gardens
messages:
auth_success: Authentication successful.
auth_failed: Authentication failed.
crops_waiting: There are crops waiting to be wrangled.
followed: "Followed %{name}"
unfollowed: "Unfollowed %{name}"
follow_error: Already following or error while following.
transplant_success: Planting was successfully transplanted.
transplant_error: "There was an error transplanting the planting: %{errors}"
revert_success: "Reverted to version from %{date}"
revert_error: "Could not revert to version from %{date}. Errors: %{errors}"
invalid_location: Please enter a valid location
unable_to_like: Unable to like
unable_to_unlike: Unable to unlike
members:
edit_profile: Edit profile
index:
@@ -342,10 +412,22 @@ en:
progress_0_not_planted_yet: 'Progress: 0% - not planted yet'
posts:
write_blog_post: Write blog post
created: Post was successfully created.
updated: Post was successfully updated.
deleted: Post was deleted.
index:
title:
author_posts: "%{author} posts"
default: Everyone's posts
scientific_names:
deleted: Scientific name was successfully deleted.
alternate_names:
created: Alternate name was successfully created.
updated: Alternate name was successfully updated.
deleted: Alternate name was successfully deleted.
crop_companions:
created: Companion was successfully created.
deleted: Companion was successfully destroyed.
seeds:
form:
trade_help: >
@@ -361,6 +443,7 @@ en:
owner_seeds: "%{owner} seeds"
save_seeds: Save seeds
string: "%{crop} seeds belonging to %{owner}"
added_to_stash: Successfully added %{crop} seed to your stash.
unauthorized:
create:
all: Please sign in or sign up to create a %{subject}.

View File

@@ -105,6 +105,7 @@ Rails.application.routes.draw do
resources :forums
resources :follows, only: %i(create destroy)
resources :blocks, only: %i(create destroy)
post 'likes' => 'likes#create'
delete 'likes' => 'likes#destroy'
@@ -121,6 +122,7 @@ Rails.application.routes.draw do
resources :follows
get 'followers' => 'follows#followers'
resources :blocks, only: %i(create destroy)
end
resources :messages

View File

@@ -18,7 +18,6 @@ class AllThePredictions < ActiveRecord::Migration[4.2]
remove_column :plantings, :days_before_maturity, :integer
create_table :median_functions do |t|
end
create_table :median_functions
end
end

View File

@@ -14,23 +14,23 @@ class AddLikeCounterCaches < ActiveRecord::Migration[5.2]
end
def data
execute <<-SQL.squish
UPDATE photos
SET likes_count = (
SELECT count(1)
FROM likes
WHERE likes.likeable_id = photos.id
AND likeable_type = 'Photo'
)
execute <<~SQL.squish
UPDATE photos
SET likes_count = (
SELECT count(1)
FROM likes
WHERE likes.likeable_id = photos.id
AND likeable_type = 'Photo'
)
SQL
execute <<-SQL.squish
UPDATE posts
SET likes_count = (
SELECT count(1)
FROM likes
WHERE likes.likeable_id = posts.id
AND likeable_type = 'Post'
)
execute <<~SQL.squish
UPDATE posts
SET likes_count = (
SELECT count(1)
FROM likes
WHERE likes.likeable_id = posts.id
AND likeable_type = 'Post'
)
SQL
end
end

View File

@@ -11,13 +11,13 @@ class CropHarvestCounterCache < ActiveRecord::Migration[5.2]
end
def set_counter_value
execute <<-SQL.squish
UPDATE crops
SET harvests_count = (
SELECT count(1)
FROM harvests
WHERE harvests.crop_id = crops.id
)
execute <<~SQL.squish
UPDATE crops
SET harvests_count = (
SELECT count(1)
FROM harvests
WHERE harvests.crop_id = crops.id
)
SQL
end
end

View File

@@ -11,13 +11,13 @@ class CropPhotoCounterCache < ActiveRecord::Migration[5.2]
end
def set_counter_value
execute <<-SQL.squish
UPDATE crops
SET photo_associations_count = (
SELECT count(1)
FROM photo_associations
WHERE photo_associations.crop_id = crops.id
)
execute <<~SQL.squish
UPDATE crops
SET photo_associations_count = (
SELECT count(1)
FROM photo_associations
WHERE photo_associations.crop_id = crops.id
)
SQL
end
end

View File

@@ -11,13 +11,13 @@ class PlantPartHarvestCounterCache < ActiveRecord::Migration[5.2]
end
def set_counter_value
execute <<-SQL.squish
UPDATE plant_parts
SET harvests_count = (
SELECT count(1)
FROM harvests
WHERE harvests.plant_part_id = plant_parts.id
)
execute <<~SQL.squish
UPDATE plant_parts
SET harvests_count = (
SELECT count(1)
FROM harvests
WHERE harvests.plant_part_id = plant_parts.id
)
SQL
end
end

View File

@@ -11,7 +11,7 @@ class PostCommentCounterCache < ActiveRecord::Migration[5.2]
end
def set_counter_value
execute <<-SQL.squish
execute <<~SQL.squish
UPDATE posts
SET comments_count = (
SELECT count(1)

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
# This migration comes from active_storage (originally 20180723000244)
class AddForeignKeyConstraintToActiveStorageAttachmentsForBlobId < ActiveRecord::Migration[6.0]
def up

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class AddFieldsToCrops < ActiveRecord::Migration[5.2]
def change
add_column :crops, :row_spacing, :integer

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class PopulateCropFieldsFromOpenfarmData < ActiveRecord::Migration[5.2]
def up
Crop.find_each do |crop|

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class AddSocialMediaToMembers < ActiveRecord::Migration[6.0]
def change
add_column :members, :website_url, :string

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class RenameOtherHandleToOtherUrlInMembers < ActiveRecord::Migration[6.0]
def change
rename_column :members, :other_handle, :other_url

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class CreateGardenCollaborators < ActiveRecord::Migration[7.2]
def change
create_table :garden_collaborators do |t|

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class CreateAustralianFoodClassificationData < ActiveRecord::Migration[5.2]
def change
create_table :australian_food_classification_data do |t|

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class MakeNotificationsPolymorphic < ActiveRecord::Migration[6.1]
def change
add_column :notifications, :notifiable_type, :string

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class ChangeCommentsPolymorphic < ActiveRecord::Migration[7.2]
def change
add_column :comments, :commentable_type, :string

View File

@@ -11,7 +11,7 @@ class AddPhotosCommentCount < ActiveRecord::Migration[7.2]
end
def set_counter_value
execute <<-SQL.squish
execute <<~SQL.squish
UPDATE photos
SET comments_count = (
SELECT count(1)

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class AddSourceToSeeds < ActiveRecord::Migration[7.2]
def change
add_column :seeds, :source, :string

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class AddIndexesCrops < ActiveRecord::Migration[7.2]
def change
add_index :alternate_names, :crop_id

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class AddOverallRatingPlantings < ActiveRecord::Migration[7.2]
def change
add_column :plantings, :overall_rating, :integer

View File

@@ -0,0 +1,13 @@
# frozen_string_literal: true
class CreateBlocks < ActiveRecord::Migration[6.1]
def change
create_table :blocks do |t|
t.references :blocker, foreign_key: { to_table: :members }
t.references :blocked, foreign_key: { to_table: :members }
t.timestamps
end
add_index :blocks, %i(blocker_id blocked_id), unique: true
end
end

View File

@@ -1,3 +1,5 @@
# frozen_string_literal: true
class AddEnYoutubeUrlToCrops < ActiveRecord::Migration[7.2]
def change
add_column :crops, :en_youtube_url, :string

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