diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile
index 2c7c2fad6a..3f5ed44a15 100644
--- a/.devcontainer/Dockerfile
+++ b/.devcontainer/Dockerfile
@@ -1,4 +1,4 @@
-FROM mcr.microsoft.com/devcontainers/ruby:1-3.3-bullseye
+FROM mcr.microsoft.com/devcontainers/ruby:3.4-trixie
# Install Rails
RUN gem install rails:7.0.8
diff --git a/.github/workflows/ci-features-admin.yml b/.github/workflows/ci-features-admin.yml
index 2515104d83..ac2be25f8d 100644
--- a/.github/workflows/ci-features-admin.yml
+++ b/.github/workflows/ci-features-admin.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-comments.yml b/.github/workflows/ci-features-comments.yml
index 75b5a39cb1..28e0bfe15b 100644
--- a/.github/workflows/ci-features-comments.yml
+++ b/.github/workflows/ci-features-comments.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-conversations.yml b/.github/workflows/ci-features-conversations.yml
index 24286e3377..90f7164ed0 100644
--- a/.github/workflows/ci-features-conversations.yml
+++ b/.github/workflows/ci-features-conversations.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-crops.yml b/.github/workflows/ci-features-crops.yml
index 99f523ab35..3e08923d7e 100644
--- a/.github/workflows/ci-features-crops.yml
+++ b/.github/workflows/ci-features-crops.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-gardens.yml b/.github/workflows/ci-features-gardens.yml
index e3b8663627..13af56a78d 100644
--- a/.github/workflows/ci-features-gardens.yml
+++ b/.github/workflows/ci-features-gardens.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-harvests.yml b/.github/workflows/ci-features-harvests.yml
index bb9397b3db..b39712eceb 100644
--- a/.github/workflows/ci-features-harvests.yml
+++ b/.github/workflows/ci-features-harvests.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-home.yml b/.github/workflows/ci-features-home.yml
index 678373e625..d90a593bba 100644
--- a/.github/workflows/ci-features-home.yml
+++ b/.github/workflows/ci-features-home.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-members.yml b/.github/workflows/ci-features-members.yml
index fe5e2ea1fe..33eb5b842f 100644
--- a/.github/workflows/ci-features-members.yml
+++ b/.github/workflows/ci-features-members.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-places.yml b/.github/workflows/ci-features-places.yml
index 30b89d222f..1e583a6507 100644
--- a/.github/workflows/ci-features-places.yml
+++ b/.github/workflows/ci-features-places.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-plantings.yml b/.github/workflows/ci-features-plantings.yml
index 2e3007a975..7ca19cccff 100644
--- a/.github/workflows/ci-features-plantings.yml
+++ b/.github/workflows/ci-features-plantings.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-posts.yml b/.github/workflows/ci-features-posts.yml
index 98864149ab..8719baded0 100644
--- a/.github/workflows/ci-features-posts.yml
+++ b/.github/workflows/ci-features-posts.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-seeds.yml b/.github/workflows/ci-features-seeds.yml
index a29f3223ef..d797fad322 100644
--- a/.github/workflows/ci-features-seeds.yml
+++ b/.github/workflows/ci-features-seeds.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features-timeline.yml b/.github/workflows/ci-features-timeline.yml
index e52b28938e..084a739e1a 100644
--- a/.github/workflows/ci-features-timeline.yml
+++ b/.github/workflows/ci-features-timeline.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci-features.yml b/.github/workflows/ci-features.yml
index e7f2011224..f0d6567859 100644
--- a/.github/workflows/ci-features.yml
+++ b/.github/workflows/ci-features.yml
@@ -61,7 +61,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index c25eaf3b17..17e10f34da 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -76,7 +76,7 @@ jobs:
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Setup yarn cache
- uses: actions/cache@v4
+ uses: actions/cache@v5
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
diff --git a/.rubocop.yml b/.rubocop.yml
index a6b7784fab..6323a52818 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -24,6 +24,7 @@ Naming/FileName:
RSpec/DescribeClass:
Exclude:
+ - 'spec/tasks/import_spec.rb'
- 'spec/views/**/*.rb'
- 'spec/features/**/*.rb'
@@ -71,4 +72,7 @@ Layout/LineLength:
Rails/SkipsModelValidations:
Exclude:
- 'db/migrate/20190317023129_finished_boolean.rb'
+ - 'db/migrate/20251128200506_add_description_to_crops.rb'
+ - 'db/migrate/20240810160538_set_default_language_for_existing_alternate_names.rb'
+ - 'db/migrate/20240101010102_populate_crop_fields_from_openfarm_data.rb'
- 'db/seeds.rb'
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
index fbba7cede3..084e16672e 100644
--- a/.rubocop_todo.yml
+++ b/.rubocop_todo.yml
@@ -1,18 +1,39 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
-# on 2024-07-13 05:47:38 UTC using RuboCop version 1.65.0.
+# on 2026-03-01 05:17:50 UTC using RuboCop version 1.85.0.
# The point is for the user to remove these configuration records
# one by one as the offenses are removed from the code base.
# Note that changes in the inspected code, or installation of new
# versions of RuboCop, may require this file to be generated again.
-# Offense count: 231
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: TreatCommentsAsGroupSeparators, ConsiderPunctuation.
+Bundler/OrderedGems:
+ Exclude:
+ - 'Gemfile'
+
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
-# SupportedStyles: link_or_button, strict
-Capybara/ClickLinkOrButtonStyle:
- Enabled: false
+# SupportedStyles: have_no, not_to
+Capybara/NegationMatcher:
+ Exclude:
+ - 'spec/features/admin/reverting_crops_spec.rb'
+
+# Offense count: 19
+Capybara/NegationMatcherAfterVisit:
+ Exclude:
+ - 'spec/features/admin/reverting_crops_spec.rb'
+ - 'spec/features/crops/crop_detail_page_spec.rb'
+ - 'spec/features/crops/crop_wranglers_spec.rb'
+ - 'spec/features/gardens/gardens_spec.rb'
+ - 'spec/features/members/deletion_spec.rb'
+ - 'spec/features/members/following_spec.rb'
+ - 'spec/features/members/profile_spec.rb'
+ - 'spec/features/plantings/planting_a_crop_spec.rb'
-# Offense count: 39
+# Offense count: 34
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: DefaultSelector.
Capybara/RSpec/HaveSelector:
@@ -25,7 +46,6 @@ Capybara/RSpec/HaveSelector:
- 'spec/features/plantings/planting_a_crop_spec.rb'
- 'spec/features/seeds/adding_seeds_spec.rb'
- 'spec/features/shared_examples/crop_suggest.rb'
- - 'spec/helpers/application_helper_spec.rb'
- 'spec/support/feature_helpers.rb'
- 'spec/views/posts/show.html.haml_spec.rb'
@@ -43,21 +63,22 @@ Capybara/VisibilityMatcher:
Exclude:
- 'spec/features/shared_examples/crop_suggest.rb'
-# Offense count: 6
+# Offense count: 8
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle, NonImplicitAssociationMethodNames.
# SupportedStyles: explicit, implicit
FactoryBot/AssociationStyle:
Exclude:
- 'spec/factories/alternate_names.rb'
+ - 'spec/factories/comments.rb'
- 'spec/factories/crop.rb'
- 'spec/factories/like.rb'
+ - 'spec/factories/notifications.rb'
- 'spec/factories/scientific_name.rb'
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: AutoCorrect, Include, EnforcedStyle, ExplicitOnly.
-# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb
+# Configuration parameters: EnforcedStyle, ExplicitOnly.
# SupportedStyles: create_list, n_times
FactoryBot/CreateList:
Exclude:
@@ -66,31 +87,91 @@ FactoryBot/CreateList:
- 'spec/views/posts/index.html.haml_spec.rb'
# Offense count: 4
-# Configuration parameters: Include, MaxAmount.
-# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb
+# Configuration parameters: MaxAmount.
FactoryBot/ExcessiveCreateList:
Exclude:
- 'spec/controllers/posts_controller_spec.rb'
- 'spec/features/crops/show_spec.rb'
- 'spec/features/percy/percy_spec.rb'
-# Offense count: 1127
+# Offense count: 1158
# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: Include.
-# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb
FactoryBot/SyntaxMethods:
Enabled: false
-# Offense count: 2
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: empty_lines, empty_lines_except_namespace, empty_lines_special, no_empty_lines, beginning_only, ending_only
+Layout/EmptyLinesAroundClassBody:
+ Exclude:
+ - 'db/migrate/20251130035700_create_versions.rb'
+
+# Offense count: 312
# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
+# Configuration parameters: AllowMultipleStyles, EnforcedHashRocketStyle, EnforcedColonStyle, EnforcedLastArgumentHashStyle.
+# SupportedHashRocketStyles: key, separator, table
+# SupportedColonStyles: key, separator, table
+# SupportedLastArgumentHashStyles: always_inspect, always_ignore, ignore_implicit, ignore_explicit
+Layout/HashAlignment:
+ Exclude:
+ - 'app/helpers/application_helper.rb'
+ - 'app/helpers/crops_helper.rb'
+ - 'app/models/concerns/search_harvests.rb'
+ - 'app/models/concerns/search_plantings.rb'
+ - 'app/models/crop.rb'
+ - 'config/sitemap.rb'
+ - 'lib/tasks/import.rake'
+ - 'spec/requests/api/v1/activities_request_spec.rb'
+ - 'spec/requests/api/v1/members_request_spec.rb'
+
+# Offense count: 7
+# This cop supports safe autocorrection (--autocorrect).
+Layout/HeredocIndentation:
+ Exclude:
+ - 'db/migrate/20190712003735_add_like_counter_caches.rb'
+ - 'db/migrate/20191226024813_crop_harvest_counter_cache.rb'
+ - 'db/migrate/20191226024957_crop_photo_counter_cache.rb'
+ - 'db/migrate/20191226025124_plant_part_harvest_counter_cache.rb'
+ - 'db/migrate/20191226025225_post_comment_counter_cache.rb'
+ - 'db/migrate/20250824085224_add_photos_comment_count.rb'
+
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: Width, EnforcedStyleAlignWith, AllowedPatterns.
+# SupportedStylesAlignWith: start_of_line, relative_to_receiver
+Layout/IndentationWidth:
+ Exclude:
+ - 'spec/requests/api/v1/activities_request_spec.rb'
+
+# Offense count: 6
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: Max, AllowHeredoc, AllowURI, AllowQualifiedName, URISchemes, AllowRBSInlineAnnotation, AllowCopDirectives, AllowedPatterns, SplitStrings.
# URISchemes: http, https
Layout/LineLength:
Exclude:
- - 'app/helpers/crops_helper.rb'
+ - 'Gemfile'
+ - 'app/controllers/admin/versions_controller.rb'
+ - 'app/models/concerns/predict_planting.rb'
+ - 'app/models/crop.rb'
- 'db/seeds.rb'
+ - 'spec/requests/api/v1/activities_request_spec.rb'
-# Offense count: 3
+# Offense count: 2
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: AllowInHeredoc.
+Layout/TrailingWhitespace:
+ Exclude:
+ - 'Gemfile'
+ - 'app/helpers/crops_helper.rb'
+
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+Lint/AmbiguousOperatorPrecedence:
+ Exclude:
+ - 'app/controllers/activities_controller.rb'
+
+# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: RequireParenthesesForMethodChains.
Lint/AmbiguousRange:
@@ -98,14 +179,34 @@ Lint/AmbiguousRange:
- 'app/models/concerns/search_activities.rb'
- 'app/models/concerns/search_harvests.rb'
- 'app/models/concerns/search_plantings.rb'
+ - 'db/seeds.rb'
+
+# Offense count: 1
+# This cop supports unsafe autocorrection (--autocorrect-all).
+# Configuration parameters: AllowSafeAssignment.
+Lint/AssignmentInCondition:
+ Exclude:
+ - 'app/helpers/crops_helper.rb'
+
+# Offense count: 1
+# Configuration parameters: AllowedMethods.
+# AllowedMethods: enums
+Lint/ConstantDefinitionInBlock:
+ Exclude:
+ - 'lib/tasks/import.rake'
# Offense count: 2
-# Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches.
+# Configuration parameters: IgnoreLiteralBranches, IgnoreConstantBranches, IgnoreDuplicateElseBranch.
Lint/DuplicateBranch:
Exclude:
- 'app/models/harvest.rb'
- 'lib/actions/oauth_signup_action.rb'
+# Offense count: 1
+Lint/DuplicateMethods:
+ Exclude:
+ - 'app/models/planting.rb'
+
# Offense count: 8
# Configuration parameters: AllowComments, AllowEmptyLambdas.
Lint/EmptyBlock:
@@ -136,62 +237,112 @@ Lint/SuppressedException:
Exclude:
- 'lib/tasks/testing.rake'
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: strict, consistent
+Lint/SymbolConversion:
+ Exclude:
+ - 'app/helpers/crops_helper.rb'
+
# Offense count: 7
-# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: AutoCorrect.
+# This cop supports safe autocorrection (--autocorrect).
Lint/UselessAssignment:
Exclude:
- 'config.rb'
- 'config/compass.rb'
-# Offense count: 52
+# Offense count: 1
+Lint/UselessConstantScoping:
+ Exclude:
+ - 'app/controllers/members_controller.rb'
+
+# Offense count: 61
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
Metrics/AbcSize:
- Max: 151
+ Max: 295
# Offense count: 14
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
# AllowedMethods: refine
Metrics/BlockLength:
- Max: 115
+ Max: 294
-# Offense count: 7
+# Offense count: 10
# Configuration parameters: CountComments, CountAsOne.
Metrics/ClassLength:
- Max: 188
+ Max: 298
-# Offense count: 6
+# Offense count: 1
+# Configuration parameters: LengthThreshold.
+Metrics/CollectionLiteralLength:
+ Exclude:
+ - 'lib/tasks/import.rake'
+
+# Offense count: 10
# Configuration parameters: AllowedMethods, AllowedPatterns.
Metrics/CyclomaticComplexity:
Max: 32
-# Offense count: 71
+# Offense count: 82
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
Metrics/MethodLength:
- Max: 127
+ Max: 296
# Offense count: 2
# Configuration parameters: CountComments, CountAsOne.
Metrics/ModuleLength:
- Max: 125
+ Max: 144
-# Offense count: 5
+# Offense count: 8
# Configuration parameters: AllowedMethods, AllowedPatterns.
Metrics/PerceivedComplexity:
Max: 32
+# Offense count: 2
+# Configuration parameters: Mode, AllowedMethods, AllowedPatterns, AllowBangMethods, WaywardPredicates.
+# AllowedMethods: call
+# WaywardPredicates: infinite?, nonzero?
+Naming/PredicateMethod:
+ Exclude:
+ - 'app/models/concerns/finishable.rb'
+ - 'app/models/seed.rb'
+
# Offense count: 3
RSpec/AnyInstance:
Exclude:
- 'spec/controllers/harvests_controller_spec.rb'
- 'spec/controllers/photos_controller_spec.rb'
-# Offense count: 292
+# Offense count: 2
+# This cop supports unsafe autocorrection (--autocorrect-all).
+RSpec/BeEq:
+ Exclude:
+ - 'spec/requests/api/v1/activities_request_spec.rb'
+
+# Offense count: 1
+RSpec/BeforeAfterAll:
+ Exclude:
+ - 'spec/tasks/import_spec.rb'
+
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+RSpec/ContextMethod:
+ Exclude:
+ - 'spec/requests/api/v1/activities_request_spec.rb'
+
+# Offense count: 299
# Configuration parameters: Prefixes, AllowedPatterns.
# Prefixes: when, with, without
RSpec/ContextWording:
Enabled: false
+# Offense count: 1
+# Configuration parameters: IgnoredMetadata.
+RSpec/DescribeClass:
+ Exclude:
+ - 'spec/tasks/import_spec.rb'
+
# Offense count: 36
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: SkipBlocks, EnforcedStyle, OnlyStaticConstants.
@@ -204,7 +355,6 @@ RSpec/DescribedClass:
# Offense count: 13
# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: AutoCorrect.
RSpec/EmptyExampleGroup:
Exclude:
- 'spec/controllers/authentications_controller_spec.rb'
@@ -227,10 +377,18 @@ RSpec/EmptyLineAfterExample:
Exclude:
- 'spec/models/ability_spec.rb'
-# Offense count: 140
+# Offense count: 146
# Configuration parameters: CountAsOne.
RSpec/ExampleLength:
- Max: 25
+ Max: 27
+
+# Offense count: 1
+# This cop supports unsafe autocorrection (--autocorrect-all).
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: method_call, block
+RSpec/ExpectChange:
+ Exclude:
+ - 'spec/models/crop_spec.rb'
# Offense count: 32
RSpec/ExpectInHook:
@@ -255,11 +413,30 @@ RSpec/HookArgument:
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AutoCorrect.
RSpec/HooksBeforeExamples:
Exclude:
- 'spec/features/crops/creating_a_crop_spec.rb'
+# Offense count: 53
+# This cop supports unsafe autocorrection (--autocorrect-all).
+RSpec/IncludeExamples:
+ Exclude:
+ - 'spec/features/conversations/index_spec.rb'
+ - 'spec/features/crops/alternate_name_spec.rb'
+ - 'spec/features/crops/browse_crops_spec.rb'
+ - 'spec/features/crops/creating_a_crop_spec.rb'
+ - 'spec/features/crops/crop_photos_spec.rb'
+ - 'spec/features/crops/delete_crop_spec.rb'
+ - 'spec/features/gardens/actions_spec.rb'
+ - 'spec/features/gardens/adding_gardens_spec.rb'
+ - 'spec/features/gardens/index_spec.rb'
+ - 'spec/features/likeable_spec.rb'
+ - 'spec/features/signout_spec.rb'
+ - 'spec/models/crop_spec.rb'
+ - 'spec/support/feature_helpers.rb'
+ - 'spec/views/photos/show.html.haml_spec.rb'
+ - 'spec/views/seeds/index.rss.haml_spec.rb'
+
# Offense count: 37
# Configuration parameters: Max, AllowedIdentifiers, AllowedPatterns.
RSpec/IndexedLet:
@@ -276,12 +453,12 @@ RSpec/IndexedLet:
- 'spec/models/member_spec.rb'
- 'spec/views/forums/index.html.haml_spec.rb'
-# Offense count: 720
+# Offense count: 719
# Configuration parameters: AssignmentOnly.
RSpec/InstanceVariable:
Enabled: false
-# Offense count: 40
+# Offense count: 41
RSpec/LetSetup:
Enabled: false
@@ -307,16 +484,16 @@ RSpec/MultipleDescribes:
Exclude:
- 'spec/features/crops/crop_wranglers_spec.rb'
-# Offense count: 152
+# Offense count: 189
RSpec/MultipleExpectations:
Max: 19
-# Offense count: 138
+# Offense count: 166
# Configuration parameters: AllowSubject.
RSpec/MultipleMemoizedHelpers:
- Max: 20
+ Max: 16
-# Offense count: 133
+# Offense count: 183
# Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
# SupportedStyles: always, named_only
RSpec/NamedSubject:
@@ -327,17 +504,18 @@ RSpec/NamedSubject:
RSpec/NestedGroups:
Max: 6
-# Offense count: 403
+# Offense count: 407
# Configuration parameters: AllowedPatterns.
# AllowedPatterns: ^expect_, ^assert_
RSpec/NoExpectationExample:
Enabled: false
-# Offense count: 3
+# Offense count: 4
RSpec/PendingWithoutReason:
Exclude:
- 'spec/features/seeds/misc_seeds_spec.rb'
- 'spec/features/unsubscribing_spec.rb'
+ - 'spec/requests/api/v1/gardens_request_spec.rb'
# Offense count: 2
RSpec/RepeatedDescription:
@@ -358,15 +536,14 @@ RSpec/RepeatedExampleGroupBody:
# Offense count: 6
# This cop supports safe autocorrection (--autocorrect).
-# Configuration parameters: AutoCorrect.
RSpec/ScatteredSetup:
Exclude:
- 'spec/features/percy/percy_spec.rb'
- 'spec/features/plantings/prediction_spec.rb'
# Offense count: 1
-# Configuration parameters: Include, CustomTransform, IgnoreMethods, IgnoreMetadata.
-# Include: **/*_spec.rb
+# Configuration parameters: CustomTransform, IgnoreMethods, IgnoreMetadata, InflectorPath, EnforcedInflector.
+# SupportedInflectors: default, active_support
RSpec/SpecFilePathFormat:
Exclude:
- 'spec/controllers/member_controller_spec.rb'
@@ -380,8 +557,6 @@ RSpec/StubbedMock:
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: EnforcedStyle.
-# SupportedStyles: constant, string
RSpec/VerifiedDoubleReference:
Exclude:
- 'spec/models/member_spec.rb'
@@ -405,36 +580,44 @@ RSpecRails/HaveHttpStatus:
- 'spec/controllers/likes_controller_spec.rb'
- 'spec/requests/harvests_spec.rb'
-# Offense count: 16
+# Offense count: 17
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Inferences.
RSpecRails/InferredSpecType:
Enabled: false
-# Offense count: 28
-# Configuration parameters: Database, Include.
+# Offense count: 30
+# Configuration parameters: Database.
# SupportedDatabases: mysql, postgresql
-# Include: db/**/*.rb
Rails/BulkChangeTable:
Enabled: false
# Offense count: 4
-# Configuration parameters: Include.
-# Include: db/**/*.rb
Rails/CreateTableWithTimestamps:
Exclude:
- 'db/migrate/20150201052245_create_cms.rb'
- 'db/migrate/20171022032108_all_the_predictions.rb'
-# Offense count: 1
+# Offense count: 8
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle, AllowToTime.
# SupportedStyles: strict, flexible
Rails/Date:
Exclude:
+ - 'app/controllers/activities_controller.rb'
- 'app/mailers/notifier_mailer.rb'
+ - 'app/models/concerns/search_seeds.rb'
+ - 'spec/features/activities/creating_a_recurring_activity_spec.rb'
+
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: slashes, arguments
+Rails/FilePath:
+ Exclude:
+ - 'lib/tasks/import.rake'
-# Offense count: 11
+# Offense count: 12
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedMethods, AllowedPatterns.
# AllowedMethods: order, limit, select, lock
@@ -445,38 +628,39 @@ Rails/FindEach:
- 'db/migrate/20171129041341_create_photographings.rb'
- 'db/migrate/20190130090437_add_crop_to_photographings.rb'
- 'db/migrate/20191119030244_cms_tags.rb'
+ - 'lib/tasks/wikidata.rake'
# Offense count: 2
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
Rails/HasAndBelongsToMany:
Exclude:
- 'app/models/member.rb'
- 'app/models/role.rb'
-# Offense count: 5
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
+# Offense count: 6
Rails/HasManyOrHasOneDependent:
Exclude:
+ - 'app/models/crop.rb'
- 'app/models/member.rb'
# Offense count: 1
-# Configuration parameters: Include.
-# Include: spec/**/*.rb, test/**/*.rb
Rails/I18nLocaleAssignment:
Exclude:
- 'spec/features/locale_spec.rb'
-# Offense count: 33
+# Offense count: 40
Rails/I18nLocaleTexts:
Enabled: false
-# Offense count: 3
-# Configuration parameters: Include.
-# Include: app/controllers/**/*.rb, app/mailers/**/*.rb
+# Offense count: 1
+# Configuration parameters: IgnoreScopes.
+Rails/InverseOf:
+ Exclude:
+ - 'app/models/member.rb'
+
+# Offense count: 4
Rails/LexicallyScopedActionFilter:
Exclude:
+ - 'app/controllers/api/v1/base_controller.rb'
- 'app/controllers/data_controller.rb'
- 'app/controllers/registrations_controller.rb'
@@ -492,16 +676,28 @@ Rails/PluralizationGrammar:
Exclude:
- 'spec/requests/plantings_spec.rb'
+# Offense count: 3
+# This cop supports safe autocorrection (--autocorrect).
+Rails/Presence:
+ Exclude:
+ - 'app/controllers/photos_controller.rb'
+ - 'app/controllers/plantings_controller.rb'
+ - 'app/models/concerns/open_farm_data.rb'
+
# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: Include.
-# Include: **/Rakefile, **/*.rake
Rails/RakeEnvironment:
Exclude:
- 'lib/tasks/hooks.rake'
- 'lib/tasks/i18n.rake'
- 'lib/tasks/testing.rake'
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+Rails/RedirectBackOrTo:
+ Exclude:
+ - 'app/controllers/follows_controller.rb'
+
# Offense count: 9
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedReceivers.
@@ -513,7 +709,7 @@ Rails/RedundantActiveRecordAllMethod:
- 'app/controllers/forums_controller.rb'
- 'app/controllers/plant_parts_controller.rb'
- 'app/controllers/scientific_names_controller.rb'
- - 'app/services/openfarm_service.rb'
+ - 'spec/features/members/deletion_spec.rb'
- 'spec/features/percy/percy_spec.rb'
- 'spec/models/harvest_spec.rb'
@@ -526,14 +722,13 @@ Rails/RedundantPresenceValidationOnBelongsTo:
- 'app/models/planting.rb'
- 'app/models/scientific_name.rb'
-# Offense count: 15
+# Offense count: 16
# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: Include.
-# Include: spec/controllers/**/*.rb, spec/requests/**/*.rb, test/controllers/**/*.rb, test/integration/**/*.rb
Rails/ResponseParsedBody:
Exclude:
- 'spec/controllers/api/v1/plantings_controller_spec.rb'
- 'spec/controllers/likes_controller_spec.rb'
+ - 'spec/requests/api/v1/activities_request_spec.rb'
- 'spec/requests/api/v1/crop_request_spec.rb'
- 'spec/requests/api/v1/gardens_request_spec.rb'
- 'spec/requests/api/v1/harvests_request_spec.rb'
@@ -543,29 +738,44 @@ Rails/ResponseParsedBody:
- 'spec/requests/api/v1/seeds_request_spec.rb'
# Offense count: 9
-# Configuration parameters: Include.
-# Include: db/**/*.rb
Rails/ReversibleMigration:
Exclude:
- 'db/migrate/20130326092227_change_planted_at_to_date.rb'
- 'db/migrate/20191119020643_upgrade_cms.rb'
-# Offense count: 2
+# Offense count: 6
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/RootPathnameMethods:
Exclude:
- 'app/controllers/crops_controller.rb'
- 'app/helpers/icons_helper.rb'
+ - 'config/application.rb'
+ - 'lib/tasks/import.rake'
+ - 'spec/rails_helper.rb'
+
+# Offense count: 4
+# Configuration parameters: ForbiddenMethods, AllowedMethods.
+# ForbiddenMethods: decrement!, decrement_counter, increment!, increment_counter, insert, insert!, insert_all, insert_all!, toggle!, touch, touch_all, update_all, update_attribute, update_column, update_columns, update_counters, upsert, upsert_all
+Rails/SkipsModelValidations:
+ Exclude:
+ - 'db/migrate/20240101010102_populate_crop_fields_from_openfarm_data.rb'
+ - 'db/migrate/20240810160538_set_default_language_for_existing_alternate_names.rb'
+ - 'db/migrate/20251128200506_add_description_to_crops.rb'
# Offense count: 21
-# Configuration parameters: Include.
-# Include: db/**/*.rb
Rails/ThreeStateBooleanColumn:
Enabled: false
+# Offense count: 2
+# This cop supports unsafe autocorrection (--autocorrect-all).
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: strict, flexible
+Rails/TimeZone:
+ Exclude:
+ - 'app/controllers/activities_controller.rb'
+ - 'spec/features/harvests/harvesting_a_crop_spec.rb'
+
# Offense count: 6
-# Configuration parameters: Include.
-# Include: app/models/**/*.rb
Rails/UniqueValidationWithoutIndex:
Exclude:
- 'app/models/follow.rb'
@@ -583,24 +793,34 @@ Rails/WhereEquals:
- 'app/models/harvest.rb'
- 'app/models/planting.rb'
-# Offense count: 2
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+Rails/WhereMissing:
+ Exclude:
+ - 'app/controllers/crops_controller.rb'
+
+# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/WhereRange:
Exclude:
- 'app/models/concerns/predict_planting.rb'
- 'app/models/garden.rb'
+ - 'app/models/seed.rb'
# Offense count: 1
Rake/MethodDefinitionInTask:
Exclude:
- 'lib/tasks/growstuff.rake'
-# Offense count: 3
+# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: EnforcedStyle.
+# Configuration parameters: EnforcedStyle, EnforcedStyleForClasses, EnforcedStyleForModules.
# SupportedStyles: nested, compact
+# SupportedStylesForClasses: ~, nested, compact
+# SupportedStylesForModules: ~, nested, compact
Style/ClassAndModuleChildren:
Exclude:
+ - 'app/controllers/admin/crops_controller.rb'
- 'lib/actions/oauth_signup_action.rb'
- 'lib/haml/filters/escaped_markdown.rb'
- 'lib/haml/filters/growstuff_markdown.rb'
@@ -615,30 +835,51 @@ Style/CommentedKeyword:
- 'spec/models/planting_spec.rb'
# Offense count: 3
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: AllowedVars, DefaultToNil.
+Style/FetchEnvVar:
+ Exclude:
+ - 'config/sitemap.rb'
+
+# Offense count: 2
+Style/FileOpen:
+ Exclude:
+ - 'app/helpers/application_helper.rb'
+ - 'db/seeds.rb'
+
+# Offense count: 1
+# This cop supports unsafe autocorrection (--autocorrect-all).
+# Configuration parameters: EnforcedStyle.
+# SupportedStyles: left_coerce, right_coerce, single_coerce, fdiv
+Style/FloatDivision:
+ Exclude:
+ - 'app/models/concerns/predict_planting.rb'
+
+# Offense count: 22
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, always_true, never
Style/FrozenStringLiteralComment:
- Exclude:
- - 'config/initializers/new_framework_defaults_6_0.rb'
- - 'db/migrate/20200801084007_add_foreign_key_constraint_to_active_storage_attachments_for_blob_id.active_storage.rb'
- - 'spec/lib/haml/filters/growstuff_markdown_spec.rb'
+ Enabled: false
-# Offense count: 3
+# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/GlobalStdStream:
Exclude:
- 'config/environments/production.rb'
- 'lib/tasks/gbif.rake'
- - 'lib/tasks/openfarm.rake'
+
+# Offense count: 2
+# This cop supports unsafe autocorrection (--autocorrect-all).
+Style/IdenticalConditionalBranches:
+ Exclude:
+ - 'lib/actions/oauth_signup_action.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
-# Configuration parameters: AllowedMethods.
-# AllowedMethods: nonzero?
-Style/IfWithBooleanLiteralBranches:
+Style/MapIntoArray:
Exclude:
- - 'app/controllers/gardens_controller.rb'
+ - 'app/helpers/crops_helper.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
@@ -660,12 +901,13 @@ Style/MutableConstant:
Exclude:
- 'app/models/activity.rb'
-# Offense count: 5
+# Offense count: 6
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle, AllowedMethods, AllowedPatterns.
# SupportedStyles: predicate, comparison
Style/NumericPredicate:
Exclude:
+ - 'app/controllers/activities_controller.rb'
- 'app/helpers/crops_helper.rb'
- 'app/helpers/harvests_helper.rb'
- 'app/helpers/plantings_helper.rb'
@@ -676,13 +918,21 @@ Style/OpenStructUse:
Exclude:
- 'spec/helpers/event_helper_spec.rb'
-# Offense count: 2
+# Offense count: 3
# Configuration parameters: AllowedMethods.
# AllowedMethods: respond_to_missing?
Style/OptionalBooleanParameter:
Exclude:
+ - 'app/helpers/application_helper.rb'
- 'app/models/concerns/member_newsletter.rb'
+# Offense count: 1
+# This cop supports safe autocorrection (--autocorrect).
+# Configuration parameters: PreferredDelimiters.
+Style/PercentLiteralDelimiters:
+ Exclude:
+ - 'db/migrate/20251130035700_create_versions.rb'
+
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Methods.
@@ -697,20 +947,34 @@ Style/RedundantFetchBlock:
Exclude:
- 'config/puma.rb'
-# Offense count: 2
+# Offense count: 1
+# This cop supports unsafe autocorrection (--autocorrect-all).
+Style/RedundantInterpolation:
+ Exclude:
+ - 'app/helpers/buttons_helper.rb'
+
+# Offense count: 4
+# Configuration parameters: Max.
+Style/SafeNavigationChainLength:
+ Exclude:
+ - 'app/models/ability.rb'
+
+# Offense count: 3
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowModifier.
Style/SoleNestedConditional:
Exclude:
+ - 'app/controllers/activities_controller.rb'
- 'app/controllers/application_controller.rb'
- 'app/controllers/messages_controller.rb'
-# Offense count: 24
+# Offense count: 27
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Mode.
Style/StringConcatenation:
Exclude:
- 'app/controllers/messages_controller.rb'
+ - 'app/controllers/registrations_controller.rb'
- 'app/helpers/buttons_helper.rb'
- 'config/initializers/rswag_api.rb'
- 'spec/helpers/gardens_helper_spec.rb'
diff --git a/.ruby-version b/.ruby-version
index 37d02a6e38..7921bd0c89 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1 +1 @@
-3.3.8
+3.4.8
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index dc4ecc69a8..0000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-sudo: required
-language: ruby
-dist: bionic
-branches:
- only:
- - mainline
- - dev
-cache:
- bundler: true
- yarn: true
- directories:
- - tmp/cache/assets/test/sprockets
-env:
- global:
- - secure: "Z5TpM2jEX4UCvNePnk/LwltQX48U2u9BRc+Iypr1x9QW2o228QJhPIOH39a8RMUrepGnkQIq9q3ZRUn98RfrJz1yThtlNFL3NmzdQ57gKgjGwfpa0e4Dwj/ZJqV2D84tDGjvdVYLP7zzaYZxQcwk/cgNpzKf/jq97HLNP7CYuf4="
-before_deploy:
- - bundle exec script/heroku_maintenance.rb on
-deploy:
- provider: heroku
- api_key:
- secure: "WrQxf0fEKkCdXrjcejurobOnNNz3he4dDwjBbToXbQTQNDObPp7NetJrLsfM8FiUFEeOuvhIHHiDQtMvY720zGGAGxDptvgFS+0QHCUqoTRZA/yFfUmHlG2jROXTzk5uVK0AE4k6Ion5kX8+mM0EnMT/7u+MTFiukrJctSiEXfg="
- on:
- repo: Growstuff/growstuff
- app:
- dev: growstuff-staging
- mainline: growstuff-prod
- run:
- - "script/deploy-tasks.sh"
- - restart
-after_deploy:
- - bundle exec script/heroku_maintenance.rb off
diff --git a/Gemfile b/Gemfile
index 64edb94c50..42a4ad2be1 100644
--- a/Gemfile
+++ b/Gemfile
@@ -136,6 +136,11 @@ gem "gbifrb"
gem "msgpack"
+# Pinned due to RAILS_ENV=production bundle exec rake assets:precompile failing with ArgumentError: wrong number of arguments (given 1, expected 0) (ArgumentError)
+# /tmp/build_8301a541/vendor/bundle/ruby/3.3.0/gems/connection_pool-3.0.2/lib/connection_pool.rb:48:in `initialize'
+# /tmp/build_8301a541/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.3/lib/active_support/cache/mem_cache_store.rb:63:in `new'
+gem "connection_pool", "< 3"
+
group :production do
gem 'bonsai-elasticsearch-rails' # Integration with Bonsa-Elasticsearch on heroku
gem 'dalli'
@@ -195,10 +200,6 @@ group :test do
gem 'vcr'
end
-group :travis do
- gem 'platform-api'
-end
-
gem "i18n_data", "~> 1.1"
gem "paper_trail", "~> 17.0"
diff --git a/Gemfile.lock b/Gemfile.lock
index 8435eea834..9c4aeacbab 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -33,29 +33,29 @@ GEM
GEM
remote: https://rubygems.org/
specs:
- actioncable (7.2.3)
- actionpack (= 7.2.3)
- activesupport (= 7.2.3)
+ actioncable (7.2.3.1)
+ actionpack (= 7.2.3.1)
+ activesupport (= 7.2.3.1)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
- actionmailbox (7.2.3)
- actionpack (= 7.2.3)
- activejob (= 7.2.3)
- activerecord (= 7.2.3)
- activestorage (= 7.2.3)
- activesupport (= 7.2.3)
+ actionmailbox (7.2.3.1)
+ actionpack (= 7.2.3.1)
+ activejob (= 7.2.3.1)
+ activerecord (= 7.2.3.1)
+ activestorage (= 7.2.3.1)
+ activesupport (= 7.2.3.1)
mail (>= 2.8.0)
- actionmailer (7.2.3)
- actionpack (= 7.2.3)
- actionview (= 7.2.3)
- activejob (= 7.2.3)
- activesupport (= 7.2.3)
+ actionmailer (7.2.3.1)
+ actionpack (= 7.2.3.1)
+ actionview (= 7.2.3.1)
+ activejob (= 7.2.3.1)
+ activesupport (= 7.2.3.1)
mail (>= 2.8.0)
rails-dom-testing (~> 2.2)
- actionpack (7.2.3)
- actionview (= 7.2.3)
- activesupport (= 7.2.3)
+ actionpack (7.2.3.1)
+ actionview (= 7.2.3.1)
+ activesupport (= 7.2.3.1)
cgi
nokogiri (>= 1.8.5)
racc
@@ -65,15 +65,15 @@ GEM
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
useragent (~> 0.16)
- actiontext (7.2.3)
- actionpack (= 7.2.3)
- activerecord (= 7.2.3)
- activestorage (= 7.2.3)
- activesupport (= 7.2.3)
+ actiontext (7.2.3.1)
+ actionpack (= 7.2.3.1)
+ activerecord (= 7.2.3.1)
+ activestorage (= 7.2.3.1)
+ activesupport (= 7.2.3.1)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
- actionview (7.2.3)
- activesupport (= 7.2.3)
+ actionview (7.2.3.1)
+ activesupport (= 7.2.3.1)
builder (~> 3.1)
cgi
erubi (~> 1.11)
@@ -89,22 +89,22 @@ GEM
active_utils (3.6.0)
activesupport (>= 4.2)
i18n
- activejob (7.2.3)
- activesupport (= 7.2.3)
+ activejob (7.2.3.1)
+ activesupport (= 7.2.3.1)
globalid (>= 0.3.6)
- activemodel (7.2.3)
- activesupport (= 7.2.3)
- activerecord (7.2.3)
- activemodel (= 7.2.3)
- activesupport (= 7.2.3)
+ activemodel (7.2.3.1)
+ activesupport (= 7.2.3.1)
+ activerecord (7.2.3.1)
+ activemodel (= 7.2.3.1)
+ activesupport (= 7.2.3.1)
timeout (>= 0.4.0)
- activestorage (7.2.3)
- actionpack (= 7.2.3)
- activejob (= 7.2.3)
- activerecord (= 7.2.3)
- activesupport (= 7.2.3)
+ activestorage (7.2.3.1)
+ actionpack (= 7.2.3.1)
+ activejob (= 7.2.3.1)
+ activerecord (= 7.2.3.1)
+ activesupport (= 7.2.3.1)
marcel (~> 1.0)
- activesupport (7.2.3)
+ activesupport (7.2.3.1)
base64
benchmark (>= 0.3)
bigdecimal
@@ -113,17 +113,17 @@ GEM
drb
i18n (>= 1.6, < 2)
logger (>= 1.4.2)
- minitest (>= 5.1)
+ minitest (>= 5.1, < 6)
securerandom (>= 0.3)
tzinfo (~> 2.0, >= 2.0.5)
- addressable (2.8.7)
- public_suffix (>= 2.0.2, < 7.0)
+ addressable (2.8.9)
+ public_suffix (>= 2.0.2, < 8.0)
ast (2.4.3)
autoprefixer-rails (10.4.16.0)
execjs (~> 2)
aws-eventstream (1.4.0)
- aws-partitions (1.1189.0)
- aws-sdk-core (3.239.2)
+ aws-partitions (1.1230.0)
+ aws-sdk-core (3.244.0)
aws-eventstream (~> 1, >= 1.3.0)
aws-partitions (~> 1, >= 1.992.0)
aws-sigv4 (~> 1.9)
@@ -131,24 +131,24 @@ GEM
bigdecimal
jmespath (~> 1, >= 1.6.1)
logger
- aws-sdk-kms (1.118.0)
- aws-sdk-core (~> 3, >= 3.239.1)
+ aws-sdk-kms (1.123.0)
+ aws-sdk-core (~> 3, >= 3.244.0)
aws-sigv4 (~> 1.5)
- aws-sdk-s3 (1.205.0)
- aws-sdk-core (~> 3, >= 3.234.0)
+ aws-sdk-s3 (1.217.0)
+ aws-sdk-core (~> 3, >= 3.244.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.5)
aws-sigv4 (1.12.1)
aws-eventstream (~> 1, >= 1.0.2)
- axe-core-api (4.11.0)
+ axe-core-api (4.11.1)
dumb_delegator
ostruct
virtus
- axe-core-capybara (4.11.0)
- axe-core-api (= 4.11.0)
+ axe-core-capybara (4.11.1)
+ axe-core-api (= 4.11.1)
dumb_delegator
- axe-core-rspec (4.11.0)
- axe-core-api (= 4.11.0)
+ axe-core-rspec (4.11.1)
+ axe-core-api (= 4.11.1)
dumb_delegator
ostruct
virtus
@@ -157,13 +157,13 @@ GEM
ice_nine (~> 0.11.0)
thread_safe (~> 0.3, >= 0.3.1)
base64 (0.3.0)
- bcrypt (3.1.20)
+ bcrypt (3.1.22)
benchmark (0.5.0)
better_errors (2.10.1)
erubi (>= 1.0.0)
rack (>= 0.9.0)
rouge (>= 1.0.0)
- bigdecimal (3.3.1)
+ bigdecimal (4.0.1)
bluecloth (2.2.0)
bonsai-elasticsearch-rails (7.0.1)
elasticsearch-model (< 8)
@@ -180,7 +180,8 @@ GEM
bullet (8.1.0)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
- byebug (12.0.0)
+ byebug (13.0.0)
+ reline (>= 0.6.0)
cancancan (3.6.1)
capybara (3.40.0)
addressable
@@ -194,7 +195,7 @@ GEM
capybara-email (3.0.2)
capybara (>= 2.4, < 4.0)
mail
- capybara-screenshot (1.0.26)
+ capybara-screenshot (1.0.27)
capybara (>= 1.0, < 4)
launchy
carrierwave (3.0.7)
@@ -204,9 +205,10 @@ GEM
image_processing (~> 1.1)
marcel (~> 1.0.0)
ssrf_filter (~> 1.0)
- cgi (0.5.0)
+ cgi (0.5.1)
chartkick (5.2.1)
- childprocess (5.0.0)
+ childprocess (5.1.0)
+ logger (~> 1.5)
coderay (1.1.3)
coercible (1.0.0)
descendants_tracker (~> 0.0.1)
@@ -219,7 +221,7 @@ GEM
coffee-script-source (1.12.2)
comfy_bootstrap_form (4.0.9)
rails (>= 5.0.0)
- concurrent-ruby (1.3.5)
+ concurrent-ruby (1.3.6)
connection_pool (2.5.5)
crass (1.0.6)
crowdin-api (1.12.0)
@@ -234,29 +236,30 @@ GEM
csv_shaper (1.4.0)
activesupport (>= 3.0.0)
csv
- dalli (3.2.8)
+ dalli (5.0.2)
+ logger
database_cleaner (2.1.0)
database_cleaner-active_record (>= 2, < 3)
database_cleaner-active_record (2.2.0)
activerecord (>= 5.a)
database_cleaner-core (~> 2.0.0)
database_cleaner-core (2.0.1)
- date (3.5.0)
+ date (3.5.1)
descendants_tracker (0.0.4)
thread_safe (~> 0.3, >= 0.3.1)
- devise (4.9.4)
+ devise (5.0.3)
bcrypt (~> 3.0)
orm_adapter (~> 0.1)
- railties (>= 4.1.0)
+ railties (>= 7.0)
responders
warden (~> 1.2.3)
diff-lcs (1.6.2)
discard (1.4.0)
activerecord (>= 4.2, < 9.0)
domain_name (0.6.20240107)
- dotenv (3.1.8)
- dotenv-rails (3.1.8)
- dotenv (= 3.1.8)
+ dotenv (3.2.0)
+ dotenv-rails (3.2.0)
+ dotenv (= 3.2.0)
railties (>= 6.1)
drb (2.2.3)
dumb_delegator (1.1.0)
@@ -273,30 +276,28 @@ GEM
elasticsearch-transport (7.0.0)
faraday
multi_json
- erb (6.0.0)
+ erb (6.0.2)
erubi (1.13.1)
- erubis (2.7.0)
- excon (1.2.5)
- logger
execjs (2.10.0)
factory_bot (6.5.5)
activesupport (>= 6.1.0)
factory_bot_rails (6.5.1)
factory_bot (~> 6.5)
railties (>= 6.1.0)
- faker (3.5.2)
+ faker (3.6.1)
i18n (>= 1.8.11, < 2)
- faraday (2.14.0)
+ faraday (2.14.1)
faraday-net_http (>= 2.0, < 3.5)
json
logger
- faraday-net_http (3.4.1)
- net-http (>= 0.5.0)
- ffi (1.16.3)
+ faraday-net_http (3.4.2)
+ net-http (~> 0.5)
+ ffi (1.17.3)
+ ffi (1.17.3-x86_64-linux-gnu)
flickraw (0.9.10)
font-awesome-sass (5.15.1)
sassc (>= 1.11)
- friendly_id (5.5.1)
+ friendly_id (5.6.0)
activerecord (>= 4.0.0)
gbifrb (0.2.0)
geocoder (1.8.6)
@@ -312,7 +313,7 @@ GEM
gravatar-ultimate (2.0.0)
activesupport (>= 2.3.14)
rack
- haml (7.0.2)
+ haml (7.2.0)
temple (>= 0.8.2)
thor
tilt
@@ -321,30 +322,24 @@ GEM
activesupport (>= 5.1)
haml (>= 4.0.6)
railties (>= 5.1)
- haml_lint (0.67.0)
+ haml_lint (0.72.0)
haml (>= 5.0)
parallel (~> 1.10)
rainbow
rubocop (>= 1.0)
sysexits (~> 1.1)
- hashie (5.0.0)
- heroics (0.1.3)
- base64
- erubis (~> 2.0)
- excon
- moneta
- multi_json (>= 1.9.2)
- webrick
+ hashie (5.1.0)
+ logger
highline (3.1.2)
reline
http-accept (1.7.0)
http-cookie (1.0.8)
domain_name (~> 0.5)
- httparty (0.22.0)
+ httparty (0.24.0)
csv
mini_mime (>= 1.0.0)
multi_xml (>= 0.5.2)
- i18n (1.14.7)
+ i18n (1.14.8)
concurrent-ruby (~> 1.0)
i18n-tasks (1.1.2)
activesupport (>= 4.0.2)
@@ -360,7 +355,7 @@ GEM
terminal-table (>= 1.5.1)
i18n_data (1.1.0)
simple_po_parser (~> 1.1)
- icalendar (2.12.1)
+ icalendar (2.12.2)
base64
ice_cube (~> 0.16)
logger
@@ -370,9 +365,10 @@ GEM
image_processing (1.12.2)
mini_magick (>= 4.9.5, < 5)
ruby-vips (>= 2.0.17, < 3)
- io-console (0.8.1)
- irb (1.15.3)
+ io-console (0.8.2)
+ irb (1.17.0)
pp (>= 0.6.0)
+ prism (>= 1.3.0)
rdoc (>= 4.0.0)
reline (>= 0.4.2)
jmespath (1.6.2)
@@ -380,10 +376,10 @@ GEM
rails-dom-testing (>= 1, < 3)
railties (>= 4.2.0)
thor (>= 0.14, < 2.0)
- json (2.16.0)
- json-schema (6.0.0)
+ json (2.19.2)
+ json-schema (6.2.0)
addressable (~> 2.8)
- bigdecimal (~> 3.1)
+ bigdecimal (>= 3.1, < 5)
jsonapi-resources (0.10.7)
activerecord (>= 4.1)
concurrent-ruby
@@ -393,20 +389,22 @@ GEM
kramdown (2.4.0)
rexml
language_server-protocol (3.17.0.5)
- launchy (3.0.1)
+ launchy (3.1.1)
addressable (~> 2.8)
childprocess (~> 5.0)
+ logger (~> 1.6)
leaflet-rails (1.9.5)
actionpack (>= 4.2.0)
railties (>= 4.2.0)
letter_opener (1.10.0)
launchy (>= 2.2, < 4)
lint_roller (1.1.0)
- listen (3.9.0)
+ listen (3.10.0)
+ logger
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
logger (1.7.0)
- loofah (2.24.1)
+ loofah (2.25.1)
crass (~> 1.0.2)
nokogiri (>= 1.12.0)
mail (2.9.0)
@@ -424,7 +422,7 @@ GEM
sass (>= 3.5.2)
material_icons (4.0.0)
railties (>= 3.2)
- matrix (0.4.2)
+ matrix (0.4.3)
memcachier (0.0.2)
method_source (1.1.0)
mime-types (3.7.0)
@@ -437,14 +435,13 @@ GEM
mini_magick (4.12.0)
mini_mime (1.1.5)
mini_portile2 (2.8.9)
- minitest (5.26.2)
- moneta (1.0.0)
+ minitest (5.27.0)
msgpack (1.8.0)
- multi_json (1.15.0)
- multi_xml (0.7.1)
- bigdecimal (~> 3.1)
- net-http (0.6.0)
- uri
+ multi_json (1.19.1)
+ multi_xml (0.8.1)
+ bigdecimal (>= 3.1, < 5)
+ net-http (0.9.1)
+ uri (>= 0.11.1)
net-imap (0.5.12)
date
net-protocol
@@ -456,13 +453,13 @@ GEM
net-protocol
netrc (0.11.0)
nio4r (2.7.5)
- nokogiri (1.18.10)
+ nokogiri (1.19.2)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
- nokogiri (1.18.10-x86_64-linux-gnu)
+ nokogiri (1.19.2-x86_64-linux-gnu)
racc (~> 1.4)
oauth (0.5.6)
- oj (3.16.12)
+ oj (3.16.16)
bigdecimal (>= 3.0)
ostruct (>= 0.2)
omniauth (1.9.2)
@@ -481,34 +478,31 @@ GEM
activerecord (>= 7.1)
request_store (~> 1.4)
parallel (1.27.0)
- parser (3.3.10.0)
+ parser (3.3.10.2)
ast (~> 2.4.1)
racc
percy-capybara (5.0.0)
capybara (>= 3)
- pg (1.6.2)
- pg (1.6.2-x86_64-linux)
- platform-api (3.8.0)
- heroics (~> 0.1.1)
- moneta (~> 1.0.0)
- rate_throttle_client (~> 0.1.0)
+ pg (1.6.3)
+ pg (1.6.3-x86_64-linux)
popper_js (2.11.8)
pp (0.6.3)
prettyprint
prettyprint (0.2.0)
- prism (1.6.0)
- pry (0.15.2)
+ prism (1.9.0)
+ pry (0.16.0)
coderay (~> 1.1)
method_source (~> 1.0)
- psych (5.2.6)
+ reline (>= 0.6.0)
+ psych (5.3.1)
date
stringio
- public_suffix (6.0.2)
- puma (7.1.0)
+ public_suffix (7.0.5)
+ puma (7.2.0)
nio4r (~> 2.0)
query_diet (0.7.3)
racc (1.8.1)
- rack (2.2.21)
+ rack (2.2.22)
rack-cors (2.0.2)
rack (>= 2.0.0)
rack-protection (3.2.0)
@@ -521,20 +515,20 @@ GEM
rackup (1.0.1)
rack (< 3)
webrick
- rails (7.2.3)
- actioncable (= 7.2.3)
- actionmailbox (= 7.2.3)
- actionmailer (= 7.2.3)
- actionpack (= 7.2.3)
- actiontext (= 7.2.3)
- actionview (= 7.2.3)
- activejob (= 7.2.3)
- activemodel (= 7.2.3)
- activerecord (= 7.2.3)
- activestorage (= 7.2.3)
- activesupport (= 7.2.3)
+ rails (7.2.3.1)
+ actioncable (= 7.2.3.1)
+ actionmailbox (= 7.2.3.1)
+ actionmailer (= 7.2.3.1)
+ actionpack (= 7.2.3.1)
+ actiontext (= 7.2.3.1)
+ actionview (= 7.2.3.1)
+ activejob (= 7.2.3.1)
+ activemodel (= 7.2.3.1)
+ activerecord (= 7.2.3.1)
+ activestorage (= 7.2.3.1)
+ activesupport (= 7.2.3.1)
bundler (>= 1.15.0)
- railties (= 7.2.3)
+ railties (= 7.2.3.1)
rails-controller-testing (1.0.5)
actionpack (>= 5.0.1.rc1)
actionview (>= 5.0.1.rc1)
@@ -543,8 +537,8 @@ GEM
activesupport (>= 5.0.0)
minitest
nokogiri (>= 1.6)
- rails-html-sanitizer (1.6.2)
- loofah (~> 2.21)
+ rails-html-sanitizer (1.7.0)
+ loofah (~> 2.25)
nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0)
rails-i18n (7.0.10)
i18n (>= 0.7, < 2)
@@ -554,9 +548,9 @@ GEM
rails_stdout_logging
rails_serve_static_assets (0.0.5)
rails_stdout_logging (0.0.5)
- railties (7.2.3)
- actionpack (= 7.2.3)
- activesupport (= 7.2.3)
+ railties (7.2.3.1)
+ actionpack (= 7.2.3.1)
+ activesupport (= 7.2.3.1)
cgi
irb (~> 1.13)
rackup (>= 1.0.0)
@@ -567,16 +561,15 @@ GEM
rainbow (3.1.1)
raindrops (0.20.1)
rake (13.3.1)
- rate_throttle_client (0.1.2)
rb-fsevent (0.11.2)
- rb-inotify (0.10.1)
+ rb-inotify (0.11.1)
ffi (~> 1.0)
- rdoc (6.16.1)
+ rdoc (7.2.0)
erb
psych (>= 4.0.0)
tsort
recaptcha (5.21.1)
- redis-client (0.23.2)
+ redis-client (0.26.2)
connection_pool
regexp_parser (2.11.3)
reline (0.6.3)
@@ -606,20 +599,20 @@ GEM
rspec-expectations (3.13.5)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
- rspec-mocks (3.13.5)
+ rspec-mocks (3.13.8)
diff-lcs (>= 1.2.0, < 2.0)
rspec-support (~> 3.13.0)
- rspec-rails (8.0.2)
+ rspec-rails (8.0.4)
actionpack (>= 7.2)
activesupport (>= 7.2)
railties (>= 7.2)
- rspec-core (~> 3.13)
- rspec-expectations (~> 3.13)
- rspec-mocks (~> 3.13)
- rspec-support (~> 3.13)
+ rspec-core (>= 3.13.0, < 5.0.0)
+ rspec-expectations (>= 3.13.0, < 5.0.0)
+ rspec-mocks (>= 3.13.0, < 5.0.0)
+ rspec-support (>= 3.13.0, < 5.0.0)
rspec-rebound (0.2.1)
rspec-core (~> 3.3)
- rspec-support (3.13.6)
+ rspec-support (3.13.7)
rspectre (0.2.0)
parser (>= 3.3.7.1)
prism (~> 1.3)
@@ -635,7 +628,7 @@ GEM
rswag-ui (2.17.0)
actionpack (>= 5.2, < 8.2)
railties (>= 5.2, < 8.2)
- rubocop (1.81.7)
+ rubocop (1.86.0)
json (~> 2.3)
language_server-protocol (~> 3.17.0.2)
lint_roller (~> 1.1.0)
@@ -643,19 +636,19 @@ GEM
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 2.9.3, < 3.0)
- rubocop-ast (>= 1.47.1, < 2.0)
+ rubocop-ast (>= 1.49.0, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 4.0)
- rubocop-ast (1.48.0)
+ rubocop-ast (1.49.1)
parser (>= 3.3.7.2)
- prism (~> 1.4)
+ prism (~> 1.7)
rubocop-capybara (2.22.1)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
rubocop-factory_bot (2.28.0)
lint_roller (~> 1.1)
rubocop (~> 1.72, >= 1.72.1)
- rubocop-rails (2.34.2)
+ rubocop-rails (2.34.3)
activesupport (>= 4.2.0)
lint_roller (~> 1.1)
rack (>= 1.1)
@@ -664,7 +657,7 @@ GEM
rubocop-rake (0.7.1)
lint_roller (~> 1.1)
rubocop (>= 1.72.1)
- rubocop-rspec (3.8.0)
+ rubocop-rspec (3.9.0)
lint_roller (~> 1.1)
rubocop (~> 1.81)
rubocop-rspec_rails (2.32.0)
@@ -675,7 +668,7 @@ GEM
ruby-units (4.1.0)
ruby-vips (2.2.1)
ffi (~> 1.12)
- rubyzip (3.2.1)
+ rubyzip (3.2.2)
sass (3.7.4)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
@@ -689,24 +682,24 @@ GEM
sprockets (> 3.0)
sprockets-rails
tilt
- scout_apm (5.8.0)
+ scout_apm (6.1.1)
parser
searchkick (5.3.1)
activemodel (>= 6.1)
hashie
securerandom (0.4.1)
- selenium-webdriver (4.38.0)
+ selenium-webdriver (4.41.0)
base64 (~> 0.2)
logger (~> 1.4)
rexml (~> 3.2, >= 3.2.5)
rubyzip (>= 1.2.2, < 4.0)
websocket (~> 1.0)
- sidekiq (7.3.9)
+ sidekiq (7.3.10)
base64
- connection_pool (>= 2.3.0)
+ connection_pool (>= 2.3.0, < 3)
logger
- rack (>= 2.2.4)
- redis-client (>= 0.22.2)
+ rack (>= 2.2.4, < 3.3)
+ redis-client (>= 0.23.0, < 1)
simple_po_parser (1.1.6)
sitemap_generator (6.3.0)
builder (~> 3.0)
@@ -719,35 +712,34 @@ GEM
activesupport (>= 5.2)
sprockets (>= 3.0.0)
ssrf_filter (1.1.2)
- stringio (3.1.8)
+ stringio (3.2.0)
sysexits (1.2.0)
temple (0.10.4)
terminal-table (4.0.0)
unicode-display_width (>= 1.1.1, < 4)
- terser (1.2.6)
+ terser (1.2.7)
execjs (>= 0.3.0, < 3)
- thor (1.4.0)
+ thor (1.5.0)
thread_safe (0.3.6)
- tilt (2.6.1)
+ tilt (2.7.0)
timecop (0.9.10)
- timeout (0.4.4)
+ timeout (0.5.0)
tsort (0.2.0)
tzinfo (2.0.6)
concurrent-ruby (~> 1.0)
unicode-display_width (3.2.0)
unicode-emoji (~> 4.1)
- unicode-emoji (4.1.0)
+ unicode-emoji (4.2.0)
unicorn (6.1.0)
kgio (~> 2.6)
raindrops (~> 0.7)
uniform_notifier (1.18.0)
- uri (1.0.3)
+ uri (1.1.1)
useragent (0.16.11)
validate_url (1.0.15)
activemodel (>= 3.0.0)
public_suffix
- vcr (6.3.1)
- base64
+ vcr (6.4.0)
virtus (2.0.0)
axiom-types (~> 0.1)
coercible (~> 1.0)
@@ -771,7 +763,7 @@ GEM
webrick
xpath (3.2.0)
nokogiri (~> 1.8)
- zeitwerk (2.7.3)
+ zeitwerk (2.7.5)
PLATFORMS
ruby
@@ -800,6 +792,7 @@ DEPENDENCIES
chartkick
coffee-rails
comfortable_mexican_sofa!
+ connection_pool (< 3)
crowdin-cli
csv_shaper
dalli
@@ -844,7 +837,6 @@ DEPENDENCIES
paper_trail (~> 17.0)
percy-capybara (~> 5.0.0)
pg
- platform-api
pry
puma
query_diet
@@ -890,7 +882,7 @@ DEPENDENCIES
xmlrpc
RUBY VERSION
- ruby 3.3.8p144
+ ruby 3.4.8p72
BUNDLED WITH
2.4.22
diff --git a/app/assets/images/girlwithvegetables-0038331hotifw.svg b/app/assets/images/girlwithvegetables-0038331hotifw.svg
new file mode 100644
index 0000000000..c5c5235540
--- /dev/null
+++ b/app/assets/images/girlwithvegetables-0038331hotifw.svg
@@ -0,0 +1,835 @@
+
+
+
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index d8d75004d7..eeab02610c 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -33,4 +33,4 @@
@view-transition {
navigation: auto;
-}
\ No newline at end of file
+}
diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb
index e5ff4d06b2..29fb49445c 100644
--- a/app/controllers/home_controller.rb
+++ b/app/controllers/home_controller.rb
@@ -10,4 +10,6 @@ def index
# the relevant class methods directly in the view, so that fragment
# caching will be effective.
end
+
+ def community_gardens; end
end
diff --git a/app/models/concerns/search_harvests.rb b/app/models/concerns/search_harvests.rb
index 8d6a5825fa..f1d18cbcf5 100644
--- a/app/models/concerns/search_harvests.rb
+++ b/app/models/concerns/search_harvests.rb
@@ -53,7 +53,9 @@ def self.homepage_records(limit)
owners = []
1..limit.times do
where = {
- photos_count: { gt: 0 },
+ # 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('*',
diff --git a/app/models/concerns/search_plantings.rb b/app/models/concerns/search_plantings.rb
index 0900f7e9b5..b44bb6ee3f 100644
--- a/app/models/concerns/search_plantings.rb
+++ b/app/models/concerns/search_plantings.rb
@@ -66,7 +66,9 @@ def self.homepage_records(limit)
owners = []
1..limit.times do
where = {
- photos_count: { gt: 0 },
+ # 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('*',
diff --git a/app/views/crops/show.html.haml b/app/views/crops/show.html.haml
index a43d19f5d8..0cde256ea8 100644
--- a/app/views/crops/show.html.haml
+++ b/app/views/crops/show.html.haml
@@ -1,5 +1,8 @@
= render 'schema_org', crop: @crop
-- content_for :title, @crop.name
+- content_for :title do
+ = @crop.name.titleize
+ - if @crop.default_scientific_name.present?
+ = " (#{@crop.default_scientific_name})"
- content_for :meta_description do
- if @crop.description.present?
= @crop.description
diff --git a/app/views/home/community_gardens.html.haml b/app/views/home/community_gardens.html.haml
new file mode 100644
index 0000000000..b974c770fb
--- /dev/null
+++ b/app/views/home/community_gardens.html.haml
@@ -0,0 +1,37 @@
+- content_for :title do
+ = t('community_gardens.title')
+- content_for :meta_description do
+ = t('community_gardens.meta_description')
+
+
+
+.container.mt-5
+
+ .row
+ .col-lg-6.col-sm-12
+ .row
+ %h1.display-4= t('community_gardens.header')
+ %p.lead= t('community_gardens.lead')
+ .row
+ %h2= t('community_gardens.features_title')
+ %ul
+ %li Track all your plantings and harvests
+ %li Keep notes your community's progress
+ %li Add collaborators to your garden plots
+ %li See what other community gardens are growing
+ %li Get advice and support from our community of gardeners
+
+ .row
+ %h2= t('community_gardens.get_started')
+ %p= t('community_gardens.get_started_text')
+ %p
+ = link_to t('.sign_up'), new_member_registration_path, class: 'btn btn-success btn-lg'
+ .row
+ %h2= t('community_gardens.collaborate')
+ %p= t('community_gardens.collaborate_text')
+ %p
+ = link_to t('community_gardens.learn_more'), gardens_path, class: 'btn btn-info btn-lg'
+
+ .col-lg-6.d-lg-block.d-xs-none
+ .container
+ =image_tag("girlwithvegetables-0038331hotifw.svg", width: "100%")
\ No newline at end of file
diff --git a/app/views/layouts/_menu.haml b/app/views/layouts/_menu.haml
index 17a70150d1..c93c340975 100644
--- a/app/views/layouts/_menu.haml
+++ b/app/views/layouts/_menu.haml
@@ -52,6 +52,7 @@
.dropdown-menu{"aria-labelledby" => "navbarDropdown"}
= link_to t('.community_map'), places_path, class: 'dropdown-item'
= link_to t('.browse_members'), members_path, class: 'dropdown-item'
+ = link_to t('.community_gardens'), community_gardens_path, class: 'dropdown-item'
= link_to t('.posts'), posts_path, class: 'dropdown-item'
= link_to t('.forums'), forums_path, class: 'dropdown-item'
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 355add24ea..d0a141d107 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -219,6 +219,18 @@ en:
pwa_ios_steps_html: 1. Tap the Share button in Safari.
2. Scroll down and tap Add to Home Screen'.
pwa_ios_title: For iOS (iPhone/iPad)
pwa_title: Want to install Growstuff on your phone?
+ community_gardens:
+ title: Community Gardens on Growstuff
+ meta_description: Manage your community garden, track your plantings, and collaborate with other gardeners.
+ header: Community Gardens
+ lead: Growstuff is open source and the perfect place to manage your community garden. Track your plantings, celebrate your harvests, and collaborate with your fellow gardeners, all in one place.
+ get_started: Get Started Today
+ get_started_text: Signing up for Growstuff is free and easy. Create an account to start tracking your garden today.
+ sign_up: Sign up for free
+ collaborate: Collaborate with Your Team
+ collaborate_text: Invite other gardeners to collaborate on your garden plots. Share the work, share the harvest, and grow together as a community.
+ learn_more: Learn more about gardens
+ features_title: Features for Community Gardens
label:
days_until_harvest: "%{number} days"
weeks_until_harvest: "%{number} weeks until harvest"
@@ -235,6 +247,7 @@ en:
browse_members: Browse Members
community: Community
community_map: Community Map
+ community_gardens: Community Gardens
garden_type: Garden Type
garden_types: Garden Types
crop_wrangling: Crop Wrangling
diff --git a/config/routes.rb b/config/routes.rb
index 64266b4f82..343226f46b 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -23,6 +23,7 @@
resources :authentications, only: %i(create destroy)
get "home/index"
+ get '/community-gardens', to: 'home#community_gardens'
root to: 'home#index'
concern :has_photos do
diff --git a/spec/features/admin/forums_spec.rb b/spec/features/admin/forums_spec.rb
index 0fe6e61d26..376533e9a5 100644
--- a/spec/features/admin/forums_spec.rb
+++ b/spec/features/admin/forums_spec.rb
@@ -29,8 +29,10 @@
click_button 'Save'
end
- it { expect(page).to have_current_path forum_path(Forum.last), ignore_query: true }
- it { expect(page).to have_content 'Forum was successfully created' }
+ it 'saves' do
+ expect(page).to have_content 'Forum was successfully created'
+ expect(page).to have_current_path forum_path(Forum.last), ignore_query: true
+ end
end
describe 'editing forum' do
diff --git a/spec/features/admin/plant_parts_spec.rb b/spec/features/admin/plant_parts_spec.rb
index 300929982e..9d1c02e5fc 100644
--- a/spec/features/admin/plant_parts_spec.rb
+++ b/spec/features/admin/plant_parts_spec.rb
@@ -28,8 +28,10 @@
click_button 'Save'
end
- it { expect(page).to have_current_path plant_part_path(PlantPart.last), ignore_query: true }
- it { expect(page).to have_content 'Plant part was successfully created' }
+ it 'saves' do
+ expect(page).to have_content 'Plant part was successfully created'
+ expect(page).to have_current_path plant_part_path(PlantPart.last), ignore_query: true
+ end
end
describe 'editing plant part' do
diff --git a/spec/features/signup_spec.rb b/spec/features/signup_spec.rb
index 68ba750a44..a0ecbf8076 100644
--- a/spec/features/signup_spec.rb
+++ b/spec/features/signup_spec.rb
@@ -16,22 +16,15 @@
end
it "sign up for new account with existing username" do
- visit crops_path # something other than front page, which has multiple signup links
- click_link 'Sign up'
+ create(:member, login_name: 'person123')
+ visit new_member_registration_path
fill_in 'Login name', with: 'person123'
- fill_in 'Email', with: 'gardener@example.com'
- fill_in 'Password', with: 'abc123'
- fill_in 'Password confirmation', with: 'abc123'
- check 'member_tos_agreement'
- click_button 'Sign up'
- expect(page).to have_current_path root_path, ignore_query: true
- first('.signup a').click # click the 'Sign up' button in the middle of the page
- fill_in 'Login name', with: 'person123'
- fill_in 'Email', with: 'gardener@example.com'
+ fill_in 'Email', with: 'gardener2@example.com'
fill_in 'Password', with: 'abc123'
fill_in 'Password confirmation', with: 'abc123'
check 'member_tos_agreement'
click_button 'Sign up'
+ expect(page).to have_content 'has already been taken'
end
it "sign up for new account without accepting TOS" do
diff --git a/spec/models/planting_spec.rb b/spec/models/planting_spec.rb
index 278417ba81..263f1510bb 100644
--- a/spec/models/planting_spec.rb
+++ b/spec/models/planting_spec.rb
@@ -605,7 +605,7 @@ def one_hundred_day_old_planting
before { described_class.reindex }
- it { expect(subject.count).to eq 2 }
- it { expect(subject.map(&:id)).to eq([interesting_planting.id.to_s, finished_interesting_planting.id.to_s]) }
+ 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]) }
end
end
diff --git a/yarn.lock b/yarn.lock
index d5232f2b33..fce99025fe 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1067,9 +1067,9 @@ locate-path@^5.0.0:
p-locate "^4.1.0"
lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@~4.17.21:
- version "4.17.21"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
- integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+ version "4.17.23"
+ resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a"
+ integrity sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==
mdbootstrap@^4.20.0:
version "4.20.0"
@@ -1294,9 +1294,9 @@ pend@~1.2.0:
integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=
picomatch@^2.3.0, picomatch@^2.3.1:
- version "2.3.1"
- resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
- integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
+ version "2.3.2"
+ resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.2.tgz#5a942915e26b372dc0f0e6753149a16e6b1c5601"
+ integrity sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==
prelude-ls@~1.1.2:
version "1.1.2"