mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-06-03 05:43:59 -04:00
Compare commits
114 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ba9117db4d | ||
|
|
474f09e110 | ||
|
|
0a89ac7e28 | ||
|
|
8485bec90d | ||
|
|
1427446500 | ||
|
|
8f6738eefa | ||
|
|
be73a479ad | ||
|
|
e0aaa9e44f | ||
|
|
d823bbb743 | ||
|
|
73c7158454 | ||
|
|
253fe0b903 | ||
|
|
08e47b89f1 | ||
|
|
684768ba5c | ||
|
|
ebdba592b3 | ||
|
|
183d910e7e | ||
|
|
d9ba4fabe7 | ||
|
|
c4216cb337 | ||
|
|
1a65457c78 | ||
|
|
ee848ea4c9 | ||
|
|
866a428dd5 | ||
|
|
086e440fe5 | ||
|
|
bca0c06d7f | ||
|
|
5cdf8a1316 | ||
|
|
0fc486685a | ||
|
|
707920e8e1 | ||
|
|
cbae940741 | ||
|
|
606d811b73 | ||
|
|
d59a80d706 | ||
|
|
bf39e0dbd9 | ||
|
|
d8502b7d99 | ||
|
|
d3903dc2b1 | ||
|
|
374f09c805 | ||
|
|
0cc44bf1a8 | ||
|
|
f7222c80a7 | ||
|
|
e56f444dc6 | ||
|
|
832460d95c | ||
|
|
c01e88eeda | ||
|
|
7312317ab7 | ||
|
|
3eaef40d92 | ||
|
|
4123ea5929 | ||
|
|
7b6351ccdb | ||
|
|
931f351f2f | ||
|
|
62decd2054 | ||
|
|
ad8d479a5d | ||
|
|
0460a16841 | ||
|
|
a55a066fbe | ||
|
|
8c7a073f10 | ||
|
|
d2aa471afd | ||
|
|
81f670cafc | ||
|
|
4cd0b66ccc | ||
|
|
80337489e6 | ||
|
|
2c0e451dbb | ||
|
|
7e35be1592 | ||
|
|
1fca1a234b | ||
|
|
a559093324 | ||
|
|
a667183b1d | ||
|
|
1b3f1220e3 | ||
|
|
578648b86f | ||
|
|
c0d918ac8f | ||
|
|
91e305a40a | ||
|
|
3cd8e39a58 | ||
|
|
30ba5b2068 | ||
|
|
f0ef5671fa | ||
|
|
22c3947b57 | ||
|
|
3fd3ea1e3f | ||
|
|
171afc5a05 | ||
|
|
24400c4bf8 | ||
|
|
b6c6ee5195 | ||
|
|
9d55aeecf1 | ||
|
|
fcec1cf8bb | ||
|
|
6bfda9b8cf | ||
|
|
4576a689f1 | ||
|
|
e9306c0652 | ||
|
|
f7da8773cc | ||
|
|
d1295dcace | ||
|
|
394fbbae55 | ||
|
|
dbcafae9c2 | ||
|
|
a48a082d98 | ||
|
|
6dca8a8103 | ||
|
|
12887fb17a | ||
|
|
1a005062c1 | ||
|
|
6f01c0cf53 | ||
|
|
44e9928805 | ||
|
|
63d65c4e6b | ||
|
|
852ac600f4 | ||
|
|
e182beb12a | ||
|
|
ae33785fc2 | ||
|
|
169d452c1f | ||
|
|
7d5fb63f88 | ||
|
|
f1508cb960 | ||
|
|
a5a201a2e6 | ||
|
|
d3fdd65dd3 | ||
|
|
e9a187b3df | ||
|
|
7b7bf9f4e9 | ||
|
|
d9851231f2 | ||
|
|
f82eabec42 | ||
|
|
83bf752a02 | ||
|
|
6ffdd283e4 | ||
|
|
d8e138ae2d | ||
|
|
81b80d9bb7 | ||
|
|
f080a8a566 | ||
|
|
5a436f9d7f | ||
|
|
a4fd1c4a8e | ||
|
|
7277cb3523 | ||
|
|
522d10e053 | ||
|
|
f3a9b26c8e | ||
|
|
d8f5580ef9 | ||
|
|
d9e58f6bf0 | ||
|
|
60ec4e8d18 | ||
|
|
ede7e6e7f7 | ||
|
|
9c62f955e2 | ||
|
|
6b313c190f | ||
|
|
c575f9d03c | ||
|
|
95a4b0c66c |
@@ -27,7 +27,7 @@ services:
|
|||||||
command: sleep infinity
|
command: sleep infinity
|
||||||
|
|
||||||
db:
|
db:
|
||||||
image: postgres:latest
|
image: postgres:17
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- postgres-data:/var/lib/postgresql/data
|
- postgres-data:/var/lib/postgresql/data
|
||||||
|
|||||||
6
.github/workflows/ci-features-admin.yml
vendored
6
.github/workflows/ci-features-admin.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
|
|||||||
6
.github/workflows/ci-features-comments.yml
vendored
6
.github/workflows/ci-features-comments.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
|
|||||||
6
.github/workflows/ci-features-crops.yml
vendored
6
.github/workflows/ci-features-crops.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
|
|||||||
6
.github/workflows/ci-features-gardens.yml
vendored
6
.github/workflows/ci-features-gardens.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
|
|||||||
6
.github/workflows/ci-features-harvests.yml
vendored
6
.github/workflows/ci-features-harvests.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
6
.github/workflows/ci-features-home.yml
vendored
6
.github/workflows/ci-features-home.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
6
.github/workflows/ci-features-members.yml
vendored
6
.github/workflows/ci-features-members.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
6
.github/workflows/ci-features-places.yml
vendored
6
.github/workflows/ci-features-places.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
|
|||||||
6
.github/workflows/ci-features-plantings.yml
vendored
6
.github/workflows/ci-features-plantings.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
|
|||||||
6
.github/workflows/ci-features-posts.yml
vendored
6
.github/workflows/ci-features-posts.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
|
|||||||
6
.github/workflows/ci-features-seeds.yml
vendored
6
.github/workflows/ci-features-seeds.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
|
|||||||
6
.github/workflows/ci-features-timeline.yml
vendored
6
.github/workflows/ci-features-timeline.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -103,7 +103,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
6
.github/workflows/ci-features.yml
vendored
6
.github/workflows/ci-features.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -74,7 +74,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
@@ -112,7 +112,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload screenshots
|
- name: Upload screenshots
|
||||||
if: failure()
|
if: failure()
|
||||||
uses: actions/upload-artifact@v4
|
uses: actions/upload-artifact@v5
|
||||||
with:
|
with:
|
||||||
name: screenshots
|
name: screenshots
|
||||||
path: tmp/screenshots
|
path: tmp/screenshots
|
||||||
6
.github/workflows/ci.yml
vendored
6
.github/workflows/ci.yml
vendored
@@ -6,7 +6,7 @@ jobs:
|
|||||||
contributors:
|
contributors:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v6
|
||||||
- name: Install ruby version specified in .ruby-version
|
- name: Install ruby version specified in .ruby-version
|
||||||
uses: ruby/setup-ruby@v1
|
uses: ruby/setup-ruby@v1
|
||||||
with:
|
with:
|
||||||
@@ -53,7 +53,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout this repo
|
- name: Checkout this repo
|
||||||
uses: actions/checkout@v5
|
uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Configure sysctl limits
|
- name: Configure sysctl limits
|
||||||
run: |
|
run: |
|
||||||
@@ -89,7 +89,7 @@ jobs:
|
|||||||
sudo apt-get -y install libpq-dev google-chrome-stable
|
sudo apt-get -y install libpq-dev google-chrome-stable
|
||||||
|
|
||||||
- name: Install NodeJS
|
- name: Install NodeJS
|
||||||
uses: actions/setup-node@v5
|
uses: actions/setup-node@v6
|
||||||
with:
|
with:
|
||||||
node-version: '12'
|
node-version: '12'
|
||||||
|
|
||||||
|
|||||||
278
Gemfile.lock
278
Gemfile.lock
@@ -33,47 +33,49 @@ GEM
|
|||||||
GEM
|
GEM
|
||||||
remote: https://rubygems.org/
|
remote: https://rubygems.org/
|
||||||
specs:
|
specs:
|
||||||
actioncable (7.2.2.2)
|
actioncable (7.2.3)
|
||||||
actionpack (= 7.2.2.2)
|
actionpack (= 7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
websocket-driver (>= 0.6.1)
|
websocket-driver (>= 0.6.1)
|
||||||
zeitwerk (~> 2.6)
|
zeitwerk (~> 2.6)
|
||||||
actionmailbox (7.2.2.2)
|
actionmailbox (7.2.3)
|
||||||
actionpack (= 7.2.2.2)
|
actionpack (= 7.2.3)
|
||||||
activejob (= 7.2.2.2)
|
activejob (= 7.2.3)
|
||||||
activerecord (= 7.2.2.2)
|
activerecord (= 7.2.3)
|
||||||
activestorage (= 7.2.2.2)
|
activestorage (= 7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
mail (>= 2.8.0)
|
mail (>= 2.8.0)
|
||||||
actionmailer (7.2.2.2)
|
actionmailer (7.2.3)
|
||||||
actionpack (= 7.2.2.2)
|
actionpack (= 7.2.3)
|
||||||
actionview (= 7.2.2.2)
|
actionview (= 7.2.3)
|
||||||
activejob (= 7.2.2.2)
|
activejob (= 7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
mail (>= 2.8.0)
|
mail (>= 2.8.0)
|
||||||
rails-dom-testing (~> 2.2)
|
rails-dom-testing (~> 2.2)
|
||||||
actionpack (7.2.2.2)
|
actionpack (7.2.3)
|
||||||
actionview (= 7.2.2.2)
|
actionview (= 7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
|
cgi
|
||||||
nokogiri (>= 1.8.5)
|
nokogiri (>= 1.8.5)
|
||||||
racc
|
racc
|
||||||
rack (>= 2.2.4, < 3.2)
|
rack (>= 2.2.4, < 3.3)
|
||||||
rack-session (>= 1.0.1)
|
rack-session (>= 1.0.1)
|
||||||
rack-test (>= 0.6.3)
|
rack-test (>= 0.6.3)
|
||||||
rails-dom-testing (~> 2.2)
|
rails-dom-testing (~> 2.2)
|
||||||
rails-html-sanitizer (~> 1.6)
|
rails-html-sanitizer (~> 1.6)
|
||||||
useragent (~> 0.16)
|
useragent (~> 0.16)
|
||||||
actiontext (7.2.2.2)
|
actiontext (7.2.3)
|
||||||
actionpack (= 7.2.2.2)
|
actionpack (= 7.2.3)
|
||||||
activerecord (= 7.2.2.2)
|
activerecord (= 7.2.3)
|
||||||
activestorage (= 7.2.2.2)
|
activestorage (= 7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
globalid (>= 0.6.0)
|
globalid (>= 0.6.0)
|
||||||
nokogiri (>= 1.8.5)
|
nokogiri (>= 1.8.5)
|
||||||
actionview (7.2.2.2)
|
actionview (7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
builder (~> 3.1)
|
builder (~> 3.1)
|
||||||
|
cgi
|
||||||
erubi (~> 1.11)
|
erubi (~> 1.11)
|
||||||
rails-dom-testing (~> 2.2)
|
rails-dom-testing (~> 2.2)
|
||||||
rails-html-sanitizer (~> 1.6)
|
rails-html-sanitizer (~> 1.6)
|
||||||
@@ -82,27 +84,27 @@ GEM
|
|||||||
addressable
|
addressable
|
||||||
active_median (0.6.0)
|
active_median (0.6.0)
|
||||||
activesupport (>= 7.1)
|
activesupport (>= 7.1)
|
||||||
active_record_union (1.3.0)
|
active_record_union (1.4.0)
|
||||||
activerecord (>= 4.0)
|
activerecord (>= 6.0)
|
||||||
active_utils (3.6.0)
|
active_utils (3.6.0)
|
||||||
activesupport (>= 4.2)
|
activesupport (>= 4.2)
|
||||||
i18n
|
i18n
|
||||||
activejob (7.2.2.2)
|
activejob (7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
globalid (>= 0.3.6)
|
globalid (>= 0.3.6)
|
||||||
activemodel (7.2.2.2)
|
activemodel (7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
activerecord (7.2.2.2)
|
activerecord (7.2.3)
|
||||||
activemodel (= 7.2.2.2)
|
activemodel (= 7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
timeout (>= 0.4.0)
|
timeout (>= 0.4.0)
|
||||||
activestorage (7.2.2.2)
|
activestorage (7.2.3)
|
||||||
actionpack (= 7.2.2.2)
|
actionpack (= 7.2.3)
|
||||||
activejob (= 7.2.2.2)
|
activejob (= 7.2.3)
|
||||||
activerecord (= 7.2.2.2)
|
activerecord (= 7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
marcel (~> 1.0)
|
marcel (~> 1.0)
|
||||||
activesupport (7.2.2.2)
|
activesupport (7.2.3)
|
||||||
base64
|
base64
|
||||||
benchmark (>= 0.3)
|
benchmark (>= 0.3)
|
||||||
bigdecimal
|
bigdecimal
|
||||||
@@ -119,15 +121,15 @@ GEM
|
|||||||
ast (2.4.3)
|
ast (2.4.3)
|
||||||
autoprefixer-rails (10.4.16.0)
|
autoprefixer-rails (10.4.16.0)
|
||||||
execjs (~> 2)
|
execjs (~> 2)
|
||||||
axe-core-api (4.10.3)
|
axe-core-api (4.11.0)
|
||||||
dumb_delegator
|
dumb_delegator
|
||||||
ostruct
|
ostruct
|
||||||
virtus
|
virtus
|
||||||
axe-core-capybara (4.10.3)
|
axe-core-capybara (4.11.0)
|
||||||
axe-core-api (= 4.10.3)
|
axe-core-api (= 4.11.0)
|
||||||
dumb_delegator
|
dumb_delegator
|
||||||
axe-core-rspec (4.10.3)
|
axe-core-rspec (4.11.0)
|
||||||
axe-core-api (= 4.10.3)
|
axe-core-api (= 4.11.0)
|
||||||
dumb_delegator
|
dumb_delegator
|
||||||
ostruct
|
ostruct
|
||||||
virtus
|
virtus
|
||||||
@@ -137,12 +139,12 @@ GEM
|
|||||||
thread_safe (~> 0.3, >= 0.3.1)
|
thread_safe (~> 0.3, >= 0.3.1)
|
||||||
base64 (0.3.0)
|
base64 (0.3.0)
|
||||||
bcrypt (3.1.20)
|
bcrypt (3.1.20)
|
||||||
benchmark (0.4.1)
|
benchmark (0.5.0)
|
||||||
better_errors (2.10.1)
|
better_errors (2.10.1)
|
||||||
erubi (>= 1.0.0)
|
erubi (>= 1.0.0)
|
||||||
rack (>= 0.9.0)
|
rack (>= 0.9.0)
|
||||||
rouge (>= 1.0.0)
|
rouge (>= 1.0.0)
|
||||||
bigdecimal (3.2.3)
|
bigdecimal (3.3.1)
|
||||||
bluecloth (2.2.0)
|
bluecloth (2.2.0)
|
||||||
bonsai-elasticsearch-rails (7.0.1)
|
bonsai-elasticsearch-rails (7.0.1)
|
||||||
elasticsearch-model (< 8)
|
elasticsearch-model (< 8)
|
||||||
@@ -156,7 +158,7 @@ GEM
|
|||||||
actionpack (>= 6.1)
|
actionpack (>= 6.1)
|
||||||
activemodel (>= 6.1)
|
activemodel (>= 6.1)
|
||||||
builder (3.3.0)
|
builder (3.3.0)
|
||||||
bullet (8.0.8)
|
bullet (8.1.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
uniform_notifier (~> 1.11)
|
uniform_notifier (~> 1.11)
|
||||||
byebug (12.0.0)
|
byebug (12.0.0)
|
||||||
@@ -183,7 +185,8 @@ GEM
|
|||||||
image_processing (~> 1.1)
|
image_processing (~> 1.1)
|
||||||
marcel (~> 1.0.0)
|
marcel (~> 1.0.0)
|
||||||
ssrf_filter (~> 1.0)
|
ssrf_filter (~> 1.0)
|
||||||
chartkick (5.2.0)
|
cgi (0.5.0)
|
||||||
|
chartkick (5.2.1)
|
||||||
childprocess (5.0.0)
|
childprocess (5.0.0)
|
||||||
coderay (1.1.3)
|
coderay (1.1.3)
|
||||||
coercible (1.0.0)
|
coercible (1.0.0)
|
||||||
@@ -198,7 +201,7 @@ GEM
|
|||||||
comfy_bootstrap_form (4.0.9)
|
comfy_bootstrap_form (4.0.9)
|
||||||
rails (>= 5.0.0)
|
rails (>= 5.0.0)
|
||||||
concurrent-ruby (1.3.5)
|
concurrent-ruby (1.3.5)
|
||||||
connection_pool (2.5.4)
|
connection_pool (2.5.5)
|
||||||
crass (1.0.6)
|
crass (1.0.6)
|
||||||
crowdin-api (1.12.0)
|
crowdin-api (1.12.0)
|
||||||
open-uri (>= 0.1.0, < 0.2.0)
|
open-uri (>= 0.1.0, < 0.2.0)
|
||||||
@@ -208,7 +211,7 @@ GEM
|
|||||||
gli (>= 2.7.0)
|
gli (>= 2.7.0)
|
||||||
i18n (>= 0.6.4)
|
i18n (>= 0.6.4)
|
||||||
rubyzip (>= 1.0.0)
|
rubyzip (>= 1.0.0)
|
||||||
csv (3.3.1)
|
csv (3.3.5)
|
||||||
csv_shaper (1.4.0)
|
csv_shaper (1.4.0)
|
||||||
activesupport (>= 3.0.0)
|
activesupport (>= 3.0.0)
|
||||||
csv
|
csv
|
||||||
@@ -219,7 +222,7 @@ GEM
|
|||||||
activerecord (>= 5.a)
|
activerecord (>= 5.a)
|
||||||
database_cleaner-core (~> 2.0.0)
|
database_cleaner-core (~> 2.0.0)
|
||||||
database_cleaner-core (2.0.1)
|
database_cleaner-core (2.0.1)
|
||||||
date (3.4.1)
|
date (3.5.0)
|
||||||
descendants_tracker (0.0.4)
|
descendants_tracker (0.0.4)
|
||||||
thread_safe (~> 0.3, >= 0.3.1)
|
thread_safe (~> 0.3, >= 0.3.1)
|
||||||
devise (4.9.4)
|
devise (4.9.4)
|
||||||
@@ -251,7 +254,7 @@ GEM
|
|||||||
elasticsearch-transport (7.0.0)
|
elasticsearch-transport (7.0.0)
|
||||||
faraday
|
faraday
|
||||||
multi_json
|
multi_json
|
||||||
erb (5.0.2)
|
erb (6.0.0)
|
||||||
erubi (1.13.1)
|
erubi (1.13.1)
|
||||||
erubis (2.7.0)
|
erubis (2.7.0)
|
||||||
excon (1.2.5)
|
excon (1.2.5)
|
||||||
@@ -264,7 +267,7 @@ GEM
|
|||||||
railties (>= 6.1.0)
|
railties (>= 6.1.0)
|
||||||
faker (3.5.2)
|
faker (3.5.2)
|
||||||
i18n (>= 1.8.11, < 2)
|
i18n (>= 1.8.11, < 2)
|
||||||
faraday (2.13.4)
|
faraday (2.14.0)
|
||||||
faraday-net_http (>= 2.0, < 3.5)
|
faraday-net_http (>= 2.0, < 3.5)
|
||||||
json
|
json
|
||||||
logger
|
logger
|
||||||
@@ -277,7 +280,7 @@ GEM
|
|||||||
friendly_id (5.5.1)
|
friendly_id (5.5.1)
|
||||||
activerecord (>= 4.0.0)
|
activerecord (>= 4.0.0)
|
||||||
gbifrb (0.2.0)
|
gbifrb (0.2.0)
|
||||||
geocoder (1.8.5)
|
geocoder (1.8.6)
|
||||||
base64 (>= 0.1.0)
|
base64 (>= 0.1.0)
|
||||||
csv (>= 3.0.0)
|
csv (>= 3.0.0)
|
||||||
gibbon (1.2.1)
|
gibbon (1.2.1)
|
||||||
@@ -285,21 +288,21 @@ GEM
|
|||||||
multi_json (>= 1.9.0)
|
multi_json (>= 1.9.0)
|
||||||
gli (2.22.2)
|
gli (2.22.2)
|
||||||
ostruct
|
ostruct
|
||||||
globalid (1.2.1)
|
globalid (1.3.0)
|
||||||
activesupport (>= 6.1)
|
activesupport (>= 6.1)
|
||||||
gravatar-ultimate (2.0.0)
|
gravatar-ultimate (2.0.0)
|
||||||
activesupport (>= 2.3.14)
|
activesupport (>= 2.3.14)
|
||||||
rack
|
rack
|
||||||
haml (6.3.0)
|
haml (7.0.2)
|
||||||
temple (>= 0.8.2)
|
temple (>= 0.8.2)
|
||||||
thor
|
thor
|
||||||
tilt
|
tilt
|
||||||
haml-rails (2.1.0)
|
haml-rails (3.0.0)
|
||||||
actionpack (>= 5.1)
|
actionpack (>= 5.1)
|
||||||
activesupport (>= 5.1)
|
activesupport (>= 5.1)
|
||||||
haml (>= 4.0.6)
|
haml (>= 4.0.6)
|
||||||
railties (>= 5.1)
|
railties (>= 5.1)
|
||||||
haml_lint (0.66.0)
|
haml_lint (0.67.0)
|
||||||
haml (>= 5.0)
|
haml (>= 5.0)
|
||||||
parallel (~> 1.10)
|
parallel (~> 1.10)
|
||||||
rainbow
|
rainbow
|
||||||
@@ -324,20 +327,21 @@ GEM
|
|||||||
multi_xml (>= 0.5.2)
|
multi_xml (>= 0.5.2)
|
||||||
i18n (1.14.7)
|
i18n (1.14.7)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
i18n-tasks (1.0.15)
|
i18n-tasks (1.1.2)
|
||||||
activesupport (>= 4.0.2)
|
activesupport (>= 4.0.2)
|
||||||
ast (>= 2.1.0)
|
ast (>= 2.1.0)
|
||||||
erubi
|
erubi
|
||||||
highline (>= 2.0.0)
|
highline (>= 3.0.0)
|
||||||
i18n
|
i18n
|
||||||
parser (>= 3.2.2.1)
|
parser (>= 3.2.2.1)
|
||||||
|
prism
|
||||||
rails-i18n
|
rails-i18n
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
ruby-progressbar (~> 1.8, >= 1.8.1)
|
ruby-progressbar (~> 1.8, >= 1.8.1)
|
||||||
terminal-table (>= 1.5.1)
|
terminal-table (>= 1.5.1)
|
||||||
i18n_data (1.1.0)
|
i18n_data (1.1.0)
|
||||||
simple_po_parser (~> 1.1)
|
simple_po_parser (~> 1.1)
|
||||||
icalendar (2.11.2)
|
icalendar (2.12.1)
|
||||||
base64
|
base64
|
||||||
ice_cube (~> 0.16)
|
ice_cube (~> 0.16)
|
||||||
logger
|
logger
|
||||||
@@ -348,17 +352,18 @@ GEM
|
|||||||
mini_magick (>= 4.9.5, < 5)
|
mini_magick (>= 4.9.5, < 5)
|
||||||
ruby-vips (>= 2.0.17, < 3)
|
ruby-vips (>= 2.0.17, < 3)
|
||||||
io-console (0.8.1)
|
io-console (0.8.1)
|
||||||
irb (1.15.2)
|
irb (1.15.3)
|
||||||
pp (>= 0.6.0)
|
pp (>= 0.6.0)
|
||||||
rdoc (>= 4.0.0)
|
rdoc (>= 4.0.0)
|
||||||
reline (>= 0.4.2)
|
reline (>= 0.4.2)
|
||||||
jquery-rails (4.6.0)
|
jquery-rails (4.6.1)
|
||||||
rails-dom-testing (>= 1, < 3)
|
rails-dom-testing (>= 1, < 3)
|
||||||
railties (>= 4.2.0)
|
railties (>= 4.2.0)
|
||||||
thor (>= 0.14, < 2.0)
|
thor (>= 0.14, < 2.0)
|
||||||
json (2.13.2)
|
json (2.16.0)
|
||||||
json-schema (5.1.0)
|
json-schema (6.0.0)
|
||||||
addressable (~> 2.8)
|
addressable (~> 2.8)
|
||||||
|
bigdecimal (~> 3.1)
|
||||||
jsonapi-resources (0.10.7)
|
jsonapi-resources (0.10.7)
|
||||||
activerecord (>= 4.1)
|
activerecord (>= 4.1)
|
||||||
concurrent-ruby
|
concurrent-ruby
|
||||||
@@ -384,7 +389,8 @@ GEM
|
|||||||
loofah (2.24.1)
|
loofah (2.24.1)
|
||||||
crass (~> 1.0.2)
|
crass (~> 1.0.2)
|
||||||
nokogiri (>= 1.12.0)
|
nokogiri (>= 1.12.0)
|
||||||
mail (2.8.1)
|
mail (2.9.0)
|
||||||
|
logger
|
||||||
mini_mime (>= 0.1.1)
|
mini_mime (>= 0.1.1)
|
||||||
net-imap
|
net-imap
|
||||||
net-pop
|
net-pop
|
||||||
@@ -411,7 +417,7 @@ GEM
|
|||||||
mini_magick (4.12.0)
|
mini_magick (4.12.0)
|
||||||
mini_mime (1.1.5)
|
mini_mime (1.1.5)
|
||||||
mini_portile2 (2.8.9)
|
mini_portile2 (2.8.9)
|
||||||
minitest (5.25.5)
|
minitest (5.26.2)
|
||||||
moneta (1.0.0)
|
moneta (1.0.0)
|
||||||
msgpack (1.8.0)
|
msgpack (1.8.0)
|
||||||
multi_json (1.15.0)
|
multi_json (1.15.0)
|
||||||
@@ -419,7 +425,7 @@ GEM
|
|||||||
bigdecimal (~> 3.1)
|
bigdecimal (~> 3.1)
|
||||||
net-http (0.6.0)
|
net-http (0.6.0)
|
||||||
uri
|
uri
|
||||||
net-imap (0.5.9)
|
net-imap (0.5.12)
|
||||||
date
|
date
|
||||||
net-protocol
|
net-protocol
|
||||||
net-pop (0.1.2)
|
net-pop (0.1.2)
|
||||||
@@ -429,14 +435,14 @@ GEM
|
|||||||
net-smtp (0.5.1)
|
net-smtp (0.5.1)
|
||||||
net-protocol
|
net-protocol
|
||||||
netrc (0.11.0)
|
netrc (0.11.0)
|
||||||
nio4r (2.7.4)
|
nio4r (2.7.5)
|
||||||
nokogiri (1.18.9)
|
nokogiri (1.18.10)
|
||||||
mini_portile2 (~> 2.8.2)
|
mini_portile2 (~> 2.8.2)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
nokogiri (1.18.9-x86_64-linux-gnu)
|
nokogiri (1.18.10-x86_64-linux-gnu)
|
||||||
racc (~> 1.4)
|
racc (~> 1.4)
|
||||||
oauth (0.5.6)
|
oauth (0.5.6)
|
||||||
oj (3.16.11)
|
oj (3.16.12)
|
||||||
bigdecimal (>= 3.0)
|
bigdecimal (>= 3.0)
|
||||||
ostruct (>= 0.2)
|
ostruct (>= 0.2)
|
||||||
omniauth (1.9.2)
|
omniauth (1.9.2)
|
||||||
@@ -452,7 +458,7 @@ GEM
|
|||||||
orm_adapter (0.5.0)
|
orm_adapter (0.5.0)
|
||||||
ostruct (0.6.3)
|
ostruct (0.6.3)
|
||||||
parallel (1.27.0)
|
parallel (1.27.0)
|
||||||
parser (3.3.9.0)
|
parser (3.3.10.0)
|
||||||
ast (~> 2.4.1)
|
ast (~> 2.4.1)
|
||||||
racc
|
racc
|
||||||
percy-capybara (5.0.0)
|
percy-capybara (5.0.0)
|
||||||
@@ -464,22 +470,22 @@ GEM
|
|||||||
moneta (~> 1.0.0)
|
moneta (~> 1.0.0)
|
||||||
rate_throttle_client (~> 0.1.0)
|
rate_throttle_client (~> 0.1.0)
|
||||||
popper_js (2.11.8)
|
popper_js (2.11.8)
|
||||||
pp (0.6.2)
|
pp (0.6.3)
|
||||||
prettyprint
|
prettyprint
|
||||||
prettyprint (0.2.0)
|
prettyprint (0.2.0)
|
||||||
prism (1.4.0)
|
prism (1.6.0)
|
||||||
pry (0.15.2)
|
pry (0.15.2)
|
||||||
coderay (~> 1.1)
|
coderay (~> 1.1)
|
||||||
method_source (~> 1.0)
|
method_source (~> 1.0)
|
||||||
psych (5.2.6)
|
psych (5.2.6)
|
||||||
date
|
date
|
||||||
stringio
|
stringio
|
||||||
public_suffix (6.0.1)
|
public_suffix (6.0.2)
|
||||||
puma (7.0.3)
|
puma (7.1.0)
|
||||||
nio4r (~> 2.0)
|
nio4r (~> 2.0)
|
||||||
query_diet (0.7.2)
|
query_diet (0.7.3)
|
||||||
racc (1.8.1)
|
racc (1.8.1)
|
||||||
rack (2.2.17)
|
rack (2.2.21)
|
||||||
rack-cors (2.0.2)
|
rack-cors (2.0.2)
|
||||||
rack (>= 2.0.0)
|
rack (>= 2.0.0)
|
||||||
rack-protection (3.2.0)
|
rack-protection (3.2.0)
|
||||||
@@ -492,20 +498,20 @@ GEM
|
|||||||
rackup (1.0.1)
|
rackup (1.0.1)
|
||||||
rack (< 3)
|
rack (< 3)
|
||||||
webrick
|
webrick
|
||||||
rails (7.2.2.2)
|
rails (7.2.3)
|
||||||
actioncable (= 7.2.2.2)
|
actioncable (= 7.2.3)
|
||||||
actionmailbox (= 7.2.2.2)
|
actionmailbox (= 7.2.3)
|
||||||
actionmailer (= 7.2.2.2)
|
actionmailer (= 7.2.3)
|
||||||
actionpack (= 7.2.2.2)
|
actionpack (= 7.2.3)
|
||||||
actiontext (= 7.2.2.2)
|
actiontext (= 7.2.3)
|
||||||
actionview (= 7.2.2.2)
|
actionview (= 7.2.3)
|
||||||
activejob (= 7.2.2.2)
|
activejob (= 7.2.3)
|
||||||
activemodel (= 7.2.2.2)
|
activemodel (= 7.2.3)
|
||||||
activerecord (= 7.2.2.2)
|
activerecord (= 7.2.3)
|
||||||
activestorage (= 7.2.2.2)
|
activestorage (= 7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
bundler (>= 1.15.0)
|
bundler (>= 1.15.0)
|
||||||
railties (= 7.2.2.2)
|
railties (= 7.2.3)
|
||||||
rails-controller-testing (1.0.5)
|
rails-controller-testing (1.0.5)
|
||||||
actionpack (>= 5.0.1.rc1)
|
actionpack (>= 5.0.1.rc1)
|
||||||
actionview (>= 5.0.1.rc1)
|
actionview (>= 5.0.1.rc1)
|
||||||
@@ -525,39 +531,42 @@ GEM
|
|||||||
rails_stdout_logging
|
rails_stdout_logging
|
||||||
rails_serve_static_assets (0.0.5)
|
rails_serve_static_assets (0.0.5)
|
||||||
rails_stdout_logging (0.0.5)
|
rails_stdout_logging (0.0.5)
|
||||||
railties (7.2.2.2)
|
railties (7.2.3)
|
||||||
actionpack (= 7.2.2.2)
|
actionpack (= 7.2.3)
|
||||||
activesupport (= 7.2.2.2)
|
activesupport (= 7.2.3)
|
||||||
|
cgi
|
||||||
irb (~> 1.13)
|
irb (~> 1.13)
|
||||||
rackup (>= 1.0.0)
|
rackup (>= 1.0.0)
|
||||||
rake (>= 12.2)
|
rake (>= 12.2)
|
||||||
thor (~> 1.0, >= 1.2.2)
|
thor (~> 1.0, >= 1.2.2)
|
||||||
|
tsort (>= 0.2)
|
||||||
zeitwerk (~> 2.6)
|
zeitwerk (~> 2.6)
|
||||||
rainbow (3.1.1)
|
rainbow (3.1.1)
|
||||||
raindrops (0.20.1)
|
raindrops (0.20.1)
|
||||||
rake (13.3.0)
|
rake (13.3.1)
|
||||||
rate_throttle_client (0.1.2)
|
rate_throttle_client (0.1.2)
|
||||||
rb-fsevent (0.11.2)
|
rb-fsevent (0.11.2)
|
||||||
rb-inotify (0.10.1)
|
rb-inotify (0.10.1)
|
||||||
ffi (~> 1.0)
|
ffi (~> 1.0)
|
||||||
rdoc (6.14.2)
|
rdoc (6.16.1)
|
||||||
erb
|
erb
|
||||||
psych (>= 4.0.0)
|
psych (>= 4.0.0)
|
||||||
|
tsort
|
||||||
recaptcha (5.21.1)
|
recaptcha (5.21.1)
|
||||||
redis-client (0.23.2)
|
redis-client (0.23.2)
|
||||||
connection_pool
|
connection_pool
|
||||||
regexp_parser (2.11.2)
|
regexp_parser (2.11.3)
|
||||||
reline (0.6.2)
|
reline (0.6.3)
|
||||||
io-console (~> 0.5)
|
io-console (~> 0.5)
|
||||||
responders (3.1.1)
|
responders (3.2.0)
|
||||||
actionpack (>= 5.2)
|
actionpack (>= 7.0)
|
||||||
railties (>= 5.2)
|
railties (>= 7.0)
|
||||||
rest-client (2.1.0)
|
rest-client (2.1.0)
|
||||||
http-accept (>= 1.7.0, < 2.0)
|
http-accept (>= 1.7.0, < 2.0)
|
||||||
http-cookie (>= 1.0.2, < 2.0)
|
http-cookie (>= 1.0.2, < 2.0)
|
||||||
mime-types (>= 1.16, < 4.0)
|
mime-types (>= 1.16, < 4.0)
|
||||||
netrc (~> 0.8)
|
netrc (~> 0.8)
|
||||||
rexml (3.4.2)
|
rexml (3.4.4)
|
||||||
rouge (4.1.2)
|
rouge (4.1.2)
|
||||||
rspec (3.13.0)
|
rspec (3.13.0)
|
||||||
rspec-core (~> 3.13.0)
|
rspec-core (~> 3.13.0)
|
||||||
@@ -567,7 +576,7 @@ GEM
|
|||||||
activemodel (>= 3.0)
|
activemodel (>= 3.0)
|
||||||
activesupport (>= 3.0)
|
activesupport (>= 3.0)
|
||||||
rspec-mocks (>= 2.99, < 4.0)
|
rspec-mocks (>= 2.99, < 4.0)
|
||||||
rspec-core (3.13.5)
|
rspec-core (3.13.6)
|
||||||
rspec-support (~> 3.13.0)
|
rspec-support (~> 3.13.0)
|
||||||
rspec-expectations (3.13.5)
|
rspec-expectations (3.13.5)
|
||||||
diff-lcs (>= 1.2.0, < 2.0)
|
diff-lcs (>= 1.2.0, < 2.0)
|
||||||
@@ -585,23 +594,23 @@ GEM
|
|||||||
rspec-support (~> 3.13)
|
rspec-support (~> 3.13)
|
||||||
rspec-rebound (0.2.1)
|
rspec-rebound (0.2.1)
|
||||||
rspec-core (~> 3.3)
|
rspec-core (~> 3.3)
|
||||||
rspec-support (3.13.4)
|
rspec-support (3.13.6)
|
||||||
rspectre (0.2.0)
|
rspectre (0.2.0)
|
||||||
parser (>= 3.3.7.1)
|
parser (>= 3.3.7.1)
|
||||||
prism (~> 1.3)
|
prism (~> 1.3)
|
||||||
rspec (~> 3.10)
|
rspec (~> 3.10)
|
||||||
rswag-api (2.16.0)
|
rswag-api (2.17.0)
|
||||||
activesupport (>= 5.2, < 8.1)
|
activesupport (>= 5.2, < 8.2)
|
||||||
railties (>= 5.2, < 8.1)
|
railties (>= 5.2, < 8.2)
|
||||||
rswag-specs (2.16.0)
|
rswag-specs (2.17.0)
|
||||||
activesupport (>= 5.2, < 8.1)
|
activesupport (>= 5.2, < 8.2)
|
||||||
json-schema (>= 2.2, < 6.0)
|
json-schema (>= 2.2, < 7.0)
|
||||||
railties (>= 5.2, < 8.1)
|
railties (>= 5.2, < 8.2)
|
||||||
rspec-core (>= 2.14)
|
rspec-core (>= 2.14)
|
||||||
rswag-ui (2.16.0)
|
rswag-ui (2.17.0)
|
||||||
actionpack (>= 5.2, < 8.1)
|
actionpack (>= 5.2, < 8.2)
|
||||||
railties (>= 5.2, < 8.1)
|
railties (>= 5.2, < 8.2)
|
||||||
rubocop (1.80.2)
|
rubocop (1.81.7)
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
language_server-protocol (~> 3.17.0.2)
|
language_server-protocol (~> 3.17.0.2)
|
||||||
lint_roller (~> 1.1.0)
|
lint_roller (~> 1.1.0)
|
||||||
@@ -609,19 +618,19 @@ GEM
|
|||||||
parser (>= 3.3.0.2)
|
parser (>= 3.3.0.2)
|
||||||
rainbow (>= 2.2.2, < 4.0)
|
rainbow (>= 2.2.2, < 4.0)
|
||||||
regexp_parser (>= 2.9.3, < 3.0)
|
regexp_parser (>= 2.9.3, < 3.0)
|
||||||
rubocop-ast (>= 1.46.0, < 2.0)
|
rubocop-ast (>= 1.47.1, < 2.0)
|
||||||
ruby-progressbar (~> 1.7)
|
ruby-progressbar (~> 1.7)
|
||||||
unicode-display_width (>= 2.4.0, < 4.0)
|
unicode-display_width (>= 2.4.0, < 4.0)
|
||||||
rubocop-ast (1.46.0)
|
rubocop-ast (1.48.0)
|
||||||
parser (>= 3.3.7.2)
|
parser (>= 3.3.7.2)
|
||||||
prism (~> 1.4)
|
prism (~> 1.4)
|
||||||
rubocop-capybara (2.22.1)
|
rubocop-capybara (2.22.1)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rubocop (~> 1.72, >= 1.72.1)
|
rubocop (~> 1.72, >= 1.72.1)
|
||||||
rubocop-factory_bot (2.27.1)
|
rubocop-factory_bot (2.28.0)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rubocop (~> 1.72, >= 1.72.1)
|
rubocop (~> 1.72, >= 1.72.1)
|
||||||
rubocop-rails (2.33.3)
|
rubocop-rails (2.34.1)
|
||||||
activesupport (>= 4.2.0)
|
activesupport (>= 4.2.0)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rack (>= 1.1)
|
rack (>= 1.1)
|
||||||
@@ -630,10 +639,10 @@ GEM
|
|||||||
rubocop-rake (0.7.1)
|
rubocop-rake (0.7.1)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rubocop (>= 1.72.1)
|
rubocop (>= 1.72.1)
|
||||||
rubocop-rspec (3.7.0)
|
rubocop-rspec (3.8.0)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rubocop (~> 1.72, >= 1.72.1)
|
rubocop (~> 1.81)
|
||||||
rubocop-rspec_rails (2.31.0)
|
rubocop-rspec_rails (2.32.0)
|
||||||
lint_roller (~> 1.1)
|
lint_roller (~> 1.1)
|
||||||
rubocop (~> 1.72, >= 1.72.1)
|
rubocop (~> 1.72, >= 1.72.1)
|
||||||
rubocop-rspec (~> 3.5)
|
rubocop-rspec (~> 3.5)
|
||||||
@@ -641,7 +650,7 @@ GEM
|
|||||||
ruby-units (4.1.0)
|
ruby-units (4.1.0)
|
||||||
ruby-vips (2.2.1)
|
ruby-vips (2.2.1)
|
||||||
ffi (~> 1.12)
|
ffi (~> 1.12)
|
||||||
rubyzip (3.0.1)
|
rubyzip (3.2.1)
|
||||||
sass (3.7.4)
|
sass (3.7.4)
|
||||||
sass-listen (~> 4.0.0)
|
sass-listen (~> 4.0.0)
|
||||||
sass-listen (4.0.0)
|
sass-listen (4.0.0)
|
||||||
@@ -655,13 +664,13 @@ GEM
|
|||||||
sprockets (> 3.0)
|
sprockets (> 3.0)
|
||||||
sprockets-rails
|
sprockets-rails
|
||||||
tilt
|
tilt
|
||||||
scout_apm (5.7.1)
|
scout_apm (5.8.0)
|
||||||
parser
|
parser
|
||||||
searchkick (5.3.1)
|
searchkick (5.3.1)
|
||||||
activemodel (>= 6.1)
|
activemodel (>= 6.1)
|
||||||
hashie
|
hashie
|
||||||
securerandom (0.4.1)
|
securerandom (0.4.1)
|
||||||
selenium-webdriver (4.35.0)
|
selenium-webdriver (4.38.0)
|
||||||
base64 (~> 0.2)
|
base64 (~> 0.2)
|
||||||
logger (~> 1.4)
|
logger (~> 1.4)
|
||||||
rexml (~> 3.2, >= 3.2.5)
|
rexml (~> 3.2, >= 3.2.5)
|
||||||
@@ -683,7 +692,7 @@ GEM
|
|||||||
activesupport (>= 5.2)
|
activesupport (>= 5.2)
|
||||||
sprockets (>= 3.0.0)
|
sprockets (>= 3.0.0)
|
||||||
ssrf_filter (1.1.2)
|
ssrf_filter (1.1.2)
|
||||||
stringio (3.1.7)
|
stringio (3.1.8)
|
||||||
sysexits (1.2.0)
|
sysexits (1.2.0)
|
||||||
temple (0.10.4)
|
temple (0.10.4)
|
||||||
terminal-table (4.0.0)
|
terminal-table (4.0.0)
|
||||||
@@ -694,16 +703,17 @@ GEM
|
|||||||
thread_safe (0.3.6)
|
thread_safe (0.3.6)
|
||||||
tilt (2.6.1)
|
tilt (2.6.1)
|
||||||
timecop (0.9.10)
|
timecop (0.9.10)
|
||||||
timeout (0.4.3)
|
timeout (0.4.4)
|
||||||
|
tsort (0.2.0)
|
||||||
tzinfo (2.0.6)
|
tzinfo (2.0.6)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
unicode-display_width (3.1.5)
|
unicode-display_width (3.2.0)
|
||||||
unicode-emoji (~> 4.0, >= 4.0.4)
|
unicode-emoji (~> 4.1)
|
||||||
unicode-emoji (4.0.4)
|
unicode-emoji (4.1.0)
|
||||||
unicorn (6.1.0)
|
unicorn (6.1.0)
|
||||||
kgio (~> 2.6)
|
kgio (~> 2.6)
|
||||||
raindrops (~> 0.7)
|
raindrops (~> 0.7)
|
||||||
uniform_notifier (1.17.0)
|
uniform_notifier (1.18.0)
|
||||||
uri (1.0.3)
|
uri (1.0.3)
|
||||||
useragent (0.16.11)
|
useragent (0.16.11)
|
||||||
validate_url (1.0.15)
|
validate_url (1.0.15)
|
||||||
@@ -721,7 +731,7 @@ GEM
|
|||||||
nokogiri (>= 1.2.0)
|
nokogiri (>= 1.2.0)
|
||||||
rack (>= 1.0)
|
rack (>= 1.0)
|
||||||
rack-test (>= 0.5.3)
|
rack-test (>= 0.5.3)
|
||||||
webrick (1.9.1)
|
webrick (1.9.2)
|
||||||
websocket (1.2.11)
|
websocket (1.2.11)
|
||||||
websocket-driver (0.8.0)
|
websocket-driver (0.8.0)
|
||||||
base64
|
base64
|
||||||
|
|||||||
@@ -188,10 +188,11 @@ class CropsController < ApplicationController
|
|||||||
|
|
||||||
def crop_params
|
def crop_params
|
||||||
params.require(:crop).permit(
|
params.require(:crop).permit(
|
||||||
:name, :en_wikipedia_url,
|
:name, :en_wikipedia_url, :en_youtube_url,
|
||||||
:parent_id, :perennial,
|
:parent_id, :perennial,
|
||||||
:request_notes, :reason_for_rejection,
|
:request_notes, :reason_for_rejection,
|
||||||
:rejection_notes,
|
:rejection_notes,
|
||||||
|
:description,
|
||||||
:row_spacing, :spread, :height,
|
:row_spacing, :spread, :height,
|
||||||
:sowing_method, :sun_requirements, :growing_degree_days,
|
:sowing_method, :sun_requirements, :growing_degree_days,
|
||||||
scientific_names_attributes: %i(scientific_name _destroy id)
|
scientific_names_attributes: %i(scientific_name _destroy id)
|
||||||
|
|||||||
@@ -17,4 +17,12 @@ module CropsHelper
|
|||||||
def crop_ebay_seeds_url(crop)
|
def crop_ebay_seeds_url(crop)
|
||||||
"https://www.ebay.com/sch/i.html?_nkw=#{CGI.escape crop.name}"
|
"https://www.ebay.com/sch/i.html?_nkw=#{CGI.escape crop.name}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def youtube_video_id(url)
|
||||||
|
return unless url
|
||||||
|
|
||||||
|
regex = %r{(?:youtube(?:-nocookie)?\.com/(?:[^/\n\s]+/\S+/|(?:v|e(?:mbed)?)/|\S*?[?&]v=)|youtu\.be/)([a-zA-Z0-9_-]{11})}
|
||||||
|
match = url.match(regex)
|
||||||
|
match[1] if match
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -19,10 +19,6 @@ module OpenFarmData
|
|||||||
fetch_attr('tags_array')
|
fetch_attr('tags_array')
|
||||||
end
|
end
|
||||||
|
|
||||||
def description
|
|
||||||
fetch_attr('description')
|
|
||||||
end
|
|
||||||
|
|
||||||
def common_names
|
def common_names
|
||||||
fetch_attr('common_names')
|
fetch_attr('common_names')
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -55,6 +55,12 @@ class Crop < ApplicationRecord
|
|||||||
message: 'is not a valid English Wikipedia URL'
|
message: 'is not a valid English Wikipedia URL'
|
||||||
},
|
},
|
||||||
if: :approved?
|
if: :approved?
|
||||||
|
validates :en_youtube_url,
|
||||||
|
format: {
|
||||||
|
with: %r{\A(?:https?://)?(?:www\.)?(?:youtube(?:-nocookie)?\.com/(?:(?:v|e(?:mbed)?)/|\S*?[?&]v=)|youtu\.be/)[a-zA-Z0-9_-]{11}(?:[?&]\S*)?\z},
|
||||||
|
message: 'is not a valid YouTube URL'
|
||||||
|
},
|
||||||
|
allow_blank: true
|
||||||
validates :name, uniqueness: { scope: :approval_status }, if: :pending?
|
validates :name, uniqueness: { scope: :approval_status }, if: :pending?
|
||||||
|
|
||||||
def to_s
|
def to_s
|
||||||
@@ -159,8 +165,14 @@ class Crop < ApplicationRecord
|
|||||||
(companions + parent.companions).uniq
|
(companions + parent.companions).uniq
|
||||||
end
|
end
|
||||||
|
|
||||||
|
before_destroy :destroy_reverse_companionships
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
|
def destroy_reverse_companionships
|
||||||
|
CropCompanion.where(crop_b: self).destroy_all
|
||||||
|
end
|
||||||
|
|
||||||
def count_uses_of_property(col_name)
|
def count_uses_of_property(col_name)
|
||||||
plantings.unscoped
|
plantings.unscoped
|
||||||
.where(crop_id: id)
|
.where(crop_id: id)
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ module Api
|
|||||||
@model.owner = context[:current_user]
|
@model.owner = context[:current_user]
|
||||||
end
|
end
|
||||||
|
|
||||||
has_one :owner, class_name: 'Member'
|
has_one :owner, class_name: 'Member', always_include_linkage_data: true
|
||||||
has_one :garden
|
has_one :garden, always_include_linkage_data: true
|
||||||
has_one :planting
|
has_one :planting, always_include_linkage_data: true
|
||||||
|
|
||||||
attribute :name
|
attribute :name
|
||||||
attribute :description
|
attribute :description
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ module Api
|
|||||||
|
|
||||||
has_many :photos
|
has_many :photos
|
||||||
|
|
||||||
has_one :parent, class_name: 'Crop'
|
has_one :parent, class_name: 'Crop', always_include_linkage_data: true
|
||||||
|
|
||||||
attribute :name
|
attribute :name
|
||||||
attribute :en_wikipedia_url
|
attribute :en_wikipedia_url
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ module Api
|
|||||||
@model.owner = context[:current_user]
|
@model.owner = context[:current_user]
|
||||||
end
|
end
|
||||||
|
|
||||||
has_one :owner, class_name: 'Member'
|
has_one :owner, class_name: 'Member', always_include_linkage_data: true
|
||||||
has_many :plantings
|
has_many :plantings
|
||||||
has_many :photos
|
has_many :photos
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,9 @@ module Api
|
|||||||
@model.plant_part = PlantPart.first
|
@model.plant_part = PlantPart.first
|
||||||
end
|
end
|
||||||
|
|
||||||
has_one :crop
|
has_one :crop, always_include_linkage_data: true
|
||||||
has_one :planting
|
has_one :planting, always_include_linkage_data: true
|
||||||
has_one :owner, class_name: 'Member'
|
has_one :owner, class_name: 'Member', always_include_linkage_data: true
|
||||||
# has_one :plant_part
|
# has_one :plant_part
|
||||||
has_many :photos
|
has_many :photos
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ module Api
|
|||||||
has_many :plantings, foreign_key: 'owner_id'
|
has_many :plantings, foreign_key: 'owner_id'
|
||||||
has_many :harvests, foreign_key: 'owner_id'
|
has_many :harvests, foreign_key: 'owner_id'
|
||||||
has_many :seeds, foreign_key: 'owner_id'
|
has_many :seeds, foreign_key: 'owner_id'
|
||||||
|
has_many :activities, foreign_key: 'owner_id'
|
||||||
|
|
||||||
has_many :photos
|
has_many :photos
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ module Api
|
|||||||
@model.owner = context[:current_user]
|
@model.owner = context[:current_user]
|
||||||
end
|
end
|
||||||
|
|
||||||
has_one :owner, class_name: 'Member'
|
has_one :owner, class_name: 'Member', always_include_linkage_data: true
|
||||||
has_many :plantings
|
has_many :plantings
|
||||||
has_many :gardens
|
has_many :gardens
|
||||||
has_many :harvests
|
has_many :harvests
|
||||||
|
|||||||
@@ -7,9 +7,9 @@ module Api
|
|||||||
@model.owner = context[:current_user]
|
@model.owner = context[:current_user]
|
||||||
end
|
end
|
||||||
|
|
||||||
has_one :garden
|
has_one :garden, always_include_linkage_data: true
|
||||||
has_one :crop
|
has_one :crop, always_include_linkage_data: true
|
||||||
has_one :owner, class_name: 'Member'
|
has_one :owner, class_name: 'Member', always_include_linkage_data: true
|
||||||
has_many :photos
|
has_many :photos
|
||||||
has_many :harvests
|
has_many :harvests
|
||||||
|
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ module Api
|
|||||||
@model.owner = context[:current_user]
|
@model.owner = context[:current_user]
|
||||||
end
|
end
|
||||||
|
|
||||||
has_one :owner, class_name: 'Member'
|
has_one :owner, class_name: 'Member', always_include_linkage_data: true
|
||||||
has_one :crop
|
has_one :crop, always_include_linkage_data: true
|
||||||
|
|
||||||
attribute :description
|
attribute :description
|
||||||
attribute :quantity
|
attribute :quantity
|
||||||
|
|||||||
@@ -42,6 +42,7 @@
|
|||||||
%span.help-block Living more than two years
|
%span.help-block Living more than two years
|
||||||
|
|
||||||
%h2 OpenFarm Data
|
%h2 OpenFarm Data
|
||||||
|
= f.text_area :description, label: 'Description'
|
||||||
= f.number_field :row_spacing, label: 'Row Spacing (cm)', min: 0
|
= f.number_field :row_spacing, label: 'Row Spacing (cm)', min: 0
|
||||||
= f.number_field :spread, label: 'Spread (cm)', min: 0
|
= f.number_field :spread, label: 'Spread (cm)', min: 0
|
||||||
= f.number_field :height, label: 'Height (cm)', min: 0
|
= f.number_field :height, label: 'Height (cm)', min: 0
|
||||||
@@ -54,6 +55,9 @@
|
|||||||
= f.url_field :en_wikipedia_url, id: "en_wikipedia_url", label: 'Wikipedia URL'
|
= f.url_field :en_wikipedia_url, id: "en_wikipedia_url", label: 'Wikipedia URL'
|
||||||
%span.help-block
|
%span.help-block
|
||||||
Link to the crop's page on the English language Wikipedia (required).
|
Link to the crop's page on the English language Wikipedia (required).
|
||||||
|
= f.url_field :en_youtube_url, label: 'YouTube URL'
|
||||||
|
%span.help-block
|
||||||
|
Link to a YouTube video about the crop in English.
|
||||||
|
|
||||||
-# Only crop wranglers see the crop hierarchy (for now)
|
-# Only crop wranglers see the crop hierarchy (for now)
|
||||||
- if can? :wrangle, @crop
|
- if can? :wrangle, @crop
|
||||||
|
|||||||
@@ -30,6 +30,12 @@
|
|||||||
- @crop.all_companions.each do |companion|
|
- @crop.all_companions.each do |companion|
|
||||||
= render 'crops/tiny', crop: companion
|
= render 'crops/tiny', crop: companion
|
||||||
|
|
||||||
|
- if @crop.en_youtube_url.present?
|
||||||
|
%section.youtube
|
||||||
|
%h2 Video
|
||||||
|
.embed-responsive.embed-responsive-16by9
|
||||||
|
%iframe.embed-responsive-item{ src: "https://www.youtube.com/embed/#{youtube_video_id(@crop.en_youtube_url)}", allowfullscreen: true }
|
||||||
|
|
||||||
%section.photos
|
%section.photos
|
||||||
= cute_icon
|
= cute_icon
|
||||||
= render 'crops/photos', crop: @crop
|
= render 'crops/photos', crop: @crop
|
||||||
@@ -157,3 +163,10 @@
|
|||||||
= icon 'fas', 'external-link-alt'
|
= icon 'fas', 'external-link-alt'
|
||||||
Wikihow instructions
|
Wikihow instructions
|
||||||
|
|
||||||
|
%li.list-group-item
|
||||||
|
= link_to "https://www.youtube.com/results?search_query=#{CGI.escape "growing #{@crop.name}"}",
|
||||||
|
target: "_blank",
|
||||||
|
class: 'card-link',
|
||||||
|
rel: "noopener noreferrer" do
|
||||||
|
= icon 'fab', 'youtube'
|
||||||
|
YouTube
|
||||||
|
|||||||
5
db/migrate/20251128193317_add_en_youtube_url_to_crops.rb
Normal file
5
db/migrate/20251128193317_add_en_youtube_url_to_crops.rb
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
class AddEnYoutubeUrlToCrops < ActiveRecord::Migration[7.2]
|
||||||
|
def change
|
||||||
|
add_column :crops, :en_youtube_url, :string
|
||||||
|
end
|
||||||
|
end
|
||||||
25
db/migrate/20251128200506_add_description_to_crops.rb
Normal file
25
db/migrate/20251128200506_add_description_to_crops.rb
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class AddDescriptionToCrops < ActiveRecord::Migration[7.2]
|
||||||
|
# Temporary model to avoid validation issues
|
||||||
|
class Crop < ApplicationRecord
|
||||||
|
end
|
||||||
|
|
||||||
|
def up
|
||||||
|
add_column :crops, :description, :text
|
||||||
|
|
||||||
|
# Ensure the new column is available to the temporary model
|
||||||
|
Crop.reset_column_information
|
||||||
|
|
||||||
|
Crop.find_each do |crop|
|
||||||
|
next if crop.openfarm_data.blank?
|
||||||
|
|
||||||
|
description = crop.openfarm_data.dig('attributes', 'description')
|
||||||
|
crop.update_column(:description, description) if description.present?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
remove_column :crops, :description
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema[7.2].define(version: 2025_09_01_144900) do
|
ActiveRecord::Schema[7.2].define(version: 2025_11_28_200506) do
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
|
||||||
@@ -259,6 +259,8 @@ ActiveRecord::Schema[7.2].define(version: 2025_09_01_144900) do
|
|||||||
t.string "sowing_method"
|
t.string "sowing_method"
|
||||||
t.string "sun_requirements"
|
t.string "sun_requirements"
|
||||||
t.integer "growing_degree_days"
|
t.integer "growing_degree_days"
|
||||||
|
t.string "en_youtube_url"
|
||||||
|
t.text "description"
|
||||||
t.index ["creator_id"], name: "index_crops_on_creator_id"
|
t.index ["creator_id"], name: "index_crops_on_creator_id"
|
||||||
t.index ["name"], name: "index_crops_on_name"
|
t.index ["name"], name: "index_crops_on_name"
|
||||||
t.index ["parent_id"], name: "index_crops_on_parent_id"
|
t.index ["parent_id"], name: "index_crops_on_parent_id"
|
||||||
@@ -583,7 +585,6 @@ ActiveRecord::Schema[7.2].define(version: 2025_09_01_144900) do
|
|||||||
t.integer "harvests_count", default: 0
|
t.integer "harvests_count", default: 0
|
||||||
t.integer "likes_count", default: 0
|
t.integer "likes_count", default: 0
|
||||||
t.boolean "failed", default: false, null: false
|
t.boolean "failed", default: false, null: false
|
||||||
t.boolean "from_other_source"
|
|
||||||
t.integer "overall_rating"
|
t.integer "overall_rating"
|
||||||
t.index ["crop_id"], name: "index_plantings_on_crop_id"
|
t.index ["crop_id"], name: "index_plantings_on_crop_id"
|
||||||
t.index ["garden_id"], name: "index_plantings_on_garden_id"
|
t.index ["garden_id"], name: "index_plantings_on_garden_id"
|
||||||
|
|||||||
142
public/robots.txt
Normal file
142
public/robots.txt
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
# robots.txt for based on the one for http://www.wikipedia.org/ and friends
|
||||||
|
|
||||||
|
# Observed spamming large amounts of https://en.wikipedia.org/?curid=NNNNNN
|
||||||
|
# and ignoring 429 ratelimit responses, claims to respect robots:
|
||||||
|
# http://mj12bot.com/
|
||||||
|
User-agent: MJ12bot
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
# advertising-related bots:
|
||||||
|
User-agent: Mediapartners-Google*
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
# Wikipedia work bots:
|
||||||
|
User-agent: IsraBot
|
||||||
|
Disallow:
|
||||||
|
|
||||||
|
User-agent: Orthogaffe
|
||||||
|
Disallow:
|
||||||
|
|
||||||
|
# Crawlers that are kind enough to obey, but which we'd rather not have
|
||||||
|
# unless they're feeding search engines.
|
||||||
|
User-agent: UbiCrawler
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: DOC
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: Zao
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
# Some bots are known to be trouble, particularly those designed to copy
|
||||||
|
# entire sites. Please obey robots.txt.
|
||||||
|
User-agent: sitecheck.internetseer.com
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: Zealbot
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: MSIECrawler
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: SiteSnagger
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: WebStripper
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: WebCopier
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: Fetch
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: Offline Explorer
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: Teleport
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: TeleportPro
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: WebZIP
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: linko
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: HTTrack
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: Microsoft.URL.Control
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: Xenu
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: larbin
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: libwww
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: ZyBORG
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
User-agent: Download Ninja
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
# Misbehaving: requests much too fast:
|
||||||
|
User-agent: fast
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
#
|
||||||
|
# Sorry, wget in its recursive mode is a frequent problem.
|
||||||
|
# Please read the man page and use it properly; there is a
|
||||||
|
# --wait option you can use to set the delay between hits,
|
||||||
|
# for instance.
|
||||||
|
#
|
||||||
|
User-agent: wget
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
#
|
||||||
|
# The 'grub' distributed client has been *very* poorly behaved.
|
||||||
|
#
|
||||||
|
User-agent: grub-client
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
#
|
||||||
|
# Doesn't follow robots.txt anyway, but...
|
||||||
|
#
|
||||||
|
User-agent: k2spider
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
#
|
||||||
|
# Hits many times per second, not acceptable
|
||||||
|
# http://www.nameprotect.com/botinfo.html
|
||||||
|
User-agent: NPBot
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
# A capture bot, downloads gazillions of pages with no public benefit
|
||||||
|
# http://www.webreaper.net/
|
||||||
|
User-agent: WebReaper
|
||||||
|
Disallow: /
|
||||||
|
|
||||||
|
# Per their statement, semrushbot respects crawl-delay directives
|
||||||
|
# We want them to overall stay within reasonable request rates to
|
||||||
|
# the backend (20 rps); keeping in mind that the crawl-delay will
|
||||||
|
# be applied by site and not globally by the bot, 5 seconds seem
|
||||||
|
# like a reasonable approximation
|
||||||
|
User-agent: SemrushBot
|
||||||
|
Crawl-delay: 5
|
||||||
|
|
||||||
|
#
|
||||||
|
# Friendly, low-speed bots are welcome viewing pages, but not
|
||||||
|
# dynamically-generated pages please.
|
||||||
|
#
|
||||||
|
# Another exception is for REST API documentation, located at
|
||||||
|
# /api/rest_v1/?doc.
|
||||||
|
#
|
||||||
|
User-agent: *
|
||||||
|
Disallow: /api/
|
||||||
@@ -101,7 +101,7 @@ describe CropsController do
|
|||||||
it { expect { subject }.to change(AlternateName, :count).by(2) }
|
it { expect { subject }.to change(AlternateName, :count).by(2) }
|
||||||
it { expect { subject }.to change(ScientificName, :count).by(1) }
|
it { expect { subject }.to change(ScientificName, :count).by(1) }
|
||||||
|
|
||||||
context 'with openfarm data' do
|
context 'with data' do
|
||||||
let(:crop_params) do
|
let(:crop_params) do
|
||||||
{
|
{
|
||||||
crop: {
|
crop: {
|
||||||
@@ -110,16 +110,18 @@ describe CropsController do
|
|||||||
row_spacing: 10,
|
row_spacing: 10,
|
||||||
spread: 20,
|
spread: 20,
|
||||||
height: 30,
|
height: 30,
|
||||||
|
description: 'hello',
|
||||||
sowing_method: 'direct',
|
sowing_method: 'direct',
|
||||||
sun_requirements: 'full sun',
|
sun_requirements: 'full sun',
|
||||||
growing_degree_days: 100
|
growing_degree_days: 100,
|
||||||
|
en_youtube_url: 'https://www.youtube.com/watch?v=INZybkX8tLI'
|
||||||
},
|
},
|
||||||
alt_name: { '1': "egg plant", '2': "purple apple" },
|
alt_name: { '1': "egg plant", '2': "purple apple" },
|
||||||
sci_name: { '1': "fancy sci name", '2': "" }
|
sci_name: { '1': "fancy sci name", '2': "" }
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'saves openfarm data' do
|
it 'saves data' do
|
||||||
subject
|
subject
|
||||||
crop = Crop.last
|
crop = Crop.last
|
||||||
expect(crop.row_spacing).to eq(10)
|
expect(crop.row_spacing).to eq(10)
|
||||||
@@ -128,6 +130,8 @@ describe CropsController do
|
|||||||
expect(crop.sowing_method).to eq('direct')
|
expect(crop.sowing_method).to eq('direct')
|
||||||
expect(crop.sun_requirements).to eq('full sun')
|
expect(crop.sun_requirements).to eq('full sun')
|
||||||
expect(crop.growing_degree_days).to eq(100)
|
expect(crop.growing_degree_days).to eq(100)
|
||||||
|
expect(crop.description).to eq 'hello'
|
||||||
|
expect(crop.en_youtube_url).to eq 'https://www.youtube.com/watch?v=INZybkX8tLI'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -544,6 +544,20 @@ describe Crop do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "destroying a crop" do
|
||||||
|
let!(:crop_a) { FactoryBot.create(:crop) }
|
||||||
|
let!(:crop_b) { FactoryBot.create(:crop) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
CropCompanion.create(crop_a: crop_a, crop_b: crop_b)
|
||||||
|
CropCompanion.create(crop_a: crop_b, crop_b: crop_a)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "destroys companion links" do
|
||||||
|
expect { crop_a.destroy }.to change { CropCompanion.count }.from(2).to(0)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
context "crop rejections" do
|
context "crop rejections" do
|
||||||
let!(:rejected_reason) do
|
let!(:rejected_reason) do
|
||||||
FactoryBot.create(:crop, name: 'tomato',
|
FactoryBot.create(:crop, name: 'tomato',
|
||||||
|
|||||||
@@ -5,8 +5,14 @@ require 'rails_helper'
|
|||||||
RSpec.describe 'Activities', type: :request do
|
RSpec.describe 'Activities', type: :request do
|
||||||
subject { JSON.parse response.body }
|
subject { JSON.parse response.body }
|
||||||
|
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json' } }
|
let(:member) { create(:member) }
|
||||||
let!(:activity) { FactoryBot.create(:activity, garden: create(:garden), planting: create(:planting)) }
|
let(:token) do
|
||||||
|
member.regenerate_api_token
|
||||||
|
member.api_token.token
|
||||||
|
end
|
||||||
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
|
let!(:activity) { FactoryBot.create(:activity, owner: member, garden: create(:garden, owner: member), planting: create(:planting, owner: member)) }
|
||||||
let!(:activity2) { FactoryBot.create(:activity) }
|
let!(:activity2) { FactoryBot.create(:activity) }
|
||||||
|
|
||||||
it '#index' do
|
it '#index' do
|
||||||
@@ -53,4 +59,37 @@ RSpec.describe 'Activities', type: :request do
|
|||||||
expect(subject['data'][1]['id']).to eq(activity2.id.to_s)
|
expect(subject['data'][1]['id']).to eq(activity2.id.to_s)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context '#update' do
|
||||||
|
let(:params) do
|
||||||
|
{
|
||||||
|
'data' => {
|
||||||
|
'type' => 'activities',
|
||||||
|
'id' => activity.id.to_s,
|
||||||
|
'attributes' => {
|
||||||
|
'description' => 'A new description',
|
||||||
|
'finished' => true,
|
||||||
|
'due-date' => '2025-10-31'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'updates the activity' do
|
||||||
|
patch "/api/v1/activities/#{activity.id}", params: params.to_json, headers: auth_headers
|
||||||
|
|
||||||
|
expect(response).to have_http_status(:ok)
|
||||||
|
|
||||||
|
# Check response
|
||||||
|
expect(subject['data']['attributes']['description']).to eq('A new description')
|
||||||
|
expect(subject['data']['attributes']['finished']).to eq(true)
|
||||||
|
expect(subject['data']['attributes']['due-date']).to eq('2025-10-31')
|
||||||
|
|
||||||
|
# Check database
|
||||||
|
activity.reload
|
||||||
|
expect(activity.description).to eq('A new description')
|
||||||
|
expect(activity.finished).to eq(true)
|
||||||
|
expect(activity.due_date.to_s).to eq('2025-10-31')
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ RSpec.describe 'Gardens', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let(:garden_params) do
|
let(:garden_params) do
|
||||||
{
|
{
|
||||||
data: {
|
data: {
|
||||||
@@ -116,7 +116,7 @@ RSpec.describe 'Gardens', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let(:garden) { create(:garden, owner: member) }
|
let(:garden) { create(:garden, owner: member) }
|
||||||
let(:other_member_garden) { create(:garden) }
|
let(:other_member_garden) { create(:garden) }
|
||||||
let(:update_params) do
|
let(:update_params) do
|
||||||
@@ -164,7 +164,7 @@ RSpec.describe 'Gardens', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let!(:garden) { create(:garden, owner: member) }
|
let!(:garden) { create(:garden, owner: member) }
|
||||||
let(:other_member_garden) { create(:garden) }
|
let(:other_member_garden) { create(:garden) }
|
||||||
|
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ RSpec.describe 'Harvests', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let(:crop) { create(:crop) }
|
let(:crop) { create(:crop) }
|
||||||
let(:planting) { create(:planting, owner: member) }
|
let(:planting) { create(:planting, owner: member) }
|
||||||
let(:plant_part) { create(:plant_part) }
|
let(:plant_part) { create(:plant_part) }
|
||||||
@@ -156,7 +156,7 @@ RSpec.describe 'Harvests', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let(:harvest) { create(:harvest, owner: member) }
|
let(:harvest) { create(:harvest, owner: member) }
|
||||||
let(:other_member_harvest) { create(:harvest) }
|
let(:other_member_harvest) { create(:harvest) }
|
||||||
let(:update_params) do
|
let(:update_params) do
|
||||||
@@ -205,7 +205,7 @@ RSpec.describe 'Harvests', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let!(:harvest) { create(:harvest, owner: member) }
|
let!(:harvest) { create(:harvest, owner: member) }
|
||||||
let(:other_member_harvest) { create(:harvest) }
|
let(:other_member_harvest) { create(:harvest) }
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,8 @@ RSpec.describe 'Members', type: :request do
|
|||||||
"harvests" => harvests_as_json_api,
|
"harvests" => harvests_as_json_api,
|
||||||
"photos" => photos_as_json_api,
|
"photos" => photos_as_json_api,
|
||||||
"plantings" => plantings_as_json_api,
|
"plantings" => plantings_as_json_api,
|
||||||
"seeds" => seeds_as_json_api
|
"seeds" => seeds_as_json_api,
|
||||||
|
"activities" => activities_as_json_api
|
||||||
} }
|
} }
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -41,6 +42,12 @@ RSpec.describe 'Members', type: :request do
|
|||||||
"related" => "#{resource_url}/seeds" } }
|
"related" => "#{resource_url}/seeds" } }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
let(:activities_as_json_api) do
|
||||||
|
{ "links" =>
|
||||||
|
{ "self" => "#{resource_url}/relationships/activities",
|
||||||
|
"related" => "#{resource_url}/activities" } }
|
||||||
|
end
|
||||||
|
|
||||||
let(:plantings_as_json_api) do
|
let(:plantings_as_json_api) do
|
||||||
{ "links" =>
|
{ "links" =>
|
||||||
{ "self" =>
|
{ "self" =>
|
||||||
@@ -74,6 +81,7 @@ RSpec.describe 'Members', type: :request do
|
|||||||
it { expect(subject['data']['relationships']).to include("seeds" => seeds_as_json_api) }
|
it { expect(subject['data']['relationships']).to include("seeds" => seeds_as_json_api) }
|
||||||
it { expect(subject['data']['relationships']).to include("harvests" => harvests_as_json_api) }
|
it { expect(subject['data']['relationships']).to include("harvests" => harvests_as_json_api) }
|
||||||
it { expect(subject['data']['relationships']).to include("photos" => photos_as_json_api) }
|
it { expect(subject['data']['relationships']).to include("photos" => photos_as_json_api) }
|
||||||
|
it { expect(subject['data']['relationships']).to include("activities" => activities_as_json_api) }
|
||||||
it { expect(subject['data']).to eq(member_encoded_as_json_api) }
|
it { expect(subject['data']).to eq(member_encoded_as_json_api) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ RSpec.describe 'Plantings', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let(:crop) { create(:crop) }
|
let(:crop) { create(:crop) }
|
||||||
let(:garden) { create(:garden, owner: member) }
|
let(:garden) { create(:garden, owner: member) }
|
||||||
let(:planting_params) do
|
let(:planting_params) do
|
||||||
@@ -140,7 +140,7 @@ RSpec.describe 'Plantings', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let(:planting) { create(:planting, owner: member) }
|
let(:planting) { create(:planting, owner: member) }
|
||||||
let(:other_member_planting) { create(:planting) }
|
let(:other_member_planting) { create(:planting) }
|
||||||
let(:update_params) do
|
let(:update_params) do
|
||||||
@@ -189,7 +189,7 @@ RSpec.describe 'Plantings', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let!(:planting) { create(:planting, owner: member) }
|
let!(:planting) { create(:planting, owner: member) }
|
||||||
let(:other_member_planting) { create(:planting) }
|
let(:other_member_planting) { create(:planting) }
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ RSpec.describe 'Seeds', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let(:crop) { create(:crop) }
|
let(:crop) { create(:crop) }
|
||||||
let(:seed_params) do
|
let(:seed_params) do
|
||||||
{
|
{
|
||||||
@@ -103,7 +103,7 @@ RSpec.describe 'Seeds', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let(:crop) { create(:crop) }
|
let(:crop) { create(:crop) }
|
||||||
let(:seed) { create(:seed, owner: member, crop: crop) }
|
let(:seed) { create(:seed, owner: member, crop: crop) }
|
||||||
let(:other_member_seed) { create(:seed) }
|
let(:other_member_seed) { create(:seed) }
|
||||||
@@ -152,7 +152,7 @@ RSpec.describe 'Seeds', type: :request do
|
|||||||
member.api_token.token
|
member.api_token.token
|
||||||
end
|
end
|
||||||
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
let(:headers) { { 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json' } }
|
||||||
let(:auth_headers) { headers.merge('Authorization' => "Token token=#{token}") }
|
let(:auth_headers) { headers.merge('Authorization' => "Bearer #{token}") }
|
||||||
let(:crop) { create(:crop) }
|
let(:crop) { create(:crop) }
|
||||||
let!(:seed) { create(:seed, owner: member, crop: crop) }
|
let!(:seed) { create(:seed, owner: member, crop: crop) }
|
||||||
let(:other_member_seed) { create(:seed) }
|
let(:other_member_seed) { create(:seed) }
|
||||||
|
|||||||
@@ -1006,9 +1006,9 @@ js-tokens@^4.0.0:
|
|||||||
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
|
||||||
|
|
||||||
js-yaml@^3.13.0:
|
js-yaml@^3.13.0:
|
||||||
version "3.14.1"
|
version "3.14.2"
|
||||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
|
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0"
|
||||||
integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
|
integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==
|
||||||
dependencies:
|
dependencies:
|
||||||
argparse "^1.0.7"
|
argparse "^1.0.7"
|
||||||
esprima "^4.0.0"
|
esprima "^4.0.0"
|
||||||
|
|||||||
Reference in New Issue
Block a user