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"