Compare commits

..

41 Commits

Author SHA1 Message Date
Daniel O'Connor
bb8014a231 Allow edit of more attributes 2024-07-14 04:55:26 +00:00
Daniel O'Connor
c189fa94a7 Allow edit of more attributes 2024-07-14 04:55:13 +00:00
Daniel O'Connor
aba09679e0 Merge pull request #3797 from Growstuff/bump-raindrops
Bump raindrops, fix permissions on container start
2024-07-13 17:49:42 +09:30
Daniel O'Connor
9eff9150f6 Merge pull request #3796 from Growstuff/bump-http-party
Bump http party
2024-07-13 17:49:31 +09:30
Daniel O'Connor
10a32686c6 Merge branch 'dev' into bump-http-party 2024-07-13 17:20:06 +09:30
Daniel O'Connor
8fe65768d0 Bump raindrops, fix permissions on container start 2024-07-13 07:48:56 +00:00
Daniel O'Connor
470e2d554e Merge pull request #3795 from Growstuff/bump-launchy
Bump launchy
2024-07-13 17:09:09 +09:30
Daniel O'Connor
e952ca6c4c Merge pull request #3794 from Growstuff/bump-factory-bot
Bump Factory Bot
2024-07-13 17:06:35 +09:30
Daniel O'Connor
ee1c4fc79c Bump http party 2024-07-13 07:32:00 +00:00
dependabot[bot]
c80c1c4758 Merge pull request #3792 from Growstuff/dependabot/bundler/rubocop-rspec-3.0.3 2024-07-13 07:22:34 +00:00
Daniel O'Connor
3d3f97f0bf Bump launchy 2024-07-13 07:22:24 +00:00
Daniel O'Connor
961d36c57d Bump 2024-07-13 07:19:43 +00:00
dependabot[bot]
6a2d21d80b Bump rubocop-rspec from 3.0.2 to 3.0.3
Bumps [rubocop-rspec](https://github.com/rubocop/rubocop-rspec) from 3.0.2 to 3.0.3.
- [Release notes](https://github.com/rubocop/rubocop-rspec/releases)
- [Changelog](https://github.com/rubocop/rubocop-rspec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rspec/compare/v3.0.2...v3.0.3)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-13 07:07:52 +00:00
Daniel O'Connor
93b63284b7 Merge pull request #3791 from Growstuff/bump-bullet
Bump bullet
2024-07-13 16:36:48 +09:30
Daniel O'Connor
7cd1f503f2 Merge pull request #3790 from Growstuff/websocket
Bump websocket
2024-07-13 16:33:07 +09:30
Daniel O'Connor
25f63a7708 Merge pull request #3788 from Growstuff/rails-71
Rubocop: Rails 7.1
2024-07-13 16:24:33 +09:30
Daniel O'Connor
e46b3f8d19 Update dependabot.yml 2024-07-13 16:22:45 +09:30
Daniel O'Connor
f04f8a9201 Bump bullet 2024-07-13 06:48:09 +00:00
Daniel O'Connor
10e456a18d Bump websocket 2024-07-13 06:44:10 +00:00
Daniel O'Connor
7e2be8efd9 Rubocop Rails 7.1 2024-07-13 06:29:08 +00:00
Daniel O'Connor
5ba25b8e76 Rubocop Rails 7.1 2024-07-13 06:28:30 +00:00
Daniel O'Connor
826f92691a Trial Ruby 3.3.* (#3778)
* Ruby 3.3

* Upgrade.
2024-07-13 15:42:51 +09:30
Daniel O'Connor
81060cccf7 Ruby 3.2: Rubocop - Lint/* and Style/* (#3786)
* Rubocop - Layout/*
* Rubocop - Lint and Style
2024-07-13 15:38:37 +09:30
Daniel O'Connor
8b4f0771c5 Ruby 3.2: Rubocop - Fix Negation matcher (#3780)
* Ruby 3.2/Bundler 2.4

* Fix creation

* Upgrade to js-routes 2. Put all js routes into a global namespace.

* Remove js-routes

* Remove

* Adjust ownership

* Appease codeclimate for the nth time

* Fix deprecation warning by explicitly calling to_fs

* Fix deprecation warning by explicitly calling to_fs

* Fix deprecation warning by explicitly calling to_fs

* Swap to will paginate successor for bootstrap

* Update app/views/members/show.html.haml

* Update app/views/plantings/index.rss.haml

* Update .env

* Update .devcontainer/.env

* Fix spec

* Update spec

* Fix spec

* Pin to 2.4.22

* 3 space indent

* Regenerate

* Update rubocop

* Rubocop

* More rubocop

* Regenerate

* Fix Capybara/NegationMatcher
2024-07-13 15:20:11 +09:30
Daniel O'Connor
4f5c47ba58 Ruby 3.2: Rubocop - Layout/* (#3785)
* Rubocop - Layout/*

* Regenerate
2024-07-13 15:19:09 +09:30
Daniel O'Connor
d542326047 Ruby 3.2: Rubocop - Rails/FilePath (#3783)
* Rails/FilePath
2024-07-13 15:13:56 +09:30
Daniel O'Connor
e69467f056 Ruby 3.2: Rubocop - RSpec/excessive docstring spacing (#3782)
* RSpec/ExcessiveDocstringSpacing
2024-07-13 15:12:56 +09:30
Daniel O'Connor
1176d18918 Ruby 3.2: Rubocop - Fix Lint/symbol conversion (#3781)
* Lint/SymbolConversion: Unnecessary symbol conversion; use error: instead.
2024-07-13 15:11:49 +09:30
Daniel O'Connor
78fee52f17 Ruby 3.2: Upgrade Rubocop and add more rubocop helpers (#3779)
* Ruby 3.2/Bundler 2.4

* Fix creation

* Upgrade to js-routes 2. Put all js routes into a global namespace.

* Remove js-routes

* Remove

* Adjust ownership

* Appease codeclimate for the nth time

* Fix deprecation warning by explicitly calling to_fs

* Fix deprecation warning by explicitly calling to_fs

* Fix deprecation warning by explicitly calling to_fs

* Swap to will paginate successor for bootstrap

* Update app/views/members/show.html.haml

* Update app/views/plantings/index.rss.haml

* Update .env

* Update .devcontainer/.env

* Fix spec

* Update spec

* Fix spec

* Pin to 2.4.22

* 3 space indent

* Regenerate

* Update rubocop

* Rubocop

* More rubocop

* Regenerate

* Fix config file
2024-07-13 15:09:32 +09:30
Daniel O'Connor
000f4979db Trial Ruby32 (#3418)
* Ruby 3.2/Bundler 2.4

* Fix creation

* Upgrade to js-routes 2. Put all js routes into a global namespace.

* Remove js-routes

* Remove

* Adjust ownership

* Appease codeclimate for the nth time

* Fix deprecation warning by explicitly calling to_fs

* Fix deprecation warning by explicitly calling to_fs

* Fix deprecation warning by explicitly calling to_fs

* Swap to will paginate successor for bootstrap

* Update app/views/members/show.html.haml

* Update app/views/plantings/index.rss.haml

* Update .env

* Update .devcontainer/.env

* Fix spec

* Update spec

* Fix spec

* Pin to 2.4.22

* 3 space indent

* Regenerate

* Update rubocop
2024-07-13 14:45:33 +09:30
dependabot[bot]
f76258dcab Merge pull request #3776 from Growstuff/dependabot/bundler/rubocop-1.65.0 2024-07-13 04:26:20 +00:00
dependabot[bot]
c3b79d1d3f Bump rubocop from 1.64.1 to 1.65.0
Bumps [rubocop](https://github.com/rubocop/rubocop) from 1.64.1 to 1.65.0.
- [Release notes](https://github.com/rubocop/rubocop/releases)
- [Changelog](https://github.com/rubocop/rubocop/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop/compare/v1.64.1...v1.65.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-11 07:34:17 +00:00
dependabot[bot]
fa78997d8c Merge pull request #3775 from Growstuff/dependabot/bundler/faraday-2.10.0 2024-07-10 09:31:04 +00:00
dependabot[bot]
b05efe8e8f Bump faraday from 2.9.2 to 2.10.0
Bumps [faraday](https://github.com/lostisland/faraday) from 2.9.2 to 2.10.0.
- [Release notes](https://github.com/lostisland/faraday/releases)
- [Changelog](https://github.com/lostisland/faraday/blob/main/CHANGELOG.md)
- [Commits](https://github.com/lostisland/faraday/compare/v2.9.2...v2.10.0)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-09 07:31:45 +00:00
dependabot[bot]
8906454323 Merge pull request #3774 from Growstuff/dependabot/bundler/rubocop-rspec-3.0.2 2024-07-04 06:05:51 +00:00
dependabot[bot]
dfa81aeaf2 Bump rubocop-rspec from 3.0.1 to 3.0.2
Bumps [rubocop-rspec](https://github.com/rubocop/rubocop-rspec) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/rubocop/rubocop-rspec/releases)
- [Changelog](https://github.com/rubocop/rubocop-rspec/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rubocop/rubocop-rspec/compare/v3.0.1...v3.0.2)

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

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-03 07:30:28 +00:00
Daniel O'Connor
436c2305b3 Merge pull request #3773 from Growstuff/CloCkWeRX-patch-1
Update garden.rb
2024-07-02 23:08:46 +09:30
Daniel O'Connor
57f1fd34c9 Update garden.rb 2024-07-02 23:08:29 +09:30
Daniel O'Connor
c1dc3cc4c0 Merge pull request #3772 from Growstuff/CloCkWeRX-patch-1
Update predict_planting.rb
2024-07-02 23:08:04 +09:30
Daniel O'Connor
067fb1671b Update predict_planting.rb 2024-07-02 23:07:48 +09:30
Daniel O'Connor
fa6df64221 Update garden.rb 2024-07-02 22:42:35 +09:30
102 changed files with 429 additions and 492 deletions

View File

@@ -1,2 +1,2 @@
# Ruby version
VARIANT=3.1.4
VARIANT=3.3.4

View File

@@ -1,4 +1,4 @@
FROM mcr.microsoft.com/devcontainers/ruby:0-3.1-bullseye
FROM mcr.microsoft.com/devcontainers/ruby:1-3.3-bullseye
# Install Rails
RUN gem install rails:7.0.8
@@ -24,3 +24,10 @@ RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
# [Optional] Uncomment this line to install global node packages.
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1
# We run as the vscode user.
# Make sure this is writable as https://github.com/rubygems/rubygems/issues/6272 was removed
RUN su root -c "mkdir -p /usr/local/rvm/gems/default/cache/bundler/"
RUN su root -c "mkdir -p /usr/local/rvm/gems/default/bundler/gems/"
RUN su root -c "chown -R vscode:rvm /usr/local/rvm/gems/"
RUN su root -c "chmod -R 0755 /usr/local/rvm/gems/"

View File

@@ -7,50 +7,6 @@ updates:
time: "07:00"
open-pull-requests-limit: 20
versioning-strategy: lockfile-only
ignore:
- dependency-name: active_median
versions:
- "< 0.2.2, >= 0.2.1.a"
- dependency-name: rubocop
versions:
- "< 0.63, >= 0.62.a"
- dependency-name: rubocop
versions:
- "< 0.64, >= 0.63.a"
- dependency-name: sidekiq
versions:
- 5.2.4
- dependency-name: oj
versions:
- 3.11.4
- dependency-name: listen
versions:
- 3.5.0
- dependency-name: rspec-rails
versions:
- 4.1.0
- 5.0.0
- dependency-name: searchkick
versions:
- 4.4.3
- dependency-name: rswag-api
versions:
- 2.3.3
- dependency-name: rswag-specs
versions:
- 2.3.3
- dependency-name: rswag-ui
versions:
- 2.3.3
- dependency-name: timecop
versions:
- 0.9.3
- dependency-name: puma
versions:
- 5.2.0
- dependency-name: capybara
versions:
- 3.35.1
- package-ecosystem: github-actions
directory: "/"
schedule:

View File

@@ -1,13 +1,17 @@
inherit_from: .rubocop_todo.yml
require:
- rubocop-factory_bot
- rubocop-capybara
- rubocop-rails
- rubocop-rspec
- rubocop-rspec_rails
- rubocop-rake
AllCops:
NewCops: enable
Exclude:
- 'db/schema.rb'
- 'vendor/**/*'
TargetRailsVersion: 7.0
TargetRailsVersion: 7.1
Rails:
Enabled: true

View File

@@ -1,15 +1,37 @@
# This configuration was generated by
# `rubocop --auto-gen-config`
# on 2023-09-16 07:51:19 UTC using RuboCop version 1.56.3.
# on 2024-07-13 05:47:38 UTC using RuboCop version 1.65.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: 15
# Offense count: 231
# Configuration parameters: EnforcedStyle.
# SupportedStyles: link_or_button, strict
Capybara/ClickLinkOrButtonStyle:
Enabled: false
# Offense count: 39
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: DefaultSelector.
Capybara/RSpec/HaveSelector:
Exclude:
- 'spec/features/conversations/index_spec.rb'
- 'spec/features/footer_spec.rb'
- 'spec/features/gardens/adding_gardens_spec.rb'
- 'spec/features/harvests/harvesting_a_crop_spec.rb'
- 'spec/features/members/list_spec.rb'
- 'spec/features/plantings/planting_a_crop_spec.rb'
- 'spec/features/seeds/adding_seeds_spec.rb'
- 'spec/features/shared_examples/crop_suggest.rb'
- 'spec/helpers/application_helper_spec.rb'
- 'spec/support/feature_helpers.rb'
- 'spec/views/posts/show.html.haml_spec.rb'
# Offense count: 14
Capybara/SpecificMatcher:
Exclude:
- 'spec/features/crops/browse_crops_spec.rb'
- 'spec/features/footer_spec.rb'
- 'spec/features/gardens/adding_gardens_spec.rb'
- 'spec/features/harvests/harvesting_a_crop_spec.rb'
@@ -23,8 +45,7 @@ Capybara/VisibilityMatcher:
# Offense count: 6
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Include, EnforcedStyle, NonImplicitAssociationMethodNames.
# Include: spec/factories.rb, spec/factories/**/*.rb, features/support/factories/**/*.rb
# Configuration parameters: EnforcedStyle, NonImplicitAssociationMethodNames.
# SupportedStyles: explicit, implicit
FactoryBot/AssociationStyle:
Exclude:
@@ -33,81 +54,48 @@ FactoryBot/AssociationStyle:
- 'spec/factories/like.rb'
- 'spec/factories/scientific_name.rb'
# Offense count: 8
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Include, EnforcedStyle, ExplicitOnly.
# Include: **/*_spec.rb, **/spec/**/*, spec/factories.rb, spec/factories/**/*.rb, features/support/factories/**/*.rb
# Configuration parameters: AutoCorrect, Include, EnforcedStyle, ExplicitOnly.
# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb
# SupportedStyles: create_list, n_times
FactoryBot/CreateList:
Exclude:
- 'spec/factories/member.rb'
- 'spec/helpers/gardens_helper_spec.rb'
- 'spec/views/comments/index.rss.haml_spec.rb'
- 'spec/views/home/index_spec.rb'
- 'spec/views/photos/index.html.haml_spec.rb'
- 'spec/views/places/show.html.haml_spec.rb'
- 'spec/views/posts/index.html.haml_spec.rb'
# Offense count: 1135
# Offense count: 4
# Configuration parameters: Include, MaxAmount.
# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb
FactoryBot/ExcessiveCreateList:
Exclude:
- 'spec/controllers/posts_controller_spec.rb'
- 'spec/features/crops/show_spec.rb'
- 'spec/features/percy/percy_spec.rb'
# Offense count: 1127
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Include.
# Include: **/*_spec.rb, **/spec/**/*, **/test/**/*, **/features/support/factories/**/*.rb
FactoryBot/SyntaxMethods:
Enabled: false
# Offense count: 5
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EmptyLineBetweenMethodDefs, EmptyLineBetweenClassDefs, EmptyLineBetweenModuleDefs, DefLikeMacros, AllowAdjacentOneLineDefs, NumberOfEmptyLines.
Layout/EmptyLineBetweenDefs:
Exclude:
- 'db/migrate/20171129041341_create_photographings.rb'
- 'db/migrate/20190130090437_add_crop_to_photographings.rb'
# Offense count: 10
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: space, no_space
Layout/LineContinuationSpacing:
Exclude:
- 'app/mailers/notifier_mailer.rb'
- 'app/models/seed.rb'
- 'lib/tasks/growstuff.rake'
- 'spec/features/rss/plantings_spec.rb'
- 'spec/features/rss/posts_spec.rb'
- 'spec/features/rss/seeds_spec.rb'
- 'spec/models/seed_spec.rb'
# Offense count: 9
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, IndentationWidth.
# SupportedStyles: aligned, indented
Layout/LineEndStringConcatenationIndentation:
Exclude:
- 'app/mailers/notifier_mailer.rb'
- 'app/models/seed.rb'
- 'lib/tasks/growstuff.rake'
- 'spec/features/rss/plantings_spec.rb'
- 'spec/features/rss/posts_spec.rb'
- 'spec/features/rss/seeds_spec.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
# Configuration parameters: Max, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns.
# URISchemes: http, https
Layout/LineLength:
Max: 304
Exclude:
- 'app/helpers/crops_helper.rb'
- 'db/seeds.rb'
# Offense count: 3
# This cop supports safe autocorrection (--autocorrect).
Lint/AmbiguousOperatorPrecedence:
Exclude:
- 'db/seeds.rb'
- 'spec/helpers/gardens_helper_spec.rb'
- 'spec/helpers/seeds_helper_spec.rb'
# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: RequireParenthesesForMethodChains.
Lint/AmbiguousRange:
Exclude:
- 'app/models/concerns/search_activities.rb'
- 'app/models/concerns/search_harvests.rb'
- 'app/models/concerns/search_plantings.rb'
@@ -130,6 +118,12 @@ Lint/EmptyBlock:
- 'spec/features/crops/crop_detail_page_spec.rb'
- 'spec/requests/authentications_spec.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
Lint/RedundantCopDisableDirective:
Exclude:
- 'db/migrate/20230313015323_create_active_storage_tables.active_storage.rb'
# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
Lint/RedundantDirGlobSort:
@@ -142,48 +136,46 @@ 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/controllers/likes_controller.rb'
# Offense count: 7
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AutoCorrect.
Lint/UselessAssignment:
Exclude:
- 'config.rb'
- 'config/compass.rb'
# Offense count: 45
# Offense count: 52
# Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
Metrics/AbcSize:
Max: 151
# Offense count: 10
# Offense count: 14
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns, inherit_mode.
# AllowedMethods: refine
Metrics/BlockLength:
Max: 61
Max: 115
# Offense count: 6
# Offense count: 7
# Configuration parameters: CountComments, CountAsOne.
Metrics/ClassLength:
Max: 171
Max: 183
# Offense count: 4
# Offense count: 6
# Configuration parameters: AllowedMethods, AllowedPatterns.
Metrics/CyclomaticComplexity:
Max: 32
# Offense count: 61
# Offense count: 71
# Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
Metrics/MethodLength:
Max: 59
Max: 127
# Offense count: 3
# Offense count: 2
# Configuration parameters: CountComments, CountAsOne.
Metrics/ModuleLength:
Max: 125
# Offense count: 5
# Configuration parameters: AllowedMethods, AllowedPatterns.
Metrics/PerceivedComplexity:
Max: 32
@@ -202,7 +194,7 @@ RSpec/ContextWording:
# Offense count: 36
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: SkipBlocks, EnforcedStyle.
# Configuration parameters: SkipBlocks, EnforcedStyle, OnlyStaticConstants.
# SupportedStyles: described_class, explicit
RSpec/DescribedClass:
Exclude:
@@ -212,6 +204,7 @@ 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,24 +220,26 @@ RSpec/EmptyExampleGroup:
- 'spec/views/photos/edit.html.haml_spec.rb'
- 'spec/views/posts/_single.html.haml_spec.rb'
# Offense count: 134
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowConsecutiveOneLiners.
RSpec/EmptyLineAfterExample:
Exclude:
- 'spec/models/ability_spec.rb'
# Offense count: 140
# Configuration parameters: CountAsOne.
RSpec/ExampleLength:
Max: 25
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
RSpec/ExcessiveDocstringSpacing:
Exclude:
- 'spec/controllers/crops_controller_spec.rb'
- 'spec/features/crops/crop_photos_spec.rb'
# Offense count: 30
# Offense count: 32
RSpec/ExpectInHook:
Exclude:
- 'spec/controllers/garden_types_controller_spec.rb'
- 'spec/controllers/gardens_controller_spec.rb'
- 'spec/features/admin/forums_spec.rb'
- 'spec/features/admin/plant_parts_spec.rb'
- 'spec/features/admin/roles_spec.rb'
- 'spec/features/crops/crop_photos_spec.rb'
- 'spec/features/members/list_spec.rb'
- 'spec/features/plantings/planting_a_crop_spec.rb'
@@ -260,11 +255,12 @@ 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: 35
# Offense count: 37
# Configuration parameters: Max, AllowedIdentifiers, AllowedPatterns.
RSpec/IndexedLet:
Exclude:
@@ -272,6 +268,7 @@ RSpec/IndexedLet:
- 'spec/controllers/plantings_controller_spec.rb'
- 'spec/features/crops/crop_photos_spec.rb'
- 'spec/features/members/list_spec.rb'
- 'spec/features/members/profile_spec.rb'
- 'spec/features/percy/percy_spec.rb'
- 'spec/features/planting_reminder_spec.rb'
- 'spec/features/timeline/index_spec.rb'
@@ -279,7 +276,7 @@ RSpec/IndexedLet:
- 'spec/models/member_spec.rb'
- 'spec/views/forums/index.html.haml_spec.rb'
# Offense count: 710
# Offense count: 720
# Configuration parameters: AssignmentOnly.
RSpec/InstanceVariable:
Enabled: false
@@ -288,6 +285,12 @@ RSpec/InstanceVariable:
RSpec/LetSetup:
Enabled: false
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
RSpec/MatchArray:
Exclude:
- 'spec/models/post_spec.rb'
# Offense count: 2
RSpec/MessageChain:
Exclude:
@@ -304,16 +307,16 @@ RSpec/MultipleDescribes:
Exclude:
- 'spec/features/crops/crop_wranglers_spec.rb'
# Offense count: 147
# Offense count: 152
RSpec/MultipleExpectations:
Max: 19
# Offense count: 137
# Offense count: 138
# Configuration parameters: AllowSubject.
RSpec/MultipleMemoizedHelpers:
Max: 14
# Offense count: 132
# Offense count: 133
# Configuration parameters: EnforcedStyle, IgnoreSharedExamples.
# SupportedStyles: always, named_only
RSpec/NamedSubject:
@@ -324,7 +327,7 @@ RSpec/NamedSubject:
RSpec/NestedGroups:
Max: 6
# Offense count: 407
# Offense count: 403
# Configuration parameters: AllowedPatterns.
# AllowedPatterns: ^expect_, ^assert_
RSpec/NoExpectationExample:
@@ -336,21 +339,6 @@ RSpec/PendingWithoutReason:
- 'spec/features/seeds/misc_seeds_spec.rb'
- 'spec/features/unsubscribing_spec.rb'
# Offense count: 7
# This cop supports unsafe autocorrection (--autocorrect-all).
RSpec/Rails/HaveHttpStatus:
Exclude:
- 'spec/controllers/api/v1/plantings_controller_spec.rb'
- 'spec/controllers/harvests_controller_spec.rb'
- 'spec/controllers/likes_controller_spec.rb'
- 'spec/requests/harvests_spec.rb'
# Offense count: 16
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Inferences.
RSpec/Rails/InferredSpecType:
Enabled: false
# Offense count: 2
RSpec/RepeatedDescription:
Exclude:
@@ -370,6 +358,7 @@ RSpec/RepeatedExampleGroupBody:
# Offense count: 6
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AutoCorrect.
RSpec/ScatteredSetup:
Exclude:
- 'spec/features/percy/percy_spec.rb'
@@ -382,14 +371,6 @@ RSpec/SpecFilePathFormat:
Exclude:
- 'spec/controllers/member_controller_spec.rb'
# Offense count: 2
# Configuration parameters: Include.
# Include: **/*_spec*rb*, **/spec/**/*
RSpec/SpecFilePathSuffix:
Exclude:
- 'spec/features/seeds/seed_photos.rb'
- 'spec/models/garden_type.rb'
# Offense count: 3
RSpec/StubbedMock:
Exclude:
@@ -413,7 +394,24 @@ RSpec/VerifiedDoubles:
- 'spec/controllers/gardens_controller_spec.rb'
- 'spec/views/devise/shared/_links_spec.rb'
# Offense count: 26
# Offense count: 7
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: ResponseMethods.
# ResponseMethods: response, last_response
RSpecRails/HaveHttpStatus:
Exclude:
- 'spec/controllers/api/v1/plantings_controller_spec.rb'
- 'spec/controllers/harvests_controller_spec.rb'
- 'spec/controllers/likes_controller_spec.rb'
- 'spec/requests/harvests_spec.rb'
# Offense count: 16
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Inferences.
RSpecRails/InferredSpecType:
Enabled: false
# Offense count: 28
# Configuration parameters: Database, Include.
# SupportedDatabases: mysql, postgresql
# Include: db/**/*.rb
@@ -436,17 +434,6 @@ Rails/Date:
Exclude:
- 'app/mailers/notifier_mailer.rb'
# Offense count: 5
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: slashes, arguments
Rails/FilePath:
Exclude:
- 'app/controllers/crops_controller.rb'
- 'config/application.rb'
- 'config/environments/development.rb'
- 'db/seeds.rb'
# Offense count: 11
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedMethods, AllowedPatterns.
@@ -485,12 +472,13 @@ Rails/I18nLocaleAssignment:
Rails/I18nLocaleTexts:
Enabled: false
# Offense count: 2
# Offense count: 3
# Configuration parameters: Include.
# Include: app/controllers/**/*.rb, app/mailers/**/*.rb
Rails/LexicallyScopedActionFilter:
Exclude:
- 'app/controllers/data_controller.rb'
- 'app/controllers/registrations_controller.rb'
# Offense count: 2
Rails/OutputSafety:
@@ -498,6 +486,12 @@ Rails/OutputSafety:
- 'app/helpers/auto_suggest_helper.rb'
- 'app/helpers/gardens_helper.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
Rails/PluralizationGrammar:
Exclude:
- 'spec/requests/plantings_spec.rb'
# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Include.
@@ -508,8 +502,10 @@ Rails/RakeEnvironment:
- 'lib/tasks/i18n.rake'
- 'lib/tasks/testing.rake'
# Offense count: 10
# Offense count: 9
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedReceivers.
# AllowedReceivers: ActionMailer::Preview, ActiveSupport::TimeZone
Rails/RedundantActiveRecordAllMethod:
Exclude:
- 'app/controllers/admin/roles_controller.rb'
@@ -518,7 +514,6 @@ Rails/RedundantActiveRecordAllMethod:
- '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'
@@ -541,8 +536,8 @@ Rails/ResponseParsedBody:
- 'spec/controllers/likes_controller_spec.rb'
- 'spec/requests/api/v1/crop_request_spec.rb'
- 'spec/requests/api/v1/gardens_request_spec.rb'
- 'spec/requests/api/v1/harvest_request_spec.rb'
- 'spec/requests/api/v1/member_request_spec.rb'
- 'spec/requests/api/v1/harvests_request_spec.rb'
- 'spec/requests/api/v1/members_request_spec.rb'
- 'spec/requests/api/v1/photos_request_spec.rb'
- 'spec/requests/api/v1/plantings_request_spec.rb'
- 'spec/requests/api/v1/seeds_request_spec.rb'
@@ -562,26 +557,11 @@ Rails/RootPathnameMethods:
- 'app/controllers/crops_controller.rb'
- 'app/helpers/icons_helper.rb'
# Offense count: 20
# Offense count: 21
# Configuration parameters: Include.
# Include: db/**/*.rb
Rails/ThreeStateBooleanColumn:
Exclude:
- 'db/migrate/20121203034745_add_tos_agreement_to_users.rb'
- 'db/migrate/20130206051328_add_show_email_to_member.rb'
- 'db/migrate/20130212123628_create_notifications.rb'
- 'db/migrate/20130327120024_add_send_email_to_member.rb'
- 'db/migrate/20130517051922_create_account_types.rb'
- 'db/migrate/20130718011247_add_trading_to_seeds.rb'
- 'db/migrate/20130722050836_remove_tradable_from_seeds.rb'
- 'db/migrate/20130827105823_add_newsletter_to_member.rb'
- 'db/migrate/20131025104228_add_fields_to_gardens.rb'
- 'db/migrate/20140829230600_add_finished_to_planting.rb'
- 'db/migrate/20140928085713_add_send_planting_reminder_to_member.rb'
- 'db/migrate/20171022032108_all_the_predictions.rb'
- 'db/migrate/20180213005731_seed_usage.rb'
- 'db/migrate/20190720000555_create_mailboxer.mailboxer_engine.rb'
- 'db/migrate/20190720000558_add_delivery_tracking_info_to_mailboxer_receipts.mailboxer_engine.rb'
Enabled: false
# Offense count: 6
# Configuration parameters: Include.
@@ -603,6 +583,18 @@ Rails/WhereEquals:
- 'app/models/harvest.rb'
- 'app/models/planting.rb'
# Offense count: 2
# This cop supports unsafe autocorrection (--autocorrect-all).
Rails/WhereRange:
Exclude:
- 'app/models/concerns/predict_planting.rb'
- 'app/models/garden.rb'
# Offense count: 1
Rake/MethodDefinitionInTask:
Exclude:
- 'lib/tasks/growstuff.rake'
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
@@ -622,13 +614,7 @@ Style/CommentedKeyword:
- 'spec/models/photo_spec.rb'
- 'spec/models/planting_spec.rb'
# Offense count: 37
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowedVars.
Style/FetchEnvVar:
Enabled: false
# Offense count: 4
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: always, always_true, never
@@ -636,33 +622,16 @@ 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'
- 'db/migrate/20200815012538_remove_median_function.rb'
- 'spec/lib/haml/filters/growstuff_markdown_spec.rb'
# Offense count: 2
# Offense count: 3
# This cop supports unsafe autocorrection (--autocorrect-all).
Style/GlobalStdStream:
Exclude:
- 'config/environments/production.rb'
- 'lib/tasks/gbif.rake'
- 'lib/tasks/openfarm.rake'
# Offense count: 5
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle, EnforcedShorthandSyntax, UseHashRocketsWithSymbolValues, PreferHashRocketsForNonAlnumEndingSymbols.
# SupportedStyles: ruby19, hash_rockets, no_mixed_keys, ruby19_no_mixed_keys
# SupportedShorthandSyntax: always, never, either, consistent
Style/HashSyntax:
Exclude:
- 'app/models/csv_importer.rb'
- 'spec/requests/api/v1/gardens_request_spec.rb'
- 'spec/requests/api/v1/plantings_request_spec.rb'
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
Style/IfUnlessModifier:
Exclude:
- 'bin/setup'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: AllowedMethods.
@@ -684,19 +653,23 @@ Style/MixinUsage:
- 'spec/rails_helper.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
Style/NegatedIfElseCondition:
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: literals, strict
Style/MutableConstant:
Exclude:
- 'app/helpers/crops_helper.rb'
- 'app/models/activity.rb'
# Offense count: 3
# Offense count: 5
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: EnforcedStyle, AllowedMethods, AllowedPatterns.
# SupportedStyles: predicate, comparison
Style/NumericPredicate:
Exclude:
- 'app/helpers/crops_helper.rb'
- 'app/helpers/harvests_helper.rb'
- 'app/helpers/plantings_helper.rb'
- 'app/models/concerns/predict_planting.rb'
# Offense count: 6
Style/OpenStructUse:
@@ -710,15 +683,6 @@ Style/OptionalBooleanParameter:
Exclude:
- 'app/models/concerns/member_newsletter.rb'
# Offense count: 5
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: EnforcedStyle.
# SupportedStyles: same_as_string_literals, single_quotes, double_quotes
Style/QuotedSymbols:
Exclude:
- 'app/models/seed.rb'
- 'spec/controllers/crops_controller_spec.rb'
# Offense count: 1
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Methods.
@@ -726,12 +690,6 @@ Style/RedundantArgument:
Exclude:
- 'app/helpers/application_helper.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
Style/RedundantConstantBase:
Exclude:
- 'config.ru'
# Offense count: 4
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: SafeForConstants.
@@ -739,19 +697,6 @@ Style/RedundantFetchBlock:
Exclude:
- 'config/puma.rb'
# Offense count: 3
# This cop supports safe autocorrection (--autocorrect).
Style/RedundantRegexpArgument:
Exclude:
- 'db/migrate/20191119030244_cms_tags.rb'
# Offense count: 1
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowMultipleReturnValues.
Style/RedundantReturn:
Exclude:
- 'app/controllers/messages_controller.rb'
# Offense count: 2
# This cop supports safe autocorrection (--autocorrect).
# Configuration parameters: AllowModifier.
@@ -760,7 +705,7 @@ Style/SoleNestedConditional:
- 'app/controllers/application_controller.rb'
- 'app/controllers/messages_controller.rb'
# Offense count: 20
# Offense count: 24
# This cop supports unsafe autocorrection (--autocorrect-all).
# Configuration parameters: Mode.
Style/StringConcatenation:

View File

@@ -1 +1 @@
3.1.4
3.3.4

View File

@@ -167,8 +167,12 @@ group :development, :test do
gem 'rspec-activemodel-mocks'
gem 'rspec-rails' # unit testing framework
gem 'rswag-specs'
gem 'rubocop-capybara'
gem 'rubocop-factory_bot'
gem 'rubocop-rails'
gem 'rubocop-rake'
gem 'rubocop-rspec'
gem 'rubocop-rspec_rails'
gem 'webrat' # provides HTML matchers for view tests
gem 'dotenv-rails'

View File

@@ -117,8 +117,8 @@ GEM
minitest (>= 5.1)
mutex_m
tzinfo (~> 2.0)
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
ast (2.4.2)
autoprefixer-rails (10.4.16.0)
execjs (~> 2)
@@ -156,7 +156,7 @@ GEM
actionpack (>= 6.1)
activemodel (>= 6.1)
builder (3.3.0)
bullet (7.1.6)
bullet (7.2.0)
activesupport (>= 3.0.0)
uniform_notifier (~> 1.11)
byebug (11.1.3)
@@ -248,15 +248,16 @@ GEM
erubis (2.7.0)
excon (0.110.0)
execjs (2.9.1)
factory_bot (6.4.5)
factory_bot (6.4.6)
activesupport (>= 5.0.0)
factory_bot_rails (6.4.3)
factory_bot (~> 6.4)
railties (>= 5.0.0)
faker (3.4.1)
i18n (>= 1.8.11, < 2)
faraday (2.9.2)
faraday (2.10.0)
faraday-net_http (>= 2.0, < 3.2)
logger
faraday-net_http (3.1.0)
net-http
ffi (1.16.3)
@@ -306,7 +307,8 @@ GEM
multi_json (>= 1.9.2)
webrick
highline (3.0.1)
httparty (0.21.0)
httparty (0.22.0)
csv
mini_mime (>= 1.0.0)
multi_xml (>= 0.5.2)
i18n (1.14.5)
@@ -348,7 +350,7 @@ GEM
kramdown (2.4.0)
rexml
language_server-protocol (3.17.0.3)
launchy (3.0.0)
launchy (3.0.1)
addressable (~> 2.8)
childprocess (~> 5.0)
leaflet-rails (1.9.4)
@@ -390,7 +392,8 @@ GEM
moneta (1.0.0)
msgpack (1.7.2)
multi_json (1.15.0)
multi_xml (0.6.0)
multi_xml (0.7.1)
bigdecimal (~> 3.1)
mutex_m (0.2.0)
net-http (0.4.1)
uri
@@ -426,7 +429,7 @@ GEM
rack
orm_adapter (0.5.0)
parallel (1.25.1)
parser (3.3.3.0)
parser (3.3.4.0)
ast (~> 2.4.1)
racc
percy-capybara (5.0.0)
@@ -442,7 +445,7 @@ GEM
method_source (~> 1.0)
psych (5.1.2)
stringio
public_suffix (5.0.5)
public_suffix (6.0.0)
puma (6.4.2)
nio4r (~> 2.0)
query_diet (0.7.1)
@@ -502,7 +505,7 @@ GEM
thor (~> 1.0, >= 1.2.2)
zeitwerk (~> 2.6)
rainbow (3.1.1)
raindrops (0.20.0)
raindrops (0.20.1)
rake (13.2.1)
rate_throttle_client (0.1.2)
rb-fsevent (0.11.2)
@@ -561,26 +564,35 @@ GEM
rswag-ui (2.13.0)
actionpack (>= 3.1, < 7.2)
railties (>= 3.1, < 7.2)
rubocop (1.64.1)
rubocop (1.65.0)
json (~> 2.3)
language_server-protocol (>= 3.17.0)
parallel (~> 1.10)
parser (>= 3.3.0.2)
rainbow (>= 2.2.2, < 4.0)
regexp_parser (>= 1.8, < 3.0)
regexp_parser (>= 2.4, < 3.0)
rexml (>= 3.2.5, < 4.0)
rubocop-ast (>= 1.31.1, < 2.0)
ruby-progressbar (~> 1.7)
unicode-display_width (>= 2.4.0, < 3.0)
rubocop-ast (1.31.3)
parser (>= 3.3.1.0)
rubocop-capybara (2.21.0)
rubocop (~> 1.41)
rubocop-factory_bot (2.26.1)
rubocop (~> 1.61)
rubocop-rails (2.25.1)
activesupport (>= 4.2.0)
rack (>= 1.1)
rubocop (>= 1.33.0, < 2.0)
rubocop-ast (>= 1.31.1, < 2.0)
rubocop-rspec (3.0.1)
rubocop-rake (0.6.0)
rubocop (~> 1.0)
rubocop-rspec (3.0.3)
rubocop (~> 1.61)
rubocop-rspec_rails (2.30.0)
rubocop (~> 1.61)
rubocop-rspec (~> 3, >= 3.0.1)
ruby-progressbar (1.13.0)
ruby-units (4.0.3)
ruby-vips (2.2.1)
@@ -640,7 +652,7 @@ GEM
execjs (>= 0.3.0, < 3)
thor (1.3.1)
thread_safe (0.3.6)
tilt (2.3.0)
tilt (2.4.0)
timecop (0.9.10)
timeout (0.4.1)
trollop (1.16.2)
@@ -667,7 +679,7 @@ GEM
rack (>= 1.0)
rack-test (>= 0.5.3)
webrick (1.8.1)
websocket (1.2.10)
websocket (1.2.11)
websocket-driver (0.7.6)
websocket-extensions (>= 0.1.0)
websocket-extensions (0.1.5)
@@ -770,8 +782,12 @@ DEPENDENCIES
rswag-specs
rswag-ui
rubocop
rubocop-capybara
rubocop-factory_bot
rubocop-rails
rubocop-rake
rubocop-rspec
rubocop-rspec_rails
ruby-units
sassc-rails
scout_apm
@@ -790,7 +806,7 @@ DEPENDENCIES
xmlrpc
RUBY VERSION
ruby 3.1.4p223
ruby 3.3.4p94
BUNDLED WITH
2.3.11
2.4.22

View File

@@ -81,8 +81,8 @@ class ActivitiesController < DataController
end
def specifics
if @owner.present?
"#{@owner.to_param}-"
end
return if @owner.blank?
"#{@owner.to_param}-"
end
end

View File

@@ -3,9 +3,7 @@
class ApplicationController < ActionController::Base
protect_from_forgery
# Working from codespaces, we want to turn off validation
if Rails.env.development? && ENV['CODESPACE_NAME']
skip_before_action :verify_authenticity_token
end
skip_before_action :verify_authenticity_token if Rails.env.development? && ENV['CODESPACE_NAME']
include ApplicationHelper

View File

@@ -81,7 +81,7 @@ class CropsController < ApplicationController
@companions = @crop.companions.approved
end
format.svg do
icon_data = @crop.svg_icon.presence || File.read(Rails.root.join('app', 'assets', 'images', 'icons', 'sprout.svg'))
icon_data = @crop.svg_icon.presence || File.read(Rails.root.join("app/assets/images/icons/sprout.svg"))
send_data(icon_data, type: "image/svg+xml", disposition: "inline")
end
format.json do
@@ -194,6 +194,7 @@ class CropsController < ApplicationController
params.require(:crop).permit(
:name, :en_wikipedia_url,
:parent_id, :perennial,
:sowing_method, :description, :sun_requirements,
:request_notes, :reason_for_rejection,
:rejection_notes,
scientific_names_attributes: %i(scientific_name _destroy id)

View File

@@ -58,7 +58,7 @@ class LikesController < ApplicationController
def failed(like, message)
respond_to do |format|
format.json { render(json: { 'error': message }, status: :forbidden) }
format.json { render(json: { error: message }, status: :forbidden) }
format.html do
flash[:error] = message
if like&.likeable

View File

@@ -61,7 +61,7 @@ class MembersController < ApplicationController
end
def unsubscribe
verifier = ActiveSupport::MessageVerifier.new(ENV['RAILS_SECRET_TOKEN'])
verifier = ActiveSupport::MessageVerifier.new(ENV.fetch('RAILS_SECRET_TOKEN', nil))
decrypted_message = verifier.verify(params[:message])
@member = Member.find(decrypted_message[:member_id])

View File

@@ -21,7 +21,7 @@ class MessagesController < ApplicationController
return if params[:recipient_id].blank?
@recipient = Member.find_by(id: params[:recipient_id])
return if @recipient.nil?
nil if @recipient.nil?
end
def create

View File

@@ -41,7 +41,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def after_sign_in_path_for(resource)
if resource.tos_agreement
super(resource)
super
else
finish_signup_path(resource)
end

View File

@@ -7,10 +7,10 @@ module CropsHelper
return "You don't have any seeds of this crop." if seeds.none?
if total_quantity != 0
"You have #{total_quantity} #{Seed.model_name.human(count: total_quantity)} of this crop."
else
if total_quantity == 0
"You have an unknown quantity of seeds of this crop."
else
"You have #{total_quantity} #{Seed.model_name.human(count: total_quantity)} of this crop."
end
end

View File

@@ -2,15 +2,15 @@
class NotifierMailer < ApplicationMailer
# include NotificationsHelper
default from: "Growstuff <#{ENV['GROWSTUFF_EMAIL']}>"
default from: "Growstuff <#{ENV.fetch('GROWSTUFF_EMAIL', nil)}>"
def verifier
unless ENV['RAILS_SECRET_TOKEN']
raise "RAILS_SECRET_TOKEN environment variable"\
"not set - have you created config/application.yml?"
raise "RAILS_SECRET_TOKEN environment variable" \
"not set - have you created config/application.yml?"
end
ActiveSupport::MessageVerifier.new(ENV['RAILS_SECRET_TOKEN'])
ActiveSupport::MessageVerifier.new(ENV.fetch('RAILS_SECRET_TOKEN', nil))
end
def notify(notification)
@@ -27,7 +27,7 @@ class NotifierMailer < ApplicationMailer
def planting_reminder(member)
@member = member
@sitename = ENV['GROWSTUFF_SITE_NAME']
@sitename = ENV.fetch('GROWSTUFF_SITE_NAME', nil)
@late = []
@super_late = []

View File

@@ -9,8 +9,8 @@ module MemberFlickr
if @flickr.nil?
flickr_auth = auth('flickr')
if flickr_auth
FlickRaw.api_key = ENV['GROWSTUFF_FLICKR_KEY']
FlickRaw.shared_secret = ENV['GROWSTUFF_FLICKR_SECRET']
FlickRaw.api_key = ENV.fetch('GROWSTUFF_FLICKR_KEY', nil)
FlickRaw.shared_secret = ENV.fetch('GROWSTUFF_FLICKR_SECRET', nil)
@flickr = FlickRaw::Flickr.new
@flickr.access_token = flickr_auth.token
@flickr.access_secret = flickr_auth.secret

View File

@@ -78,7 +78,7 @@ module PredictPlanting
end
# Deactivate any plantings over time_limit that are super late in small batches.
def self.archive!(time_limit: 3.years.ago, limit: 100)
def self.archive!(time_limit: 3.years.ago, limit: 1000)
active_plantings = Planting.annual.active.where("planted_at < ?", time_limit).order(planted_at: :asc).limit(limit)
active_plantings.each do |planting|
if planting.finish_is_predicatable? && planting.super_late?

View File

@@ -44,7 +44,7 @@ module SearchActivities
1..limit.times do
where = {
# photos_count: { gt: 0 },
owner_id: { not: owners }
owner_id: { not: owners }
}
one_record = search('*',
limit: 1,

View File

@@ -30,7 +30,7 @@ module SearchPlantings
quantity:,
sunniness:,
garden_id:,
garden_name: garden&.name,
garden_name: garden&.name,
description:,
first_harvest_predicted_at:,

View File

@@ -59,7 +59,7 @@ class CsvImporter
alternate_names.split(/,\s*/).each do |name|
altname = AlternateName.find_by(name:, crop: @crop)
altname ||= AlternateName.create! name: name, crop: @crop, creator: cropbot
altname ||= AlternateName.create! name:, crop: @crop, creator: cropbot
@crop.alternate_names << altname
end
end

View File

@@ -10,7 +10,7 @@ class Follow < ApplicationRecord
recipient_id: followed_id,
sender_id: follower_id,
subject: "#{follower.login_name} is now following you",
body: "#{follower.login_name} just followed you on #{ENV['GROWSTUFF_SITE_NAME']}. "
body: "#{follower.login_name} just followed you on #{ENV.fetch('GROWSTUFF_SITE_NAME', nil)}. "
)
end
end

View File

@@ -80,11 +80,11 @@ class Garden < ApplicationRecord
def reindex(refresh: false); end
# Deactivate any gardens with no active plantings
def self.archive!(time_limit: 3.years.ago, limit: 100)
def self.archive!(time_limit: 3.years.ago, limit: 1000)
Garden.active.where("gardens.updated_at < ?", time_limit).order(updated_at: :asc).limit(limit).each do |active_garden|
unless active_garden.plantings.active.any?
garden.active = false
garden.save
active_garden.active = false
active_garden.save
end
end
end

View File

@@ -33,17 +33,17 @@ class Seed < ApplicationRecord
validates :days_until_maturity_max, allow_nil: true,
numericality: { only_integer: true, greater_than_or_equal_to: 0 }
validates :tradable_to, allow_blank: false,
inclusion: { in: TRADABLE_TO_VALUES, message: "You may only trade seed nowhere, "\
"locally, nationally, or internationally" }
inclusion: { in: TRADABLE_TO_VALUES, message: "You may only trade seed nowhere, " \
"locally, nationally, or internationally" }
validates :organic, allow_blank: false,
inclusion: { in: ORGANIC_VALUES, message: "You must say whether the seeds "\
"are organic or not, or that you don't know" }
inclusion: { in: ORGANIC_VALUES, message: "You must say whether the seeds " \
"are organic or not, or that you don't know" }
validates :gmo, allow_blank: false,
inclusion: { in: GMO_VALUES, message: "You must say whether the seeds are "\
"genetically modified or not, or that you don't know" }
inclusion: { in: GMO_VALUES, message: "You must say whether the seeds are " \
"genetically modified or not, or that you don't know" }
validates :heirloom, allow_blank: false,
inclusion: { in: HEIRLOOM_VALUES, message: "You must say whether the seeds"\
"are heirloom, hybrid, or unknown" }
inclusion: { in: HEIRLOOM_VALUES, message: "You must say whether the seeds" \
"are heirloom, hybrid, or unknown" }
#
# Delegations
@@ -56,7 +56,7 @@ class Seed < ApplicationRecord
default_scope { joins(:owner).merge(Member.kept) } # Ensure owner exists
scope :tradable, -> { where.not(tradable_to: 'nowhere') }
scope :interesting, -> { tradable.has_location }
scope :has_location, -> { joins(:owner).where.not("members.location": nil) }
scope :has_location, -> { joins(:owner).where.not('members.location': nil) }
scope :recent, -> { order(created_at: :desc) }
scope :active, -> { where('finished <> true').where('finished_at IS NULL OR finished_at < ?', Time.zone.now) }

View File

@@ -47,6 +47,10 @@
%span.help-block
Link to the crop's page on the English language Wikipedia (required).
= f.text_area :description
= f.text_field :sun_requirements
= f.text_field :sowing_method
-# Only crop wranglers see the crop hierarchy (for now)
- if can? :wrangle, @crop
= f.collection_select(:parent_id, Crop.all.order(:name), :id, :name,

View File

@@ -35,7 +35,7 @@
- if @member.last_sign_in_at
%p
%strong Last Login
= @member.last_sign_in_at
= @member.last_sign_in_at&.to_fs(:default)
- if can? :update, @member
= link_to edit_member_registration_path, class: 'btn btn-block' do

View File

@@ -8,10 +8,10 @@
in
= link_to @post.forum, @post.forum
on
= @post.created_at
= @post.created_at.to_fs(:default)
- if @post.updated_at > @post.created_at
and edited at
= @post.updated_at
= @post.updated_at.to_fs(:default)
= link_to "Permalink", post

View File

@@ -23,12 +23,8 @@ FileUtils.chdir APP_ROOT do
system('bin/yarn')
puts "\n== Copying sample files =="
unless File.exist?('config/database.yml')
FileUtils.cp 'config/database.yml.example', 'config/database.yml'
end
unless File.exist?('.env')
FileUtils.cp 'env-example', '.env'
end
FileUtils.cp 'config/database.yml.example', 'config/database.yml' unless File.exist?('config/database.yml')
FileUtils.cp 'env-example', '.env' unless File.exist?('.env')
puts "\n== Checking for elastic search =="
system! 'script/check_elasticsearch.sh'

View File

@@ -2,5 +2,5 @@
# This file is used by Rack-based servers to start the application.
require ::File.expand_path('config/environment', __dir__)
require File.expand_path('config/environment', __dir__)
run Rails.application

View File

@@ -26,7 +26,7 @@ module Growstuff
config.active_record.yaml_column_permitted_classes = [Symbol, Date, Time, ActiveSupport::TimeWithZone, ActiveSupport::TimeZone]
# The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
I18n.load_path += Dir[Rails.root.join('config', 'locales', '*.{rb,yml}')]
I18n.load_path += Dir[Rails.root.join("config/locales/*.{rb,yml}")]
I18n.default_locale = :en
# rails will fallback to config.i18n.default_locale translation
config.i18n.fallbacks = true
@@ -62,7 +62,7 @@ module Growstuff
# Growstuff-specific configuration variables
config.currency = 'AUD'
config.bot_email = ENV['GROWSTUFF_EMAIL']
config.bot_email = ENV.fetch('GROWSTUFF_EMAIL', nil)
config.user_agent = 'Growstuff'
config.user_agent_email = "info@growstuff.org"
@@ -70,7 +70,7 @@ module Growstuff
# API key can't be blank or tests fail
Gibbon::API.timeout = 10
Gibbon::API.throws_exceptions = false
config.newsletter_list_id = ENV['GROWSTUFF_MAILCHIMP_NEWSLETTER_ID']
config.newsletter_list_id = ENV.fetch('GROWSTUFF_MAILCHIMP_NEWSLETTER_ID', nil)
# config.active_record.raise_in_transactional_callbacks = true
config.middleware.insert_before 0, Rack::Cors do

View File

@@ -16,7 +16,7 @@ Rails.application.configure do
# Enable/disable caching. By default caching is disabled.
# Run rails dev:cache to toggle caching.
if Rails.root.join('tmp', 'caching-dev.txt').exist?
if Rails.root.join("tmp/caching-dev.txt").exist?
config.action_controller.perform_caching = true
config.cache_store = :memory_store

View File

@@ -27,7 +27,7 @@ Rails.application.configure do
# Compress JavaScripts and CSS.
config.assets.js_compressor = :terser
# config.assets.css_compressor = :sass
# config.assets.css_compressor = :sass
# Do not fallback to assets pipeline if a precompiled asset is missed.
config.assets.compile = false
@@ -59,8 +59,8 @@ Rails.application.configure do
# Use a different cache store in production.
config.cache_store = :mem_cache_store,
(ENV["MEMCACHIER_SERVERS"] || "").split(","),
{ username: ENV["MEMCACHIER_USERNAME"],
password: ENV["MEMCACHIER_PASSWORD"],
{ username: ENV.fetch("MEMCACHIER_USERNAME", nil),
password: ENV.fetch("MEMCACHIER_PASSWORD", nil),
failover: true,
socket_timeout: 1.5,
socket_failure_delay: 0.2,
@@ -89,20 +89,20 @@ Rails.application.configure do
config.active_record.dump_schema_after_migration = false
# Growstuff configuration
config.action_mailer.default_url_options = { host: ENV['HOST'] }
config.action_mailer.default_url_options = { host: ENV.fetch('HOST', nil) }
config.action_mailer.smtp_settings = {
user_name: ENV['MAILGUN_SMTP_LOGIN'],
password: ENV['MAILGUN_SMTP_PASSWORD'],
domain: ENV['GROWSTUFF_EMAIL_DOMAIN'],
address: ENV['MAILGUN_SMTP_SERVER'],
user_name: ENV.fetch('MAILGUN_SMTP_LOGIN', nil),
password: ENV.fetch('MAILGUN_SMTP_PASSWORD', nil),
domain: ENV.fetch('GROWSTUFF_EMAIL_DOMAIN', nil),
address: ENV.fetch('MAILGUN_SMTP_SERVER', nil),
port: 587,
authentication: :plain,
enable_starttls_auto: true
}
ActionMailer::Base.delivery_method = :smtp
config.host = ENV['HOST']
config.host = ENV.fetch('HOST', nil)
config.analytics_code = <<-GET_CLICKY_SCRIPT
<script src="//static.getclicky.com/js" type="text/javascript"></script>
<script type="text/javascript">try{ clicky.init(100594260); }catch(e){}</script>

View File

@@ -2,7 +2,7 @@
ActionDispatch::Callbacks.after do
# Reload the factories
return unless Rails.env.development? || Rails.env.test?
return unless Rails.env.local?
if FactoryBot.factories.present? # first init will load factories, this should only run on subsequent reloads
FactoryBot.factories.clear

View File

@@ -1,4 +1,5 @@
# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# ActiveSupport::Reloader.to_prepare do

View File

@@ -1,4 +1,5 @@
# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces.

View File

@@ -1,4 +1,5 @@
# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Define an application-wide content security policy

View File

@@ -6,9 +6,9 @@ Devise.setup do |config|
# ==> Mailer Configuration
# Configure the e-mail address which will be shown in Devise::Mailer,
# note that it will be overwritten if you use your own mailer class with default "from" parameter.
config.mailer_sender = "Growstuff <#{ENV['GROWSTUFF_EMAIL']}>"
config.mailer_sender = "Growstuff <#{ENV.fetch('GROWSTUFF_EMAIL', nil)}>"
config.secret_key = ENV['RAILS_SECRET_TOKEN']
config.secret_key = ENV.fetch('RAILS_SECRET_TOKEN', nil)
# Configure the class responsible to send e-mails.
# config.mailer = "Devise::Mailer"

View File

@@ -1,4 +1,5 @@
# frozen_string_literal: true
# Be sure to restart your server when you modify this file.
# Add new mime types for use in respond_to blocks:

View File

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

View File

@@ -1,6 +1,6 @@
# frozen_string_literal: true
Rails.application.config.middleware.use OmniAuth::Builder do
provider :twitter, ENV['GROWSTUFF_TWITTER_KEY'], ENV['GROWSTUFF_TWITTER_SECRET']
provider :flickr, ENV['GROWSTUFF_FLICKR_KEY'], ENV['GROWSTUFF_FLICKR_SECRET'], scope: 'read'
provider :twitter, ENV.fetch('GROWSTUFF_TWITTER_KEY', nil), ENV.fetch('GROWSTUFF_TWITTER_SECRET', nil)
provider :flickr, ENV.fetch('GROWSTUFF_FLICKR_KEY', nil), ENV.fetch('GROWSTUFF_FLICKR_SECRET', nil), scope: 'read'
end

View File

@@ -1,7 +1,7 @@
# frozen_string_literal: true
class CreateCms < ActiveRecord::Migration[4.2]
def self.up # rubocop:disable Metrics/MethodLength
def self.up
# -- Sites --------------------------------------------------------------
create_table :comfy_cms_sites do |t|
t.string :label, null: false

View File

@@ -37,18 +37,22 @@ class CreatePhotographings < ActiveRecord::Migration[4.2]
Photographing.create! photo_id: s.photo_id, photographable_id: s.seed_id, photographable_type: 'Seed'
end
end
class GardensPhoto < ApplicationRecord
belongs_to :photo
belongs_to :garden
end
class PhotosPlanting < ApplicationRecord
belongs_to :photo
belongs_to :planting
end
class HarvestsPhoto < ApplicationRecord
belongs_to :photo
belongs_to :harvest
end
class PhotosSeed < ApplicationRecord
belongs_to :photo
belongs_to :seed

View File

@@ -9,6 +9,7 @@ class AddCropToPhotographings < ActiveRecord::Migration[5.2]
p.set_crop && p.save!
end
end
class Photographing < ApplicationRecord
belongs_to :photo, inverse_of: :photo_associations
belongs_to :photographable, polymorphic: true

View File

@@ -28,10 +28,10 @@ class CmsTags < ActiveRecord::Migration[5.2]
layout.content = layout.content.gsub(%r{\{\{ ?cms:(\w+):([\w/-]+):([\w/-]+):([\w/-]+) ?\}\}}, '{{ cms:\1 \2 \3 \4}}')
end
layout.content = layout.content.gsub(/\{\{ ?cms:(\w+):(\w+):([^:]*) ?}}/, '{{ cms:\1 \2, "\3" }}') if layout.content.is_a? String
layout.content = layout.content.gsub(/cms:rich_text/, 'cms:wysiwyg') if layout.content.is_a? String
layout.content = layout.content.gsub(/cms:integer/, 'cms:number') if layout.content.is_a? String
layout.content = layout.content.gsub("cms:rich_text", 'cms:wysiwyg') if layout.content.is_a? String
layout.content = layout.content.gsub("cms:integer", 'cms:number') if layout.content.is_a? String
if layout.content.is_a? String
layout.content = layout.content.gsub(/cms: string/, 'cms:text')
layout.content = layout.content.gsub("cms: string", 'cms:text')
end # probably a result of goofing one of the more general regexps
if layout.content.is_a? String
layout.content = layout.content.gsub(%r{\{\{ ?cms:page_file ([\w/]+) ?\}\}}, '{{ cms:file \1, render: false }}')

View File

@@ -39,7 +39,7 @@ class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
t.foreign_key :active_storage_blobs, column: :blob_id
end
create_table :active_storage_variant_records, id: primary_key_type do |t|
create_table :active_storage_variant_records, id: primary_key_type do |t| # rubocop:disable Rails/CreateTableWithTimestamps
t.belongs_to :blob, null: false, index: false, type: foreign_key_type
t.string :variation_digest, null: false

View File

@@ -1,4 +1,5 @@
# frozen_string_literal: true
class AddSlugToActivity < ActiveRecord::Migration[7.1]
def change
add_column :activities, :slug, :string

View File

@@ -26,7 +26,7 @@ def load_data
end
def load_crops
source_path = Rails.root.join('db', 'seeds')
source_path = Rails.root.join("db/seeds")
Dir.glob("#{source_path}/crops*.csv").each do |crop_file|
puts "Loading crops from #{crop_file}..."
CSV.foreach(crop_file) do |row|
@@ -48,7 +48,7 @@ def load_test_users
puts "Loading test users..."
# Open suburb csv
source_path = Rails.root.join('db', 'seeds')
source_path = Rails.root.join("db/seeds")
begin
suburb_file = File.open("#{source_path}/suburbs.csv")
rescue StandardError
@@ -86,7 +86,7 @@ def load_test_users
owner_id: @user.id,
garden_id: @user.gardens.first.id,
planted_at: (n * 7).days.ago,
crop_id: Crop.find((i + n) % Crop.all.size + 1).id,
crop_id: Crop.find(((i + n) % Crop.all.size) + 1).id,
sunniness: select_random_item(Planting::SUNNINESS_VALUES),
planted_from: select_random_item(Planting::PLANTED_FROM_VALUES)
)

View File

@@ -6,7 +6,7 @@ require 'haml/filters/growstuff_markdown'
class Haml::Filters
class EscapedMarkdown < Haml::Filters::Markdown
def compile(node)
[:escape, true, super(node)]
[:escape, true, super]
end
end

View File

@@ -1,7 +1,6 @@
# frozen_string_literal: true
namespace :gardens do
desc "Mark old gardens inactive"
task archive: :environment do
Planting.archive!

View File

@@ -5,20 +5,20 @@ namespace :growstuff do
# usage: rake growstuff:admin_user name=skud
task admin_user: :environment do
add_role_to_member! ENV['name'], 'Admin'
add_role_to_member! ENV.fetch('name', nil), 'Admin'
end
desc "Add a crop wrangler user, by name"
# usage: rake growstuff:cropwrangler_user name=skud
task cropwrangler_user: :environment do
add_role_to_member! ENV['name'], 'Crop Wrangler'
add_role_to_member! ENV.fetch('name', nil), 'Crop Wrangler'
end
def add_role_to_member!(login_name, role_name)
unless login_name && role_name
raise "Usage: rake growstuff:[rolename] name=[username] "\
"\n (login name is case-sensitive)\n"
raise "Usage: rake growstuff:[rolename] name=[username] " \
"\n (login name is case-sensitive)\n"
end
member = Member.find_by!(login_name:)
role = Role.find_by!(name: role_name)
@@ -31,7 +31,7 @@ namespace :growstuff do
task import_crops: :environment do
require 'csv'
(@file = ENV['file']) || raise("Usage: rake growstuff:import_crops file=file.csv")
(@file = ENV.fetch('file', nil)) || raise("Usage: rake growstuff:import_crops file=file.csv")
puts "Loading crops from #{@file}..."
CSV.foreach(@file) do |row|

View File

@@ -5,12 +5,12 @@ require "English"
if ENV['CI']
if ENV['GITHUB_EVENT_NAME'] == 'pull_request'
author = ENV['GITHUB_ACTOR']
author = ENV.fetch('GITHUB_ACTOR', nil)
exit 1 unless author
elsif ENV['TRAVIS_PULL_REQUEST']
require 'httparty'
repo = ENV['TRAVIS_REPO_SLUG']
repo = ENV.fetch('TRAVIS_REPO_SLUG', nil)
pr = ENV['TRAVIS_PULL_REQUEST']
url = "https://api.github.com/repos/#{repo}/pulls/#{pr}"
response = HTTParty.get(url).parsed_response

View File

@@ -4,8 +4,8 @@
require 'platform-api'
require 'yaml'
heroku = PlatformAPI.connect(ENV['HEROKU_API_KEY'])
branch = ENV['TRAVIS_BRANCH']
heroku = PlatformAPI.connect(ENV.fetch('HEROKU_API_KEY', nil))
branch = ENV.fetch('TRAVIS_BRANCH', nil)
travis_config = YAML.load_file('.travis.yml')
if travis_config['deploy']['app'].key? branch
app = travis_config['deploy']['app'][branch]

View File

@@ -28,7 +28,7 @@ describe CropsController do
end
end
describe "GET crop hierarchy " do
describe "GET crop hierarchy" do
describe 'fetches the crop hierarchy page' do
context 'wrangler' do
include_context 'login as wrangler'
@@ -82,8 +82,8 @@ describe CropsController do
name: 'aubergine',
en_wikipedia_url: "https://en.wikipedia.org/wiki/Eggplant"
},
alt_name: { "1": "egg plant", "2": "purple apple" },
sci_name: { "1": "fancy sci name", "2": "" }
alt_name: { '1': "egg plant", '2': "purple apple" },
sci_name: { '1': "fancy sci name", '2': "" }
}
end

View File

@@ -3,24 +3,23 @@
# Read about factories at https://github.com/thoughtbot/factory_bot
FactoryBot.define do
factory :activity do
name { "Admire" }
description { "Spend 10 minutes admiring your hard work" }
category { "General" }
owner
trait :garden do
category { "Soil Cultivation" }
description { "Apply compost from winter" }
due_date { 3.months.from_now }
garden
end
factory :activity do
name { "Admire" }
description { "Spend 10 minutes admiring your hard work" }
category { "General" }
owner
trait :planting do
category { "Pruning" }
description { "Stake tomato" }
planting
end
trait :garden do
category { "Soil Cultivation" }
description { "Apply compost from winter" }
due_date { 3.months.from_now }
garden
end
trait :planting do
category { "Pruning" }
description { "Stake tomato" }
planting
end
end
end

View File

@@ -19,4 +19,4 @@ describe "newsletter subscribers", :js do
it { expect(page).to have_current_path admin_newsletter_path, ignore_query: true }
it { expect(page).to have_content @subscriber.email }
end
end
end

View File

@@ -37,7 +37,7 @@ describe "Conversations", :js do
describe 'restore conversation' do
before { click_link class: 'restore' }
it { expect(page).not_to have_content 'something i want to say' }
it { expect(page).to have_no_content 'something i want to say' }
describe 'conversation was restored' do
before { click_link 'inbox' }
@@ -61,8 +61,8 @@ describe "Conversations", :js do
all('input[type=checkbox]').each(&:click)
click_button 'Delete'
expect(page).not_to have_content 'this is a message'
expect(page).not_to have_content 'this is another message'
expect(page).to have_no_content 'this is a message'
expect(page).to have_no_content 'this is another message'
end
it 'deletes multiple conversations from the sentbox' do
@@ -81,8 +81,8 @@ describe "Conversations", :js do
expect(page).to have_selector('.sent')
find('.sent').click
expect(page).not_to have_content 'this is a message'
expect(page).not_to have_content 'this is another message'
expect(page).to have_no_content 'this is a message'
expect(page).to have_no_content 'this is another message'
end
end
end

View File

@@ -46,7 +46,7 @@ describe "Alternate names", :js do
accept_confirm do
click_link 'Delete'
end
expect(page).not_to have_content alternate_eggplant.name
expect(page).to have_no_content alternate_eggplant.name
expect(page).to have_content 'Alternate name was successfully deleted'
end

View File

@@ -19,11 +19,11 @@ describe "browse crops", :search do
end
it "pending crops are not listed" do
expect(page).not_to have_content pending_crop.name
expect(page).to have_no_content pending_crop.name
end
it "rejected crops are not listed" do
expect(page).not_to have_content rejected_crop.name
expect(page).to have_no_content rejected_crop.name
end
end
@@ -35,7 +35,7 @@ describe "browse crops", :search do
context 'anon' do
include_examples 'shows crops'
it { expect(page).not_to have_link "Add New Crop" }
it { expect(page).to have_no_link "Add New Crop" }
end
context 'member' do

View File

@@ -22,7 +22,7 @@ describe "crop detail page", :js do
context "varieties" do
it "The crop DOES NOT have varieties" do
visit crop_path(crop)
expect(page).not_to have_text 'Varieties'
expect(page).to have_no_text 'Varieties'
end
end
@@ -92,7 +92,7 @@ describe "crop detail page", :js do
it "User not signed in" do
visit crop_path(seed.crop)
expect(page).not_to have_content "You have 20 seeds"
expect(page).to have_no_content "You have 20 seeds"
end
context 'signed in' do
@@ -194,7 +194,7 @@ describe "crop detail page", :js do
it { expect(page).to have_text 'Annual' }
it { expect(page).to have_text 'living and reproducing in a single year or less' }
it { expect(page).not_to have_text 'Perennial' }
it { expect(page).to have_no_text 'Perennial' }
end
context 'crop is Perennial' do
@@ -202,14 +202,14 @@ describe "crop detail page", :js do
it { expect(page).to have_text 'Perennial' }
it { expect(page).to have_text 'living more than two years' }
it { expect(page).not_to have_text 'Annual' }
it { expect(page).to have_no_text 'Annual' }
end
context 'crop Perennial value is null' do
let(:crop) { FactoryBot.create(:crop, perennial: nil) }
it { expect(page).not_to have_text 'Perennial' }
it { expect(page).not_to have_text 'Annual' }
it { expect(page).to have_no_text 'Perennial' }
it { expect(page).to have_no_text 'Annual' }
end
end
end

View File

@@ -69,7 +69,7 @@ describe "crop detail page", :js, :search do
include_examples "shows photos"
end
context "when not signed in " do
context "when not signed in" do
include_examples "shows photos"
end
end

View File

@@ -75,11 +75,11 @@ context "signed in non-wrangler" do
it "can't see wrangling page without js", js: false do
visit root_path
expect(page).not_to have_link "Crop Wrangling"
expect(page).to have_no_link "Crop Wrangling"
end
it "can't see wrangling page with js" do
visit member_path(member)
expect(page).not_to have_link "Crop Wrangling"
expect(page).to have_no_link "Crop Wrangling"
end
end

View File

@@ -6,14 +6,14 @@ describe "crop wrangling button" do
context 'not signed in' do
before { visit crops_path }
it { expect(page).not_to have_link "Wrangle Crops", href: wrangle_crops_path }
it { expect(page).to have_no_link "Wrangle Crops", href: wrangle_crops_path }
end
context "signed in, but not a crop wrangler" do
include_context 'signed in member'
before { visit crops_path }
it { expect(page).not_to have_link "Wrangle Crops", href: wrangle_crops_path }
it { expect(page).to have_no_link "Wrangle Crops", href: wrangle_crops_path }
end
context "signed in crop wrangler" do

View File

@@ -49,7 +49,7 @@ describe "Scientific names", :js do
end
end
# expect(page.status_code).to equal 200
expect(page).not_to have_content zea_mays.name
expect(page).to have_no_content zea_mays.name
expect(page).to have_content 'Scientific name was successfully deleted.'
end

View File

@@ -51,7 +51,7 @@ describe "Gardens" do
include_examples "has buttons bar at top"
describe 'does not show actions on other member garden' do
it { is_expected.not_to have_link 'Actions' }
it { is_expected.to have_no_link 'Actions' }
end
end
end
@@ -73,7 +73,7 @@ describe "Gardens" do
describe "someone else's garden" do
before { visit garden_path(other_member_garden) }
it { is_expected.not_to have_link 'Actions' }
it { is_expected.to have_no_link 'Actions' }
end
end
end

View File

@@ -33,7 +33,7 @@ describe "Gardens", :js do
fill_in "Name", with: "Negative Garden"
fill_in "Area", with: -5
click_button "Save"
expect(page).not_to have_content "Garden was successfully created"
expect(page).to have_no_content "Garden was successfully created"
expect(page).to have_content "Area must be greater than or equal to 0"
end
end

View File

@@ -31,7 +31,7 @@ describe "Planting a crop", :js do
click_link 'Actions'
expect(page).to have_content "Mark as active"
expect(page).not_to have_content "Mark as inactive"
expect(page).to have_no_content "Mark as inactive"
end
it "List only active gardens" do
@@ -41,7 +41,7 @@ describe "Planting a crop", :js do
click_link "Mark as inactive"
end
visit gardens_path
expect(page).not_to have_link garden_path(garden)
expect(page).to have_no_link garden_path(garden)
end
it "Create new garden" do
@@ -57,7 +57,7 @@ describe "Planting a crop", :js do
fill_in "Name", with: "Negative Garden"
fill_in "Area", with: -5
click_button "Save"
expect(page).not_to have_content "Garden was successfully created"
expect(page).to have_no_content "Garden was successfully created"
expect(page).to have_content "Area must be greater than or equal to 0"
end
@@ -124,7 +124,7 @@ describe "Planting a crop", :js do
it "List only active plantings on a garden" do
visit gardens_path
expect(page).not_to have_content finished_planting.crop_name
expect(page).to have_no_content finished_planting.crop_name
end
end

View File

@@ -40,7 +40,7 @@ describe "Gardens#index", :js do
end
it "does not show inactive garden" do
expect(page).not_to have_text inactive_garden.name
expect(page).to have_no_text inactive_garden.name
end
it "links to active garden" do
@@ -48,7 +48,7 @@ describe "Gardens#index", :js do
end
it "does not link to inactive gardens" do
expect(page).not_to have_link(inactive_garden.name, href: garden_path(inactive_garden))
expect(page).to have_no_link(inactive_garden.name, href: garden_path(inactive_garden))
end
end
@@ -72,7 +72,7 @@ describe "Gardens#index", :js do
end
it "does not show finished planting" do
expect(page).not_to have_text(finished_planting.crop.name)
expect(page).to have_no_text(finished_planting.crop.name)
end
end
end
@@ -113,7 +113,7 @@ describe "Gardens#index", :js do
it { expect(page).to have_link href: planting_path(planting) }
it { expect(page).to have_link href: garden_path(planting.garden) }
it { expect(page).to have_text '7 weeks' }
it { expect(page).not_to have_text 'harvesting now' }
it { expect(page).to have_no_text 'harvesting now' }
end
describe 'harvesting now' do
@@ -128,7 +128,7 @@ describe "Gardens#index", :js do
it { expect(crop.median_lifespan).to eq 90 }
it { expect(page).to have_text 'harvesting now' }
it { expect(page).not_to have_text 'Predicted weeks until harvest' }
it { expect(page).to have_no_text 'Predicted weeks until harvest' }
end
describe 'super late' do
@@ -139,9 +139,9 @@ describe "Gardens#index", :js do
end
it { expect(page).to have_text 'super late' }
it { expect(page).not_to have_text 'harvesting now' }
it { expect(page).not_to have_text 'Predicted weeks until harvest' }
it { expect(page).not_to have_text 'Predicted weeks until planting is finished' }
it { expect(page).to have_no_text 'harvesting now' }
it { expect(page).to have_no_text 'Predicted weeks until harvest' }
it { expect(page).to have_no_text 'Predicted weeks until planting is finished' }
end
end
end

View File

@@ -19,7 +19,7 @@ describe "browse harvests", :search do
end
it 'read more' do
expect(subject).not_to have_link "Read more"
expect(subject).to have_no_link "Read more"
end
end

View File

@@ -104,7 +104,7 @@ describe "home page", :search do
describe 'should say welcome' do
before { visit root_path }
it { expect(page).to have_content "Welcome to #{ENV['GROWSTUFF_SITE_NAME']}, #{member.login_name}" }
it { expect(page).to have_content "Welcome to #{ENV.fetch('GROWSTUFF_SITE_NAME', nil)}, #{member.login_name}" }
end
end
end

View File

@@ -18,7 +18,7 @@ describe "members list" do
end
it { expect(page).to have_link admin.login_name }
it { expect(page).not_to have_link spammer.login_name }
it { expect(page).to have_no_link spammer.login_name }
end
end
end

View File

@@ -117,9 +117,9 @@ describe "member deletion" do
it "removes members from following" do
visit member_follows_path(other_member)
expect(page).not_to have_content member.login_name.to_s
expect(page).to have_no_content member.login_name.to_s
visit member_followers_path(other_member)
expect(page).not_to have_content member.login_name.to_s
expect(page).to have_no_content member.login_name.to_s
end
it "replaces posts with deletion note" do
@@ -131,7 +131,7 @@ describe "member deletion" do
FactoryBot.create(:comment, post: othermemberpost, author: member, body: 'i am deleting my account')
visit post_path(othermemberpost)
expect(page).not_to have_content member.login_name
expect(page).to have_no_content member.login_name
expect(page).to have_content other_member.login_name
expect(page).to have_content "Member Deleted"
end
@@ -166,7 +166,7 @@ describe "member deletion" do
login_as(otherwrangler)
visit edit_crop_path(crop)
expect(page).to have_content member.login_name
expect(page).not_to have_content "cropbot"
expect(page).to have_no_content "cropbot"
logout
login_as(member)
visit member_path(member)
@@ -176,7 +176,7 @@ describe "member deletion" do
click_button "Delete"
login_as(otherwrangler)
visit edit_crop_path(crop)
expect(page).not_to have_content member.login_name
expect(page).to have_no_content member.login_name
end
end
end

View File

@@ -8,8 +8,8 @@ describe "follows", :js do
it "follow buttons on member profile page" do
visit member_path(member)
expect(page).not_to have_link "Follow"
expect(page).not_to have_link "Unfollow"
expect(page).to have_no_link "Follow"
expect(page).to have_no_link "Unfollow"
end
end
@@ -19,8 +19,8 @@ describe "follows", :js do
it "your profile doesn't have a follow button" do
visit member_path(member)
expect(page).not_to have_link "Follow"
expect(page).not_to have_link "Unfollow"
expect(page).to have_no_link "Follow"
expect(page).to have_no_link "Unfollow"
end
context "following another member" do
@@ -66,7 +66,7 @@ describe "follows", :js do
click_link 'Follow'
click_link 'Unfollow'
visit member_follows_path(member)
expect(page).not_to have_content other_member.login_name
expect(page).to have_no_content other_member.login_name
visit member_followers_path(other_member)
expect(page).to have_content member.login_name
end

View File

@@ -32,9 +32,9 @@ describe "member profile", :js do
it "member has not set location" do
visit member_path(member)
expect(page).not_to have_css("h1>small")
expect(page).not_to have_css("#membermap")
expect(page).not_to have_content "See other members"
expect(page).to have_no_css("h1>small")
expect(page).to have_no_css("#membermap")
expect(page).to have_no_content "See other members"
end
end
@@ -47,7 +47,7 @@ describe "member profile", :js do
it "private email address" do
visit member_path(member)
expect(page).not_to have_content member.email
expect(page).to have_no_content member.email
end
end
@@ -55,10 +55,10 @@ describe "member profile", :js do
it "with no activity" do
visit member_path(member)
expect(page).to have_content "Stats"
expect(page).not_to have_content "0 plantings"
expect(page).not_to have_content "0 harvests"
expect(page).not_to have_content "0 seeds"
expect(page).not_to have_content "0 posts"
expect(page).to have_no_content "0 plantings"
expect(page).to have_no_content "0 harvests"
expect(page).to have_no_content "0 seeds"
expect(page).to have_no_content "0 posts"
end
context "with some activity" do
@@ -102,8 +102,8 @@ describe "member profile", :js do
it "ordinary user's page" do
visit member_path(other_member)
expect(page).not_to have_text "Crop Wrangler"
expect(page).not_to have_text "Admin"
expect(page).to have_no_text "Crop Wrangler"
expect(page).to have_no_text "Admin"
end
end
end
@@ -120,7 +120,7 @@ describe "member profile", :js do
it { expect(page).to have_link href: planting_path(new_planting) }
it { expect(page).to have_link href: planting_path(old_planting) }
it { expect(page).to have_link href: planting_path(finished_planting) }
it { expect(page).not_to have_link href: planting_path(no_planted_at_planting) }
it { expect(page).to have_no_link href: planting_path(no_planted_at_planting) }
end
context 'member has activities' do
@@ -257,7 +257,7 @@ describe "member profile", :js do
expect(page).to have_link "Send message", href: new_message_path(recipient_id: other_member.id)
end
it { expect(page).not_to have_link "Edit profile", href: edit_member_registration_path }
it { expect(page).to have_no_link "Edit profile", href: edit_member_registration_path }
end
end
end

View File

@@ -18,7 +18,7 @@ describe "User searches" do
it { expect(page).to have_content "community near Philippines" }
it { expect(page).to have_button "search_button" }
it { expect(page).to have_content "Nearby members" }
it { expect(page).not_to have_content "No results found" }
it { expect(page).to have_no_content "No results found" }
end
it "with a blank search string" do

View File

@@ -23,7 +23,7 @@ describe "Planting reminder email", :js do
end
it "doesn't list plantings" do
expect(mail).not_to have_content "Progress report"
expect(mail).to have_no_content "Progress report"
end
end
@@ -43,7 +43,7 @@ describe "Planting reminder email", :js do
context "when member has no harvests" do
it "doesn't list plantings" do
expect(mail).not_to have_content "Ready to harvest"
expect(mail).to have_no_content "Ready to harvest"
end
end

View File

@@ -102,8 +102,8 @@ describe "Planting a crop", :js, :search do
end
expect(page).to have_content "planting was successfully created"
expect(page).not_to have_content "Finished"
expect(page).not_to have_content "Finishes"
expect(page).to have_no_content "Finished"
expect(page).to have_no_content "Finishes"
end
it "shows that planting is in progress" do
@@ -122,9 +122,9 @@ describe "Planting a crop", :js, :search do
end
expect(page).to have_content "planting was successfully created"
expect(page).not_to have_content "0%"
expect(page).not_to have_content "Finish expected"
expect(page).not_to have_content "Finishes"
expect(page).to have_no_content "0%"
expect(page).to have_no_content "Finish expected"
expect(page).to have_no_content "Finishes"
end
it "shows that planting is 100% complete (no date specified)" do
@@ -184,7 +184,7 @@ describe "Planting a crop", :js, :search do
it "Editing a planting to fill in the finished date" do
visit planting_path(planting)
expect(page).not_to have_content "Finishes"
expect(page).to have_no_content "Finishes"
# click_link(id: 'planting-actions-button')
click_link 'Actions'
click_link "Edit"
@@ -230,7 +230,7 @@ describe "Planting a crop", :js, :search do
# shouldn't be on the page
visit plantings_path
expect(page).not_to have_content "maize"
expect(page).to have_no_content "maize"
# show all plantings to see this finished planting
visit plantings_path(all: 1)

View File

@@ -22,7 +22,7 @@ describe "Display a planting", :js do
context 'Annual no predictions' do
let(:planting) { FactoryBot.create(:annual_planting) }
it { expect(page).not_to have_text 'Finish expected' }
it { expect(page).to have_no_text 'Finish expected' }
end
context 'Annual with predicted finish' do

View File

@@ -10,6 +10,6 @@ describe 'Comments RSS feed' do
it 'The index title is what we expect' do
visit comments_path(format: 'rss')
expect(page).to have_content "Recent comments on all posts (#{ENV['GROWSTUFF_SITE_NAME']})"
expect(page).to have_content "Recent comments on all posts (#{ENV.fetch('GROWSTUFF_SITE_NAME', nil)})"
end
end

View File

@@ -12,6 +12,6 @@ describe 'Crops RSS feed' do
it 'The index title is what we expect' do
Crop.reindex
visit crops_path(format: 'rss')
expect(page).to have_content "Recently added crops (#{ENV['GROWSTUFF_SITE_NAME']})"
expect(page).to have_content "Recently added crops (#{ENV.fetch('GROWSTUFF_SITE_NAME', nil)})"
end
end

View File

@@ -8,6 +8,6 @@ describe 'Members RSS feed' do
before { visit member_path(member, format: 'rss') }
it 'The show action title is what we expect' do
expect(page).to have_content "#{member.login_name}'s recent posts (#{ENV['GROWSTUFF_SITE_NAME']})"
expect(page).to have_content "#{member.login_name}'s recent posts (#{ENV.fetch('GROWSTUFF_SITE_NAME', nil)})"
end
end

View File

@@ -11,7 +11,7 @@ describe 'Plantings RSS feed' do
it 'The index title is what we expect' do
Planting.reindex
visit plantings_path(format: 'rss')
expect(page).to have_content "Recent plantings from "\
"#{@owner || 'all members'} (#{ENV['GROWSTUFF_SITE_NAME']})"
expect(page).to have_content "Recent plantings from " \
"#{@owner || 'all members'} (#{ENV.fetch('GROWSTUFF_SITE_NAME', nil)})"
end
end

View File

@@ -10,7 +10,7 @@ describe 'Posts RSS feed' do
it 'The index title is what we expect' do
visit posts_path(format: 'rss')
expect(page).to have_content "Recent posts from "\
"#{@author || 'all members'} (#{ENV['GROWSTUFF_SITE_NAME']})"
expect(page).to have_content "Recent posts from " \
"#{@author || 'all members'} (#{ENV.fetch('GROWSTUFF_SITE_NAME', nil)})"
end
end

View File

@@ -10,7 +10,7 @@ describe 'Seeds RSS feed' do
it 'The index title is what we expect' do
visit seeds_path(format: 'rss')
expect(page).to have_content "Recent seeds from "\
"#{@owner || 'all members'} (#{ENV['GROWSTUFF_SITE_NAME']})"
expect(page).to have_content "Recent seeds from " \
"#{@owner || 'all members'} (#{ENV.fetch('GROWSTUFF_SITE_NAME', nil)})"
end
end

View File

@@ -17,7 +17,7 @@ describe "Seeds", :js, :search do
end
describe "displays required and optional fields properly" do
# Note: The required behaviour is pushed down to the control itself, not the form-group as of rails 7.1.
# NOTE: The required behaviour is pushed down to the control itself, not the form-group as of rails 7.1.
# Modern browsers enforce the required behaviour better than us doing it ourselves.
it { expect(page).to have_selector "label", text: "Crop" }
it { expect(page).to have_selector 'input#seed_quantity' }

View File

@@ -17,8 +17,8 @@ shared_examples "crop suggest" do |resource|
fill_autocomplete "crop", with: "pe"
end
expect(page).not_to have_content("pear")
expect(page).not_to have_content("pea")
expect(page).to have_no_content("pear")
expect(page).to have_no_content("pea")
within "form#new_#{resource}" do
fill_autocomplete "crop", with: "pea"
@@ -66,9 +66,7 @@ shared_examples "crop suggest" do |resource|
within "form#new_#{resource}" do
fill_autocomplete "crop", with: "Ryan Gosling"
# Some forms require additional selections before submission.
if resource == "harvest"
choose plant_part.name
end
choose plant_part.name if resource == "harvest"
click_button "Save"
end

View File

@@ -27,7 +27,7 @@ describe "timeline", :js do
it { expect(page).to have_link href: planting_path(friend_planting) }
it { expect(page).to have_link href: planting_path(friend_harvest) }
it { expect(page).to have_link href: planting_path(finished_planting) }
it { expect(page).not_to have_link href: planting_path(no_planted_at_planting) }
it { expect(page).to have_no_link href: planting_path(no_planted_at_planting) }
end
describe 'shows the friends you follow' do

View File

@@ -29,7 +29,7 @@ describe GardensHelper do
garden = FactoryBot.create(:garden,
description: 'a' * 140)
result = helper.display_garden_description(garden)
expect(result).to eq 'a' * 126 + '...' + ' ' + link_to("Read more", garden_path(garden))
expect(result).to eq ('a' * 126) + '...' + ' ' + link_to("Read more", garden_path(garden))
end
end

View File

@@ -29,7 +29,7 @@ describe SeedsHelper do
seed = FactoryBot.create(:seed,
description: 'a' * 140)
result = helper.display_seed_description(seed)
expect(result).to eq 'a' * 126 + '...' + ' ' + link_to("Read more", seed_path(seed))
expect(result).to eq ('a' * 126) + '...' + ' ' + link_to("Read more", seed_path(seed))
end
end
end

View File

@@ -119,7 +119,6 @@ describe Ability do
end
end
context 'members' do
context 'ordinary member' do
it "can't manage members" do

View File

@@ -144,7 +144,7 @@ describe Post do
end
it "does not duplicate" do
expect(post.crops) =~ [tomato, maize]
expect(post.crops).to match_array([tomato, maize])
end
it "is updated when post was modified" do

View File

@@ -51,7 +51,7 @@ describe Seed do
@seed = FactoryBot.build(:seed, tradable_to: 'not valid')
@seed.should_not be_valid
@seed.errors[:tradable_to].should include(
"You may only trade seed nowhere, locally, "\
"You may only trade seed nowhere, locally, " \
"nationally, or internationally"
)
end

View File

@@ -127,7 +127,6 @@ RSpec.configure do |config|
# Prevent Poltergeist from fetching external URLs during feature tests
config.before(:each, :js) do
# TODO: Why are we setting this page size then straight afterwards, maximising?
width = 1280
height = 1280

View File

@@ -41,12 +41,12 @@ RSpec.describe 'Gardens', type: :request do
end
it '#index' do
get '/api/v1/gardens', params: {}, headers: headers
get('/api/v1/gardens', params: {}, headers:)
expect(subject['data']).to include(garden_encoded_as_json_api)
end
it '#show' do
get "/api/v1/gardens/#{garden.id}", params: {}, headers: headers
get("/api/v1/gardens/#{garden.id}", params: {}, headers:)
expect(subject['data']).to include(garden_encoded_as_json_api)
end

View File

@@ -78,14 +78,14 @@ RSpec.describe 'Plantings', type: :request do
end
it '#index' do
get '/api/v1/plantings', params: {}, headers: headers
get('/api/v1/plantings', params: {}, headers:)
expect(subject['data'][0].keys).to eq(planting_encoded_as_json_api.keys)
expect(subject['data'][0]['attributes'].keys.sort!).to eq(planting_encoded_as_json_api['attributes'].keys.sort!)
expect(subject['data']).to include(planting_encoded_as_json_api)
end
it '#show' do
get "/api/v1/plantings/#{planting.id}", params: {}, headers: headers
get("/api/v1/plantings/#{planting.id}", params: {}, headers:)
expect(subject['data']['relationships']).to include("garden" => garden_as_json_api)
expect(subject['data']['relationships']).to include("crop" => crop_as_json_api)
expect(subject['data']['relationships']).to include("owner" => owner_as_json_api)

View File

@@ -15,7 +15,8 @@ describe "Plantings" do
before do
@member = create(:interesting_member)
@predictable_planting = create(:predictable_planting, owner: @member, planted_at: 1.days.ago, days_to_first_harvest: 10, days_to_last_harvest: 20)
@predictable_planting = create(:predictable_planting, owner: @member, planted_at: 1.days.ago, days_to_first_harvest: 10,
days_to_last_harvest: 20)
@predictable_planting.crop.update(median_days_to_first_harvest: 10)
@seedling_planting = create(:seedling_planting, owner: @member)

View File

@@ -16,7 +16,7 @@ describe "crops/show" do
it "hides sunniness block if no sunniness" do
render
expect(rendered).not_to have_content "Sunniness"
expect(rendered).to have_no_content "Sunniness"
end
it "has sunniness block if sunny planting" do
@@ -27,7 +27,7 @@ describe "crops/show" do
it "hides planted from block if no planted_from" do
render
expect(rendered).not_to have_content "Planted from"
expect(rendered).to have_no_content "Planted from"
end
it "has planted from block if seed planting" do
@@ -38,7 +38,7 @@ describe "crops/show" do
it "hides harvested block if no harvests" do
render
expect(rendered).not_to have_content "Harvested for"
expect(rendered).to have_no_content "Harvested for"
end
it "has harvested block if harvest" do

View File

@@ -46,7 +46,7 @@ describe "plantings/show" do
render
end
it { expect(rendered).not_to have_content 'Planted from' }
it { expect(rendered).to have_no_content 'Planted from' }
end
end
@@ -82,7 +82,7 @@ describe "plantings/show" do
end
it "doesn't contain a () if no location is set" do
expect(rendered).not_to have_content "()"
expect(rendered).to have_no_content "()"
end
end

View File

@@ -68,7 +68,7 @@ describe "posts/_single" do
end
it "shows the updated time" do
rendered.should have_content @post.updated_at
rendered.should have_content @post.updated_at.to_fs(:default)
end
end

View File

@@ -25,7 +25,7 @@ describe "posts/new" do
end
it 'no forum mentioned' do
expect(rendered).not_to have_content "This post will be posted in the forum"
expect(rendered).to have_no_content "This post will be posted in the forum"
end
it "asks what's going on in your garden" do

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