Compare commits

...
165 Commits
Author SHA1 Message Date
Daniel O'Connor 6c1e1bbb20 Merge pull request #4775 from Growstuff/dependabot/bundler/scout_apm-6.3.0
Bump scout_apm from 6.2.1 to 6.3.0
2026-09-08 12:48:35 +09:30
dependabot[bot] ef9c12b0fb Bump scout_apm from 6.2.1 to 6.3.0
Bumps [scout_apm](https://github.com/scoutapp/scout_apm_ruby) from 6.2.1 to 6.3.0.
- [Changelog](https://github.com/scoutapp/scout_apm_ruby/blob/master/CHANGELOG.markdown)
- [Commits](https://github.com/scoutapp/scout_apm_ruby/compare/v6.2.1...v6.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-07 15:35:15 +00:00
Daniel O'Connor f3a4b5193a Merge pull request #4780 from Growstuff/dependabot/bundler/haml-7.5.1
Bump haml from 7.5.0 to 7.5.1
2026-09-08 01:03:06 +09:30
dependabot[bot] 88dcefd113 Bump haml from 7.5.0 to 7.5.1
Bumps [haml](https://github.com/haml/haml) from 7.5.0 to 7.5.1.
- [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.5.0...v7.5.1)

---
updated-dependencies:
- dependency-name: haml
  dependency-version: 7.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-07 07:04:02 +00:00
Daniel O'Connor f551e87e2f Merge pull request #4776 from Growstuff/dependabot/bundler/responders-3.2.1
Bump responders from 3.2.0 to 3.2.1
2026-09-03 19:33:57 +09:30
dependabot[bot] 636c75979c Bump responders from 3.2.0 to 3.2.1
Bumps [responders](https://github.com/heartcombo/responders) from 3.2.0 to 3.2.1.
- [Release notes](https://github.com/heartcombo/responders/releases)
- [Changelog](https://github.com/heartcombo/responders/blob/main/CHANGELOG.md)
- [Commits](https://github.com/heartcombo/responders/compare/v3.2.0...v3.2.1)

---
updated-dependencies:
- dependency-name: responders
  dependency-version: 3.2.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-03 05:03:20 +00:00
Daniel O'Connor 63acd37b2b Merge pull request #4777 from Growstuff/dependabot/bundler/selenium-webdriver-4.48.0
Bump selenium-webdriver from 4.47.0 to 4.48.0
2026-09-03 14:30:35 +09:30
dependabot[bot] 38e99c66fb Bump selenium-webdriver from 4.47.0 to 4.48.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.47.0 to 4.48.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.47.0...selenium-4.48.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-02 10:15:25 +00:00
Daniel O'Connor 191e22ab02 Merge pull request #4779 from Growstuff/dependabot/bundler/bullet-8.2.0
Bump bullet from 8.1.3 to 8.2.0
2026-09-02 19:43:11 +09:30
dependabot[bot] 30456498c3 Bump bullet from 8.1.3 to 8.2.0
Bumps [bullet](https://github.com/flyerhzm/bullet) from 8.1.3 to 8.2.0.
- [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/8.1.3...8.2.0)

---
updated-dependencies:
- dependency-name: bullet
  dependency-version: 8.2.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-09-02 07:06:25 +00:00
Daniel O'Connor 0998191673 Merge pull request #4778 from Growstuff/dependabot/bundler/haml-7.5.0
Bump haml from 7.4.1 to 7.5.0
2026-08-31 17:22:55 +09:30
dependabot[bot] 3145b876d9 Bump haml from 7.4.1 to 7.5.0
Bumps [haml](https://github.com/haml/haml) from 7.4.1 to 7.5.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.4.1...v7.5.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-31 07:07:50 +00:00
Daniel O'Connor 0f7efe4cb8 Merge pull request #4774 from Growstuff/dependabot/bundler/rubocop-1.90.0
Bump rubocop from 1.89.0 to 1.90.0
2026-08-28 17:58:07 +09:30
dependabot[bot] 35612c43a9 Bump rubocop from 1.89.0 to 1.90.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.89.0 to 1.90.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.89.0...v1.90.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-28 07:04:30 +00:00
Daniel O'Connor ddaa4ff77e Merge pull request #4773 from Growstuff/dependabot/bundler/haml_lint-0.78.0
Bump haml_lint from 0.77.0 to 0.78.0
2026-08-24 21:33:55 +09:30
dependabot[bot] a92b61499c Bump haml_lint from 0.77.0 to 0.78.0
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.77.0 to 0.78.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.77.0...v0.78.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-24 07:06:13 +00:00
Daniel O'Connor cb4db83bd4 Merge pull request #4771 from Growstuff/upgrade-brace-expansion-yarn-10835747198710381597
Upgrade dependencies to resolve brace-expansion conflict
2026-08-23 22:26:44 +09:30
Daniel O'Connor 7622523656 Merge pull request #4753 from Growstuff/ruby4
Ruby 4.0.6
2026-08-23 19:03:12 +09:30
google-labs-jules[bot]andCloCkWeRX 21909fb135 Upgrade JS dependencies to fix brace-expansion conflict
Upgraded @coffeelint/cli, @percy/cli, eslint, and eslint-config-google in
yarn.lock to update brace-expansion transitive dependency to >= 1.1.18.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-08-23 09:31:53 +00:00
Daniel O'Connor 276c1aa426 Merge pull request #4770 from Growstuff/jules-12501643476787739606-767571b3
Update brace-expansion dependencies in yarn.lock
2026-08-23 18:53:41 +09:30
google-labs-jules[bot]andCloCkWeRX 9229c4b374 Update brace-expansion dependencies in yarn.lock
Update brace-expansion to 2.1.4 and 5.0.9 (via minimatch 10.2.6)
to satisfy requirement ranges for @percy/cli and eslint.

Co-authored-by: CloCkWeRX <365751+CloCkWeRX@users.noreply.github.com>
2026-08-23 09:02:52 +00:00
Daniel O'Connor d103bdf23b Update throttle limit for restricted routes 2026-08-23 18:22:29 +09:30
Daniel O'Connor 1ee993f008 Merge pull request #4767 from Growstuff/bump-oauth-1.1.6
Bump oauth to 1.1.6
2026-08-23 18:03:46 +09:30
Daniel O'Connor 0834ab335d Merge pull request #4766 from Growstuff/bump-oauth-1.1.5
Bump oauth to 1.1.5
2026-08-23 18:00:37 +09:30
Daniel O'Connor b7a15e3d8f Merge pull request #4765 from Growstuff/bump-oauth-1.1.4
Bump oauth to 1.1.4
2026-08-23 18:00:25 +09:30
Daniel O'Connor dc5343671b Merge pull request #4769 from Growstuff/bump-oauth-1.1.3
Bump oauth to 1.1.3
2026-08-23 18:00:09 +09:30
Daniel O'Connor 4d5d247995 Merge pull request #4768 from Growstuff/bump-oauth-1.1.2
Bump oauth to 1.1.2
2026-08-23 17:58:45 +09:30
Daniel O'Connor 4754d10495 Document why we pin 2026-08-23 08:09:33 +00:00
Daniel O'Connor b323280de9 Bump oauth to 1.1.6 2026-08-23 08:08:32 +00:00
Daniel O'Connor c0c7fc0290 Bump oauth to 1.1.5 2026-08-23 08:07:58 +00:00
Daniel O'Connor 449bb4dd13 Bump oauth to 1.1.4 2026-08-23 08:06:54 +00:00
Daniel O'Connor 704665d259 Bump oauth to 1.1.3 2026-08-23 08:06:01 +00:00
Daniel O'Connor 5ec95c68fc Bump oauth to 1.1.2 2026-08-23 08:05:16 +00:00
Daniel O'Connor f331361c30 Merge pull request #4764 from Growstuff/bump-oauth-1.1.1
Bump oauth to 1.1.1
2026-08-23 17:34:55 +09:30
Daniel O'Connor 7b9b70ba9d Bump oauth to 1.1.1 2026-08-23 07:56:20 +00:00
Daniel O'Connor 1e9b2bd3c0 Bump oauth to 1.1.1 2026-08-23 07:28:53 +00:00
Daniel O'Connor 0bfe52b6e3 Merge pull request #4763 from Growstuff/bump-oauth-1.1.x
Bump oauth to 1.1.0
2026-08-23 16:58:27 +09:30
Daniel O'Connor 4ba4f22e6b Merge pull request #4761 from Growstuff/bump-oauth-1.0.x
Bump oauth to 1.0.1
2026-08-23 16:49:49 +09:30
Daniel O'Connor 3a8f112932 Bump oauth to 1.1.0 because Showing 409 changed files with 44,667 additions and 5,609 deletions is obscene 2026-08-23 07:15:53 +00:00
Daniel O'Connor 932d36255e Bump oauth to 1.1.6 2026-08-23 07:13:04 +00:00
Daniel O'Connor 7b0013f602 Merge pull request #4760 from Growstuff/bump-oauth-0.6.0
Bump oauth from 0.5.14 to 0.6.2
2026-08-23 16:38:06 +09:30
Daniel O'Connor f4d883fee2 Bump oauth to 1.0.1 2026-08-23 07:07:47 +00:00
Daniel O'Connor 140f008f49 Merge pull request #4758 from Growstuff/bump-oauth-0.5.14
Bump oauth from 0.5.13 to 0.5.14
2026-08-23 16:34:30 +09:30
Daniel O'Connor ec43a93637 Merge pull request #4759 from Growstuff/bump-oauth-0.5.13
Bump oauth from 0.5.12 to 0.5.13
2026-08-23 16:34:13 +09:30
Daniel O'Connor 068ed30d10 Merge pull request #4757 from Growstuff/bump-oauth-0.5.12
Bump oauth from 0.5.11 to 0.5.12
2026-08-23 16:33:58 +09:30
Daniel O'Connor 29bd577dc7 Bump oauth from 0.5.14 to 0.6.2 2026-08-23 06:56:49 +00:00
Daniel O'Connor 51217067c3 Merge pull request #4755 from Growstuff/bump-oauth-0.5.11
Bump oauth from 0.5.10 to 0.5.11
2026-08-23 16:23:33 +09:30
Daniel O'Connor c7a3812659 Merge pull request #4754 from Growstuff/bump-oauth
Bump oauth from 0.5.9 to 0.5.10
2026-08-23 16:23:23 +09:30
Daniel O'Connor d32ae205b3 Bump oauth from 0.5.13 to 0.5.14 2026-08-23 06:42:54 +00:00
Daniel O'Connor ce0f1a95f0 Bump oauth from 0.5.12 to 0.5.13 2026-08-23 06:42:14 +00:00
Daniel O'Connor 0e7cf19f03 Bump oauth from 0.5.11 to 0.5.12 2026-08-23 06:39:14 +00:00
Daniel O'Connor 076b007bcf Bump oauth from 0.5.10 to 0.5.11 2026-08-23 06:38:37 +00:00
Daniel O'Connor 45def0e086 Bump oauth from 0.5.9 to 0.5.10 2026-08-23 06:37:41 +00:00
Daniel O'Connor b0fffc0c94 Merge pull request #4752 from Growstuff/ruby-3.4.10
Ruby 3.4.10
2026-08-23 15:44:37 +09:30
Daniel O'Connor 277607cc26 Update to Ruby 4.0.6 2026-08-23 06:13:51 +00:00
Daniel O'Connor 431e3b3574 Ruby 3.4.10 2026-08-23 05:56:57 +00:00
Daniel O'Connor 8d30291f8c Merge pull request #4751 from Growstuff/dependabot/bundler/haml-7.4.1
Bump haml from 7.3.1 to 7.4.1
2026-08-23 00:42:56 +09:30
Daniel O'Connor c3759aac0d Merge pull request #4750 from Growstuff/dependabot/bundler/dalli-5.1.0
Bump dalli from 5.0.6 to 5.1.0
2026-08-23 00:41:30 +09:30
dependabot[bot] f0324ecb7a Bump haml from 7.3.1 to 7.4.1
Bumps [haml](https://github.com/haml/haml) from 7.3.1 to 7.4.1.
- [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.3.1...v7.4.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-21 07:03:25 +00:00
dependabot[bot] 4f01d6dec4 Bump dalli from 5.0.6 to 5.1.0
Bumps [dalli](https://github.com/petergoldstein/dalli) from 5.0.6 to 5.1.0.
- [Release notes](https://github.com/petergoldstein/dalli/releases)
- [Changelog](https://github.com/petergoldstein/dalli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/petergoldstein/dalli/compare/v5.0.6...v5.1.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-20 07:05:39 +00:00
Daniel O'Connor 6aa9f5ebd4 Merge pull request #4748 from Growstuff/dependabot/bundler/haml-7.3.1
Bump haml from 7.3.0 to 7.3.1
2026-08-19 20:11:17 +09:30
dependabot[bot] 5cf4ea56c4 Bump haml from 7.3.0 to 7.3.1
Bumps [haml](https://github.com/haml/haml) from 7.3.0 to 7.3.1.
- [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.3.0...v7.3.1)

---
updated-dependencies:
- dependency-name: haml
  dependency-version: 7.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-19 09:57:25 +00:00
Daniel O'Connor e3801aa043 Merge pull request #4749 from Growstuff/dependabot/bundler/rubocop-rails-2.37.0
Bump rubocop-rails from 2.36.0 to 2.37.0
2026-08-19 19:25:04 +09:30
dependabot[bot] d0ff4aa5f7 Bump rubocop-rails from 2.36.0 to 2.37.0
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.36.0 to 2.37.0.
- [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.36.0...v2.37.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-19 07:07:04 +00:00
Daniel O'Connor 36569ea099 Merge pull request #4747 from Growstuff/dependabot/bundler/axe-core-capybara-4.13.0
Bump axe-core-capybara from 4.12.0 to 4.13.0
2026-08-17 21:34:23 +09:30
dependabot[bot] 68258d9926 Bump axe-core-capybara from 4.12.0 to 4.13.0
Bumps [axe-core-capybara](https://github.com/dequelabs/axe-core-gems) from 4.12.0 to 4.13.0.
- [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.12.0...v4.13.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-17 07:04:31 +00:00
Daniel O'Connor 2b19ee8dfd Merge pull request #4745 from Growstuff/CloCkWeRX-patch-3
Update oauth gem from 0.5.8 to 0.5.9
2026-08-14 19:43:09 +09:30
Daniel O'Connor bcde082f45 Update oauth gem from 0.5.8 to 0.5.9 2026-08-14 19:38:18 +09:30
Daniel O'Connor d902c74e96 Merge pull request #4744 from Growstuff/CloCkWeRX-patch-2
Bump oauth gem version to 0.5.8
2026-08-14 19:34:04 +09:30
Daniel O'Connor de08dd70ac Bump oauth gem version to 0.5.8
Updated oauth gem version from 0.5.7 to 0.5.8.
2026-08-14 19:24:03 +09:30
Daniel O'Connor 2df0f4dd39 Merge pull request #4743 from Growstuff/dependabot/bundler/selenium-webdriver-4.47.0
Bump selenium-webdriver from 4.46.0 to 4.47.0
2026-08-14 19:17:14 +09:30
dependabot[bot] aaf1bf4b08 Bump selenium-webdriver from 4.46.0 to 4.47.0
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.46.0 to 4.47.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.46.0...selenium-4.47.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-14 09:36:48 +00:00
Daniel O'Connor f28804f53e Merge pull request #4742 from Growstuff/dependabot/bundler/oj-3.17.6
Bump oj from 3.17.5 to 3.17.6
2026-08-14 19:04:27 +09:30
dependabot[bot] 02e83f1791 Bump oj from 3.17.5 to 3.17.6
Bumps [oj](https://github.com/ohler55/oj) from 3.17.5 to 3.17.6.
- [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.17.5...v3.17.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-14 07:03:53 +00:00
Daniel O'Connor 76bba007f0 Merge pull request #4741 from Growstuff/CloCkWeRX-patch-2
Bump oauth gem version to 0.5.7
2026-08-13 19:42:31 +09:30
Daniel O'Connor 90b64b5c39 Bump oauth gem version to 0.5.7
Updated oauth gem version from 0.5.6 to 0.5.7.
2026-08-11 20:40:27 +09:30
Daniel O'Connor ea5bae7e2f Merge pull request #4734 from Growstuff/dependabot/bundler/haml-7.3.0
Bump haml from 7.2.2 to 7.3.0
2026-08-11 19:44:36 +09:30
dependabot[bot] 41f480b942 Bump haml from 7.2.2 to 7.3.0
Bumps [haml](https://github.com/haml/haml) from 7.2.2 to 7.3.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.2.2...v7.3.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-11 09:13:57 +00:00
Daniel O'Connor 8f57bd16ff Merge pull request #4740 from Growstuff/dependabot/bundler/haml_lint-0.77.0
Bump haml_lint from 0.76.0 to 0.77.0
2026-08-11 18:41:34 +09:30
dependabot[bot] c222af08cb Bump haml_lint from 0.76.0 to 0.77.0
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.76.0 to 0.77.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.76.0...v0.77.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-11 07:06:11 +00:00
Daniel O'Connor b9c1d44201 Merge pull request #4736 from Growstuff/dependabot/bundler/rubocop-1.89.0
Bump rubocop from 1.88.2 to 1.89.0
2026-08-10 20:49:14 +09:30
dependabot[bot] f6f1a2b347 Bump rubocop from 1.88.2 to 1.89.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.88.2 to 1.89.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.88.2...v1.89.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-10 10:46:46 +00:00
Daniel O'Connor 5af7b0bcf9 Merge pull request #4735 from Growstuff/dependabot/bundler/csv-3.3.6
Bump csv from 3.3.5 to 3.3.6
2026-08-10 20:12:05 +09:30
Daniel O'Connoranddependabot[bot] 38fb41aa04 Bump aws-sdk-s3 from 1.228.2 to 1.229.0 (#4738)
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.228.2 to 1.229.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.229.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 20:10:16 +09:30
2f43175324 Fallback to crop specific photos in PhotoCapable thumbnail_url (#4739)
* Implement crop photo fallback in PhotoCapable thumbnail_url

Currently, plantings, seeds, and harvests display "no photo available" placeholders when they do not have specific photos attached. This change enables the PhotoCapable#thumbnail_url method to automatically fall back to the associated crop's thumbnail_url when no item-specific photo is present.

Additionally, this commit:
- Fixes validation in PhotoAssociation to handle crop photos that do not have a polymorphic photographable owner.
- Disables cache store during testing to prevent stale/cached default photos from leaking across specs.
- Adds comprehensive unit tests for the fallback logic.

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

* Keep only core crop photo fallback and unit tests, removing excess changes

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

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-08-10 20:09:18 +09:30
dependabot[bot] b7f4667681 Bump aws-sdk-s3 from 1.228.2 to 1.229.0
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.228.2 to 1.229.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.229.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-10 09:36:46 +00:00
dependabot[bot] 876f4f9fce Bump csv from 3.3.5 to 3.3.6
Bumps [csv](https://github.com/ruby/csv) from 3.3.5 to 3.3.6.
- [Release notes](https://github.com/ruby/csv/releases)
- [Changelog](https://github.com/ruby/csv/blob/main/NEWS.md)
- [Commits](https://github.com/ruby/csv/compare/v3.3.5...v3.3.6)

---
updated-dependencies:
- dependency-name: csv
  dependency-version: 3.3.6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-10 09:36:43 +00:00
dependabot[bot] 186be79a86 Bump rails from 8.1.3 to 8.1.3.1 (#4737)
Bumps [rails](https://github.com/rails/rails) from 8.1.3 to 8.1.3.1.
- [Release notes](https://github.com/rails/rails/releases)
- [Commits](https://github.com/rails/rails/compare/v8.1.3...v8.1.3.1)

---
updated-dependencies:
- dependency-name: rails
  dependency-version: 8.1.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 19:04:39 +09:30
dependabot[bot] afae82f8cc Bump activestorage from 8.1.3 to 8.1.3.1 (#4732)
Bumps [activestorage](https://github.com/rails/rails) from 8.1.3 to 8.1.3.1.
- [Release notes](https://github.com/rails/rails/releases)
- [Changelog](https://github.com/rails/rails/blob/v8.1.3.1/activestorage/CHANGELOG.md)
- [Commits](https://github.com/rails/rails/compare/v8.1.3...v8.1.3.1)

---
updated-dependencies:
- dependency-name: activestorage
  dependency-version: 8.1.3.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-10 19:04:11 +09:30
4563df45d0 Upgrade to Rails 8.1 (#4685)
* Upgrade application to Rails 8.1

- Update rails gem to ~> 8.1.0
- Set config.load_defaults 8.1 in application.rb
- Add gem 'csv' for Ruby 3.4+ compatibility
- Replace deprecated 'render text:' with 'render plain:' in PagesController
- Add compatibility patch for jsonapi-resources routing in Rails 8.1
- Add compatibility patch for Faraday 2.x error constants
- Add Searchkick test stubs for environments without Elasticsearch
- Include required Active Storage update migrations

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

* Remove disabled searchkick

* Apply suggestion from @CloCkWeRX

* Delete config/initializers/faraday_patch.rb

* Apply suggestions from code review

Co-authored-by: Daniel O'Connor <daniel.oconnor@gmail.com>

* Remove modifications for tests without elasticsearch

* Remove psych gem and its dependencies

Removed psych gem version 5.4.0 and its dependencies.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-08-09 22:53:15 +09:30
Daniel O'Connor b4d156e708 Merge branch 'mainline' into dev 2026-08-09 22:34:27 +09:30
dependabot[bot] 1d7abb8dc2 Bump json from 2.21.1 to 2.21.2 (#4730)
Bumps [json](https://github.com/ruby/json) from 2.21.1 to 2.21.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.21.1...v2.21.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-09 22:31:00 +09:30
dependabot[bot] 24e4d96395 Bump js-yaml from 4.3.0 to 4.3.1 (#4729)
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.3.0 to 4.3.1.
- [Changelog](https://github.com/nodeca/js-yaml/blob/4.3.1/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.3.0...4.3.1)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-08 13:33:52 +09:30
dependabot[bot] a95eb6ec63 Bump fast-uri from 3.1.4 to 3.1.5 (#4727)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.4 to 3.1.5.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.4...v3.1.5)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.5
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-07 21:22:32 +09:30
dependabot[bot] e6292689c7 Bump dalli from 5.0.5 to 5.0.6 (#4728)
Bumps [dalli](https://github.com/petergoldstein/dalli) from 5.0.5 to 5.0.6.
- [Release notes](https://github.com/petergoldstein/dalli/releases)
- [Changelog](https://github.com/petergoldstein/dalli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/petergoldstein/dalli/compare/v5.0.5...v5.0.6)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-07 21:22:12 +09:30
dependabot[bot] cb1eeb677b Bump scout_apm from 6.2.0 to 6.2.1 (#4725)
Bumps [scout_apm](https://github.com/scoutapp/scout_apm_ruby) from 6.2.0 to 6.2.1.
- [Changelog](https://github.com/scoutapp/scout_apm_ruby/blob/master/CHANGELOG.markdown)
- [Commits](https://github.com/scoutapp/scout_apm_ruby/compare/v6.2.0...v6.2.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-05 18:41:52 +09:30
dependabot[bot] dc76c546f5 Bump oj from 3.17.4 to 3.17.5 (#4726)
Bumps [oj](https://github.com/ohler55/oj) from 3.17.4 to 3.17.5.
- [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.17.4...v3.17.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-05 18:41:37 +09:30
dependabot[bot] 8cba6c35b8 Bump ip-address from 10.2.0 to 10.4.0 (#4723)
Bumps [ip-address](https://github.com/beaugunderson/ip-address) from 10.2.0 to 10.4.0.
- [Release notes](https://github.com/beaugunderson/ip-address/releases)
- [Commits](https://github.com/beaugunderson/ip-address/compare/v10.2.0...v10.4.0)

---
updated-dependencies:
- dependency-name: ip-address
  dependency-version: 10.4.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-05 18:41:24 +09:30
dependabot[bot] 4d3464f647 Bump icalendar from 2.12.3 to 2.12.4 (#4724)
Bumps [icalendar](https://github.com/icalendar/icalendar) from 2.12.3 to 2.12.4.
- [Changelog](https://github.com/icalendar/icalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/icalendar/icalendar/compare/v2.12.3...v2.12.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-04 19:11:50 +09:30
dependabot[bot] 3d15439af7 Bump aws-sdk-s3 from 1.228.1 to 1.228.2 (#4721)
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.228.1 to 1.228.2.
- [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.228.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-03 22:49:12 +09:30
dependabot[bot] 53201d629f Bump docker/login-action from 4.5.2 to 4.6.0 (#4722)
Bumps [docker/login-action](https://github.com/docker/login-action) from 4.5.2 to 4.6.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v4.5.2...v4.6.0)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 4.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-08-03 19:33:00 +09:30
dependabot[bot] 9385189ff7 Bump docker/login-action from 4 to 4.5.2 (#4720)
Bumps [docker/login-action](https://github.com/docker/login-action) from 4 to 4.5.2.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v4...v4.5.2)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 4.5.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-31 17:20:16 +09:30
dependabot[bot] ff2e917980 Bump msgpack from 1.8.3 to 1.8.4 (#4717)
Bumps [msgpack](https://github.com/msgpack/msgpack-ruby) from 1.8.3 to 1.8.4.
- [Changelog](https://github.com/msgpack/msgpack-ruby/blob/master/ChangeLog)
- [Commits](https://github.com/msgpack/msgpack-ruby/compare/v1.8.3...v1.8.4)

---
updated-dependencies:
- dependency-name: msgpack
  dependency-version: 1.8.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-30 22:31:07 +09:30
dependabot[bot] 3b711f05a4 Bump sitemap_generator from 7.1.0 to 7.1.1 (#4715)
Bumps [sitemap_generator](https://github.com/kjvarga/sitemap_generator) from 7.1.0 to 7.1.1.
- [Changelog](https://github.com/kjvarga/sitemap_generator/blob/master/CHANGES.md)
- [Commits](https://github.com/kjvarga/sitemap_generator/compare/v7.1.0...v7.1.1)

---
updated-dependencies:
- dependency-name: sitemap_generator
  dependency-version: 7.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-30 21:09:59 +09:30
dependabot[bot] 88bf539b1c Bump rails from 8.0.5 to 8.0.5.1 (#4719)
Bumps [rails](https://github.com/rails/rails) from 8.0.5 to 8.0.5.1.
- [Release notes](https://github.com/rails/rails/releases)
- [Commits](https://github.com/rails/rails/compare/v8.0.5...v8.0.5.1)

---
updated-dependencies:
- dependency-name: rails
  dependency-version: 8.0.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-30 17:55:13 +09:30
dependabot[bot] 0b4915ec13 Bump haml from 7.2.0 to 7.2.2 (#4716)
Bumps [haml](https://github.com/haml/haml) from 7.2.0 to 7.2.2.
- [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.2.0...v7.2.2)

---
updated-dependencies:
- dependency-name: haml
  dependency-version: 7.2.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-29 18:16:34 +09:30
dependabot[bot] 6d8038d406 Bump actions/setup-node from 6 to 7 (#4703)
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v6...v7)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-26 14:27:48 +09:30
dependabot[bot] 479f5be290 Bump js-yaml from 4.2.0 to 4.3.0 (#4713)
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.2.0 to 4.3.0.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...4.3.0)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-25 01:29:54 +09:30
dependabot[bot] 401d34d59a Bump ws from 8.20.0 to 8.21.1 (#4699)
Bumps [ws](https://github.com/websockets/ws) from 8.20.0 to 8.21.1.
- [Release notes](https://github.com/websockets/ws/releases)
- [Commits](https://github.com/websockets/ws/compare/8.20.0...8.21.1)

---
updated-dependencies:
- dependency-name: ws
  dependency-version: 8.21.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 21:41:14 +09:30
dependabot[bot]andDaniel O'Connor 8c5e2b9e4d Bump systeminformation from 5.31.6 to 5.31.17 (#4706)
Bumps [systeminformation](https://github.com/sebhildebrandt/systeminformation) from 5.31.6 to 5.31.17.
- [Release notes](https://github.com/sebhildebrandt/systeminformation/releases)
- [Changelog](https://github.com/sebhildebrandt/systeminformation/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sebhildebrandt/systeminformation/compare/v5.31.6...v5.31.17)

---
updated-dependencies:
- dependency-name: systeminformation
  dependency-version: 5.31.17
  dependency-type: indirect
...

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-07-24 21:29:38 +09:30
dependabot[bot] 7cb32f9620 Bump rails-html-sanitizer from 1.7.0 to 1.7.1 (#4712)
Bumps [rails-html-sanitizer](https://github.com/rails/rails-html-sanitizer) from 1.7.0 to 1.7.1.
- [Release notes](https://github.com/rails/rails-html-sanitizer/releases)
- [Changelog](https://github.com/rails/rails-html-sanitizer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rails/rails-html-sanitizer/compare/v1.7.0...v1.7.1)

---
updated-dependencies:
- dependency-name: rails-html-sanitizer
  dependency-version: 1.7.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 21:28:07 +09:30
dependabot[bot] 2ba21529af Bump aws-sdk-s3 from 1.228.0 to 1.228.1 (#4711)
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.228.0 to 1.228.1.
- [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.228.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 21:27:42 +09:30
dependabot[bot] fe48c2f6d1 Bump fast-uri from 3.1.2 to 3.1.4 (#4714)
Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.2 to 3.1.4.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.2...v3.1.4)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.4
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 21:24:43 +09:30
dependabot[bot] 514d590148 Bump websocket-driver from 0.8.1 to 0.8.2 (#4710)
Bumps [websocket-driver](https://github.com/faye/websocket-driver-ruby) from 0.8.1 to 0.8.2.
- [Changelog](https://github.com/faye/websocket-driver-ruby/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-driver-ruby/compare/0.8.1...0.8.2)

---
updated-dependencies:
- dependency-name: websocket-driver
  dependency-version: 0.8.2
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-24 18:31:20 +09:30
dependabot[bot] 32fa1acc84 Bump aws-sdk-s3 from 1.227.0 to 1.228.0 (#4709)
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.227.0 to 1.228.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.228.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-18 00:13:52 +09:30
dependabot[bot] 8e9f891819 Bump percy-capybara from 5.0.0 to 5.0.1 (#4704)
Bumps [percy-capybara](https://github.com/percy/percy-capybara) from 5.0.0 to 5.0.1.
- [Release notes](https://github.com/percy/percy-capybara/releases)
- [Commits](https://github.com/percy/percy-capybara/compare/v5.0.0...5.0.1)

---
updated-dependencies:
- dependency-name: percy-capybara
  dependency-version: 5.0.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-17 00:10:46 +09:30
dependabot[bot] 33ecb69a45 Bump websocket-driver from 0.8.0 to 0.8.1 (#4707)
Bumps [websocket-driver](https://github.com/faye/websocket-driver-ruby) from 0.8.0 to 0.8.1.
- [Changelog](https://github.com/faye/websocket-driver-ruby/blob/main/CHANGELOG.md)
- [Commits](https://github.com/faye/websocket-driver-ruby/compare/0.8.0...0.8.1)

---
updated-dependencies:
- dependency-name: websocket-driver
  dependency-version: 0.8.1
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-17 00:10:07 +09:30
dependabot[bot] 217638854a Bump loofah from 2.25.1 to 2.25.2 (#4708)
Bumps [loofah](https://github.com/flavorjones/loofah) from 2.25.1 to 2.25.2.
- [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.1...v2.25.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-17 00:09:37 +09:30
dependabot[bot] 659df0fc25 Bump oj from 3.17.3 to 3.17.4 (#4705)
Bumps [oj](https://github.com/ohler55/oj) from 3.17.3 to 3.17.4.
- [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.17.3...v3.17.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-17 00:08:21 +09:30
dependabot[bot] 98b79d6725 Bump haml_lint from 0.75.0 to 0.76.0 (#4702)
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.75.0 to 0.76.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.75.0...v0.76.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-14 18:40:56 +09:30
dependabot[bot] d3198e283a Bump haml-rails from 3.0.0 to 3.1.0 (#4697)
Bumps [haml-rails](https://github.com/haml/haml-rails) from 3.0.0 to 3.1.0.
- [Changelog](https://github.com/haml/haml-rails/blob/master/CHANGELOG.md)
- [Commits](https://github.com/haml/haml-rails/compare/v3.0.0...v3.1.0)

---
updated-dependencies:
- dependency-name: haml-rails
  dependency-version: 3.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-13 22:30:41 +09:30
dependabot[bot] 6a318e45e9 Bump rubocop-rails from 2.35.5 to 2.36.0 (#4700)
Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.35.5 to 2.36.0.
- [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.35.5...v2.36.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-13 18:43:53 +09:30
dependabot[bot] 28d75ca782 Bump selenium-webdriver from 4.45.0 to 4.46.0 (#4701)
Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.45.0 to 4.46.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.45.0...selenium-4.46.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-13 18:43:40 +09:30
dependabot[bot] ab2aa2d60b Bump terser from 1.2.7 to 1.2.8 (#4696)
Bumps [terser](https://github.com/ahorek/terser-ruby) from 1.2.7 to 1.2.8.
- [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.7...1.2.8)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-12 13:47:22 +09:30
dependabot[bot] a9cab1a366 Bump aws-sdk-s3 from 1.226.0 to 1.227.0 (#4698)
Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.226.0 to 1.227.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.227.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-12 13:47:03 +09:30
c32fae3cbe release88 (#4688)
* Bump actions/cache from 5 to 6

Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.
- [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/v5...v6)

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

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

* Bump axe-core-rspec from 4.11.3 to 4.12.0

Bumps [axe-core-rspec](https://github.com/dequelabs/axe-core-gems) from 4.11.3 to 4.12.0.
- [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.3...v4.12.0)

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

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

* Merge pull request #4683 from Growstuff/refactor-harvests-remove-elasticsearch-14630838429921835504

Refactor harvests to remove Elasticsearch

* Refactor Seeds to remove Elasticsearch dependency (#4684)

* Refactor Seeds to remove Elasticsearch dependency

This commit refactors the `SeedsController` and `Seed` model to remove
dependency on Elasticsearch and Searchkick.

Key changes:
- Removed `SearchSeeds` concern from the `Seed` model.
- Reimplemented `Seed.homepage_records` using ActiveRecord.
- Refactored `SeedsController#index` to use ActiveRecord for filtering,
  eager loading, and pagination.
- Deleted `app/models/concerns/search_seeds.rb`.
- Updated relevant specs to remove Searchkick-specific tags and setup.

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

* Remove Seed.reindex

* Remove trait

* Fix tests

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Refactor Plantings to remove Elasticsearch dependency (#4686)

* Refactor Plantings to remove Elasticsearch dependency

This commit refactors the Plantings controller, model, and views to use
ActiveRecord instead of Searchkick/Elasticsearch.

Key changes:
- Refactored `PlantingsController#index` to use an ActiveRecord-based
  `plantings` method.
- Moved `homepage_records` logic from `SearchPlantings` concern to the
  `Planting` model using ActiveRecord scopes.
- Removed `SearchPlantings` concern and deleted the file.
- Updated `home/_plantings.html.haml` and `plantings/index.rss.haml` to
  use dot notation for `Planting` object attributes.
- Updated specs to remove Searchkick-related setup and assertions.

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

* Fix Planting.reindex

* Fix test

* Mark test pending

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Fix plantings ICS feed regression and enable request spec (#4687)

* Fix plantings ICS feed regression and enable request spec

- Update `app/views/plantings/index.ics.erb` to use ActiveRecord method calls instead of hash bracket access.
- Enable `spec/requests/plantings_spec.rb` and update it to account for mirrored harvest events.
- Add `config/initializers/faraday_patch.rb` to fix Searchkick/Faraday 2.x compatibility issues.

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

* Delete config/initializers/faraday_patch.rb

* Apply suggestion from @CloCkWeRX

* Apply suggestions from code review

Co-authored-by: Daniel O'Connor <daniel.oconnor@gmail.com>

* Apply suggestion from @CloCkWeRX

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Block Semrush crawler in Rack Attack initializer

Added a blocklist entry for the Semrush crawler to prevent abusive requests.

* Bump sitemap_generator from 6.3.0 to 7.0.2

Bumps [sitemap_generator](https://github.com/kjvarga/sitemap_generator) from 6.3.0 to 7.0.2.
- [Changelog](https://github.com/kjvarga/sitemap_generator/blob/master/CHANGES.md)
- [Commits](https://github.com/kjvarga/sitemap_generator/compare/v6.3.0...v7.0.2)

---
updated-dependencies:
- dependency-name: sitemap_generator
  dependency-version: 7.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

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

* Bump carrierwave from 3.0.7 to 3.1.3

Bumps [carrierwave](https://github.com/carrierwaveuploader/carrierwave) from 3.0.7 to 3.1.3.
- [Release notes](https://github.com/carrierwaveuploader/carrierwave/releases)
- [Changelog](https://github.com/carrierwaveuploader/carrierwave/blob/master/CHANGELOG.md)
- [Commits](https://github.com/carrierwaveuploader/carrierwave/compare/v3.0.7...v3.1.3)

---
updated-dependencies:
- dependency-name: carrierwave
  dependency-version: 3.1.3
  dependency-type: indirect
...

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

* Bump rubocop from 1.88.0 to 1.88.1 (#4691)

Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.88.0 to 1.88.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.88.0...v1.88.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump sitemap_generator from 7.0.2 to 7.0.3 (#4692)

Bumps [sitemap_generator](https://github.com/kjvarga/sitemap_generator) from 7.0.2 to 7.0.3.
- [Changelog](https://github.com/kjvarga/sitemap_generator/blob/master/CHANGES.md)
- [Commits](https://github.com/kjvarga/sitemap_generator/compare/v7.0.2...v7.0.3)

---
updated-dependencies:
- dependency-name: sitemap_generator
  dependency-version: 7.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump sitemap_generator from 7.0.3 to 7.1.0

Bumps [sitemap_generator](https://github.com/kjvarga/sitemap_generator) from 7.0.3 to 7.1.0.
- [Changelog](https://github.com/kjvarga/sitemap_generator/blob/master/CHANGES.md)
- [Commits](https://github.com/kjvarga/sitemap_generator/compare/v7.0.3...v7.1.0)

---
updated-dependencies:
- dependency-name: sitemap_generator
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

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

* Bump haml_lint from 0.74.0 to 0.75.0 (#4694)

Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.74.0 to 0.75.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.74.0...v0.75.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubocop from 1.88.1 to 1.88.2

Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.88.1 to 1.88.2.
- [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.88.1...v1.88.2)

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

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

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cesy <cesy.avon@gmail.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-07-10 19:25:08 +09:30
Daniel O'Connor 0215c2baee Merge branch 'mainline' into dev 2026-07-10 19:17:42 +09:30
Cesy f41d0e0829 Merge pull request #4695 from Growstuff/dependabot/bundler/rubocop-1.88.2 2026-07-08 14:20:17 +01:00
dependabot[bot] 81139a5d8e Bump rubocop from 1.88.1 to 1.88.2
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.88.1 to 1.88.2.
- [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.88.1...v1.88.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-08 07:04:56 +00:00
dependabot[bot] 2805df545a Bump haml_lint from 0.74.0 to 0.75.0 (#4694)
Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.74.0 to 0.75.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.74.0...v0.75.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-07 18:03:48 +09:30
Cesy 0dc05fa541 Merge pull request #4693 from Growstuff/dependabot/bundler/sitemap_generator-7.1.0 2026-07-06 18:32:07 +01:00
dependabot[bot] a7fe8157d0 Bump sitemap_generator from 7.0.3 to 7.1.0
Bumps [sitemap_generator](https://github.com/kjvarga/sitemap_generator) from 7.0.3 to 7.1.0.
- [Changelog](https://github.com/kjvarga/sitemap_generator/blob/master/CHANGES.md)
- [Commits](https://github.com/kjvarga/sitemap_generator/compare/v7.0.3...v7.1.0)

---
updated-dependencies:
- dependency-name: sitemap_generator
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-06 07:04:57 +00:00
dependabot[bot] 7bb1452239 Bump sitemap_generator from 7.0.2 to 7.0.3 (#4692)
Bumps [sitemap_generator](https://github.com/kjvarga/sitemap_generator) from 7.0.2 to 7.0.3.
- [Changelog](https://github.com/kjvarga/sitemap_generator/blob/master/CHANGES.md)
- [Commits](https://github.com/kjvarga/sitemap_generator/compare/v7.0.2...v7.0.3)

---
updated-dependencies:
- dependency-name: sitemap_generator
  dependency-version: 7.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-04 15:38:57 +09:30
dependabot[bot] cb838d6db5 Bump rubocop from 1.88.0 to 1.88.1 (#4691)
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.88.0 to 1.88.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.88.0...v1.88.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-02 17:48:40 +09:30
Cesy 99c2439411 Merge pull request #4690 from Growstuff/dependabot/bundler/carrierwave-3.1.3 2026-07-01 12:32:39 +01:00
dependabot[bot] 83ff017d88 Bump carrierwave from 3.0.7 to 3.1.3
Bumps [carrierwave](https://github.com/carrierwaveuploader/carrierwave) from 3.0.7 to 3.1.3.
- [Release notes](https://github.com/carrierwaveuploader/carrierwave/releases)
- [Changelog](https://github.com/carrierwaveuploader/carrierwave/blob/master/CHANGELOG.md)
- [Commits](https://github.com/carrierwaveuploader/carrierwave/compare/v3.0.7...v3.1.3)

---
updated-dependencies:
- dependency-name: carrierwave
  dependency-version: 3.1.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-07-01 09:03:40 +00:00
Cesy fe4e7050fa Merge pull request #4689 from Growstuff/dependabot/bundler/sitemap_generator-7.0.2
Bump sitemap_generator from 6.3.0 to 7.0.2
2026-07-01 10:02:42 +01:00
dependabot[bot] ad08219217 Bump sitemap_generator from 6.3.0 to 7.0.2
Bumps [sitemap_generator](https://github.com/kjvarga/sitemap_generator) from 6.3.0 to 7.0.2.
- [Changelog](https://github.com/kjvarga/sitemap_generator/blob/master/CHANGES.md)
- [Commits](https://github.com/kjvarga/sitemap_generator/compare/v6.3.0...v7.0.2)

---
updated-dependencies:
- dependency-name: sitemap_generator
  dependency-version: 7.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-30 07:02:37 +00:00
Daniel O'Connor 67da779381 Block Semrush crawler in Rack Attack initializer
Added a blocklist entry for the Semrush crawler to prevent abusive requests.
2026-06-25 21:11:43 +09:30
c9b8c54b81 Fix plantings ICS feed regression and enable request spec (#4687)
* Fix plantings ICS feed regression and enable request spec

- Update `app/views/plantings/index.ics.erb` to use ActiveRecord method calls instead of hash bracket access.
- Enable `spec/requests/plantings_spec.rb` and update it to account for mirrored harvest events.
- Add `config/initializers/faraday_patch.rb` to fix Searchkick/Faraday 2.x compatibility issues.

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

* Delete config/initializers/faraday_patch.rb

* Apply suggestion from @CloCkWeRX

* Apply suggestions from code review

Co-authored-by: Daniel O'Connor <daniel.oconnor@gmail.com>

* Apply suggestion from @CloCkWeRX

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-06-24 23:18:24 +09:30
fa7f460510 Refactor Plantings to remove Elasticsearch dependency (#4686)
* Refactor Plantings to remove Elasticsearch dependency

This commit refactors the Plantings controller, model, and views to use
ActiveRecord instead of Searchkick/Elasticsearch.

Key changes:
- Refactored `PlantingsController#index` to use an ActiveRecord-based
  `plantings` method.
- Moved `homepage_records` logic from `SearchPlantings` concern to the
  `Planting` model using ActiveRecord scopes.
- Removed `SearchPlantings` concern and deleted the file.
- Updated `home/_plantings.html.haml` and `plantings/index.rss.haml` to
  use dot notation for `Planting` object attributes.
- Updated specs to remove Searchkick-related setup and assertions.

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

* Fix Planting.reindex

* Fix test

* Mark test pending

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-06-24 22:26:49 +09:30
6e7cf1c813 Refactor Seeds to remove Elasticsearch dependency (#4684)
* Refactor Seeds to remove Elasticsearch dependency

This commit refactors the `SeedsController` and `Seed` model to remove
dependency on Elasticsearch and Searchkick.

Key changes:
- Removed `SearchSeeds` concern from the `Seed` model.
- Reimplemented `Seed.homepage_records` using ActiveRecord.
- Refactored `SeedsController#index` to use ActiveRecord for filtering,
  eager loading, and pagination.
- Deleted `app/models/concerns/search_seeds.rb`.
- Updated relevant specs to remove Searchkick-specific tags and setup.

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

* Remove Seed.reindex

* Remove trait

* Fix tests

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-06-24 21:54:43 +09:30
Daniel O'Connor 3edd2510d8 Merge pull request #4683 from Growstuff/refactor-harvests-remove-elasticsearch-14630838429921835504
Refactor harvests to remove Elasticsearch
2026-06-24 20:26:22 +09:30
Daniel O'Connor 0c7f270ce9 Merge pull request #4682 from Growstuff/dependabot/bundler/axe-core-rspec-4.12.0
Bump axe-core-rspec from 4.11.3 to 4.12.0
2026-06-24 18:55:38 +09:30
Cesy 169ad8125b Merge pull request #4680 from Growstuff/dependabot/github_actions/actions/cache-6
Bump actions/cache from 5 to 6
2026-06-24 09:43:59 +01:00
dependabot[bot] 43a7495d65 Bump axe-core-rspec from 4.11.3 to 4.12.0
Bumps [axe-core-rspec](https://github.com/dequelabs/axe-core-gems) from 4.11.3 to 4.12.0.
- [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.3...v4.12.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-24 07:07:13 +00:00
dependabot[bot] 68d0eb572c Bump actions/cache from 5 to 6
Bumps [actions/cache](https://github.com/actions/cache) from 5 to 6.
- [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/v5...v6)

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

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-24 07:02:40 +00:00
Daniel O'Connor 910e9483d5 Merge pull request #4679 from Growstuff/dev
release87
2026-06-24 01:47:22 +09:30
e9bbea7dfd Release 86 (#4671)
* Refactor Activity model to remove Elasticsearch integration (#4576)

* Refactor Activity model to remove Elasticsearch integration

- Removed `SearchActivities` concern and Searchkick from `Activity` model.
- Implemented `Activity.homepage_records` using ActiveRecord with `DISTINCT ON` for PostgreSQL.
- Updated `ActivitiesController#index` to use ActiveRecord queries with eager loading and pagination.
- Added `active` scope to `Activity`.
- Added unit tests for `Activity` model.
- Deleted `app/models/concerns/search_activities.rb`.

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

* Fix NoMethodError: undefined method 'reindex' for class Activity

- Removed all calls to `Activity.reindex` in migrations, rake tasks, and spec helpers.
- These were causing failures after the removal of Searchkick from the Activity model.

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

* Fix ambiguous column id in homepage_records query

- Updated `Activity.homepage_records` to use `activities.id` instead of `id` in the subquery.
- This resolves the `PG::AmbiguousColumn: ERROR: column reference "id" is ambiguous` error.

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

* Fix ambiguous created_at in homepage_records query

- Use `unscoped` in the subquery for `Activity.homepage_records` to bypass the default scope from `Ownable` concern.
- This prevents the join with the `members` table in the subquery, which was causing `PG::AmbiguousColumn: ERROR: column reference "created_at" is ambiguous`.

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

* Complete refactoring of Activity model to remove Elasticsearch

- Removed SearchActivities concern and searchkick integration.
- Updated ActivitiesController#index to use ActiveRecord queries.
- Implemented performant Activity.homepage_records using DISTINCT ON (PostgreSQL).
- Added Activity.active scope.
- Added no-op Activity.reindex (class and instance methods) for backward compatibility.
- Cleaned up leftover reindex calls in rake tasks, migrations, and spec helpers.
- Added unit tests for new Activity model logic.
- Updated factories to include no-op reindex traits.

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

* Less eager loading

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Add funding information

* Rename FUNDING.yml to .github/FUNDING.yml

* Remove deprecated config.read_encrypted_secrets from production.rb (#4603)

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Add weekly harvest reminder emails and scheduled task

- Added `send_harvest_reminder` preference to Member model and settings UI.
- Implemented `harvest_in_next_week?` in PredictHarvest concern.
- Created `harvest_reminder` email with localized templates.
- Added `growstuff:send_harvest_reminders` Rake task to run weekly.
- Refactored existing and new reminder tasks to use `deliver_later` for scalability.
- Added unit tests for prediction logic and mailer.
- Fixed a bug in the existing planting reminder task where it was using an uninitialized constant `Notifier`.

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

* Bump rubocop-capybara from 2.22.1 to 2.23.0

Bumps [rubocop-capybara](https://github.com/rubocop/rubocop-capybara) from 2.22.1 to 2.23.0.
- [Release notes](https://github.com/rubocop/rubocop-capybara/releases)
- [Changelog](https://github.com/rubocop/rubocop-capybara/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-capybara/compare/v2.22.1...v2.23.0)

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

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

* Bump axe-core-rspec from 4.11.2 to 4.11.3

Bumps [axe-core-rspec](https://github.com/dequelabs/axe-core-gems) from 4.11.2 to 4.11.3.
- [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/commits)

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

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

* Fix crash during CSV export of harvests and seeds

When using Searchkick with `load: false`, search results are returned
as HashResponse objects which do not support model associations or
standard Rails URL helpers that expect model instances.

This commit updates HarvestsController and SeedsController to
conditionally load ActiveRecord objects when CSV format is requested,
ensuring that the export templates can access the necessary associations.
Similar logic was also applied to CropsController.

Additionally, a typo in the Crops CSV shaper was fixed.

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

* Associate post with crop from crop show page

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

* Fix seeds_count to correctly reference size

* Change plant_before formatting method to to_fs

* Merge pull request #4612 from Growstuff/fix-crops-csv-export-11894001552728801282

Fix ArgumentError in Crops CSV export

* Fix crops csv export 11894001552728801282 (#4613)

* Fix ArgumentError in Crops CSV export

This commit fixes a crash when exporting crops to CSV, caused by
accessing ActiveRecord methods and associations on Searchkick
HashWrapper objects.

Changes:
- In CropsController#index, use `load: true` (with preloaded
  associations) when the request format is CSV or RSS.
- In app/views/crops/index.csv.shaper, use individual `csv.cell` calls
  instead of `csv.cells` to correctly handle Searchkick results and
  explicitly access attributes.
- Added a controller test to verify CSV export functionality.

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

* Mark test pending

* Skip creator

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Namespaces no longer supported in sidekiq

* Update to 3.4.9

* Merge pull request #4616 from Growstuff/rubocop-upgrade

Update rubocop_todo.yml

* Upgrade ERB

* Merge pull request #4575 from Growstuff/memoize-unread-count

Memoize unread messages count

* Prompt for updated planting rating when harvesting (#4608)

* Update planting rating when recording a harvest

- Added virtual attribute `overall_rating` to `Harvest` model.
- Updated `HarvestsController` to permit `overall_rating` and synchronize it to the associated `Planting`.
- Added a rating range field (1-5) to the harvest form.
- Added controller tests to verify that the planting rating is updated.
- Refined feature tests for harvesting.

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

* I have updated the system to allow for recording a planting rating when a harvest is logged. Here is a summary of the changes:

- Added a virtual attribute `overall_rating` to the `Harvest` model.
- Updated `HarvestsController` to permit `overall_rating` and synchronize it to the associated `Planting`.
- Added a rating range field (1-5) to the harvest form.
- Added controller tests to verify that the planting rating is updated correctly.
- Updated feature tests to ensure the harvest form functions as expected.

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

* Update database.yml

* Apply suggestions from code review

Co-authored-by: Daniel O'Connor <daniel.oconnor@gmail.com>

* Adjust wording

* Change harvest modal

* Fix tests

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Improve read performance with caching and memoization (#4572)

* Improve read performance with caching and memoization

- Memoize `Crop#all_companions` and `Member#unread_count` in models
- Implement instance-level memoization in `CropsHelper#crop_or_parent`
- Add Rails caching for expensive aggregate queries in `Charts::CropsController`
- Add fragment caching for high-impact sections on the crop show page

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

* Fix header spec failure due to memoized unread_count

- Reset `@unread_count` in `spec/views/layouts/_header_spec.rb` to ensure the updated notification count is rendered correctly.

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

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Replace Sidekiq with Solid Queue (#4619)

* Replace Sidekiq with Solid Queue

This commit transitions the background job processing from Sidekiq to
Solid Queue.

Changes:
- Replaced `sidekiq` gem with `solid_queue` in Gemfile.
- Updated `development.rb` and `production.rb` to use `:solid_queue` as
  the queue adapter.
- Added Solid Queue database tables via a new migration.
- Configured Solid Queue in `config/queue.yml` and `config/recurring.yml`.
- Integrated Solid Queue supervisor as a Puma plugin in `config/puma.rb`.
- Removed separate worker process from `Procfile`.
- Removed Sidekiq-specific configuration files.
- Updated Gemfile.lock to support both `ruby` and `x86_64-linux` platforms.

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

* Fix regression in gemfiles

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Add crops search API endpoint (#4622)

* Add crops search API endpoint

- Added GET /api/v1/crops/search endpoint.
- Updated CropSearchService to support additional search options.
- Manually updated Swagger documentation in swagger/v1/swagger.json.
- Added request specs to verify the new endpoint.

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

* Add crops search API endpoint

- Added GET /api/v1/crops/search endpoint.
- Updated CropSearchService to support additional search options.
- Manually updated Swagger documentation in swagger/v1/swagger.json.
- Added request specs to verify the new endpoint.

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

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Revert "Replace Sidekiq with Solid Queue (#4619)" (#4620)

This reverts commit 4659ac5464.

* Bump ip-address from 10.1.0 to 10.2.0 (#4623)

Bumps [ip-address](https://github.com/beaugunderson/ip-address) from 10.1.0 to 10.2.0.
- [Commits](https://github.com/beaugunderson/ip-address/commits)

---
updated-dependencies:
- dependency-name: ip-address
  dependency-version: 10.2.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump fast-uri from 3.1.0 to 3.1.2

Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/fastify/fast-uri/releases)
- [Commits](https://github.com/fastify/fast-uri/compare/v3.1.0...v3.1.2)

---
updated-dependencies:
- dependency-name: fast-uri
  dependency-version: 3.1.2
  dependency-type: indirect
...

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

* Bump friendly_id from 5.6.0 to 5.7.0 (#4625)

Bumps [friendly_id](https://github.com/norman/friendly_id) from 5.6.0 to 5.7.0.
- [Release notes](https://github.com/norman/friendly_id/releases)
- [Changelog](https://github.com/norman/friendly_id/blob/master/Changelog.md)
- [Commits](https://github.com/norman/friendly_id/compare/v5.6.0...v5.7.0)

---
updated-dependencies:
- dependency-name: friendly_id
  dependency-version: 5.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cesy <cesy.avon@gmail.com>

* Bump aws-sdk-s3 from 1.220.0 to 1.221.0 (#4624)

Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.220.0 to 1.221.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.221.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Allow collaborators to remove themselves from gardens (#4630)

- Update Ability to grant destroy permission to collaborators for their own record
- Add 'Leave garden' link to garden show page
- Add specs for garden collaborator permissions

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Bump devise from 5.0.3 to 5.0.4 (#4629)

Bumps [devise](https://github.com/heartcombo/devise) from 5.0.3 to 5.0.4.
- [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.3...v5.0.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubocop-rails from 2.34.3 to 2.35.0 (#4628)

Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.34.3 to 2.35.0.
- [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.3...v2.35.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add Wikidata climate attributes and integration to gardens (#4627)

* Add Wikidata integration for garden climate data

- Add location_wikidata_id, lowest_temp_c, and highest_temp_c to gardens.
- Implement WikidataService for fetching IDs and temperature properties.
- Map P6591 to highest_temp_c and P7422 to lowest_temp_c with unit conversion.
- Automatically populate Wikidata info on garden location change.
- Add manual "Fetch Wikidata info" button and opt-in prompt to garden show page.
- Update gardens_controller to permit new attributes and handle manual fetch.
- Update db/schema.rb manually to include new columns and migration version.

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

* Fix migration

* Improve display

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Bump selenium-webdriver from 4.43.0 to 4.44.0 (#4631)

Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.43.0 to 4.44.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.43.0...selenium-4.44.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump systeminformation from 5.31.5 to 5.31.6 (#4632)

Bumps [systeminformation](https://github.com/sebhildebrandt/systeminformation) from 5.31.5 to 5.31.6.
- [Release notes](https://github.com/sebhildebrandt/systeminformation/releases)
- [Changelog](https://github.com/sebhildebrandt/systeminformation/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sebhildebrandt/systeminformation/compare/v5.31.5...v5.31.6)

---
updated-dependencies:
- dependency-name: systeminformation
  dependency-version: 5.31.6
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Ensure garden creation flash prompt is rendered as HTML (#4633)

Updated app/views/shared/_flash_messages.html.haml to use sanitize(content)
instead of = content. This ensures that HTML content in flash messages,
such as the prompt to add an activity after creating a garden, is
correctly rendered even if its html_safe status is lost during session
serialization.

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Bump aws-sdk-s3 from 1.221.0 to 1.222.0 (#4636)

Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.221.0 to 1.222.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.222.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubocop from 1.86.1 to 1.86.2 (#4634)

Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.86.1 to 1.86.2.
- [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.1...v1.86.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump icalendar from 2.12.2 to 2.12.3 (#4635)

Bumps [icalendar](https://github.com/icalendar/icalendar) from 2.12.2 to 2.12.3.
- [Changelog](https://github.com/icalendar/icalendar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/icalendar/icalendar/compare/v2.12.2...v2.12.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump faraday from 2.14.1 to 2.14.2 (#4641)

Bumps [faraday](https://github.com/lostisland/faraday) from 2.14.1 to 2.14.2.
- [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.1...v2.14.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump oj from 3.17.0 to 3.17.1 (#4640)

Bumps [oj](https://github.com/ohler55/oj) from 3.17.0 to 3.17.1.
- [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.17.0...v3.17.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubocop-rails from 2.35.0 to 2.35.1 (#4642)

Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.35.0 to 2.35.1.
- [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.35.0...v2.35.1)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubocop-rails from 2.35.1 to 2.35.2 (#4643)

Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.35.1 to 2.35.2.
- [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.35.1...v2.35.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump dalli from 5.0.2 to 5.0.4 (#4639)

Bumps [dalli](https://github.com/petergoldstein/dalli) from 5.0.2 to 5.0.4.
- [Changelog](https://github.com/petergoldstein/dalli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/petergoldstein/dalli/compare/v5.0.2...v5.0.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump aws-sdk-s3 from 1.222.0 to 1.224.0 (#4645)

Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.222.0 to 1.224.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.224.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump bullet from 8.1.1 to 8.1.2 (#4646)

Bumps [bullet](https://github.com/flyerhzm/bullet) from 8.1.1 to 8.1.2.
- [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/8.1.1...8.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump puma from 8.0.1 to 8.0.2 (#4649)

Bumps [puma](https://github.com/puma/puma) from 8.0.1 to 8.0.2.
- [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/v8.0.1...v8.0.2)

---
updated-dependencies:
- dependency-name: puma
  dependency-version: 8.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubocop-rails from 2.35.2 to 2.35.3 (#4648)

Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.35.2 to 2.35.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.35.2...v2.35.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump dalli from 5.0.4 to 5.0.5 (#4647)

Bumps [dalli](https://github.com/petergoldstein/dalli) from 5.0.4 to 5.0.5.
- [Changelog](https://github.com/petergoldstein/dalli/blob/main/CHANGELOG.md)
- [Commits](https://github.com/petergoldstein/dalli/compare/v5.0.4...v5.0.5)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump msgpack from 1.8.0 to 1.8.1 (#4650)

Bumps [msgpack](https://github.com/msgpack/msgpack-ruby) from 1.8.0 to 1.8.1.
- [Changelog](https://github.com/msgpack/msgpack-ruby/blob/master/ChangeLog)
- [Commits](https://github.com/msgpack/msgpack-ruby/compare/v1.8.0...v1.8.1)

---
updated-dependencies:
- dependency-name: msgpack
  dependency-version: 1.8.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump oj from 3.17.1 to 3.17.3 (#4655)

Bumps [oj](https://github.com/ohler55/oj) from 3.17.1 to 3.17.3.
- [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.17.1...v3.17.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump bullet from 8.1.2 to 8.1.3 (#4654)

Bumps [bullet](https://github.com/flyerhzm/bullet) from 8.1.2 to 8.1.3.
- [Changelog](https://github.com/flyerhzm/bullet/blob/main/CHANGELOG.md)
- [Commits](https://github.com/flyerhzm/bullet/compare/8.1.2...8.1.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump aws-sdk-s3 from 1.224.0 to 1.225.0 (#4653)

Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.224.0 to 1.225.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.225.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubocop from 1.86.2 to 1.87.0 (#4652)

Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.86.2 to 1.87.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.86.2...v1.87.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump discard from 1.4.0 to 2.0.0 (#4651)

Bumps [discard](https://github.com/jhawthorn/discard) from 1.4.0 to 2.0.0.
- [Changelog](https://github.com/jhawthorn/discard/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jhawthorn/discard/compare/v1.4.0...v2.0.0)

---
updated-dependencies:
- dependency-name: discard
  dependency-version: 2.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubocop-rails from 2.35.3 to 2.35.4 (#4658)

Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.35.3 to 2.35.4.
- [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.35.3...v2.35.4)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubocop-rspec from 3.9.0 to 3.10.2

Bumps [rubocop-rspec](https://github.com/rubocop/rubocop-rspec) from 3.9.0 to 3.10.2.
- [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.9.0...v3.10.2)

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

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

* Bump rubocop from 1.87.0 to 1.88.0 (#4663)

Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.87.0 to 1.88.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.87.0...v1.88.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump selenium-webdriver from 4.44.0 to 4.45.0 (#4662)

Bumps [selenium-webdriver](https://github.com/SeleniumHQ/selenium) from 4.44.0 to 4.45.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.44.0...selenium-4.45.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump aws-sdk-s3 from 1.225.0 to 1.225.1 (#4661)

Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.225.0 to 1.225.1.
- [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.225.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump msgpack from 1.8.1 to 1.8.3 (#4660)

Bumps [msgpack](https://github.com/msgpack/msgpack-ruby) from 1.8.1 to 1.8.3.
- [Changelog](https://github.com/msgpack/msgpack-ruby/blob/master/ChangeLog)
- [Commits](https://github.com/msgpack/msgpack-ruby/compare/v1.8.1...v1.8.3)

---
updated-dependencies:
- dependency-name: msgpack
  dependency-version: 1.8.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump aws-sdk-s3 from 1.225.1 to 1.226.0 (#4666)

Bumps [aws-sdk-s3](https://github.com/aws/aws-sdk-ruby) from 1.225.1 to 1.226.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.226.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump js-yaml from 4.1.1 to 4.2.0 (#4664)

Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.1 to 4.2.0.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/commits)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.2.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/checkout from 6 to 7 (#4667)

Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump faraday from 2.14.2 to 2.14.3 (#4665)

Bumps [faraday](https://github.com/lostisland/faraday) from 2.14.2 to 2.14.3.
- [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.2...v2.14.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump rubocop-rails from 2.35.4 to 2.35.5

Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.35.4 to 2.35.5.
- [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.35.4...v2.35.5)

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

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

* Bump rubocop-capybara from 2.23.0 to 3.0.0

Bumps [rubocop-capybara](https://github.com/rubocop/rubocop-capybara) from 2.23.0 to 3.0.0.
- [Release notes](https://github.com/rubocop/rubocop-capybara/releases)
- [Changelog](https://github.com/rubocop/rubocop-capybara/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-capybara/compare/v2.23.0...v3.0.0)

---
updated-dependencies:
- dependency-name: rubocop-capybara
  dependency-version: 3.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

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

* Bump haml_lint from 0.73.0 to 0.74.0

Bumps [haml_lint](https://github.com/sds/haml-lint) from 0.73.0 to 0.74.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.73.0...v0.74.0)

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

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

* Upgrade to Rails 8.0 (#4621)

* Upgrade application to Rails 8.0

- Updated Gemfile to rails ~> 8.0.0 and updated Gemfile.lock
- Set config.load_defaults 8.0 in config/application.rb
- Configured YAML as default_column_serializer for ActiveRecord serialization compatibility
- Added Faraday 2.x error constant compatibility shim in config/initializers/faraday_patch.rb
- Added Active Storage migrations and verified with db:migrate
- Added Rails 8 bin/dev and bin/rubocop scripts
- Maintained Ruby 3.4.9 compatibility in .ruby-version and Gemfile.lock

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

* Delete db/migrate/20241117032507_remove_not_null_on_active_storage_blobs_checksum.active_storage.rb

* Delete db/migrate/20241117032505_add_service_name_to_active_storage_blobs.active_storage.rb

* Delete db/migrate/20241117032506_create_active_storage_variant_records.active_storage.rb

* Delete config/initializers/faraday_patch.rb

* Update schema

* Fix conflicts

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Cesy <cesy.avon@gmail.com>
2026-06-23 21:10:53 +09:30
Daniel O'Connor 6784c6460d Merge pull request #4600 from Growstuff/dev
Release 85
2026-04-28 14:48:45 +09:30
Daniel O'Connor a5ed2b988d Merge pull request #4583 from Growstuff/dev
Release 84
2026-04-27 13:56:58 +09:30
7ca689fa4a release83 (#4579)
* 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>

* Admin - Members - optimise memory usage

* GBIF - optimise memory usage

* Memory usage

* Update .dockerignore to remove .ruby-version

Remove .ruby-version from .dockerignore

* Swap to modern expect style

* Swap to modern expect style

* Rubocop fixes

* Swap to modern expect style

* Merge pull request #4567 from Growstuff/memory-optimisation-3

Members - Nearest To - Memory improvements

* Merge pull request #4564 from Growstuff/memory-optimization-2149092598558110155

Memory usage optimization

* Add fragment cache for crop partials

* Add rake task to cleanup inactive members (#4574)

* Add members:cleanup_inactive rake task

This task identifies and deletes members who have not logged in for over
24 months and have no gardens, plantings, or other activity (posts,
comments, seeds, harvests, etc).

Includes support for DRY_RUN=true to preview deletions.
Added tests in spec/tasks/members_spec.rb.

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

* Refactor activity check to Member#has_activity? and update rake task

- Added `Member#has_activity?` to encapsulate the check for gardens, plantings, and other activity.
- Updated `members:cleanup_inactive` rake task to use `Member#has_activity?`.
- Maintained `DRY_RUN` support and existing tests.

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

* Apply suggestion from @CloCkWeRX

* Apply suggestions from code review

Co-authored-by: Daniel O'Connor <daniel.oconnor@gmail.com>

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Merge pull request #4578 from Growstuff/member-inactive-delete

Delete inactive members with no activity in 3 years

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2026-04-27 02:22:30 +09:30
Daniel O'Connor 189067c66f Merge pull request #4563 from Growstuff/dev
Release 82
2026-04-26 14:31:31 +09:30
Daniel O'Connor 8d9bcc4559 Merge pull request #4524 from Growstuff/dev
release81
2026-04-23 20:31:28 +09:30
Daniel O'Connor 6e7e752fed Merge pull request #4487 from Growstuff/dev
Release 80
2026-04-11 14:51:48 +09:30
Daniel O'Connor fe032b6b49 Merge pull request #4378 from Growstuff/dev
Fix minor complaints
2025-12-02 23:00:21 +10:30
Daniel O'Connor 959f914122 Merge pull request #4377 from Growstuff/dev
Update _head.html.haml
2025-12-02 22:51:41 +10:30
Daniel O'Connor 3f8fb799d5 Merge pull request #4376 from Growstuff/dev
More site verification bits
2025-12-02 22:48:29 +10:30
Daniel O'Connor 985ad120c7 Merge pull request #4375 from Growstuff/dev
Deploy various site verification things
2025-12-02 22:42:40 +10:30
Daniel O'Connorandgoogle-labs-jules[bot] d8e1e09dfb Merge pull request #4372 from Growstuff/fix-sitemap-upload (#4373)
Fix Sitemap Upload to S3

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-12-02 22:23:21 +10:30
Daniel O'Connor 477baec010 Merge pull request #4371 from Growstuff/dev
Deploy various maintenance tasks to prod
2025-12-02 02:27:07 +10:30
Daniel O'Connor d5db389b23 Merge pull request #4360 from Growstuff/dev
Deploy: Missing PKFID
2025-12-01 22:22:30 +10:30
Daniel O'Connor b866a2064b Merge pull request #4358 from Growstuff/dev
Hotfix: Reduce to member login_name
2025-12-01 20:34:18 +10:30
37519de615 Release 78 (#4357)
* Check presence of version members before accessing

* Fix(specs): Initialize @version_members in crops/show view spec

The `crops/show` view spec was failing with a `NoMethodError` because
the `@version_members` instance variable was `nil`. This variable is used
in the `_history` partial, which is rendered by the `show` view.

This commit fixes the spec by initializing `@version_members` to an
empty hash in the `before` block of the spec. This ensures that the
view can render without errors during the test run.

* Remove defunct gitter

* Merge pull request #4352 from Growstuff/add-public-food-key

feat: Add Public Food Key to Crop model

* Bump rubocop-rails from 2.34.1 to 2.34.2

Bumps [rubocop-rails](https://github.com/rubocop/rubocop-rails) from 2.34.1 to 2.34.2.
- [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.1...v2.34.2)

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

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

* Optimize Data Improvement Page (#4356)

* feat: Add data improvement page to crops controller

This commit introduces a new data improvement page to the crops controller. The page displays tabbed lists of crops with missing data, allowing users to easily identify areas for data quality improvement.

The following data quality categories are included:
- Crops without photos
- Crops without descriptions
- Crops without a youtube video
- Crops without alternate names
- Crops without a scientific name with a wikidata id
- Crops without row spacing
- Crops without sun requirements
- Crops without height

All lists are sorted by planting count in descending order.

* refactor: Optimize data improvement page to load tab data on demand

This commit refactors the data improvement page to load data for each tab on demand, rather than loading all queries at once. This improves the performance of the page by only executing the query for the currently active tab.

The controller action now uses a `case` statement based on a `tab` URL parameter to execute the appropriate query. The view has been updated to pass this parameter when a tab is clicked.

---------

Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>

* Merge pull request #4353 from Growstuff/feat/import-australian-food-data

Add Rake Task to Import Australian Food Data

* Fix styling

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-01 20:01:31 +10:30
Daniel O'Connorandgoogle-labs-jules[bot] 8ddc717d9b Release 77 (#4345)
* Update crops_helper.rb

* feat: Add contribution links and conditional edit form

This commit introduces a series of changes to encourage user contributions for missing crop data.

On the crop show page, it adds links for logged-in users to:
- Add a description if one is not present.
- Add a YouTube video if one is not present.
- Add more attributes in the predictions section if any are missing.

On the crop edit page, the form now conditionally displays fields. For standard users, it only shows fields for attributes that are currently empty. For privileged users (wranglers), it displays all fields, allowing them to edit existing data.

* feat: Add schema.org markup to crop pages

Adds schema.org markup to the crop pages using the BioChemEntity type. The taxonomicRange attribute is used to list the scientific names of the crop, which will improve SEO.

* feat: Add Wikidata ID to scientific names

This commit introduces the ability to store and display the Wikidata ID for scientific names.

Changes include:
- A database migration to add the `wikidata_id` column to the `scientific_names` table.
- An update to the `scientific_names_controller` to permit the `wikidata_id` parameter.
- An update to the scientific name form to include a field for the Wikidata ID.
- An update to the crop show page to display a link to the Wikidata page for a scientific name.

* Delete db/migrate/20251129185029_add_wikidata_id_to_scientific_names.rb

* Update _schema_org.html.haml

* Move to crops helper

* Add more schema.org

* Specific form links

* Styling

* Render images

* Document future

* Render less on some pages

* Fix rendering

* Add version tracking to crops model (#4343)

* feat: Add version tracking to Crop model

This commit introduces version tracking for the Crop model using the PaperTrail gem.

Key changes include:
- Integrating `has_paper_trail` into the `Crop` model.
- Adding a "History" section to the crop show page to display a timeline of changes for that specific crop.
- Creating a new admin page for users with the "crop_wrangler" role to view a log of all recent crop edits, creations, and deletions.
- Fixing several N+1 query performance issues by eager-loading associated `Member` records in both the `CropsController` and the new `Admin::CropsController`.
- Refactoring view logic into a shared partial to reduce code duplication.

* Add papertrail

* Admin UI

* Add papertrail DB

* Add papertrail DB

* Rearrange

* Fix permissions

* Fix permissions

* Fix UI

* Fix UI

---------

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>

* Add revert functionality to admin crops page (#4346)

* feat(admin): add revert functionality to crops page

This change adds a "Revert" button to the admin crops page, allowing crop wranglers to revert changes to a previous version.

It introduces a new `Admin::VersionsController` with a `revert` action that uses `paper_trail`'s `reify` method to restore a previous version of a `Crop` object.

The view is updated to include a "Revert" button, which is guarded by a `can?(:wrangle, Crop)` check to ensure only authorized users can see it.

The controller also includes an authorization check to prevent unauthorized users from accessing the revert action directly.

A feature spec is added to test the new functionality, including the authorization logic.

* Consistent UX

* Specs

---------

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: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
2025-11-30 15:05:55 +10:30
63 changed files with 1563 additions and 895 deletions

No files matched your search

+1 -1
View File
@@ -1,4 +1,4 @@
FROM mcr.microsoft.com/devcontainers/ruby:3.4-trixie
FROM mcr.microsoft.com/devcontainers/ruby:4-trixie
# Install Rails
RUN gem install rails:8.0.5
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
@@ -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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -74,7 +74,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+2 -2
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@v5
uses: actions/cache@v6
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 }}
@@ -89,7 +89,7 @@ jobs:
sudo apt-get -y install libpq-dev google-chrome-stable
- name: Install NodeJS
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version: '24'
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
uses: docker/setup-buildx-action@v4
- name: Log in to the Container registry
uses: docker/login-action@v4
uses: docker/login-action@v4.6.0
with:
registry: ghcr.io
username: ${{ github.actor }}
+1 -1
View File
@@ -1 +1 @@
3.4.9
4.0.6
+1 -1
View File
@@ -1,4 +1,4 @@
FROM ruby:3.4.9-trixie
FROM 4.0.6-trixie
# Install system dependencies
RUN apt-get update -qq && \
+4 -1
View File
@@ -5,7 +5,9 @@ source 'https://rubygems.org'
# Match ruby version in .ruby-version
ruby File.read('.ruby-version')
gem 'rails', '~> 8.0.0'
gem 'rails', '~> 8.1.0'
gem 'csv'
# Keeping old sprockets
# https://github.com/rails/sprockets-rails/issues/444#issuecomment-637817050
@@ -16,6 +18,7 @@ gem 'bundler', '>= 2.4.22'
gem 'coffee-rails'
gem 'haml'
gem 'sassc-rails'
gem 'oauth', '1.1.6' # Explicitly pinned, as the maintainer does huge (400 files, 45k lines) changes in point releases - required manual plus agentic security review.
# API data
gem 'jsonapi-resources'
+152 -145
View File
@@ -33,29 +33,31 @@ GEM
GEM
remote: https://rubygems.org/
specs:
actioncable (8.0.5)
actionpack (= 8.0.5)
activesupport (= 8.0.5)
action_text-trix (2.1.19)
railties
actioncable (8.1.3.1)
actionpack (= 8.1.3.1)
activesupport (= 8.1.3.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (8.0.5)
actionpack (= 8.0.5)
activejob (= 8.0.5)
activerecord (= 8.0.5)
activestorage (= 8.0.5)
activesupport (= 8.0.5)
actionmailbox (8.1.3.1)
actionpack (= 8.1.3.1)
activejob (= 8.1.3.1)
activerecord (= 8.1.3.1)
activestorage (= 8.1.3.1)
activesupport (= 8.1.3.1)
mail (>= 2.8.0)
actionmailer (8.0.5)
actionpack (= 8.0.5)
actionview (= 8.0.5)
activejob (= 8.0.5)
activesupport (= 8.0.5)
actionmailer (8.1.3.1)
actionpack (= 8.1.3.1)
actionview (= 8.1.3.1)
activejob (= 8.1.3.1)
activesupport (= 8.1.3.1)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
actionpack (8.0.5)
actionview (= 8.0.5)
activesupport (= 8.0.5)
actionpack (8.1.3.1)
actionview (= 8.1.3.1)
activesupport (= 8.1.3.1)
nokogiri (>= 1.8.5)
rack (>= 2.2.4)
rack-session (>= 1.0.1)
@@ -63,15 +65,16 @@ GEM
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
actiontext (8.0.5)
actionpack (= 8.0.5)
activerecord (= 8.0.5)
activestorage (= 8.0.5)
activesupport (= 8.0.5)
actiontext (8.1.3.1)
action_text-trix (~> 2.1.15)
actionpack (= 8.1.3.1)
activerecord (= 8.1.3.1)
activestorage (= 8.1.3.1)
activesupport (= 8.1.3.1)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (8.0.5)
activesupport (= 8.0.5)
actionview (8.1.3.1)
activesupport (= 8.1.3.1)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
@@ -86,29 +89,29 @@ GEM
active_utils (3.6.0)
activesupport (>= 4.2)
i18n
activejob (8.0.5)
activesupport (= 8.0.5)
activejob (8.1.3.1)
activesupport (= 8.1.3.1)
globalid (>= 0.3.6)
activemodel (8.0.5)
activesupport (= 8.0.5)
activerecord (8.0.5)
activemodel (= 8.0.5)
activesupport (= 8.0.5)
activemodel (8.1.3.1)
activesupport (= 8.1.3.1)
activerecord (8.1.3.1)
activemodel (= 8.1.3.1)
activesupport (= 8.1.3.1)
timeout (>= 0.4.0)
activestorage (8.0.5)
actionpack (= 8.0.5)
activejob (= 8.0.5)
activerecord (= 8.0.5)
activesupport (= 8.0.5)
activestorage (8.1.3.1)
actionpack (= 8.1.3.1)
activejob (= 8.1.3.1)
activerecord (= 8.1.3.1)
activesupport (= 8.1.3.1)
marcel (~> 1.0)
activesupport (8.0.5)
activesupport (8.1.3.1)
base64
benchmark (>= 0.3)
bigdecimal
concurrent-ruby (~> 1.0, >= 1.3.1)
connection_pool (>= 2.2.5)
drb
i18n (>= 1.6, < 2)
json
logger (>= 1.4.2)
minitest (>= 5.1)
securerandom (>= 0.3)
@@ -116,12 +119,16 @@ GEM
uri (>= 0.13.1)
addressable (2.9.0)
public_suffix (>= 2.0.2, < 8.0)
anonymous_loader (0.1.3)
version_gem (~> 1.1, >= 1.1.14)
ast (2.4.3)
auth-sanitizer (0.2.3)
version_gem (~> 1.1, >= 1.1.14)
autoprefixer-rails (10.4.16.0)
execjs (~> 2)
aws-eventstream (1.4.0)
aws-partitions (1.1261.0)
aws-sdk-core (3.252.0)
aws-partitions (1.1279.0)
aws-sdk-core (3.254.1)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
@@ -129,34 +136,23 @@ GEM
bigdecimal
jmespath (~> 1, >= 1.6.1)
logger
aws-sdk-kms (1.129.0)
aws-sdk-core (~> 3, >= 3.248.0)
aws-sdk-kms (1.130.0)
aws-sdk-core (~> 3, >= 3.254.0)
aws-sigv4 (~> 1.5)
aws-sdk-s3 (1.226.0)
aws-sdk-core (~> 3, >= 3.248.0)
aws-sdk-s3 (1.229.0)
aws-sdk-core (~> 3, >= 3.254.1)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
axe-core-api (4.11.3)
axe-core-api (4.13.0)
dumb_delegator
ostruct
virtus
axe-core-capybara (4.11.3)
axe-core-api (= 4.11.3)
dumb_delegator
axe-core-rspec (4.11.3)
axe-core-api (= 4.11.3)
dumb_delegator
ostruct
virtus
axiom-types (0.1.1)
descendants_tracker (~> 0.0.4)
ice_nine (~> 0.11.0)
thread_safe (~> 0.3, >= 0.3.1)
axe-core-capybara (4.13.0)
axe-core-api (= 4.13.0)
axe-core-rspec (4.13.0)
axe-core-api (= 4.13.0)
base64 (0.3.0)
bcrypt (3.1.22)
benchmark (0.5.0)
better_errors (2.10.1)
erubi (>= 1.0.0)
rack (>= 0.9.0)
@@ -175,7 +171,7 @@ GEM
actionpack (>= 6.1)
activemodel (>= 6.1)
builder (3.3.0)
bullet (8.1.3)
bullet (8.2.0)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
byebug (13.0.0)
@@ -196,19 +192,18 @@ GEM
capybara-screenshot (1.0.27)
capybara (>= 1.0, < 4)
launchy
carrierwave (3.0.7)
carrierwave (3.1.3)
activemodel (>= 6.0.0)
activesupport (>= 6.0.0)
addressable (~> 2.6)
image_processing (~> 1.1)
marcel (~> 1.0.0)
ssrf_filter (~> 1.0)
cgi (0.5.2)
chartkick (5.2.1)
childprocess (5.1.0)
logger (~> 1.5)
coderay (1.1.3)
coercible (1.0.0)
descendants_tracker (~> 0.0.1)
coffee-rails (5.0.0)
coffee-script (>= 2.2.0)
railties (>= 5.2.0)
@@ -218,9 +213,9 @@ GEM
coffee-script-source (1.12.2)
comfy_bootstrap_form (4.0.9)
rails (>= 5.0.0)
concurrent-ruby (1.3.7)
concurrent-ruby (1.3.8)
connection_pool (2.5.5)
crass (1.0.6)
crass (1.0.7)
crowdin-api (1.12.0)
open-uri (>= 0.1.0, < 0.2.0)
rest-client (>= 2.0.0, < 2.2.0)
@@ -229,11 +224,11 @@ GEM
gli (>= 2.7.0)
i18n (>= 0.6.4)
rubyzip (>= 1.0.0)
csv (3.3.5)
csv (3.3.6)
csv_shaper (1.4.0)
activesupport (>= 3.0.0)
csv
dalli (5.0.5)
dalli (5.1.0)
logger
database_cleaner (2.1.0)
database_cleaner-active_record (>= 2, < 3)
@@ -242,8 +237,6 @@ GEM
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
date (3.5.1)
descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1)
devise (5.0.4)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
@@ -273,9 +266,9 @@ GEM
elasticsearch-transport (7.0.0)
faraday
multi_json
erb (6.0.4)
erb (6.0.7)
erubi (1.13.1)
execjs (2.10.0)
execjs (2.10.1)
factory_bot (6.5.5)
activesupport (>= 6.1.0)
factory_bot_rails (6.5.1)
@@ -289,8 +282,8 @@ GEM
logger
faraday-net_http (3.4.4)
net-http (~> 0.5)
ffi (1.17.3)
ffi (1.17.3-x86_64-linux-gnu)
ffi (1.17.4)
ffi (1.17.4-x86_64-linux-gnu)
flickraw (0.9.10)
font-awesome-sass (5.15.1)
sassc (>= 1.11)
@@ -305,21 +298,22 @@ GEM
multi_json (>= 1.9.0)
gli (2.22.2)
ostruct
globalid (1.3.0)
globalid (1.4.0)
activesupport (>= 6.1)
gravatar-ultimate (2.0.0)
activesupport (>= 2.3.14)
rack
haml (7.2.0)
haml (7.5.1)
prism (>= 1.1.0)
temple (>= 0.8.2)
thor
tilt
haml-rails (3.0.0)
haml-rails (3.1.0)
actionpack (>= 5.1)
activesupport (>= 5.1)
haml (>= 4.0.6)
railties (>= 5.1)
haml_lint (0.74.0)
haml_lint (0.78.0)
haml (>= 5.0)
parallel (>= 1.10)
rainbow
@@ -352,17 +346,16 @@ GEM
terminal-table (>= 1.5.1)
i18n_data (1.1.0)
simple_po_parser (~> 1.1)
icalendar (2.12.3)
icalendar (2.12.4)
base64
ice_cube (~> 0.16)
logger
ostruct
ice_cube (0.17.0)
ice_nine (0.11.2)
image_processing (1.12.2)
mini_magick (>= 4.9.5, < 5)
image_processing (1.14.0)
mini_magick (>= 4.9.5, < 6)
ruby-vips (>= 2.0.17, < 3)
io-console (0.8.2)
io-console (0.9.2)
irb (1.18.0)
pp (>= 0.6.0)
prism (>= 1.3.0)
@@ -373,7 +366,7 @@ GEM
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
json (2.19.9)
json (2.21.2)
json-schema (6.2.0)
addressable (~> 2.8)
bigdecimal (>= 3.1, < 5)
@@ -385,7 +378,7 @@ GEM
kgio (2.11.4)
kramdown (2.4.0)
rexml
language_server-protocol (3.17.0.5)
language_server-protocol (3.17.0.6)
launchy (3.1.1)
addressable (~> 2.8)
childprocess (~> 5.0)
@@ -401,10 +394,10 @@ GEM
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.7.0)
loofah (2.25.1)
loofah (2.25.2)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.9.0)
mail (2.9.1)
logger
mini_mime (>= 0.1.1)
net-imap
@@ -429,19 +422,20 @@ GEM
mimemagic (0.4.3)
nokogiri (~> 1)
rake
mini_magick (4.12.0)
mini_magick (5.3.1)
logger
mini_mime (1.1.5)
mini_portile2 (2.8.9)
minitest (6.0.6)
drb (~> 2.0)
prism (~> 1.5)
msgpack (1.8.3)
msgpack (1.8.4)
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.6.4.1)
net-imap (0.6.6)
date
net-protocol
net-pop (0.1.2)
@@ -457,8 +451,18 @@ GEM
racc (~> 1.4)
nokogiri (1.19.4-x86_64-linux-gnu)
racc (~> 1.4)
oauth (0.5.6)
oj (3.17.3)
oauth (1.1.6)
auth-sanitizer (~> 0.2, >= 0.2.1)
base64 (~> 0.1)
cgi
oauth-tty (~> 1.0, >= 1.0.8)
snaky_hash (~> 2.0, >= 2.0.5)
version_gem (~> 1.1, >= 1.1.11)
oauth-tty (1.0.13)
anonymous_loader (~> 0.1, >= 0.1.3)
auth-sanitizer (~> 0.2, >= 0.2.3)
version_gem (~> 1.1, >= 1.1.14)
oj (3.17.6)
bigdecimal (>= 3.0)
ostruct (>= 0.2)
omniauth (1.9.2)
@@ -477,15 +481,15 @@ GEM
activerecord (>= 7.1)
request_store (~> 1.4)
parallel (2.1.0)
parser (3.3.11.1)
parser (3.3.12.0)
ast (~> 2.4.1)
racc
percy-capybara (5.0.0)
percy-capybara (5.0.1)
capybara (>= 3)
pg (1.6.3)
pg (1.6.3-x86_64-linux)
popper_js (2.11.8)
pp (0.6.3)
pp (0.6.4)
prettyprint
prettyprint (0.2.0)
prism (1.9.0)
@@ -493,15 +497,12 @@ GEM
coderay (~> 1.1)
method_source (~> 1.0)
reline (>= 0.6.0)
psych (5.3.1)
date
stringio
public_suffix (7.0.5)
puma (8.0.2)
nio4r (~> 2.0)
query_diet (0.7.3)
racc (1.8.1)
rack (2.2.23)
rack (2.2.24)
rack-attack (6.8.0)
rack (>= 1.0, < 4)
rack-cors (2.0.2)
@@ -516,20 +517,20 @@ GEM
rackup (1.0.1)
rack (< 3)
webrick
rails (8.0.5)
actioncable (= 8.0.5)
actionmailbox (= 8.0.5)
actionmailer (= 8.0.5)
actionpack (= 8.0.5)
actiontext (= 8.0.5)
actionview (= 8.0.5)
activejob (= 8.0.5)
activemodel (= 8.0.5)
activerecord (= 8.0.5)
activestorage (= 8.0.5)
activesupport (= 8.0.5)
rails (8.1.3.1)
actioncable (= 8.1.3.1)
actionmailbox (= 8.1.3.1)
actionmailer (= 8.1.3.1)
actionpack (= 8.1.3.1)
actiontext (= 8.1.3.1)
actionview (= 8.1.3.1)
activejob (= 8.1.3.1)
activemodel (= 8.1.3.1)
activerecord (= 8.1.3.1)
activestorage (= 8.1.3.1)
activesupport (= 8.1.3.1)
bundler (>= 1.15.0)
railties (= 8.0.5)
railties (= 8.1.3.1)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -538,8 +539,8 @@ GEM
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
rails-html-sanitizer (1.7.0)
loofah (~> 2.25)
rails-html-sanitizer (1.7.1)
loofah (~> 2.25, >= 2.25.2)
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 (8.1.0)
i18n (>= 0.7, < 2)
@@ -549,9 +550,9 @@ GEM
rails_stdout_logging
rails_serve_static_assets (0.0.5)
rails_stdout_logging (0.0.5)
railties (8.0.5)
actionpack (= 8.0.5)
activesupport (= 8.0.5)
railties (8.1.3.1)
actionpack (= 8.1.3.1)
activesupport (= 8.1.3.1)
irb (~> 1.13)
rackup (>= 1.0.0)
rake (>= 12.2)
@@ -564,19 +565,24 @@ GEM
rb-fsevent (0.11.2)
rb-inotify (0.11.1)
ffi (~> 1.0)
rdoc (7.2.0)
rbs (4.2.0)
logger
prism (>= 1.6.0)
tsort
rdoc (8.0.0)
erb
psych (>= 4.0.0)
prism (>= 1.6.0)
rbs (>= 4.0.0)
tsort
recaptcha (5.21.2)
redis-client (0.26.2)
connection_pool
regexp_parser (2.12.0)
reline (0.6.3)
reline (0.7.0)
io-console (~> 0.5)
request_store (1.7.0)
rack (>= 1.4)
responders (3.2.0)
responders (3.2.1)
actionpack (>= 7.0)
railties (>= 7.0)
rest-client (2.1.0)
@@ -628,8 +634,8 @@ GEM
rswag-ui (2.17.0)
actionpack (>= 5.2, < 8.2)
railties (>= 5.2, < 8.2)
rubocop (1.88.0)
json (~> 2.3)
rubocop (1.90.0)
json (>= 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
parallel (>= 1.10)
@@ -639,7 +645,7 @@ GEM
rubocop-ast (>= 1.49.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
rubocop-ast (1.49.1)
rubocop-ast (1.50.0)
parser (>= 3.3.7.2)
prism (~> 1.7)
rubocop-capybara (3.0.0)
@@ -648,11 +654,11 @@ GEM
rubocop-factory_bot (2.28.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-rails (2.35.5)
rubocop-rails (2.37.0)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
rubocop (>= 1.75.0, < 2.0)
rubocop (>= 1.89.0, < 2.0)
rubocop-ast (>= 1.44.0, < 2.0)
rubocop-rake (0.7.1)
lint_roller (~> 1.1)
@@ -667,9 +673,10 @@ GEM
rubocop-rspec (~> 3.5)
ruby-progressbar (1.13.0)
ruby-units (4.1.0)
ruby-vips (2.2.1)
ruby-vips (2.3.0)
ffi (~> 1.12)
rubyzip (3.4.0)
logger
rubyzip (3.6.0)
sass (3.7.4)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
@@ -683,13 +690,13 @@ GEM
sprockets (> 3.0)
sprockets-rails
tilt
scout_apm (6.2.0)
scout_apm (6.3.0)
parser
searchkick (5.3.1)
activemodel (>= 6.1)
hashie
securerandom (0.4.1)
selenium-webdriver (4.45.0)
selenium-webdriver (4.48.0)
base64 (~> 0.2)
logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5)
@@ -702,8 +709,11 @@ GEM
rack (>= 2.2.4, < 3.3)
redis-client (>= 0.23.0, < 1)
simple_po_parser (1.1.6)
sitemap_generator (6.3.0)
sitemap_generator (7.1.1)
builder (~> 3.0)
snaky_hash (2.0.7)
hashie (>= 0.1.0, < 6)
version_gem (~> 1.1, >= 1.1.14)
sprockets (3.7.5)
base64
concurrent-ruby (~> 1.0)
@@ -712,17 +722,15 @@ GEM
actionpack (>= 5.2)
activesupport (>= 5.2)
sprockets (>= 3.0.0)
ssrf_filter (1.1.2)
stringio (3.2.0)
ssrf_filter (1.5.0)
sysexits (1.2.0)
temple (0.10.4)
temple (0.10.7)
terminal-table (4.0.0)
unicode-display_width (>= 1.1.1, < 4)
terser (1.2.7)
terser (1.2.8)
execjs (>= 0.3.0, < 3)
thor (1.5.0)
thread_safe (0.3.6)
tilt (2.7.0)
tilt (2.9.0)
timecop (0.9.11)
timeout (0.6.1)
tsort (0.2.0)
@@ -741,10 +749,7 @@ GEM
activemodel (>= 3.0.0)
public_suffix
vcr (6.4.0)
virtus (2.0.0)
axiom-types (~> 0.1)
coercible (~> 1.0)
descendants_tracker (~> 0.0, >= 0.0.3)
version_gem (1.1.15)
warden (1.2.9)
rack (>= 2.0.9)
webrat (0.7.3)
@@ -753,7 +758,7 @@ GEM
rack-test (>= 0.5.3)
webrick (1.9.2)
websocket (1.2.11)
websocket-driver (0.8.0)
websocket-driver (0.8.2)
base64
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
@@ -765,7 +770,7 @@ GEM
webrick
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.7.5)
zeitwerk (2.8.3)
PLATFORMS
ruby
@@ -796,6 +801,7 @@ DEPENDENCIES
comfortable_mexican_sofa!
connection_pool (< 3)
crowdin-cli
csv
csv_shaper
dalli
database_cleaner
@@ -833,6 +839,7 @@ DEPENDENCIES
material_icons
memcachier
msgpack
oauth (= 1.1.6)
oj
omniauth (~> 1.3)
omniauth-flickr (>= 0.0.15)
@@ -845,7 +852,7 @@ DEPENDENCIES
rack-attack
rack-cors
rack-protection (>= 2.0.1)
rails (~> 8.0.0)
rails (~> 8.1.0)
rails-assets-leaflet.markercluster!
rails-controller-testing
rails_12factor
@@ -885,7 +892,7 @@ DEPENDENCIES
xmlrpc
RUBY VERSION
ruby 3.4.9
ruby 4.0.6
BUNDLED WITH
2.4.22
+8 -9
View File
@@ -4,27 +4,26 @@ class HarvestsController < DataController
after_action :update_crop_medians, only: %i(create update destroy)
def index
where = {}
@harvests = Harvest.all
if params[:member_slug].present?
@owner = Member.find_by!(slug: params[:member_slug])
where['owner_id'] = @owner.id
@harvests = @harvests.where(owner_id: @owner.id)
end
if params[:crop_slug]
@crop = Crop.find_by(slug: params[:crop_slug])
where['crop_id'] = @crop.id
@harvests = @harvests.where(crop_id: @crop.id) if @crop
end
if params[:planting_slug]
@planting = Planting.find_by(slug: params[:planting_slug])
where['planting_id'] = @planting.id
@harvests = @harvests.where(planting_id: @planting.id) if @planting
end
@harvests = Harvest.search('*', where:,
limit: 100,
page: params[:page],
load: (request.format.csv? ? { include: %i(crop owner plant_part) } : false),
boost_by: [:created_at])
@harvests = @harvests.includes(:crop, :owner, :plant_part)
@harvests = @harvests.recent.paginate(page: params[:page], per_page: 100)
@filename = csv_filename
+3 -6
View File
@@ -40,12 +40,9 @@ class MembersController < ApplicationController
end
end
@harvests = Harvest.search(
where: { owner_id: @member.id },
boost_by: [:created_at],
limit: 16,
load: false
)
@harvests = Harvest.where(owner_id: @member.id)
.recent
.limit(16)
respond_to do |format|
format.html # show.html.haml
+4 -20
View File
@@ -8,26 +8,10 @@ class PlantingsController < DataController
def index
@show_all = params[:all] == '1'
where = {}
where['active'] = true unless @show_all
@owner = Member.find_by!(slug: params[:member_slug]) if params[:member_slug].present?
@crop = Crop.find_by(slug: params[:crop_slug]) if params[:crop_slug]
if params[:member_slug].present?
@owner = Member.find_by!(slug: params[:member_slug])
where['owner_id'] = @owner.id
end
if params[:crop_slug]
@crop = Crop.find_by(slug: params[:crop_slug])
where['crop_id'] = @crop.id unless @crop.nil?
end
@plantings = Planting.search(
where:,
page: params[:page],
limit: 30,
boost_by: [:created_at],
load: false
)
@plantings = plantings
@filename = "Growstuff-#{specifics}Plantings-#{Time.zone.now.to_fs(:number)}.csv"
respond_with(@plantings)
@@ -35,7 +19,7 @@ class PlantingsController < DataController
def show
@photos = @planting.photos.includes(:owner).order(date_taken: :desc)
@harvests = Harvest.search(where: { planting_id: @planting.id })
@harvests = Harvest.where(planting_id: @planting.id).recent
@current_activities = @planting.activities.current.includes(:owner).order(created_at: :desc)
@finished_activities = @planting.activities.finished.includes(:owner).order(created_at: :desc)
@matching_seeds = matching_seeds
+9 -13
View File
@@ -2,36 +2,32 @@
class SeedsController < DataController
def index
where = {}
@seeds = Seed.all
if params[:member_slug].present?
@owner = Member.find_by!(slug: params[:member_slug])
where['owner_id'] = @owner.id
@seeds = @seeds.where(owner_id: @owner.id)
end
if params[:crop_slug].present?
@crop = Crop.find_by(slug: params[:crop_slug])
where['crop_id'] = @crop.id
@seeds = @seeds.where(crop_id: @crop.id) if @crop
end
if params[:planting_id].present?
@planting = Planting.find_by(slug: params[:planting_id])
where['parent_planting'] = @planting.id
@seeds = @seeds.where(parent_planting_id: @planting.id) if @planting
end
where['tradeable_to'] = params[:tradeable_to] if params[:tradeable_to].present?
@seeds = @seeds.where(tradable_to: params[:tradeable_to]) if params[:tradeable_to].present?
@show_all = (params[:all] == '1')
where['finished'] = false unless @show_all
@seeds = @seeds.current unless @show_all
@filename = csv_filename
@seeds = Seed.search(
where:,
page: params[:page],
limit: 30,
boost_by: [:created_at],
load: (request.format.csv? ? { include: %i(crop owner) } : false)
)
@seeds = @seeds.includes(:crop, :owner)
.order(created_at: :desc)
.paginate(page: params[:page], per_page: 30)
respond_with(@seeds)
end
+5 -3
View File
@@ -18,9 +18,11 @@ module PhotoCapable
def thumbnail_url
df = default_photo
return unless df
df.source == 'flickr' ? df.fullsize_url : df.thumbnail_url
if df
df.source == 'flickr' ? df.fullsize_url : df.thumbnail_url
elsif respond_to?(:crop) && crop.present?
crop.thumbnail_url
end
end
def most_liked_photo
-74
View File
@@ -1,74 +0,0 @@
# frozen_string_literal: true
module SearchHarvests
extend ActiveSupport::Concern
included do
searchkick merge_mappings: true,
settings: { number_of_shards: 1, number_of_replicas: 0 },
mappings: {
properties: {
harvests_count: { type: :integer },
photos_count: { type: :integer },
created_at: { type: :integer },
harvested_at: { type: :date }
}
}
def search_data
{
slug:,
quantity:,
# crop
crop_id:,
crop_name:,
crop_slug: crop.slug,
# owner
owner_id:,
owner_login_name:,
owner_slug:,
plant_part_name: plant_part&.name,
# planting
planting_id:,
planting_slug: planting&.slug,
# photo
has_photos: photos.size.positive?,
thumbnail_url: default_photo&.thumbnail_url || crop.default_photo&.thumbnail_url,
# counts
photos_count: photos.count,
# timestamps
harvested_at:,
created_at: created_at.to_i
}
end
def self.homepage_records(limit)
records = []
owners = []
1..limit.times do
where = {
# Disabled for now so that more relevant harvests are
# surfaced; even if we're falling back to crop photos.
# photos_count: { gt: 0 },
owner_id: { not: owners }
}
one_record = search('*',
limit: 1,
where:,
boost_by: [:created_at],
load: false).first
return records if one_record.nil?
owners << one_record.owner_id
records << one_record
end
records
end
end
end
-87
View File
@@ -1,87 +0,0 @@
# frozen_string_literal: true
module SearchPlantings
extend ActiveSupport::Concern
included do
searchkick merge_mappings: true,
settings: { number_of_shards: 1, number_of_replicas: 0 },
mappings: {
properties: {
active: { type: :boolean },
created_at: { type: :integer },
harvests_count: { type: :integer },
photos_count: { type: :integer },
owner_location: { type: :text }
}
}
def search_data
{
slug:,
active:,
finished: finished?,
has_photos: photos.size.positive?,
location:,
percentage_grown: percentage_grown.to_i,
planted_at:,
planted_from:,
planted_year: planted_at&.year,
quantity:,
sunniness:,
garden_id:,
garden_slug: garden&.garden_slug,
garden_name: garden&.name,
description:,
first_harvest_predicted_at:,
finish_predicted_at:,
# crops
crop_id:,
crop_name:,
crop_slug:,
crop_perennial:,
# owner
owner_id:,
owner_location:,
owner_login_name:,
owner_slug:,
# photos
thumbnail_url: default_photo&.thumbnail_url || crop.default_photo&.thumbnail_url,
# counts
photos_count: photos.size,
harvests_count:,
# timestamps
created_at: created_at.to_i,
updated_at: updated_at.to_i
}
end
def self.homepage_records(limit)
records = []
owners = []
1..limit.times do
where = {
# Disabled for now so that more relevant plantings are
# surfaced; even if we're falling back to crop photos.
# photos_count: { gt: 0 },
owner_id: { not: owners }
}
one_record = search('*',
limit: 1,
where:,
boost_by: [:created_at],
load: false).first
return records if one_record.nil?
owners << one_record.owner_id
records << one_record
end
records
end
end
end
-69
View File
@@ -1,69 +0,0 @@
# frozen_string_literal: true
module SearchSeeds
extend ActiveSupport::Concern
included do
searchkick merge_mappings: true,
settings: { number_of_shards: 1, number_of_replicas: 0 },
mappings: {
properties: {
id: { type: :integer },
created_at: { type: :integer },
plant_before: { type: :text },
photos_count: { type: :integer },
tradable_to: { type: :text }
}
}
def search_data
{
slug:,
finished: finished?,
gmo:,
active:,
heirloom:,
location: owner.location,
organic:,
quantity:,
plant_before: plant_before&.to_fs(:ymd),
tradable_to:,
tradable:,
# crop
crop_id:,
crop_name: crop.name,
crop_slug: crop.slug,
# owner
owner_id:,
owner_location:,
owner_login_name:,
owner_slug:,
# planting
parent_planting:,
# counts
photos_count: photos.size,
# photo
has_photos: photos.size.positive?,
thumbnail_url: default_photo&.thumbnail_url || crop.default_photo&.thumbnail_url,
created_at: created_at.to_i
}
end
def self.homepage_records(limit)
search('*', limit:,
where: {
finished: false,
tradable: true,
_or: [{ plant_before: nil }, { plant_before: { lt: Date.today } }]
},
boost_by: [:created_at],
load: false)
end
end
end
+4 -1
View File
@@ -5,7 +5,6 @@ class Harvest < ApplicationRecord
extend FriendlyId
include PhotoCapable
include Ownable
include SearchHarvests
include Likeable
attr_accessor :overall_rating
@@ -156,6 +155,10 @@ class Harvest < ApplicationRecord
end
end
def self.homepage_records(limit)
recent.one_per_owner.limit(limit)
end
private
def crop_must_match_planting
+1
View File
@@ -28,6 +28,7 @@ class PhotoAssociation < ApplicationRecord
def photo_and_item_have_same_owner
return if photographable_type == 'Crop'
return if photographable.blank?
errors.add(:photo, :photo_owner_mismatch) unless photographable.owner_id == photo.owner_id
end
+4 -1
View File
@@ -7,7 +7,6 @@ class Planting < ApplicationRecord
include Ownable
include PredictPlanting
include PredictHarvest
include SearchPlantings
include Likeable
friendly_id :planting_slug, use: %i(slugged finders)
@@ -133,6 +132,10 @@ class Planting < ApplicationRecord
end
end
def self.homepage_records(limit)
recent.one_per_owner.limit(limit)
end
private
def cannot_be_finished_and_failed
+7 -1
View File
@@ -5,7 +5,6 @@ class Seed < ApplicationRecord
include PhotoCapable
include Finishable
include Ownable
include SearchSeeds
friendly_id :seed_slug, use: %i(slugged finders)
@@ -73,4 +72,11 @@ class Seed < ApplicationRecord
def to_s
I18n.t('seeds.string', crop: crop.name, owner:)
end
def self.homepage_records(limit)
current.tradable
.where("plant_before IS NULL OR plant_before < ?", Time.zone.today)
.order(created_at: :desc)
.limit(limit)
end
end
+7 -7
View File
@@ -1,12 +1,12 @@
%h2= t('.recently_planted')
- Planting.homepage_records(6).each do |planting|
- next unless planting['thumbnail_url'].present?
= link_to planting_path(slug: planting['slug']), class: 'list-group-item list-group-item-action flex-column align-items-start' do
- next unless planting.thumbnail_url.present?
= link_to planting_path(slug: planting.slug), class: 'list-group-item list-group-item-action flex-column align-items-start' do
.d-flex.w-100.justify-content-between.homepage--list-item
%p.mb-2
= image_tag planting['thumbnail_url'], width: 75, class: 'rounded shadow', alt: "Image of #{planting['crop_name']} by #{planting['owner_login_name']}"
= image_tag planting.thumbnail_url, width: 75, class: 'rounded shadow', alt: "Image of #{planting.crop_name} by #{planting.owner_login_name}"
.text-right
%h4= planting['crop_name']
- if planting['planted_from'].present?
%span.badge.badge-success= planting['planted_from'].pluralize
%small.text-muted planted by #{planting['owner_login_name']}
%h4= planting.crop_name
- if planting.planted_from.present?
%span.badge.badge-success= planting.planted_from.pluralize
%small.text-muted planted by #{planting.owner_login_name}
+17 -17
View File
@@ -7,34 +7,34 @@ cal.description = "Plantings by #{@owner.login_name}"
event = Icalendar::Event.new
lines = []
lines << "Quantity: #{planting['quantity'] ? planting['quantity'] : 'unknown' }"
lines << "Planted on: #{planting['planted_at'] ? planting['planted_at'] : 'unknown' }"
lines << "Sunniness: #{planting['sunniness'] ? planting['sunniness'] : 'unknown' }"
lines << "Planted from: #{planting['planted_from'] ? planting['planted_from'] : 'unknown' }"
lines << "First harvest from: #{planting['first_harvest_predicted_at'] ? planting['first_harvest_predicted_at'] : 'unknown' }"
lines << "Last harvest from: #{planting['last_harvest_predicted_at'] ? planting['last_harvest_predicted_at'] : 'unknown' }"
lines << "Finish predicted at: #{planting['finish_predicted_at'] ? planting['finish_predicted_at'] : 'unknown'}"
lines << "Finished at: #{planting['finished_at'] ? planting['finished_at'] : 'unknown' }"
lines << "Quantity: #{planting.quantity || 'unknown' }"
lines << "Planted on: #{planting.planted_at || 'unknown' }"
lines << "Sunniness: #{planting.sunniness || 'unknown' }"
lines << "Planted from: #{planting.planted_from || 'unknown' }"
lines << "First harvest from: #{planting.first_harvest_predicted_at || 'unknown' }"
lines << "Last harvest from: #{planting.last_harvest_predicted_at || 'unknown' }"
lines << "Finish predicted at: #{planting.finish_predicted_at || 'unknown'}"
lines << "Finished at: #{planting.finished_at || 'unknown' }"
lines << planting.description
finish_date = Date.parse(planting['finished_at'] || planting['finish_predicted_at'] || planting['last_harvest_predicted_at']) rescue nil
finish_date = (planting.finished_at || planting.finish_predicted_at || planting.last_harvest_predicted_at)&.to_date
event.dtstart = Time.at(planting['created_at'])
event.dtend = finish_date || 1.day.from_now
event.summary = planting['crop_name']
event.dtstart = planting.created_at
event.dtend = finish_date || 1.day.from_now.to_date
event.summary = planting.crop.name
event.description = lines.join("\n")
event.ip_class = "PUBLIC"
event.url = planting_url(slug: planting['slug'])
event.url = planting_url(slug: planting.slug)
cal.add_event(event)
if finish_date && finish_date > Date.today
predicted_date = Date.parse(planting['first_harvest_predicted_at']) if planting['first_harvest_predicted_at']
predicted_date = planting.first_harvest_predicted_at&.to_date
todo = Icalendar::Todo.new
todo.dtstart = predicted_date || finish_date || Date.today
todo.due = finish_date
todo.summary = "Harvest #{planting['crop_name']}"
todo.summary = "Harvest #{planting.crop.name}"
cal.add_todo(todo)
@@ -42,9 +42,9 @@ cal.description = "Plantings by #{@owner.login_name}"
event = Icalendar::Event.new
event.dtstart = predicted_date || finish_date || Date.today
event.dtend = finish_date
event.summary = "Harvest #{planting['crop_name']}"
event.summary = "Harvest #{planting.crop.name}"
event.ip_class = "PUBLIC"
event.url = planting_url(slug: planting['slug'])
event.url = planting_url(slug: planting.slug)
cal.add_event(event)
end
+9 -9
View File
@@ -6,15 +6,15 @@
%link= plantings_url
- @plantings.each do |planting|
%item
%title #{planting['crop_name']} in #{planting['location']}
%pubdate= planting['created_at'].to_fs(:rfc822)
%title #{planting.crop_name} in #{planting.location}
%pubdate= planting.created_at.to_fs(:rfc822)
%description
:escaped
<p>Quantity: #{planting['quantity'] ? planting['quantity'] : 'unknown' }</p>
<p>Planted on: #{planting['planted_at'] ? planting['planted_at'] : 'unknown' }</p>
<p>Sunniness: #{planting['sunniness'] ? planting['sunniness'] : 'unknown' }</p>
<p>Planted from: #{planting['planted_from'] ? planting['planted_from'] : 'unknown' }</p>
<p>Quantity: #{planting.quantity ? planting.quantity : 'unknown' }</p>
<p>Planted on: #{planting.planted_at ? planting.planted_at : 'unknown' }</p>
<p>Sunniness: #{planting.sunniness ? planting.sunniness : 'unknown' }</p>
<p>Planted from: #{planting.planted_from ? planting.planted_from : 'unknown' }</p>
:escaped_markdown
#{ strip_tags markdownify(planting['description']) }
%link= planting_url(slug: planting['slug'])
%guid= planting_url(slug: planting['slug'])
#{ strip_tags markdownify(planting.description) }
%link= planting_url(slug: planting.slug)
%guid= planting_url(slug: planting.slug)
+1 -1
View File
@@ -17,6 +17,6 @@
<p>Heirloom? #{seed.heirloom}</p>
- if seed.tradable
:escaped
<p>Will trade #{seed.tradable_to} from #{seed.location ||= 'unknown location'}</p>
<p>Will trade #{seed.tradable_to} from #{seed.location || 'unknown location'}</p>
%link= seed_url(slug: seed.slug)
%guid= seed_url(slug: seed.slug)
+1 -1
View File
@@ -14,7 +14,7 @@ Bundler.require(*Rails.groups)
module Growstuff
class Application < Rails::Application
# Initialize configuration defaults for originally generated Rails version.
config.load_defaults 8.0
config.load_defaults 8.1
# Rails 7.1+ requires a coder for `serialize`.
# We set YAML as the default for compatibility with gems like Mexican Sofa.
@@ -0,0 +1,48 @@
# frozen_string_literal: true
# JSONAPI::Resources (0.10.7) is currently incompatible with Rails 8.1
# because ActionDispatch::Routing::Mapper::Resources::Resource.initialize now expects keyword arguments for only/except.
# This patch ensures that it passes keyword arguments correctly.
# Remove when https://github.com/JSONAPI-Resources/jsonapi-resources/issues/1488 is fixed
if defined?(JSONAPI)
module ActionDispatch
module Routing
class Mapper
module Resources
class Resource
alias_method :original_initialize, :initialize
def initialize(entities, api_only, shallow, options = {})
# In Rails 8.1, initialize(entities, api_only, shallow, only: nil, except: nil, **options)
# and jsonapi-resources passes them in the options hash.
if options.is_a?(Hash)
only = options.delete(:only)
except = options.delete(:except)
original_initialize(entities, api_only, shallow, only: only, except: except, **options)
else
original_initialize(entities, api_only, shallow, options)
end
end
end
end
end
end
end
module JSONAPI
module RoutingExt
module Mapper
def jsonapi_resource_scope(resource, resource_type)
# The original implementation uses Resource.new which we patched above.
# We need to make sure we don't break Rails 5/6/7/8 logic if it were to run there.
@scope = @scope.new(scope_level_resource: resource, jsonapi_resource: resource_type)
controller(resource.resource_scope) { yield }
ensure
@scope = @scope.parent
end
end
end
end
end
+7 -2
View File
@@ -4,9 +4,9 @@ class Rack::Attack
### Throttle Config ###
if Rails.env.production?
# Throttle requests to /plantings, /harvests, and /members to 10 per minute per IP
# Throttle requests to /plantings, /harvests, and /members to 15 per minute per IP
# Includes API routes
throttle('req/ip/restricted_routes', limit: 20, period: 1.minute) do |req|
throttle('req/ip/restricted_routes', limit: 15, period: 1.minute) do |req|
if req.path =~ %r{^/(plantings|harvests|members)(/|$)} || req.path =~ %r{^/api/v1/(plantings|harvests|members)(/|$)}
req.ip
end
@@ -27,6 +27,11 @@ class Rack::Attack
end
end
# Abusive services
blocklist('block Semrush crawler') do |request|
request.user_agent.to_s.downcase.include?('semrush')
end
### Custom Response Headers ###
# Add Retry-After header to throttled responses
@@ -4,12 +4,6 @@ class ElasticIndexing < ActiveRecord::Migration[5.2]
def up
say 'indexing crops'
Crop.reindex
say 'indexing plantings'
Planting.reindex
say 'indexing seeds'
Seed.reindex
say 'indexing harvests'
Harvest.reindex
say 'indexing photos'
Photo.reindex
end
-3
View File
@@ -4,8 +4,5 @@ namespace :search do
desc 'reindex'
task reindex: :environment do
Crop.reindex
Planting.reindex
Harvest.reindex
Seed.reindex
end
end
+3 -5
View File
@@ -2,7 +2,7 @@
require 'rails_helper'
describe HarvestsController, :search do
describe HarvestsController do
login_member
def valid_attributes
@@ -22,14 +22,12 @@ describe HarvestsController, :search do
let!(:tomato_harvest) { create(:harvest, owner_id: first_member.id, crop_id: tomato.id) }
let!(:maize_harvest) { create(:harvest, owner_id: second_member.id, crop_id: maize.id) }
before { Harvest.reindex }
describe "assigns all harvests as @harvests" do
before { get :index, params: {} }
it { expect(assigns(:harvests).size).to eq 2 }
it { expect(assigns(:harvests)[0].slug).to eq tomato_harvest.slug }
it { expect(assigns(:harvests)[1].slug).to eq maize_harvest.slug }
it { expect(assigns(:harvests)).to include(tomato_harvest) }
it { expect(assigns(:harvests)).to include(maize_harvest) }
end
describe "picks up owner from params and shows owner's harvests only" do
+6 -10
View File
@@ -2,7 +2,7 @@
require 'rails_helper'
describe PlantingsController, :search do
describe PlantingsController do
login_member
def valid_attributes
@@ -12,7 +12,7 @@ describe PlantingsController, :search do
}
end
describe "GET index", :search do
describe "GET index" do
let!(:first_member) { create(:member) }
let!(:second_member) { create(:member) }
let!(:tomato) { create(:tomato) }
@@ -20,16 +20,12 @@ describe PlantingsController, :search do
let!(:tomato_planting) { create(:planting, crop: tomato, owner: first_member, created_at: 1.day.ago) }
let!(:maize_planting) { create(:planting, crop: maize, owner: second_member, created_at: 5.days.ago) }
before do
Planting.reindex
end
describe "assigns all plantings as @plantings" do
before { get :index }
it { expect(assigns(:plantings).size).to eq 2 }
it { expect(assigns(:plantings)[0]['slug']).to eq tomato_planting.slug }
it { expect(assigns(:plantings)[1]['slug']).to eq maize_planting.slug }
it { expect(assigns(:plantings)[0].slug).to eq tomato_planting.slug }
it { expect(assigns(:plantings)[1].slug).to eq maize_planting.slug }
end
describe "picks up owner from params and shows owner's plantings only" do
@@ -37,14 +33,14 @@ describe PlantingsController, :search do
it { expect(assigns(:owner)).to eq first_member }
it { expect(assigns(:plantings).size).to eq 1 }
it { expect(assigns(:plantings).first['slug']).to eq tomato_planting.slug }
it { expect(assigns(:plantings).first.slug).to eq tomato_planting.slug }
end
describe "picks up crop from params and shows the plantings for the crop only" do
before { get :index, params: { crop_slug: maize.slug } }
it { expect(assigns(:crop)).to eq maize }
it { expect(assigns(:plantings).first['slug']).to eq maize_planting.slug }
it { expect(assigns(:plantings).first.slug).to eq maize_planting.slug }
end
end
+1 -3
View File
@@ -2,13 +2,12 @@
require 'rails_helper'
describe SeedsController, :search do
describe SeedsController do
let(:owner) { create(:member) }
describe "GET index" do
describe "picks up owner from params" do
before do
Seed.reindex
get :index, params: { member_slug: owner.slug }
end
@@ -25,7 +24,6 @@ describe SeedsController, :search do
let!(:planting) { create(:planting, owner:) }
before do
Seed.reindex
get :new, params: { planting_slug: planting.to_param }
end
-3
View File
@@ -29,8 +29,5 @@ FactoryBot.define do
end
trait :reindex do
after(:create) do |harvest, _evaluator|
harvest.reindex(refresh: true)
end
end
end
-6
View File
@@ -68,11 +68,5 @@ FactoryBot.define do
planting.save
end
end
trait :reindex do
after(:create) do |planting, _evaluator|
planting.reindex(refresh: true)
end
end
end
end
-6
View File
@@ -31,11 +31,5 @@ FactoryBot.define do
factory :untradable_seed do
tradable_to { "nowhere" }
end
trait :reindex do
after(:create) do |seed, _evaluator|
seed.reindex(refresh: true)
end
end
end
end
@@ -2,7 +2,7 @@
require 'rails_helper'
describe "browse harvests", :search do
describe "browse harvests" do
subject { page }
let!(:harvest) { create(:harvest, owner: member) }
@@ -11,10 +11,9 @@ describe "browse harvests", :search do
include_context 'signed in member'
describe 'blank optional fields' do
let!(:harvest) { create(:harvest, :no_description, :reindex) }
let!(:harvest) { create(:harvest, :no_description) }
before do
Harvest.reindex
visit harvests_path
end
@@ -24,10 +23,9 @@ describe "browse harvests", :search do
end
describe "filled in optional fields" do
let!(:harvest) { create(:harvest, :long_description, :reindex) }
let!(:harvest) { create(:harvest, :long_description) }
before do
Harvest.reindex
visit harvests_path
end
+4 -7
View File
@@ -2,7 +2,7 @@
require 'rails_helper'
describe "home page", :search do
describe "home page" do
subject { page }
let(:member) { create(:member) }
@@ -14,9 +14,9 @@ describe "home page", :search do
let(:seed) { create(:tradable_seed, owner: member, crop:) }
let(:harvest) { create(:harvest, owner: member, crop:) }
let!(:tradable_seed) { create(:tradable_seed, :reindex, finished: false) }
let!(:finished_seed) { create(:tradable_seed, :reindex, finished: true) }
let!(:untradable_seed) { create(:untradable_seed, :reindex) }
let!(:tradable_seed) { create(:tradable_seed, finished: false) }
let!(:finished_seed) { create(:tradable_seed, finished: true) }
let!(:untradable_seed) { create(:untradable_seed) }
before do
# Add photos, so they can appear on home page
@@ -25,9 +25,6 @@ describe "home page", :search do
harvest.photos << photo
Crop.reindex
Planting.reindex
Seed.reindex
Harvest.reindex
visit root_path
end
+1 -1
View File
@@ -8,7 +8,7 @@ describe 'Likeable', :js, :search do
let!(:activity) { create(:activity, :reindex, owner: member) }
let!(:photo) { create(:photo, owner: member) }
let!(:harvest) { create(:harvest, :reindex, owner: member) }
let!(:planting) { create(:planting, :reindex, owner: member) }
let!(:planting) { create(:planting, owner: member) }
include_context 'signed in member'
@@ -10,8 +10,6 @@ describe "Planting a crop", :js, :search do
create(:planting, garden:, owner: member, planted_at: Date.parse("2013-03-10"))
end
before { Planting.reindex }
context 'signed in' do
include_context 'signed in member'
before { visit new_planting_path }
@@ -223,9 +221,6 @@ describe "Planting a crop", :js, :search do
expect(page).to have_content "Aug 2014"
expect(page).to have_content "4/5"
# ensure we've indexed in elastic search
planting.reindex(refresh: true)
# shouldn't be on the page
visit plantings_path
expect(page).to have_no_content "maize"
-1
View File
@@ -9,7 +9,6 @@ describe 'Plantings RSS feed' do
end
it 'The index title is what we expect' do
Planting.reindex
visit plantings_path(format: 'rss')
expect(page).to have_content "Recent plantings from " \
"#{@owner || 'all members'} (#{ENV.fetch('GROWSTUFF_SITE_NAME', nil)})"
+13
View File
@@ -148,6 +148,19 @@ describe Harvest do
end
end
describe '.homepage_records' do
it 'returns unique harvests per owner' do
member1 = create(:member)
member2 = create(:member)
create(:harvest, owner: member1, created_at: 1.day.ago)
h2 = create(:harvest, owner: member1, created_at: 1.hour.ago)
h3 = create(:harvest, owner: member2, created_at: 2.hours.ago)
records = described_class.homepage_records(5)
expect(records).to contain_exactly(h2, h3)
end
end
context "stringification" do
let(:crop) { create(:crop, name: "apricot") }
+24 -7
View File
@@ -421,6 +421,25 @@ describe Planting do
planting.photos << @photo2
expect(planting.default_photo).to eq @photo2
end
describe '#thumbnail_url' do
let(:crop_photo) { create(:photo) }
it 'returns its own default photo if present' do
expect(planting.thumbnail_url).to eq photo.fullsize_url
end
it 'falls back to crop default photo if no planting photo is present' do
planting_without_photo = create(:planting, crop:)
PhotoAssociation.create!(photo: crop_photo, photographable: crop)
expect(planting_without_photo.thumbnail_url).to eq crop_photo.fullsize_url
end
it 'returns nil if neither planting nor crop has a photo' do
planting_without_photo = create(:planting, crop:)
expect(planting_without_photo.thumbnail_url).to be_nil
end
end
end
context 'interesting plantings' do
@@ -596,16 +615,14 @@ describe Planting do
it { expect(member.plantings.active).not_to include(failed_planting) }
end
describe 'homepage', :search do
describe 'homepage' do
subject { described_class.homepage_records(100) }
let!(:interesting_planting) { create(:planting, :reindex, :with_photo) }
let!(:finished_interesting_planting) { create(:finished_planting, :reindex, :with_photo) }
let!(:planting) { create(:planting, :reindex) }
before { described_class.reindex }
let!(:interesting_planting) { create(:planting, :with_photo) }
let!(:finished_interesting_planting) { create(:finished_planting, :with_photo) }
let!(:planting) { create(:planting) }
it { expect(subject.count).to eq 3 }
it { expect(subject.map(&:id)).to eq([interesting_planting.id.to_s, finished_interesting_planting.id.to_s, planting.id.to_s]) }
it { expect(subject.map(&:id)).to include(interesting_planting.id, finished_interesting_planting.id, planting.id) }
end
end
+5 -7
View File
@@ -213,16 +213,14 @@ describe Seed do
end
end
describe 'homepage', :search do
describe 'homepage' do
subject { described_class.homepage_records(100) }
let!(:tradable_seed) { create(:tradable_seed, :reindex, finished: false) }
let!(:finished_seed) { create(:tradable_seed, :reindex, finished: true) }
let!(:untradable_seed) { create(:untradable_seed, :reindex) }
before { described_class.reindex }
let!(:tradable_seed) { create(:tradable_seed, finished: false) }
let!(:finished_seed) { create(:tradable_seed, finished: true) }
let!(:untradable_seed) { create(:untradable_seed) }
it { expect(subject.count).to eq 1 }
it { expect(subject.first.id).to eq tradable_seed.id.to_s }
it { expect(subject.first.id).to eq tradable_seed.id }
end
end
+19 -20
View File
@@ -15,7 +15,7 @@ describe "Plantings" do
before do
@member = create(:interesting_member)
@predictable_planting = create(:predictable_planting, owner: @member, planted_at: 1.days.ago, days_to_first_harvest: 10,
@predictable_planting = create(:predictable_planting, owner: @member, planted_at: 1.day.ago, days_to_first_harvest: 10,
days_to_last_harvest: 20)
@predictable_planting.crop.update(median_days_to_first_harvest: 10)
@@ -24,7 +24,6 @@ days_to_last_harvest: 20)
@finished_planting = create(:finished_planting, owner: @member)
@annual_planting = create(:annual_planting, owner: @member)
@perennial_planting = create(:perennial_planting, owner: @member)
Planting.reindex
end
describe "GET /members/x/plantings.ics" do
@@ -34,19 +33,17 @@ days_to_last_harvest: 20)
calendar = Icalendar::Parser.new(response.body, true).parse.first
expect(calendar.description[0].to_s).to eq "Plantings by #{@member.login_name}"
events = calendar.events
expect(events.length).to eq 7 # There are 8, but finished plantings aren't included
expect(events.length).to eq 7
# TODO: Better date comparison
# Predicted finish should be used
expect(events[1].summary.to_s).to include @predictable_planting.crop.name
expect(events[1].dtstart.to_datetime.to_i).to be_within(1.second).of @predictable_planting.created_at.to_i
expect(events[1].dtend.to_date).to eq @predictable_planting.finish_predicted_at
predictable_event = events.find { |e| e.dtend.to_date == @predictable_planting.finish_predicted_at }
expect(predictable_event.summary.to_s).to include @predictable_planting.crop.name
expect(predictable_event.dtstart.to_datetime.to_i).to be_within(1.second).of @predictable_planting.created_at.to_i
# Actual finish should be used
# expect(events[4].dtend.to_date).to be_within(1.second).of @finised_planting.finished_at
# expect(events[4].dtend.to_date).to be_within(1.second).of @finished_planting.finished_at
# Otherwise, tomorrow should be used
expect(events[3].dtend.to_date).to eq 1.day.from_now.to_date
expect(events.map { |e| e.dtend.to_date }).to include 1.day.from_now.to_date
# TBA: Perennial and annual crops predictions of 'next' harvest date don't really fit
@@ -86,16 +83,18 @@ days_to_last_harvest: 20)
data = CSV.parse(response.body, headers: true)
expect(data.headers).to eq expected_headers
expect(data[1]["Crop name"]).to eq @predictable_planting.crop.name
expect(data[1]["Owner name"]).to eq @member.to_s
expect(data[1]["Garden name"]).to eq @predictable_planting.garden.to_s
expect(data[1]["Description"]).to eq @predictable_planting.description
expect(data[1]["Date planted"]).to eq @predictable_planting.planted_at.to_fs(:db)
expect(data[1]["Quantity"].to_i).to eq @predictable_planting.quantity
expect(data[1]["Sunniness"]).to eq @predictable_planting.sunniness
expect(data[1]["Planted from"]).to eq @predictable_planting.planted_from
expect(data[1]["Date added"]).to eq @predictable_planting.created_at.to_fs(:db)
expect(data[1]["License"]).to eq "CC-BY-SA Growstuff http://growstuff.org/"
row = data.detect { |crop_name| @predictable_planting.id.to_s == crop_name['Id'] }
expect(row["Crop name"]).to eq @predictable_planting.crop.name
expect(row["Owner name"]).to eq @member.to_s
expect(row["Garden name"]).to eq @predictable_planting.garden.to_s
expect(row["Description"]).to eq @predictable_planting.description
expect(row["Date planted"]).to eq @predictable_planting.planted_at.to_fs(:db)
expect(row["Quantity"].to_i).to eq @predictable_planting.quantity
expect(row["Sunniness"]).to eq @predictable_planting.sunniness
expect(row["Planted from"]).to eq @predictable_planting.planted_from
expect(row["Date added"]).to eq @predictable_planting.created_at.to_fs(:db)
expect(row["License"]).to eq "CC-BY-SA Growstuff http://growstuff.org/"
expect(data.count).to eq 6
end
+2 -3
View File
@@ -46,9 +46,6 @@ RSpec.configure do |config|
def index_everything
# reindex models
Crop.reindex
Harvest.reindex
Planting.reindex
Seed.reindex
end
config.before(:suite) do
@@ -61,7 +58,9 @@ RSpec.configure do |config|
config.around(:each, :search) do |example|
Searchkick.callbacks(true) do
index_everything
example.run
index_everything
end
end
+2 -3
View File
@@ -2,7 +2,7 @@
require 'rails_helper'
describe 'harvests/index.rss.haml', :search do
describe 'harvests/index.rss.haml' do
before do
controller.stub(:current_user) { nil }
@member = create(:member)
@@ -12,8 +12,7 @@ describe 'harvests/index.rss.haml', :search do
@harvest2 = create(:harvest, crop: @tomato)
@harvest3 = create(:harvest, crop: @tomato)
Harvest.searchkick_index.refresh
assign(:harvests, Harvest.search(load: false))
assign(:harvests, Harvest.all)
end
context 'all harvests' do
+1 -2
View File
@@ -2,12 +2,11 @@
require 'rails_helper'
describe 'home/_seeds.html.haml', :search, type: "view" do
describe 'home/_seeds.html.haml', type: "view" do
let!(:seed) { create(:tradable_seed, owner:) }
let(:owner) { create(:london_member) }
before do
Seed.searchkick_index.refresh
render
end
+3 -4
View File
@@ -2,9 +2,9 @@
require 'rails_helper'
describe 'plantings/index.rss.haml', :search do
describe 'plantings/index.rss.haml' do
before do
controller.stub(:current_user) { nil }
allow(view).to receive(:current_user).and_return(nil)
end
context 'all plantings' do
@@ -12,8 +12,7 @@ describe 'plantings/index.rss.haml', :search do
@planting = create(:planting)
@sunny = create(:sunny_planting)
@seedling = create(:seedling_planting)
Planting.searchkick_index.refresh
assign(:plantings, Planting.search(load: false))
assign(:plantings, Planting.all)
render
end
+3 -5
View File
@@ -2,7 +2,7 @@
require 'rails_helper'
describe 'seeds/index.rss.haml', :search do
describe 'seeds/index.rss.haml' do
before do
controller.stub(:current_user) { nil }
end
@@ -26,8 +26,7 @@ describe 'seeds/index.rss.haml', :search do
let!(:tradable) { create(:tradable_seed) }
before do
Seed.searchkick_index.refresh
assign(:seeds, Seed.search(load: false))
assign(:seeds, Seed.all)
render
end
@@ -51,8 +50,7 @@ describe 'seeds/index.rss.haml', :search do
before do
assign(:owner, seed.owner)
Seed.searchkick_index.refresh
assign(:seeds, Seed.search(load: false))
assign(:seeds, Seed.all)
render
end
+1148 -282
View File
File diff suppressed because it is too large. Load diff