mirror of
https://github.com/Growstuff/growstuff.git
synced 2026-05-25 09:19:15 -04:00
Compare commits
282 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
72af9fd299 | ||
|
|
8a45b8240f | ||
|
|
aff003d2d0 | ||
|
|
0bb7d973e4 | ||
|
|
789251b6f6 | ||
|
|
0be9e777a1 | ||
|
|
cc5ad663e9 | ||
|
|
2fe5ffbdef | ||
|
|
ba6d9f256f | ||
|
|
a7d340e3be | ||
|
|
03a30967c8 | ||
|
|
09a15e829e | ||
|
|
ad0cfe311e | ||
|
|
7587782d9c | ||
|
|
68549bbcb0 | ||
|
|
ab35b6fb8e | ||
|
|
eaeb8f6aac | ||
|
|
ab2e7bc879 | ||
|
|
352301d033 | ||
|
|
d71bd34705 | ||
|
|
647e5606fa | ||
|
|
50c66a2681 | ||
|
|
6af2f06ad2 | ||
|
|
dbf0c404d5 | ||
|
|
422019ded0 | ||
|
|
8722d04bfa | ||
|
|
57ddce41e5 | ||
|
|
63a585f840 | ||
|
|
ea1aac074b | ||
|
|
56e30c4fb2 | ||
|
|
fcce772287 | ||
|
|
1c3f7994ef | ||
|
|
e6cf09d24c | ||
|
|
bf2539d027 | ||
|
|
b057356ce8 | ||
|
|
97353a54c0 | ||
|
|
6c07be362b | ||
|
|
8f12bfb6da | ||
|
|
d573663cbb | ||
|
|
15c2768f8c | ||
|
|
db798aa847 | ||
|
|
a9208180c4 | ||
|
|
18161cf6d4 | ||
|
|
ab661f97dc | ||
|
|
eb58019c22 | ||
|
|
2d210dfb95 | ||
|
|
8ac3346474 | ||
|
|
ea2f6a35c2 | ||
|
|
8938a7d40e | ||
|
|
4a07c46049 | ||
|
|
0ad1ce0283 | ||
|
|
2c7f35cd64 | ||
|
|
763a547613 | ||
|
|
1a6adb3330 | ||
|
|
3ad4058669 | ||
|
|
cbe7e875d7 | ||
|
|
484f7f4b9a | ||
|
|
52478907a9 | ||
|
|
7afd43de18 | ||
|
|
7671fb87c0 | ||
|
|
4cd1fb2c5a | ||
|
|
ac61ae3a56 | ||
|
|
4d207e5d18 | ||
|
|
52fc939820 | ||
|
|
ef28b0aebc | ||
|
|
dc03800a86 | ||
|
|
fa7329dbec | ||
|
|
c404f92c6f | ||
|
|
5ec8e16544 | ||
|
|
944555f455 | ||
|
|
60f55cec61 | ||
|
|
9405f654b9 | ||
|
|
aa932dd7ef | ||
|
|
a4098e9a59 | ||
|
|
6492f8a54c | ||
|
|
381c8779eb | ||
|
|
3820b01769 | ||
|
|
81bd0c78df | ||
|
|
9486e6a79d | ||
|
|
4d217ba3d3 | ||
|
|
93ffef0125 | ||
|
|
85194e8fb5 | ||
|
|
1baa79294e | ||
|
|
5841f68f6f | ||
|
|
437a74d484 | ||
|
|
7448cb170b | ||
|
|
39d887cb33 | ||
|
|
a3c5e62073 | ||
|
|
54a10eb846 | ||
|
|
0fee4b1622 | ||
|
|
2bc7b992e9 | ||
|
|
f21cf31e86 | ||
|
|
88a956ece8 | ||
|
|
42d536be4b | ||
|
|
294f528b36 | ||
|
|
a9df664a3d | ||
|
|
d3483ef518 | ||
|
|
ab083eabc2 | ||
|
|
65c49fdd56 | ||
|
|
6d66fad24d | ||
|
|
bdc04c0435 | ||
|
|
2f24ca3211 | ||
|
|
fec9789b19 | ||
|
|
327979afb3 | ||
|
|
fcf3963296 | ||
|
|
dee72cc64e | ||
|
|
a3b7522acd | ||
|
|
330903b766 | ||
|
|
bda0fe1dfd | ||
|
|
d1311e56b7 | ||
|
|
7d002d6a2b | ||
|
|
de579e53b9 | ||
|
|
42fd278f6e | ||
|
|
1818436999 | ||
|
|
dfce843bf7 | ||
|
|
d7d054d44f | ||
|
|
728e145cb2 | ||
|
|
fdf421a56b | ||
|
|
292865a7bd | ||
|
|
35e641b2d1 | ||
|
|
c08c541a47 | ||
|
|
b4fda63bcc | ||
|
|
bb4857de72 | ||
|
|
8fe7e1d1fc | ||
|
|
e89a456133 | ||
|
|
4bb7025b35 | ||
|
|
14f9f75ab8 | ||
|
|
e0483bbe87 | ||
|
|
5b89aff98a | ||
|
|
98404baf0f | ||
|
|
6f9ab4e4a6 | ||
|
|
5722bfec59 | ||
|
|
a112d8e126 | ||
|
|
1b3485733d | ||
|
|
425e9e07b6 | ||
|
|
e1fb08707a | ||
|
|
169b49ea40 | ||
|
|
e36debc481 | ||
|
|
d209b0f68c | ||
|
|
b3179a8f2d | ||
|
|
d1407c6c31 | ||
|
|
5495563840 | ||
|
|
ab3eabbc94 | ||
|
|
da45aae52f | ||
|
|
449c6c4487 | ||
|
|
955dbcba08 | ||
|
|
9f6fe4d7d8 | ||
|
|
25febba9be | ||
|
|
3a12b331e3 | ||
|
|
2cdf84a7a2 | ||
|
|
8d22a23770 | ||
|
|
43c501f245 | ||
|
|
525871dde7 | ||
|
|
c353b8d32e | ||
|
|
e4e9cd6c2c | ||
|
|
0813beb146 | ||
|
|
c6a5a842fc | ||
|
|
a374312773 | ||
|
|
189098a5eb | ||
|
|
eef23ca9af | ||
|
|
202e3fd91b | ||
|
|
ad95f81d31 | ||
|
|
7edc6f9c55 | ||
|
|
f0b34801ff | ||
|
|
5e9cd98176 | ||
|
|
05e83e4906 | ||
|
|
1e2143082b | ||
|
|
4d63810280 | ||
|
|
2f4416a9a6 | ||
|
|
7d71baf46e | ||
|
|
7754716b0e | ||
|
|
d240b32c7d | ||
|
|
a9ee484e63 | ||
|
|
0d8722af46 | ||
|
|
9c8def5f0f | ||
|
|
debc0b10a6 | ||
|
|
3287ca42fb | ||
|
|
c07f0370ae | ||
|
|
ab8f0ee43e | ||
|
|
55a133a043 | ||
|
|
dfbe9a1cb2 | ||
|
|
63681bd595 | ||
|
|
b2deaed673 | ||
|
|
ff780971d3 | ||
|
|
292fcc81c9 | ||
|
|
7500138704 | ||
|
|
743f0dbd86 | ||
|
|
0d619aed02 | ||
|
|
49891781d9 | ||
|
|
9bd054f1da | ||
|
|
60d19806ee | ||
|
|
371dfffcbd | ||
|
|
ffe1936991 | ||
|
|
09663c163e | ||
|
|
bdff923a9c | ||
|
|
1a6095fdc8 | ||
|
|
112be56a42 | ||
|
|
2c4d8ec56b | ||
|
|
9c2a830d23 | ||
|
|
055408a3ef | ||
|
|
35e5737ab4 | ||
|
|
7a79beb842 | ||
|
|
f6dc73226e | ||
|
|
cec5768934 | ||
|
|
dee4a814c9 | ||
|
|
8059f6c3a5 | ||
|
|
ff8ef0c963 | ||
|
|
8a6c661ff1 | ||
|
|
5a03b24f4e | ||
|
|
086f32e473 | ||
|
|
95ca08eb43 | ||
|
|
4c0f5fed10 | ||
|
|
2a9478206f | ||
|
|
58beba9dd9 | ||
|
|
3eb708b954 | ||
|
|
103d7f2235 | ||
|
|
91e90b3cbe | ||
|
|
c7551b5856 | ||
|
|
d6c75f541a | ||
|
|
218da856c2 | ||
|
|
d303adb05c | ||
|
|
5f8ef59606 | ||
|
|
e5b192a036 | ||
|
|
609a67c180 | ||
|
|
888cad50b8 | ||
|
|
50d1ab2d9a | ||
|
|
f0992c9d7a | ||
|
|
28c84e4b9d | ||
|
|
9b06e3bf79 | ||
|
|
7827cda1f7 | ||
|
|
09f0a303cf | ||
|
|
3823981b5a | ||
|
|
f09a17f36a | ||
|
|
9ba879a458 | ||
|
|
2b41612036 | ||
|
|
eeb62c488a | ||
|
|
cf224e185f | ||
|
|
913cb48be8 | ||
|
|
2ac0e6ff65 | ||
|
|
05cbed55d1 | ||
|
|
cc844f0a80 | ||
|
|
f0667cdbf5 | ||
|
|
4db6a5adc6 | ||
|
|
c4dfa09e49 | ||
|
|
ff345de507 | ||
|
|
145ae184ac | ||
|
|
a60f7c2db0 | ||
|
|
f279eddafa | ||
|
|
3f09805bfd | ||
|
|
4830228436 | ||
|
|
90a86d8db4 | ||
|
|
850823563c | ||
|
|
c98731eea1 | ||
|
|
f81493deaa | ||
|
|
d5ecdb9838 | ||
|
|
5e5b9748d7 | ||
|
|
5618e9565f | ||
|
|
c1e511d099 | ||
|
|
dfc7d1a09a | ||
|
|
13b99b468b | ||
|
|
cceda77471 | ||
|
|
64331cb8bd | ||
|
|
3bf0ece501 | ||
|
|
60608411ed | ||
|
|
554620e8ce | ||
|
|
5025f6c3f0 | ||
|
|
0938e6b7a9 | ||
|
|
cdd0a7c122 | ||
|
|
7733cd9bd2 | ||
|
|
0a9afe03d9 | ||
|
|
7a8f826456 | ||
|
|
f677500d2e | ||
|
|
8951ae4719 | ||
|
|
5faf990167 | ||
|
|
24ac3fc9be | ||
|
|
74f2ffe86e | ||
|
|
e101978107 | ||
|
|
dd7c51ea88 | ||
|
|
2fd478d155 | ||
|
|
28d550d67f | ||
|
|
07feb1cd85 | ||
|
|
d3063f844d |
2
.devcontainer/.env
Normal file
2
.devcontainer/.env
Normal file
@@ -0,0 +1,2 @@
|
||||
# Ruby version
|
||||
VARIANT=3.1.4
|
||||
22
.devcontainer/Dockerfile
Normal file
22
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,22 @@
|
||||
FROM mcr.microsoft.com/devcontainers/ruby:0-3.1-bullseye
|
||||
|
||||
# Install Rails
|
||||
RUN gem install rails:7.0.4 webdrivers:5.2.0
|
||||
|
||||
# Default value to allow debug server to serve content over GitHub Codespace's port forwarding service
|
||||
# The value is a comma-separated list of allowed domains
|
||||
ENV RAILS_DEVELOPMENT_HOSTS=".githubpreview.dev,.preview.app.github.dev,.app.github.dev"
|
||||
|
||||
#RUN bundle
|
||||
#RUN bundle exec rake db:create
|
||||
#RUN bundle exec rake db:migrate
|
||||
|
||||
# [Optional] Uncomment this section to install additional OS packages.
|
||||
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \
|
||||
# && apt-get -y install --no-install-recommends <your-package-list-here>
|
||||
|
||||
# [Optional] Uncomment this line to install additional gems.
|
||||
# RUN gem install <your-gem-names-here>
|
||||
|
||||
# [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
|
||||
2
.devcontainer/create-db-user.sql
Normal file
2
.devcontainer/create-db-user.sql
Normal file
@@ -0,0 +1,2 @@
|
||||
CREATE USER vscode CREATEDB;
|
||||
CREATE DATABASE vscode WITH OWNER vscode;
|
||||
30
.devcontainer/devcontainer.json
Normal file
30
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,30 @@
|
||||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||
// README at: https://github.com/devcontainers/templates/tree/main/src/ruby-rails-postgres
|
||||
{
|
||||
"name": "Growstuff",
|
||||
"dockerComposeFile": "docker-compose.yml",
|
||||
"service": "app",
|
||||
"workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}",
|
||||
|
||||
// Features to add to the dev container. More info: https://containers.dev/features.
|
||||
// Need something to get javascript working
|
||||
"features": {
|
||||
"ghcr.io/devcontainers/features/node:1": {}
|
||||
},
|
||||
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
// This can be used to network with other containers or the host.
|
||||
"forwardPorts": [3000, 5432, 9200],
|
||||
|
||||
// Use 'postCreateCommand' to run commands after the container is created.
|
||||
// these don't actually work as postCreateCommands, you need to run them manually
|
||||
// for some unknown reason, Github codespaces use rbenv and rvm simultaneously
|
||||
// and you need both to be correct for it to work
|
||||
"postCreateCommand": "nice -n 19 bundle install && nice -n 19 bundle exec rake db:create && nice -n 19 bundle exec rake db:migrate && nice -n19 bundle exec rake db:seed"
|
||||
|
||||
// Configure tool-specific properties.
|
||||
// "customizations": {},
|
||||
|
||||
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
||||
// "remoteUser": "root"
|
||||
}
|
||||
82
.devcontainer/docker-compose.yml
Normal file
82
.devcontainer/docker-compose.yml
Normal file
@@ -0,0 +1,82 @@
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
app:
|
||||
build:
|
||||
context: ..
|
||||
dockerfile: .devcontainer/Dockerfile
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
elasticsearch:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
ELASTICSEARCH_URL: http://elasticsearch:9200/
|
||||
APP_DOMAIN_NAME: localhost:3000
|
||||
APP_PROTOCOL: http
|
||||
DEVISE_SECRET_KEY: secret
|
||||
GROWSTUFF_EMAIL: "noreply@test.growstuff.org"
|
||||
GROWSTUFF_FLICKR_KEY: secretkey
|
||||
GROWSTUFF_FLICKR_SECRET: secretsecret
|
||||
GROWSTUFF_SITE_NAME: "Growstuff (local)"
|
||||
RAILS_SECRET_TOKEN: supersecret
|
||||
volumes:
|
||||
- ../..:/workspaces:cached
|
||||
|
||||
# Overrides default command so things don't shut down after the process ends.
|
||||
command: sleep infinity
|
||||
|
||||
db:
|
||||
image: postgres:latest
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- postgres-data:/var/lib/postgresql/data
|
||||
- ./create-db-user.sql:/docker-entrypoint-initdb.d/create-db-user.sql
|
||||
environment:
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: growstuff_dev
|
||||
POSTGRES_PASSWORD: postgres
|
||||
ports:
|
||||
- "5432:5432"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
elasticsearch:
|
||||
image: docker.elastic.co/elasticsearch/elasticsearch:7.4.0
|
||||
container_name: elasticsearch
|
||||
environment:
|
||||
- xpack.security.enabled=false
|
||||
- discovery.type=single-node
|
||||
ulimits:
|
||||
memlock:
|
||||
soft: -1
|
||||
hard: -1
|
||||
nofile:
|
||||
soft: 65536
|
||||
hard: 65536
|
||||
cap_add:
|
||||
- IPC_LOCK
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
"curl http://localhost:9200 | grep tagline",
|
||||
]
|
||||
interval: 10s
|
||||
timeout: 10s
|
||||
retries: 120
|
||||
volumes:
|
||||
- esdata01:/usr/share/elasticsearch/data
|
||||
ports:
|
||||
- 9200:9200
|
||||
- 9300:9300
|
||||
|
||||
volumes:
|
||||
postgres-data:
|
||||
certs:
|
||||
driver: local
|
||||
esdata01:
|
||||
driver: local
|
||||
@@ -1 +1 @@
|
||||
3.1.2
|
||||
3.1.4
|
||||
|
||||
129
CODE_OF_CONDUCT.md
Normal file
129
CODE_OF_CONDUCT.md
Normal file
@@ -0,0 +1,129 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
We as members, contributors, and leaders pledge to make participation in our
|
||||
community a harassment-free experience for everyone, regardless of age, body
|
||||
size, visible or invisible disability, ethnicity, sex characteristics, gender
|
||||
identity and expression, level of experience, education, socio-economic status,
|
||||
nationality, personal appearance, race, religion, or sexual identity
|
||||
and orientation.
|
||||
|
||||
We pledge to act and interact in ways that contribute to an open, welcoming,
|
||||
diverse, inclusive, and healthy community.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to a positive environment for our
|
||||
community include:
|
||||
|
||||
* Demonstrating empathy and kindness toward other people
|
||||
* Being respectful of differing opinions, viewpoints, and experiences
|
||||
* Giving and gracefully accepting constructive feedback
|
||||
* Accepting responsibility and apologizing to those affected by our mistakes,
|
||||
and learning from the experience
|
||||
* Focusing on what is best not just for us as individuals, but for the
|
||||
overall community
|
||||
|
||||
Examples of unacceptable behavior include:
|
||||
|
||||
* The use of sexualized language or imagery, and sexual attention or
|
||||
advances of any kind
|
||||
* Trolling, insulting or derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or email
|
||||
address, without their explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Enforcement Responsibilities
|
||||
|
||||
Community leaders are responsible for clarifying and enforcing our standards of
|
||||
acceptable behavior and will take appropriate and fair corrective action in
|
||||
response to any behavior that they deem inappropriate, threatening, offensive,
|
||||
or harmful.
|
||||
|
||||
Community leaders have the right and responsibility to remove, edit, or reject
|
||||
comments, commits, code, wiki edits, issues, and other contributions that are
|
||||
not aligned to this Code of Conduct, and will communicate reasons for moderation
|
||||
decisions when appropriate.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies within all community spaces, and also applies when
|
||||
an individual is officially representing the community in public spaces.
|
||||
Examples of representing our community include using an official e-mail address,
|
||||
posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
info@growstuff.org. Any issues with a particular moderator can be reported to
|
||||
any one of the other moderators.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
reporter of any incident.
|
||||
|
||||
## Enforcement Guidelines
|
||||
|
||||
Community leaders will follow these Community Impact Guidelines in determining
|
||||
the consequences for any action they deem in violation of this Code of Conduct:
|
||||
|
||||
### 1. Correction
|
||||
|
||||
**Community Impact**: Use of inappropriate language or other behavior deemed
|
||||
unprofessional or unwelcome in the community.
|
||||
|
||||
**Consequence**: A private, written warning from community leaders, providing
|
||||
clarity around the nature of the violation and an explanation of why the
|
||||
behavior was inappropriate. A public apology may be requested.
|
||||
|
||||
### 2. Warning
|
||||
|
||||
**Community Impact**: A violation through a single incident or series
|
||||
of actions.
|
||||
|
||||
**Consequence**: A warning with consequences for continued behavior. No
|
||||
interaction with the people involved, including unsolicited interaction with
|
||||
those enforcing the Code of Conduct, for a specified period of time. This
|
||||
includes avoiding interactions in community spaces as well as external channels
|
||||
like social media. Violating these terms may lead to a temporary or
|
||||
permanent ban.
|
||||
|
||||
### 3. Temporary Ban
|
||||
|
||||
**Community Impact**: A serious violation of community standards, including
|
||||
sustained inappropriate behavior.
|
||||
|
||||
**Consequence**: A temporary ban from any sort of interaction or public
|
||||
communication with the community for a specified period of time. No public or
|
||||
private interaction with the people involved, including unsolicited interaction
|
||||
with those enforcing the Code of Conduct, is allowed during this period.
|
||||
Violating these terms may lead to a permanent ban.
|
||||
|
||||
### 4. Permanent Ban
|
||||
|
||||
**Community Impact**: Demonstrating a pattern of violation of community
|
||||
standards, including sustained inappropriate behavior, harassment of an
|
||||
individual, or aggression toward or disparagement of classes of individuals.
|
||||
|
||||
**Consequence**: A permanent ban from any sort of public interaction within
|
||||
the community.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage],
|
||||
version 2.0, available at
|
||||
https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
|
||||
|
||||
Community Impact Guidelines were inspired by [Mozilla's code of conduct
|
||||
enforcement ladder](https://github.com/mozilla/diversity).
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see the FAQ at
|
||||
https://www.contributor-covenant.org/faq. Translations are available at
|
||||
https://www.contributor-covenant.org/translations.
|
||||
@@ -92,6 +92,7 @@ submit the change with your pull request.
|
||||
- André Aubin / [lambda2](https://github.com/lambda2)
|
||||
- Martina Simicic / [simicic](https://github.com/simicic)
|
||||
- Rowan Crawford / [wombleton](https://github.com/wombleton)
|
||||
- Ítalo Pires / [italopires](https://github.com/italopires)
|
||||
|
||||
## Bots
|
||||
|
||||
|
||||
3
Gemfile
3
Gemfile
@@ -15,7 +15,7 @@ gem 'bundler', '>= 2.3.10'
|
||||
|
||||
gem 'coffee-rails'
|
||||
gem 'haml'
|
||||
gem 'sass-rails'
|
||||
gem 'sassc-rails'
|
||||
|
||||
# API data
|
||||
gem 'jsonapi-resources'
|
||||
@@ -94,7 +94,6 @@ gem "bootstrap_form", ">= 4.5.0"
|
||||
|
||||
# For connecting to other services (eg Twitter)
|
||||
gem 'omniauth', '~> 1.3'
|
||||
gem 'omniauth-facebook'
|
||||
gem 'omniauth-flickr', '>= 0.0.15'
|
||||
gem 'omniauth-twitter'
|
||||
|
||||
|
||||
290
Gemfile.lock
290
Gemfile.lock
@@ -1,6 +1,6 @@
|
||||
GIT
|
||||
remote: https://github.com/restarone/comfortable-mexican-sofa.git
|
||||
revision: 456fb8507e9668128529c0302fa2e77e029c1f88
|
||||
revision: ccf9415ae220453a199759b8ecbb8e9436c75c85
|
||||
specs:
|
||||
comfortable_mexican_sofa (2.0.19)
|
||||
active_link_to (>= 1.0.0)
|
||||
@@ -26,47 +26,47 @@ GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
abstract_type (0.0.7)
|
||||
actioncable (7.0.4)
|
||||
actionpack (= 7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
actioncable (7.0.4.3)
|
||||
actionpack (= 7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
nio4r (~> 2.0)
|
||||
websocket-driver (>= 0.6.1)
|
||||
actionmailbox (7.0.4)
|
||||
actionpack (= 7.0.4)
|
||||
activejob (= 7.0.4)
|
||||
activerecord (= 7.0.4)
|
||||
activestorage (= 7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
actionmailbox (7.0.4.3)
|
||||
actionpack (= 7.0.4.3)
|
||||
activejob (= 7.0.4.3)
|
||||
activerecord (= 7.0.4.3)
|
||||
activestorage (= 7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
mail (>= 2.7.1)
|
||||
net-imap
|
||||
net-pop
|
||||
net-smtp
|
||||
actionmailer (7.0.4)
|
||||
actionpack (= 7.0.4)
|
||||
actionview (= 7.0.4)
|
||||
activejob (= 7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
actionmailer (7.0.4.3)
|
||||
actionpack (= 7.0.4.3)
|
||||
actionview (= 7.0.4.3)
|
||||
activejob (= 7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
mail (~> 2.5, >= 2.5.4)
|
||||
net-imap
|
||||
net-pop
|
||||
net-smtp
|
||||
rails-dom-testing (~> 2.0)
|
||||
actionpack (7.0.4)
|
||||
actionview (= 7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
actionpack (7.0.4.3)
|
||||
actionview (= 7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
rack (~> 2.0, >= 2.2.0)
|
||||
rack-test (>= 0.6.3)
|
||||
rails-dom-testing (~> 2.0)
|
||||
rails-html-sanitizer (~> 1.0, >= 1.2.0)
|
||||
actiontext (7.0.4)
|
||||
actionpack (= 7.0.4)
|
||||
activerecord (= 7.0.4)
|
||||
activestorage (= 7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
actiontext (7.0.4.3)
|
||||
actionpack (= 7.0.4.3)
|
||||
activerecord (= 7.0.4.3)
|
||||
activestorage (= 7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
globalid (>= 0.6.0)
|
||||
nokogiri (>= 1.8.5)
|
||||
actionview (7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
actionview (7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
builder (~> 3.1)
|
||||
erubi (~> 1.4)
|
||||
rails-dom-testing (~> 2.0)
|
||||
@@ -78,25 +78,25 @@ GEM
|
||||
activerecord (>= 4.2)
|
||||
active_record_union (1.3.0)
|
||||
activerecord (>= 4.0)
|
||||
active_utils (3.3.19)
|
||||
active_utils (3.4.1)
|
||||
activesupport (>= 4.2)
|
||||
i18n
|
||||
activejob (7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
activejob (7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
globalid (>= 0.3.6)
|
||||
activemodel (7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
activerecord (7.0.4)
|
||||
activemodel (= 7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
activestorage (7.0.4)
|
||||
actionpack (= 7.0.4)
|
||||
activejob (= 7.0.4)
|
||||
activerecord (= 7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
activemodel (7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
activerecord (7.0.4.3)
|
||||
activemodel (= 7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
activestorage (7.0.4.3)
|
||||
actionpack (= 7.0.4.3)
|
||||
activejob (= 7.0.4.3)
|
||||
activerecord (= 7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
marcel (~> 1.0)
|
||||
mini_mime (>= 1.1.0)
|
||||
activesupport (7.0.4)
|
||||
activesupport (7.0.4.3)
|
||||
concurrent-ruby (~> 1.0, >= 1.0.2)
|
||||
i18n (>= 1.6, < 2)
|
||||
minitest (>= 5.1)
|
||||
@@ -104,7 +104,7 @@ GEM
|
||||
adamantium (0.2.0)
|
||||
ice_nine (~> 0.11.0)
|
||||
memoizable (~> 0.4.0)
|
||||
addressable (2.8.1)
|
||||
addressable (2.8.4)
|
||||
public_suffix (>= 2.0.2, < 6.0)
|
||||
anima (0.3.2)
|
||||
abstract_type (~> 0.0.7)
|
||||
@@ -113,11 +113,11 @@ GEM
|
||||
ast (2.4.2)
|
||||
autoprefixer-rails (10.4.7.0)
|
||||
execjs (~> 2)
|
||||
bcrypt (3.1.17)
|
||||
better_errors (2.9.1)
|
||||
coderay (>= 1.0.0)
|
||||
bcrypt (3.1.18)
|
||||
better_errors (2.10.0)
|
||||
erubi (>= 1.0.0)
|
||||
rack (>= 0.9.0)
|
||||
rouge (>= 1.0.0)
|
||||
better_html (2.0.1)
|
||||
actionview (>= 6.0)
|
||||
activesupport (>= 6.0)
|
||||
@@ -139,12 +139,12 @@ GEM
|
||||
actionpack (>= 5.2)
|
||||
activemodel (>= 5.2)
|
||||
builder (3.2.4)
|
||||
bullet (7.0.4)
|
||||
bullet (7.0.7)
|
||||
activesupport (>= 3.0.0)
|
||||
uniform_notifier (~> 1.11)
|
||||
byebug (11.1.3)
|
||||
cancancan (3.4.0)
|
||||
capybara (3.38.0)
|
||||
cancancan (3.5.0)
|
||||
capybara (3.39.0)
|
||||
addressable
|
||||
matrix
|
||||
mini_mime (>= 0.1.3)
|
||||
@@ -167,10 +167,9 @@ GEM
|
||||
mimemagic (>= 0.3.0)
|
||||
mini_mime (>= 0.1.3)
|
||||
ssrf_filter (~> 1.0)
|
||||
chartkick (4.2.1)
|
||||
chartkick (5.0.1)
|
||||
codeclimate-test-reporter (1.0.9)
|
||||
simplecov (<= 0.13)
|
||||
coderay (1.1.3)
|
||||
coffee-rails (5.0.0)
|
||||
coffee-script (>= 2.2.0)
|
||||
railties (>= 5.2.0)
|
||||
@@ -183,19 +182,20 @@ GEM
|
||||
concord (0.1.6)
|
||||
adamantium (~> 0.2.0)
|
||||
equalizer (~> 0.0.9)
|
||||
concurrent-ruby (1.1.10)
|
||||
connection_pool (2.3.0)
|
||||
concurrent-ruby (1.2.2)
|
||||
connection_pool (2.4.0)
|
||||
crass (1.0.6)
|
||||
csv_shaper (1.3.2)
|
||||
activesupport (>= 3.0.0)
|
||||
dalli (3.2.3)
|
||||
database_cleaner (2.0.1)
|
||||
database_cleaner-active_record (~> 2.0.0)
|
||||
database_cleaner-active_record (2.0.0)
|
||||
dalli (3.2.4)
|
||||
database_cleaner (2.0.2)
|
||||
database_cleaner-active_record (>= 2, < 3)
|
||||
database_cleaner-active_record (2.1.0)
|
||||
activerecord (>= 5.a)
|
||||
database_cleaner-core (~> 2.0.0)
|
||||
database_cleaner-core (2.0.1)
|
||||
devise (4.8.1)
|
||||
date (3.3.3)
|
||||
devise (4.9.2)
|
||||
bcrypt (~> 3.0)
|
||||
orm_adapter (~> 0.1)
|
||||
railties (>= 4.1.0)
|
||||
@@ -223,7 +223,7 @@ GEM
|
||||
faraday (~> 1)
|
||||
multi_json
|
||||
equalizer (0.0.11)
|
||||
erubi (1.11.0)
|
||||
erubi (1.12.0)
|
||||
erubis (2.7.0)
|
||||
excon (0.93.1)
|
||||
execjs (2.8.1)
|
||||
@@ -232,9 +232,9 @@ GEM
|
||||
factory_bot_rails (6.2.0)
|
||||
factory_bot (~> 6.2.0)
|
||||
railties (>= 5.0.0)
|
||||
faker (3.0.0)
|
||||
faker (3.2.0)
|
||||
i18n (>= 1.8.11, < 2)
|
||||
faraday (1.10.2)
|
||||
faraday (1.10.3)
|
||||
faraday-em_http (~> 1.0)
|
||||
faraday-em_synchrony (~> 1.0)
|
||||
faraday-excon (~> 1.1)
|
||||
@@ -269,7 +269,7 @@ GEM
|
||||
gibbon (1.2.1)
|
||||
httparty
|
||||
multi_json (>= 1.9.0)
|
||||
globalid (1.0.0)
|
||||
globalid (1.1.0)
|
||||
activesupport (>= 5.0)
|
||||
gravatar-ultimate (2.0.0)
|
||||
activesupport (>= 2.3.14)
|
||||
@@ -288,7 +288,7 @@ GEM
|
||||
activesupport (>= 5.1)
|
||||
haml (>= 4.0.6)
|
||||
railties (>= 5.1)
|
||||
haml_lint (0.43.0)
|
||||
haml_lint (0.45.0)
|
||||
haml (>= 4.0, < 6.2)
|
||||
parallel (~> 1.10)
|
||||
rainbow
|
||||
@@ -302,10 +302,10 @@ GEM
|
||||
multi_json (>= 1.9.2)
|
||||
webrick
|
||||
highline (2.0.3)
|
||||
httparty (0.18.1)
|
||||
mime-types (~> 3.0)
|
||||
httparty (0.21.0)
|
||||
mini_mime (>= 1.0.0)
|
||||
multi_xml (>= 0.5.2)
|
||||
i18n (1.12.0)
|
||||
i18n (1.13.0)
|
||||
concurrent-ruby (~> 1.0)
|
||||
i18n-tasks (1.0.12)
|
||||
activesupport (>= 4.0.2)
|
||||
@@ -338,24 +338,26 @@ GEM
|
||||
concurrent-ruby
|
||||
railties (>= 4.1)
|
||||
jsonapi-swagger (0.8.1)
|
||||
jwt (2.3.0)
|
||||
kgio (2.11.4)
|
||||
kramdown (2.4.0)
|
||||
rexml
|
||||
launchy (2.5.0)
|
||||
addressable (~> 2.7)
|
||||
leaflet-rails (1.9.2)
|
||||
leaflet-rails (1.9.3)
|
||||
rails (>= 4.2.0)
|
||||
letter_opener (1.8.1)
|
||||
launchy (>= 2.2, < 3)
|
||||
listen (3.7.1)
|
||||
listen (3.8.0)
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
loofah (2.19.1)
|
||||
loofah (2.20.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.7.1)
|
||||
mail (2.8.1)
|
||||
mini_mime (>= 0.1.1)
|
||||
net-imap
|
||||
net-pop
|
||||
net-smtp
|
||||
mailboxer (0.15.1)
|
||||
carrierwave (>= 0.5.8)
|
||||
rails (>= 5.0.0)
|
||||
@@ -370,97 +372,84 @@ GEM
|
||||
memoizable (0.4.2)
|
||||
thread_safe (~> 0.3, >= 0.3.1)
|
||||
method_source (1.0.0)
|
||||
mime-types (3.3.1)
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2020.0512)
|
||||
mimemagic (0.4.3)
|
||||
nokogiri (~> 1)
|
||||
rake
|
||||
mini_magick (4.11.0)
|
||||
mini_magick (4.12.0)
|
||||
mini_mime (1.1.2)
|
||||
mini_portile2 (2.8.0)
|
||||
minitest (5.16.3)
|
||||
mini_portile2 (2.8.1)
|
||||
minitest (5.18.0)
|
||||
moneta (1.0.0)
|
||||
multi_json (1.15.0)
|
||||
multi_xml (0.6.0)
|
||||
multipart-post (2.2.3)
|
||||
net-imap (0.3.1)
|
||||
net-imap (0.3.4)
|
||||
date
|
||||
net-protocol
|
||||
net-pop (0.1.2)
|
||||
net-protocol
|
||||
net-protocol (0.1.3)
|
||||
net-protocol (0.2.1)
|
||||
timeout
|
||||
net-smtp (0.3.3)
|
||||
net-protocol
|
||||
nio4r (2.5.8)
|
||||
nokogiri (1.13.10)
|
||||
nio4r (2.5.9)
|
||||
nokogiri (1.14.3)
|
||||
mini_portile2 (~> 2.8.0)
|
||||
racc (~> 1.4)
|
||||
nokogiri (1.13.10-x86_64-linux)
|
||||
nokogiri (1.14.3-x86_64-linux)
|
||||
racc (~> 1.4)
|
||||
oauth (0.5.6)
|
||||
oauth2 (1.4.9)
|
||||
faraday (>= 0.17.3, < 3.0)
|
||||
jwt (>= 1.0, < 3.0)
|
||||
multi_json (~> 1.3)
|
||||
multi_xml (~> 0.5)
|
||||
rack (>= 1.2, < 3)
|
||||
oj (3.13.23)
|
||||
oj (3.14.3)
|
||||
omniauth (1.9.2)
|
||||
hashie (>= 3.4.6)
|
||||
rack (>= 1.6.2, < 3)
|
||||
omniauth-facebook (9.0.0)
|
||||
omniauth-oauth2 (~> 1.2)
|
||||
omniauth-flickr (0.0.20)
|
||||
multi_json (~> 1.12)
|
||||
omniauth-oauth (~> 1.0)
|
||||
omniauth-oauth (1.1.0)
|
||||
oauth
|
||||
omniauth (~> 1.0)
|
||||
omniauth-oauth2 (1.7.2)
|
||||
oauth2 (~> 1.4)
|
||||
omniauth (>= 1.9, < 3)
|
||||
omniauth-twitter (1.4.0)
|
||||
omniauth-oauth (~> 1.1)
|
||||
rack
|
||||
orm_adapter (0.5.0)
|
||||
parallel (1.22.1)
|
||||
parser (3.1.3.0)
|
||||
parallel (1.23.0)
|
||||
parser (3.2.2.0)
|
||||
ast (~> 2.4.1)
|
||||
percy-capybara (5.0.0)
|
||||
capybara (>= 3)
|
||||
pg (1.4.5)
|
||||
pg (1.5.3)
|
||||
platform-api (3.5.0)
|
||||
heroics (~> 0.1.1)
|
||||
moneta (~> 1.0.0)
|
||||
rate_throttle_client (~> 0.1.0)
|
||||
popper_js (1.16.1)
|
||||
public_suffix (5.0.0)
|
||||
puma (6.0.0)
|
||||
public_suffix (5.0.1)
|
||||
puma (6.2.2)
|
||||
nio4r (~> 2.0)
|
||||
query_diet (0.7.1)
|
||||
racc (1.6.1)
|
||||
rack (2.2.4)
|
||||
rack-cors (1.1.1)
|
||||
racc (1.6.2)
|
||||
rack (2.2.7)
|
||||
rack-cors (2.0.1)
|
||||
rack (>= 2.0.0)
|
||||
rack-protection (3.0.4)
|
||||
rack-protection (3.0.6)
|
||||
rack
|
||||
rack-test (2.0.2)
|
||||
rack-test (2.1.0)
|
||||
rack (>= 1.3)
|
||||
rails (7.0.4)
|
||||
actioncable (= 7.0.4)
|
||||
actionmailbox (= 7.0.4)
|
||||
actionmailer (= 7.0.4)
|
||||
actionpack (= 7.0.4)
|
||||
actiontext (= 7.0.4)
|
||||
actionview (= 7.0.4)
|
||||
activejob (= 7.0.4)
|
||||
activemodel (= 7.0.4)
|
||||
activerecord (= 7.0.4)
|
||||
activestorage (= 7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
rails (7.0.4.3)
|
||||
actioncable (= 7.0.4.3)
|
||||
actionmailbox (= 7.0.4.3)
|
||||
actionmailer (= 7.0.4.3)
|
||||
actionpack (= 7.0.4.3)
|
||||
actiontext (= 7.0.4.3)
|
||||
actionview (= 7.0.4.3)
|
||||
activejob (= 7.0.4.3)
|
||||
activemodel (= 7.0.4.3)
|
||||
activerecord (= 7.0.4.3)
|
||||
activestorage (= 7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
bundler (>= 1.15.0)
|
||||
railties (= 7.0.4)
|
||||
railties (= 7.0.4.3)
|
||||
rails-controller-testing (1.0.5)
|
||||
actionpack (>= 5.0.1.rc1)
|
||||
actionview (>= 5.0.1.rc1)
|
||||
@@ -468,9 +457,9 @@ GEM
|
||||
rails-dom-testing (2.0.3)
|
||||
activesupport (>= 4.2.0)
|
||||
nokogiri (>= 1.6)
|
||||
rails-html-sanitizer (1.4.4)
|
||||
rails-html-sanitizer (1.5.0)
|
||||
loofah (~> 2.19, >= 2.19.1)
|
||||
rails-i18n (7.0.5)
|
||||
rails-i18n (7.0.6)
|
||||
i18n (>= 0.7, < 2)
|
||||
railties (>= 6.0.0, < 8)
|
||||
rails_12factor (0.0.3)
|
||||
@@ -478,9 +467,9 @@ GEM
|
||||
rails_stdout_logging
|
||||
rails_serve_static_assets (0.0.5)
|
||||
rails_stdout_logging (0.0.5)
|
||||
railties (7.0.4)
|
||||
actionpack (= 7.0.4)
|
||||
activesupport (= 7.0.4)
|
||||
railties (7.0.4.3)
|
||||
actionpack (= 7.0.4.3)
|
||||
activesupport (= 7.0.4.3)
|
||||
method_source
|
||||
rake (>= 12.2)
|
||||
thor (~> 1.0)
|
||||
@@ -489,16 +478,17 @@ GEM
|
||||
raindrops (0.20.0)
|
||||
rake (13.0.6)
|
||||
rate_throttle_client (0.1.2)
|
||||
rb-fsevent (0.11.1)
|
||||
rb-fsevent (0.11.2)
|
||||
rb-inotify (0.10.1)
|
||||
ffi (~> 1.0)
|
||||
redis-client (0.11.2)
|
||||
redis-client (0.14.1)
|
||||
connection_pool
|
||||
regexp_parser (2.6.1)
|
||||
responders (3.0.1)
|
||||
actionpack (>= 5.0)
|
||||
railties (>= 5.0)
|
||||
regexp_parser (2.8.0)
|
||||
responders (3.1.0)
|
||||
actionpack (>= 5.2)
|
||||
railties (>= 5.2)
|
||||
rexml (3.2.5)
|
||||
rouge (4.1.0)
|
||||
rspec (3.11.0)
|
||||
rspec-core (~> 3.11.0)
|
||||
rspec-expectations (~> 3.11.0)
|
||||
@@ -529,35 +519,38 @@ GEM
|
||||
concord (~> 0.1)
|
||||
parser (>= 2.6)
|
||||
rspec (~> 3.0)
|
||||
rswag-api (2.8.0)
|
||||
rswag-api (2.9.0)
|
||||
railties (>= 3.1, < 7.1)
|
||||
rswag-specs (2.8.0)
|
||||
rswag-specs (2.9.0)
|
||||
activesupport (>= 3.1, < 7.1)
|
||||
json-schema (>= 2.2, < 4.0)
|
||||
railties (>= 3.1, < 7.1)
|
||||
rspec-core (>= 2.14)
|
||||
rswag-ui (2.8.0)
|
||||
rswag-ui (2.9.0)
|
||||
actionpack (>= 3.1, < 7.1)
|
||||
railties (>= 3.1, < 7.1)
|
||||
rubocop (1.40.0)
|
||||
rubocop (1.50.2)
|
||||
json (~> 2.3)
|
||||
parallel (~> 1.10)
|
||||
parser (>= 3.1.2.1)
|
||||
parser (>= 3.2.0.0)
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
regexp_parser (>= 1.8, < 3.0)
|
||||
rexml (>= 3.2.5, < 4.0)
|
||||
rubocop-ast (>= 1.23.0, < 2.0)
|
||||
rubocop-ast (>= 1.28.0, < 2.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 1.4.0, < 3.0)
|
||||
rubocop-ast (1.24.0)
|
||||
parser (>= 3.1.1.0)
|
||||
rubocop-rails (2.17.3)
|
||||
unicode-display_width (>= 2.4.0, < 3.0)
|
||||
rubocop-ast (1.28.0)
|
||||
parser (>= 3.2.1.0)
|
||||
rubocop-capybara (2.17.1)
|
||||
rubocop (~> 1.41)
|
||||
rubocop-rails (2.19.1)
|
||||
activesupport (>= 4.2.0)
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 1.33.0, < 2.0)
|
||||
rubocop-rspec (2.16.0)
|
||||
rubocop-rspec (2.20.0)
|
||||
rubocop (~> 1.33)
|
||||
ruby-progressbar (1.11.0)
|
||||
rubocop-capybara (~> 2.17)
|
||||
ruby-progressbar (1.13.0)
|
||||
ruby-units (3.0.0)
|
||||
ruby-vips (2.1.4)
|
||||
ffi (~> 1.12)
|
||||
@@ -568,8 +561,6 @@ GEM
|
||||
sass-listen (4.0.0)
|
||||
rb-fsevent (~> 0.9, >= 0.9.4)
|
||||
rb-inotify (~> 0.9, >= 0.9.7)
|
||||
sass-rails (6.0.0)
|
||||
sassc-rails (~> 2.1, >= 2.1.1)
|
||||
sassc (2.4.0)
|
||||
ffi (~> 1.9)
|
||||
sassc-rails (2.1.2)
|
||||
@@ -584,11 +575,11 @@ GEM
|
||||
activemodel (>= 5)
|
||||
elasticsearch (>= 6, < 7.14)
|
||||
hashie
|
||||
selenium-webdriver (4.7.1)
|
||||
selenium-webdriver (4.9.0)
|
||||
rexml (~> 3.2, >= 3.2.5)
|
||||
rubyzip (>= 1.2.2, < 3.0)
|
||||
websocket (~> 1.0)
|
||||
sidekiq (7.0.2)
|
||||
sidekiq (7.0.9)
|
||||
concurrent-ruby (< 2)
|
||||
connection_pool (>= 2.3.0)
|
||||
rack (>= 2.2.4)
|
||||
@@ -608,20 +599,20 @@ GEM
|
||||
sprockets (>= 3.0.0)
|
||||
ssrf_filter (1.0.7)
|
||||
sysexits (1.2.0)
|
||||
temple (0.9.1)
|
||||
temple (0.10.0)
|
||||
terminal-table (3.0.2)
|
||||
unicode-display_width (>= 1.1.1, < 3)
|
||||
thor (1.2.1)
|
||||
thread_safe (0.3.6)
|
||||
tilt (2.0.11)
|
||||
tilt (2.1.0)
|
||||
timecop (0.9.6)
|
||||
timeout (0.3.0)
|
||||
timeout (0.3.2)
|
||||
trollop (1.16.2)
|
||||
tzinfo (2.0.5)
|
||||
tzinfo (2.0.6)
|
||||
concurrent-ruby (~> 1.0)
|
||||
uglifier (4.2.0)
|
||||
execjs (>= 0.3.0, < 3)
|
||||
unicode-display_width (2.3.0)
|
||||
unicode-display_width (2.4.2)
|
||||
unicorn (6.1.0)
|
||||
kgio (~> 2.6)
|
||||
raindrops (~> 0.7)
|
||||
@@ -651,7 +642,7 @@ GEM
|
||||
webrick
|
||||
xpath (3.2.0)
|
||||
nokogiri (~> 1.8)
|
||||
zeitwerk (2.6.6)
|
||||
zeitwerk (2.6.7)
|
||||
|
||||
PLATFORMS
|
||||
ruby
|
||||
@@ -716,7 +707,6 @@ DEPENDENCIES
|
||||
memcachier
|
||||
oj
|
||||
omniauth (~> 1.3)
|
||||
omniauth-facebook
|
||||
omniauth-flickr (>= 0.0.15)
|
||||
omniauth-twitter
|
||||
percy-capybara (~> 5.0.0)
|
||||
@@ -742,7 +732,7 @@ DEPENDENCIES
|
||||
rubocop-rails
|
||||
rubocop-rspec
|
||||
ruby-units
|
||||
sass-rails
|
||||
sassc-rails
|
||||
scout_apm
|
||||
searchkick
|
||||
selenium-webdriver
|
||||
@@ -759,7 +749,7 @@ DEPENDENCIES
|
||||
xmlrpc
|
||||
|
||||
RUBY VERSION
|
||||
ruby 3.1.2p20
|
||||
ruby 3.1.4p223
|
||||
|
||||
BUNDLED WITH
|
||||
2.3.11
|
||||
|
||||
@@ -20,7 +20,7 @@ encourage participation from people of all backgrounds and skill levels.
|
||||
* [Issues](https://github.com/orgs/Growstuff/projects/1) (features we're
|
||||
working on, known bugs, etc)
|
||||
* [](https://gitter.im/Growstuff/growstuff?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
||||
* [Wiki](https://github.com/Growstuff/growstuff/wiki) (general documentation, etc. Help by migrating from the [old wiki](https://web.archive.org/web/*/wiki.growstuff.org))
|
||||
* [Wiki](https://github.com/Growstuff/growstuff/wiki) (general documentation, etc.)
|
||||
|
||||
## For coders
|
||||
|
||||
@@ -29,7 +29,6 @@ frontend features. We welcome contributions -- see
|
||||
[CONTRIBUTING](CONTRIBUTING.md) for details.
|
||||
|
||||
* To set up your development environment, see [Getting started](https://github.com/Growstuff/growstuff/wiki/New-contributor-guide).
|
||||
* We encourage [pair programming](http://wiki.growstuff.org/index.php/Pairing), especially for newer developers.
|
||||
* You may also be interested in our [API](https://github.com/Growstuff/growstuff/wiki/API).
|
||||
|
||||
## For designers, writers, researchers, data wranglers, and other contributors
|
||||
|
||||
@@ -1,10 +1,6 @@
|
||||
function showCropMap(cropmap) {
|
||||
var mapbox_map_id = "<%= Rails.env == 'test' ? 0 : Rails.application.config.mapbox_map_id %>";
|
||||
var mapbox_access_token = "<%= Rails.env == 'test' ? 0 : Rails.application.config.mapbox_access_token %>";
|
||||
var mapbox_base_url = "https://a.tiles.mapbox.com/v4/" + mapbox_map_id + "/{z}/{x}/{y}.png?access_token=" + mapbox_access_token;
|
||||
|
||||
L.tileLayer(mapbox_base_url, {
|
||||
attribution: 'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors under <a href="https://www.openstreetmap.org/copyright">ODbL</a> | Map imagery © <a href="https://mapbox.com">Mapbox</a>',
|
||||
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
|
||||
maxZoom: 18
|
||||
}).addTo(cropmap);
|
||||
var markers = new L.MarkerClusterGroup({showCoverageOnHover: false, maxClusterRadius: 20 });
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
if (document.getElementById("membermap") !== null) {
|
||||
var mapbox_map_id = "<%= Rails.env == 'test' ? 0 : Rails.application.config.mapbox_map_id %>";
|
||||
var mapbox_access_token = "<%= Rails.env == 'test' ? 0 : Rails.application.config.mapbox_access_token %>";
|
||||
var mapbox_base_url = "https://a.tiles.mapbox.com/v4/" + mapbox_map_id + "/{z}/{x}/{y}.png?access_token=" + mapbox_access_token;
|
||||
|
||||
L.Icon.Default.imagePath = '/assets'
|
||||
|
||||
L.Icon.Default.imagePath = '/assets';
|
||||
|
||||
var default_marker_icon = L.icon({
|
||||
@@ -18,8 +12,8 @@ if (document.getElementById("membermap") !== null) {
|
||||
if (member.latitude && member.longitude) {
|
||||
var membermap = L.map('membermap').setView([member.latitude, member.longitude], 4);
|
||||
|
||||
L.tileLayer(mapbox_base_url, {
|
||||
attribution: 'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors under <a href="https://www.openstreetmap.org/copyright">ODbL</a> | Map imagery © <a href="https://mapbox.com">Mapbox</a>',
|
||||
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
|
||||
maxZoom: 18
|
||||
}).addTo(membermap);
|
||||
var marker = new L.Marker(new L.LatLng(member.latitude, member.longitude),
|
||||
|
||||
@@ -1,8 +1,5 @@
|
||||
if (document.getElementById("placesmap") !== null) {
|
||||
var places_base_path = "/places";
|
||||
var mapbox_map_id = "<%= Rails.env == 'test' ? 0 : Rails.application.config.mapbox_map_id %>";
|
||||
var mapbox_access_token = "<%= Rails.env == 'test' ? 0 : Rails.application.config.mapbox_access_token %>";
|
||||
var mapbox_base_url = "https://a.tiles.mapbox.com/v4/" + mapbox_map_id + "/{z}/{x}/{y}.png?access_token=" + mapbox_access_token;
|
||||
var nominatim_base_url = 'https://nominatim.openstreetmap.org/search/';
|
||||
var nominatim_user_agent_email = "<%= Rails.env == 'test' ? 0 : Rails.application.config.user_agent_email %>";
|
||||
|
||||
@@ -31,8 +28,8 @@ if (document.getElementById("placesmap") !== null) {
|
||||
}
|
||||
|
||||
function showMap(placesmap) {
|
||||
L.tileLayer(mapbox_base_url, {
|
||||
attribution: 'Map data © <a href="https://openstreetmap.org">OpenStreetMap</a> contributors under <a href="https://www.openstreetmap.org/copyright">ODbL</a> | Map imagery © <a href="https://mapbox.com">Mapbox</a>',
|
||||
L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||||
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
|
||||
maxZoom: 18
|
||||
}).addTo(placesmap);
|
||||
|
||||
@@ -61,6 +58,7 @@ function showMap(placesmap) {
|
||||
});
|
||||
|
||||
function fetchCropsForMap(url) {
|
||||
var n = 0;
|
||||
$.getJSON(url, function(crop_data) {
|
||||
$.each(crop_data['data'], function(i, p) {
|
||||
if (p.attributes.latitude && p.attributes.longitude) {
|
||||
@@ -81,7 +79,8 @@ function showMap(placesmap) {
|
||||
markers.addLayer(marker);
|
||||
}
|
||||
});
|
||||
if (crop_data['links']['next']) {
|
||||
// We fetch pages of 10 at a time. Stop after 200 crops; so we are showing only 'active' plantings.
|
||||
if (crop_data['links']['next'] && n++ < 20) {
|
||||
fetchCropsForMap(crop_data['links']['next'])
|
||||
}
|
||||
return crop_data;
|
||||
|
||||
@@ -18,7 +18,6 @@ class MembersController < ApplicationController
|
||||
@member = Member.confirmed.kept.find_by!(slug: params[:slug])
|
||||
@twitter_auth = @member.auth('twitter')
|
||||
@flickr_auth = @member.auth('flickr')
|
||||
@facebook_auth = @member.auth('facebook')
|
||||
@posts = @member.posts
|
||||
|
||||
@activity = TimelineService.member_query(@member).limit(30)
|
||||
|
||||
@@ -9,10 +9,6 @@ require './lib/actions/oauth_signup_action'
|
||||
# Heavily overlaps with Authentications controller
|
||||
#
|
||||
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
||||
def facebook
|
||||
create
|
||||
end
|
||||
|
||||
def failure
|
||||
flash[:alert] = "Authentication failed."
|
||||
redirect_to request.env['omniauth.origin'] || "/"
|
||||
@@ -32,7 +28,7 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
|
||||
@authentication = action.establish_authentication(auth, member)
|
||||
|
||||
if action.member_created?
|
||||
raise "Invalid provider" unless %w(facebook twitter flickr).index(auth['provider'].to_s)
|
||||
raise "Invalid provider" unless %w(twitter flickr).index(auth['provider'].to_s)
|
||||
|
||||
session["devise.#{auth['provider']}_data"] = request.env["omniauth.auth"]
|
||||
sign_in member
|
||||
|
||||
@@ -12,7 +12,7 @@ class PlantingsController < DataController
|
||||
|
||||
if params[:member_slug]
|
||||
@owner = Member.find_by(slug: params[:member_slug])
|
||||
where['owner_id'] = @owner.id
|
||||
where['owner_id'] = @owner.id unless @owner.nil?
|
||||
end
|
||||
|
||||
if params[:crop_slug]
|
||||
|
||||
@@ -6,7 +6,6 @@ class RegistrationsController < Devise::RegistrationsController
|
||||
def edit
|
||||
@twitter_auth = current_member.auth('twitter')
|
||||
@flickr_auth = current_member.auth('flickr')
|
||||
@facebook_auth = current_member.auth('facebook')
|
||||
render "edit"
|
||||
end
|
||||
|
||||
|
||||
@@ -54,6 +54,7 @@ class Crop < ApplicationRecord
|
||||
message: 'is not a valid English Wikipedia URL'
|
||||
},
|
||||
if: :approved?
|
||||
validates :name, uniqueness: { scope: :approval_status }, if: :pending?
|
||||
|
||||
def to_s
|
||||
name
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
%p
|
||||
%span.help-block
|
||||
For detailed crop wrangling guidelines, please consult the
|
||||
= link_to "crop wrangling guide", "http://wiki.growstuff.org/index.php/Crop_wrangling"
|
||||
= link_to "crop wrangling guide", "https://github.com/Growstuff/growstuff/wiki/Crop-Wrangling"
|
||||
on the Growstuff wiki.
|
||||
|
||||
-# Everyone (wranglers and requesters) sees the basic info section
|
||||
|
||||
@@ -28,17 +28,3 @@
|
||||
method: :delete, class: "remove btn btn-danger"
|
||||
- else
|
||||
= link_to 'Connect to Flickr', '/members/auth/flickr', class: 'btn'
|
||||
|
||||
.row
|
||||
.col-md-12
|
||||
%p
|
||||
= image_tag "facebook_32.png", size: "32x32", alt: 'Facebook logo'
|
||||
- if @facebook_auth
|
||||
You are connected to Facebook as
|
||||
= succeed "." do
|
||||
= link_to @facebook_auth.name, "https://facebook.com/profile/#{@facebook_auth.uid}"
|
||||
= link_to "Disconnect", @facebook_auth,
|
||||
confirm: "Are you sure you want to remove this connection?",
|
||||
method: :delete, class: "remove btn btn-danger"
|
||||
- else
|
||||
= link_to 'Connect to Facebook', '/members/auth/facebook', class: 'btn'
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
- else
|
||||
= link_to "Change your location.", edit_member_registration_path
|
||||
.row
|
||||
.col-md-5.col-12= f.number_field :area, class: 'input-small'
|
||||
.col-md-5.col-12= f.number_field :area, class: 'input-small', step: "any"
|
||||
.col-md-7.col-12= f.select(:area_unit, Garden::AREA_UNITS_VALUES, { include_blank: false })
|
||||
.col-12= f.select(:garden_type_id, GardenType.all.order(:name).pluck(:name, :id),
|
||||
selected: @garden.garden_type_id, include_blank: true)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
- if twitter_auth || flickr_auth || facebook_auth || member.show_email
|
||||
- if twitter_auth || flickr_auth || member.show_email
|
||||
%h4 Contact
|
||||
|
||||
- if twitter_auth
|
||||
@@ -11,11 +11,6 @@
|
||||
= image_tag "flickr_32.png", size: "32x32", alt: 'Flickr logo'
|
||||
= link_to flickr_auth.name, "https://flickr.com/photos/#{flickr_auth.uid}"
|
||||
|
||||
- if facebook_auth
|
||||
%p
|
||||
= image_tag "facebook_32.png", size: "32x32", alt: 'Facebook logo'
|
||||
= link_to facebook_auth.name, "https://facebook.com/profile/#{facebook_auth.uid}"
|
||||
|
||||
- if member.show_email
|
||||
%p
|
||||
Email:
|
||||
|
||||
@@ -1,19 +1,18 @@
|
||||
- cache member do
|
||||
.card.card-double
|
||||
.card-body
|
||||
.row
|
||||
.col-12.col-md-6
|
||||
= render "members/avatar", member: member
|
||||
.col-12.col-md-6
|
||||
%h4.login-name= link_to member, member
|
||||
= link_to "view all #{member}'s gardens", member_gardens_path(member)
|
||||
%p
|
||||
%small
|
||||
Joined
|
||||
= distance_of_time_in_words(member.created_at, Time.zone.now)
|
||||
ago.
|
||||
- if member.location.present?
|
||||
= link_to member.location, place_path(member.location)
|
||||
%h4.login-name= link_to member, member
|
||||
%div
|
||||
= render "members/avatar", member: member
|
||||
%div
|
||||
= link_to "view all #{member}'s gardens", member_gardens_path(member)
|
||||
%p
|
||||
%small
|
||||
Joined
|
||||
= distance_of_time_in_words(member.created_at, Time.zone.now)
|
||||
ago.
|
||||
- if member.location.present?
|
||||
= link_to member.location, place_path(member.location)
|
||||
.card-footer
|
||||
%ul.nav.nav-justified.small
|
||||
%li.nav-item.border-right
|
||||
|
||||
@@ -2,39 +2,39 @@
|
||||
%h3 Activity
|
||||
%ul.list-group.list-group-flush
|
||||
%li.list-group-item
|
||||
- if !member.gardens.empty?
|
||||
- if member.gardens.present?
|
||||
= link_to localize_plural(member.gardens, Garden), member_gardens_path(member)
|
||||
- else
|
||||
0 gardens
|
||||
%li.list-group-item
|
||||
- if !member.plantings.empty?
|
||||
- if member.plantings.present?
|
||||
= link_to localize_plural(member.plantings, Planting), member_plantings_path(member)
|
||||
- else
|
||||
0 plantings
|
||||
%li.list-group-item
|
||||
- if !member.harvests.empty?
|
||||
- if member.harvests.present?
|
||||
= link_to localize_plural(member.harvests, Harvest), member_harvests_path(member)
|
||||
- else
|
||||
0 harvests
|
||||
%li.list-group-item
|
||||
- if !member.seeds.empty?
|
||||
- if member.seeds.present?
|
||||
= link_to localize_plural(member.seeds, Seed), member_seeds_path(member)
|
||||
- else
|
||||
0 seeds
|
||||
%li.list-group-item
|
||||
- if !member.posts.empty?
|
||||
- if member.posts.present?
|
||||
= link_to localize_plural(member.posts, Post), member_posts_path(member)
|
||||
- else
|
||||
0 posts
|
||||
|
||||
%li.list-group-item
|
||||
- if !member.followed.empty?
|
||||
- if member.followed.present?
|
||||
= link_to localize_plural(member.followed, Follow), member_follows_path(member)
|
||||
- else
|
||||
0 following
|
||||
|
||||
%li.list-group-item
|
||||
- if !member.followers.empty?
|
||||
- if member.followers.present?
|
||||
= link_to pluralize(member.followers.size, "follower"), member_followers_path(member)
|
||||
- else
|
||||
0 followers
|
||||
|
||||
@@ -57,8 +57,7 @@
|
||||
= render "stats", member: @member
|
||||
.card-footer
|
||||
= render "contact", member: @member, twitter_auth: @twitter_auth,
|
||||
flickr_auth: @flickr_auth,
|
||||
facebook_auth: @facebook_auth
|
||||
flickr_auth: @flickr_auth
|
||||
|
||||
.col-md-10
|
||||
%section= render "map", member: @member
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
%form.form-inline{ action: search_places_path, method: :get, role: 'form' }
|
||||
.form-group
|
||||
= label_tag :new_place, "Change location:", class: 'sr-only'
|
||||
= text_field_tag :new_place, '', class: 'form-control', placeholder: "New location..."
|
||||
= text_field_tag :new_place, '', class: 'form-control', placeholder: "Search for city, suburb or state..."
|
||||
= submit_tag "Search", class: 'btn btn-primary', id: "search_button"
|
||||
%br/
|
||||
|
||||
@@ -2,10 +2,10 @@
|
||||
- unless posts.empty?
|
||||
%table.table.table-striped
|
||||
%tr
|
||||
%th Subject
|
||||
%th.hidden-xs Posted by
|
||||
%th Most recent activity
|
||||
%th.hidden-xs Comments
|
||||
%th.col-6 Subject
|
||||
%th.col-2.hidden-xs Posted by
|
||||
%th.col-2 Most recent activity
|
||||
%th.col-2.hidden-xs Comments
|
||||
|
||||
- posts.recently_active[0..howmany - 1].each do |post|
|
||||
- cache post do
|
||||
|
||||
@@ -23,6 +23,8 @@ module Growstuff
|
||||
config.time_zone = 'UTC'
|
||||
config.active_record.default_timezone = :local
|
||||
|
||||
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.default_locale = :en
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
development:
|
||||
adapter: postgresql
|
||||
database: growstuff_dev
|
||||
user: postgres
|
||||
password: postgres
|
||||
host: db
|
||||
|
||||
test:
|
||||
adapter: postgresql
|
||||
database: growstuff_test
|
||||
user: postgres
|
||||
password: postgres
|
||||
host: db
|
||||
|
||||
production:
|
||||
adapter: postgresql
|
||||
|
||||
5
config/elasticsearch.yml
Normal file
5
config/elasticsearch.yml
Normal file
@@ -0,0 +1,5 @@
|
||||
development: &default
|
||||
host: 'http://es01:9200'
|
||||
log: true
|
||||
test:
|
||||
host: 'http://es01:9200'
|
||||
@@ -67,13 +67,9 @@ Rails.application.configure do
|
||||
config.action_mailer.delivery_method = :letter_opener
|
||||
|
||||
config.host = 'localhost:3000'
|
||||
config.hosts << ".preview.app.github.dev"
|
||||
config.analytics_code = ''
|
||||
|
||||
# this config variable cannot be put in application.yml as it is needed
|
||||
# by the assets pipeline, which doesn't have access to ENV.
|
||||
config.mapbox_map_id = 'growstuff.i3n2il6a'
|
||||
config.mapbox_access_token = 'pk.eyJ1IjoiZ3Jvd3N0dWZmIiwiYSI6IkdxMkx4alUifQ.n0igaBsw97s14zMa0lwKCA'
|
||||
|
||||
config.action_controller.action_on_unpermitted_parameters = :raise
|
||||
|
||||
config.active_job.queue_adapter = :sidekiq
|
||||
|
||||
@@ -83,7 +83,7 @@ Rails.application.configure do
|
||||
config.active_support.deprecation = :notify
|
||||
|
||||
# Use default logging formatter so that PID and timestamp are not suppressed.
|
||||
config.log_formatter = ::Logger::Formatter.new
|
||||
config.log_formatter = Logger::Formatter.new
|
||||
|
||||
# Do not dump schema after migrations.
|
||||
config.active_record.dump_schema_after_migration = false
|
||||
@@ -103,16 +103,11 @@ Rails.application.configure do
|
||||
ActionMailer::Base.delivery_method = :smtp
|
||||
|
||||
config.host = ENV['HOST']
|
||||
config.analytics_code = <<-eos
|
||||
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>
|
||||
<noscript><p><img alt="Clicky" width="1" height="1" src="//in.getclicky.com/100594260ns.gif" /></p></noscript>
|
||||
eos
|
||||
|
||||
# this config variable cannot be put in application.yml as it is needed
|
||||
# by the assets pipeline, which doesn't have access to ENV.
|
||||
config.mapbox_map_id = ENV['GROWSTUFF_MAPBOX_MAP_ID']
|
||||
config.mapbox_access_token = ENV['GROWSTUFF_MAPBOX_ACCESS_TOKEN']
|
||||
GET_CLICKY_SCRIPT
|
||||
|
||||
config.active_job.queue_adapter = :sidekiq
|
||||
# Use a different logger for distributed setups.
|
||||
|
||||
@@ -104,16 +104,3 @@ Capybara.configure do |config|
|
||||
end
|
||||
|
||||
OmniAuth.config.test_mode = true
|
||||
# Fake the omniauth
|
||||
OmniAuth.config.mock_auth[:facebook] = OmniAuth::AuthHash.new(provider: 'facebook',
|
||||
uid: '123545',
|
||||
info: {
|
||||
name: "John Testerson",
|
||||
nickname: 'JohnnyT',
|
||||
email: 'example.oauth.facebook@example.com',
|
||||
image: 'http://findicons.com/files/icons/1072/face_avatars/300/i04.png'
|
||||
},
|
||||
credentials: {
|
||||
token: "token",
|
||||
secret: "donttell"
|
||||
})
|
||||
|
||||
@@ -233,8 +233,4 @@ Devise.setup do |config|
|
||||
# When using omniauth, Devise cannot automatically set Omniauth path,
|
||||
# so you need to do it manually. For the users scope, it would be:
|
||||
# config.omniauth_path_prefix = "/my_engine/users/auth"
|
||||
|
||||
# Later we may wish to ask for user_photos,user_location, however this means we need to be reviewed by facebook
|
||||
config.omniauth :facebook, ENV['GROWSTUFF_FACEBOOK_KEY'], ENV['GROWSTUFF_FACEBOOK_SECRET'], scope: 'email,public_profile',
|
||||
display: 'page', info_fields: 'email,name,first_name,last_name,id'
|
||||
end
|
||||
|
||||
@@ -23,9 +23,9 @@ class UpgradeCms < ActiveRecord::Migration[5.2]
|
||||
t.string :locale, null: false
|
||||
t.integer :page_id, null: false
|
||||
t.integer :layout_id
|
||||
t.string :label, null: false
|
||||
t.text :content_cache, limit: limit
|
||||
t.boolean :is_published, null: false, default: true
|
||||
t.string :label, null: false
|
||||
t.text(:content_cache, limit:)
|
||||
t.boolean :is_published, null: false, default: true
|
||||
t.timestamps
|
||||
|
||||
t.index [:page_id]
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# This migration comes from active_storage (originally 20170806125915)
|
||||
class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
# Use Active Record's configured type for primary and foreign keys
|
||||
primary_key_type, foreign_key_type = primary_and_foreign_key_types
|
||||
|
||||
create_table :active_storage_blobs, id: primary_key_type do |t|
|
||||
t.string :key, null: false
|
||||
t.string :filename, null: false
|
||||
t.string :content_type
|
||||
t.text :metadata
|
||||
t.string :service_name, null: false
|
||||
t.bigint :byte_size, null: false
|
||||
t.string :checksum
|
||||
|
||||
if connection.supports_datetime_with_precision?
|
||||
t.datetime :created_at, precision: 6, null: false
|
||||
else
|
||||
t.datetime :created_at, null: false
|
||||
end
|
||||
|
||||
t.index [:key], unique: true
|
||||
end
|
||||
|
||||
create_table :active_storage_attachments, id: primary_key_type do |t|
|
||||
t.string :name, null: false
|
||||
t.references :record, null: false, polymorphic: true, index: false, type: foreign_key_type
|
||||
t.references :blob, null: false, type: foreign_key_type
|
||||
|
||||
if connection.supports_datetime_with_precision?
|
||||
t.datetime :created_at, precision: 6, null: false
|
||||
else
|
||||
t.datetime :created_at, null: false
|
||||
end
|
||||
|
||||
t.index %i(record_type record_id name blob_id), name: :index_active_storage_attachments_uniqueness, unique: true
|
||||
t.foreign_key :active_storage_blobs, column: :blob_id
|
||||
end
|
||||
|
||||
create_table :active_storage_variant_records, id: primary_key_type do |t|
|
||||
t.belongs_to :blob, null: false, index: false, type: foreign_key_type
|
||||
t.string :variation_digest, null: false
|
||||
|
||||
t.index %i(blob_id variation_digest), name: :index_active_storage_variant_records_uniqueness, unique: true
|
||||
t.foreign_key :active_storage_blobs, column: :blob_id
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def primary_and_foreign_key_types
|
||||
config = Rails.configuration.generators
|
||||
setting = config.options[config.orm][:primary_key_type]
|
||||
primary_key_type = setting || :primary_key
|
||||
foreign_key_type = setting || :bigint
|
||||
[primary_key_type, foreign_key_type]
|
||||
end
|
||||
end
|
||||
185
db/schema.rb
185
db/schema.rb
@@ -2,25 +2,52 @@
|
||||
# of editing this file, please use the migrations feature of Active Record to
|
||||
# incrementally modify your database, and then regenerate this schema definition.
|
||||
#
|
||||
# This file is the source Rails uses to define your schema when running `rails
|
||||
# db:schema:load`. When creating a new database, `rails db:schema:load` tends to
|
||||
# This file is the source Rails uses to define your schema when running `bin/rails
|
||||
# db:schema:load`. When creating a new database, `bin/rails db:schema:load` tends to
|
||||
# be faster and is potentially less error prone than running all of your
|
||||
# migrations from scratch. Old migrations may fail to apply correctly if those
|
||||
# migrations use external dependencies or application code.
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
|
||||
ActiveRecord::Schema[7.0].define(version: 2023_03_13_015323) do
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
|
||||
create_table "active_storage_attachments", force: :cascade do |t|
|
||||
t.string "name", null: false
|
||||
t.string "record_type", null: false
|
||||
t.bigint "record_id", null: false
|
||||
t.bigint "blob_id", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id"
|
||||
t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
|
||||
end
|
||||
|
||||
create_table "active_storage_blobs", force: :cascade do |t|
|
||||
t.string "key", null: false
|
||||
t.string "filename", null: false
|
||||
t.string "content_type"
|
||||
t.text "metadata"
|
||||
t.string "service_name", null: false
|
||||
t.bigint "byte_size", null: false
|
||||
t.string "checksum"
|
||||
t.datetime "created_at", null: false
|
||||
t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
|
||||
end
|
||||
|
||||
create_table "active_storage_variant_records", force: :cascade do |t|
|
||||
t.bigint "blob_id", null: false
|
||||
t.string "variation_digest", null: false
|
||||
t.index ["blob_id", "variation_digest"], name: "index_active_storage_variant_records_uniqueness", unique: true
|
||||
end
|
||||
|
||||
create_table "alternate_names", id: :serial, force: :cascade do |t|
|
||||
t.string "name", null: false
|
||||
t.integer "crop_id", null: false
|
||||
t.integer "creator_id", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
end
|
||||
|
||||
create_table "authentications", id: :serial, force: :cascade do |t|
|
||||
@@ -29,8 +56,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.string "uid"
|
||||
t.string "token"
|
||||
t.string "secret"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "name"
|
||||
t.index ["member_id"], name: "index_authentications_on_member_id"
|
||||
end
|
||||
@@ -56,8 +83,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.string "file_file_name"
|
||||
t.string "description", limit: 2048
|
||||
t.integer "position", default: 0, null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.index ["site_id", "block_id"], name: "index_comfy_cms_files_on_site_id_and_block_id"
|
||||
t.index ["site_id", "file_file_name"], name: "index_comfy_cms_files_on_site_id_and_file_file_name"
|
||||
t.index ["site_id", "label"], name: "index_comfy_cms_files_on_site_id_and_label"
|
||||
@@ -69,10 +96,10 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.text "content"
|
||||
t.string "record_type"
|
||||
t.integer "record_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "tag", default: "text", null: false
|
||||
t.datetime "datetime"
|
||||
t.datetime "datetime", precision: nil
|
||||
t.boolean "boolean", default: false, null: false
|
||||
t.index ["identifier"], name: "index_comfy_cms_fragments_on_identifier"
|
||||
t.index ["record_id", "record_type"], name: "index_comfy_cms_fragments_on_record_id_and_record_type"
|
||||
@@ -88,8 +115,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.text "css"
|
||||
t.text "js"
|
||||
t.integer "position", default: 0, null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.index ["parent_id", "position"], name: "index_comfy_cms_layouts_on_parent_id_and_position"
|
||||
t.index ["site_id", "identifier"], name: "index_comfy_cms_layouts_on_site_id_and_identifier", unique: true
|
||||
end
|
||||
@@ -106,8 +133,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.integer "position", default: 0, null: false
|
||||
t.integer "children_count", default: 0, null: false
|
||||
t.boolean "is_published", default: true, null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.index ["parent_id", "position"], name: "index_comfy_cms_pages_on_parent_id_and_position"
|
||||
t.index ["site_id", "full_path"], name: "index_comfy_cms_pages_on_site_id_and_full_path"
|
||||
end
|
||||
@@ -116,7 +143,7 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.string "record_type", null: false
|
||||
t.integer "record_id", null: false
|
||||
t.text "data"
|
||||
t.datetime "created_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.index ["record_type", "record_id", "created_at"], name: "index_cms_revisions_on_rtype_and_rid_and_created_at"
|
||||
end
|
||||
|
||||
@@ -135,8 +162,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.string "identifier", null: false
|
||||
t.text "content"
|
||||
t.integer "position", default: 0, null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.index ["site_id", "identifier"], name: "index_comfy_cms_snippets_on_site_id_and_identifier", unique: true
|
||||
t.index ["site_id", "position"], name: "index_comfy_cms_snippets_on_site_id_and_position"
|
||||
end
|
||||
@@ -148,8 +175,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.string "label", null: false
|
||||
t.text "content_cache"
|
||||
t.boolean "is_published", default: true, null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.index ["is_published"], name: "index_comfy_cms_translations_on_is_published"
|
||||
t.index ["locale"], name: "index_comfy_cms_translations_on_locale"
|
||||
t.index ["page_id"], name: "index_comfy_cms_translations_on_page_id"
|
||||
@@ -159,15 +186,15 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.integer "post_id", null: false
|
||||
t.integer "author_id", null: false
|
||||
t.text "body", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
end
|
||||
|
||||
create_table "crop_companions", force: :cascade do |t|
|
||||
t.integer "crop_a_id", null: false
|
||||
t.integer "crop_b_id", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
end
|
||||
|
||||
create_table "crop_posts", id: false, force: :cascade do |t|
|
||||
@@ -180,8 +207,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
create_table "crops", id: :serial, force: :cascade do |t|
|
||||
t.string "name", null: false
|
||||
t.string "en_wikipedia_url"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "slug"
|
||||
t.integer "parent_id"
|
||||
t.integer "plantings_count", default: 0
|
||||
@@ -206,16 +233,16 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
create_table "follows", id: :serial, force: :cascade do |t|
|
||||
t.integer "follower_id"
|
||||
t.integer "followed_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
end
|
||||
|
||||
create_table "forums", id: :serial, force: :cascade do |t|
|
||||
t.string "name", null: false
|
||||
t.text "description", null: false
|
||||
t.integer "owner_id", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "slug"
|
||||
t.index ["slug"], name: "index_forums_on_slug", unique: true
|
||||
end
|
||||
@@ -223,8 +250,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
create_table "garden_types", force: :cascade do |t|
|
||||
t.text "name", null: false
|
||||
t.text "slug", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.index ["name"], name: "index_garden_types_on_name", unique: true
|
||||
t.index ["slug"], name: "index_garden_types_on_slug", unique: true
|
||||
end
|
||||
@@ -233,8 +260,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.string "name", null: false
|
||||
t.integer "owner_id"
|
||||
t.string "slug", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.text "description"
|
||||
t.boolean "active", default: true
|
||||
t.string "location"
|
||||
@@ -261,8 +288,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.decimal "quantity"
|
||||
t.string "unit"
|
||||
t.text "description"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "slug"
|
||||
t.decimal "weight_quantity"
|
||||
t.string "weight_unit"
|
||||
@@ -283,8 +310,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.string "likeable_type"
|
||||
t.integer "likeable_id"
|
||||
t.string "categories", array: true
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.index ["likeable_id"], name: "index_likes_on_likeable_id"
|
||||
t.index ["likeable_type", "likeable_id"], name: "index_likes_on_likeable_type_and_likeable_id"
|
||||
t.index ["member_id"], name: "index_likes_on_member_id"
|
||||
@@ -294,16 +321,16 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.string "unsubscriber_type"
|
||||
t.integer "unsubscriber_id"
|
||||
t.integer "conversation_id"
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.index ["conversation_id"], name: "index_mailboxer_conversation_opt_outs_on_conversation_id"
|
||||
t.index ["unsubscriber_id", "unsubscriber_type"], name: "index_mailboxer_conversation_opt_outs_on_unsubscriber_id_type"
|
||||
end
|
||||
|
||||
create_table "mailboxer_conversations", id: :serial, force: :cascade do |t|
|
||||
t.string "subject", default: ""
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
end
|
||||
|
||||
create_table "mailboxer_notifications", id: :serial, force: :cascade do |t|
|
||||
@@ -318,10 +345,10 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.string "notified_object_type"
|
||||
t.integer "notified_object_id"
|
||||
t.string "attachment"
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.boolean "global", default: false
|
||||
t.datetime "expires"
|
||||
t.datetime "expires", precision: nil
|
||||
t.index ["conversation_id"], name: "index_mailboxer_notifications_on_conversation_id"
|
||||
t.index ["notified_object_id", "notified_object_type"], name: "index_mailboxer_notifications_on_notified_object_id_and_type"
|
||||
t.index ["notified_object_type", "notified_object_id"], name: "mailboxer_notifications_notified_object"
|
||||
@@ -337,8 +364,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.boolean "trashed", default: false
|
||||
t.boolean "deleted", default: false
|
||||
t.string "mailbox_type", limit: 25
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.boolean "is_delivered", default: false
|
||||
t.string "delivery_method"
|
||||
t.string "message_id"
|
||||
@@ -353,22 +380,22 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.string "email", default: "", null: false
|
||||
t.string "encrypted_password", default: "", null: false
|
||||
t.string "reset_password_token"
|
||||
t.datetime "reset_password_sent_at"
|
||||
t.datetime "remember_created_at"
|
||||
t.datetime "reset_password_sent_at", precision: nil
|
||||
t.datetime "remember_created_at", precision: nil
|
||||
t.integer "sign_in_count", default: 0
|
||||
t.datetime "current_sign_in_at"
|
||||
t.datetime "last_sign_in_at"
|
||||
t.datetime "current_sign_in_at", precision: nil
|
||||
t.datetime "last_sign_in_at", precision: nil
|
||||
t.string "current_sign_in_ip"
|
||||
t.string "last_sign_in_ip"
|
||||
t.string "confirmation_token"
|
||||
t.datetime "confirmed_at"
|
||||
t.datetime "confirmation_sent_at"
|
||||
t.datetime "confirmed_at", precision: nil
|
||||
t.datetime "confirmation_sent_at", precision: nil
|
||||
t.string "unconfirmed_email"
|
||||
t.integer "failed_attempts", default: 0
|
||||
t.string "unlock_token"
|
||||
t.datetime "locked_at"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "locked_at", precision: nil
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "login_name"
|
||||
t.string "slug"
|
||||
t.boolean "tos_agreement"
|
||||
@@ -385,7 +412,7 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.integer "gardens_count"
|
||||
t.integer "harvests_count"
|
||||
t.integer "seeds_count"
|
||||
t.datetime "discarded_at"
|
||||
t.datetime "discarded_at", precision: nil
|
||||
t.integer "photos_count"
|
||||
t.integer "forums_count"
|
||||
t.index ["confirmation_token"], name: "index_members_on_confirmation_token", unique: true
|
||||
@@ -408,8 +435,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.text "body"
|
||||
t.boolean "read", default: false
|
||||
t.integer "post_id"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
end
|
||||
|
||||
create_table "orders_products", id: false, force: :cascade do |t|
|
||||
@@ -421,8 +448,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.integer "photo_id", null: false
|
||||
t.integer "photographable_id", null: false
|
||||
t.string "photographable_type", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.datetime "created_at", precision: nil, null: false
|
||||
t.datetime "updated_at", precision: nil, null: false
|
||||
t.integer "crop_id"
|
||||
t.index ["photographable_id", "photographable_type", "photo_id"], name: "items_to_photos_idx", unique: true
|
||||
t.index ["photographable_id", "photographable_type"], name: "photographable_idx"
|
||||
@@ -432,14 +459,14 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.integer "owner_id", null: false
|
||||
t.string "thumbnail_url", null: false
|
||||
t.string "fullsize_url", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "title", null: false
|
||||
t.string "license_name", null: false
|
||||
t.string "license_url"
|
||||
t.string "link_url", null: false
|
||||
t.string "source_id"
|
||||
t.datetime "date_taken"
|
||||
t.datetime "date_taken", precision: nil
|
||||
t.integer "likes_count", default: 0
|
||||
t.string "source"
|
||||
t.index ["fullsize_url"], name: "index_photos_on_fullsize_url", unique: true
|
||||
@@ -459,8 +486,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
|
||||
create_table "plant_parts", id: :serial, force: :cascade do |t|
|
||||
t.string "name"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "slug"
|
||||
t.integer "harvests_count", default: 0
|
||||
end
|
||||
@@ -471,8 +498,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.date "planted_at"
|
||||
t.integer "quantity"
|
||||
t.text "description"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "slug"
|
||||
t.string "sunniness"
|
||||
t.string "planted_from"
|
||||
@@ -491,8 +518,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.integer "author_id", null: false
|
||||
t.string "subject", null: false
|
||||
t.text "body", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "slug"
|
||||
t.integer "forum_id"
|
||||
t.integer "likes_count", default: 0
|
||||
@@ -504,8 +531,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
create_table "roles", id: :serial, force: :cascade do |t|
|
||||
t.string "name", null: false
|
||||
t.text "description"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "slug"
|
||||
t.index ["slug"], name: "index_roles_on_slug", unique: true
|
||||
end
|
||||
@@ -513,8 +540,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
create_table "scientific_names", id: :serial, force: :cascade do |t|
|
||||
t.string "name", null: false
|
||||
t.integer "crop_id", null: false
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.integer "creator_id"
|
||||
end
|
||||
|
||||
@@ -524,8 +551,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.text "description"
|
||||
t.integer "quantity"
|
||||
t.date "plant_before"
|
||||
t.datetime "created_at"
|
||||
t.datetime "updated_at"
|
||||
t.datetime "created_at", precision: nil
|
||||
t.datetime "updated_at", precision: nil
|
||||
t.string "tradable_to", default: "nowhere"
|
||||
t.string "slug"
|
||||
t.integer "days_until_maturity_min"
|
||||
@@ -540,6 +567,8 @@ ActiveRecord::Schema.define(version: 2020_08_15_012538) do
|
||||
t.index ["slug"], name: "index_seeds_on_slug", unique: true
|
||||
end
|
||||
|
||||
add_foreign_key "active_storage_attachments", "active_storage_blobs", column: "blob_id"
|
||||
add_foreign_key "active_storage_variant_records", "active_storage_blobs", column: "blob_id"
|
||||
add_foreign_key "harvests", "plantings"
|
||||
add_foreign_key "mailboxer_conversation_opt_outs", "mailboxer_conversations", column: "conversation_id", name: "mb_opt_outs_on_conversations_id"
|
||||
add_foreign_key "mailboxer_notifications", "mailboxer_conversations", column: "conversation_id", name: "notifications_on_conversation_id"
|
||||
|
||||
@@ -50,10 +50,6 @@ GROWSTUFF_TWITTER_SECRET=""
|
||||
GROWSTUFF_FLICKR_KEY=""
|
||||
GROWSTUFF_FLICKR_SECRET=""
|
||||
|
||||
# https://developers.facebook.com/
|
||||
GROWSTUFF_FACEBOOK_KEY=""
|
||||
GROWSTUFF_FACEBOOK_SECRET=""
|
||||
|
||||
# Elasticsearch is used for flexible search and it requires another component
|
||||
# to be installed. To make it easy for people who don't need to test this feature
|
||||
# it's been turned off for test and development environment as a default.
|
||||
|
||||
@@ -63,7 +63,7 @@ class Growstuff::OauthSignupAction
|
||||
case auth['provider']
|
||||
when 'twitter'
|
||||
auth['info']['nickname']
|
||||
when 'flickr', 'facebook'
|
||||
when 'flickr'
|
||||
auth['info']['name']
|
||||
else
|
||||
auth['info']['name']
|
||||
|
||||
@@ -82,28 +82,4 @@ describe "signin", js: true do
|
||||
click_button 'Sign in'
|
||||
expect(page).to have_content("There are crops waiting to be wrangled.")
|
||||
end
|
||||
|
||||
context "with facebook" do
|
||||
it "sign in" do
|
||||
# Ordinarily done by database_cleaner
|
||||
Member.where(login_name: 'tdawg').delete_all
|
||||
|
||||
create(:member, login_name: 'tdawg', email: 'example.oauth.facebook@example.com')
|
||||
|
||||
# Start the test
|
||||
visit root_path
|
||||
first('.signup a').click
|
||||
|
||||
# Click the signup with facebook link
|
||||
|
||||
first('a[href="/members/auth/facebook"]').click
|
||||
# Magic happens!
|
||||
# See config/environments/test.rb for the fake user
|
||||
# that we pretended to auth as
|
||||
|
||||
# Signed up and logged in
|
||||
expect(page).to have_current_path root_path, ignore_query: true
|
||||
expect(page.text).to include("Welcome to #{ENV['GROWSTUFF_SITE_NAME']}, tdawg")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -45,37 +45,4 @@ describe "signup", js: true do
|
||||
click_button 'Sign up'
|
||||
expect(page).to have_current_path members_path, ignore_query: true
|
||||
end
|
||||
|
||||
context "with facebook" do
|
||||
it "sign up" do
|
||||
# Ordinarily done by database_cleaner
|
||||
Member.where(login_name: 'tdawg').delete_all
|
||||
Member.where(email: 'tdawg@hotmail.com').delete_all
|
||||
Member.where(email: 'example.oauth.facebook@example.com').delete_all
|
||||
Authentication.where(provider: 'facebook', uid: '123545').delete_all
|
||||
|
||||
# Start the test
|
||||
visit root_path
|
||||
first('.signup a').click
|
||||
|
||||
# Click the signup with facebook link
|
||||
|
||||
first('a[href="/members/auth/facebook"]').click
|
||||
# Magic happens!
|
||||
# See config/environments/test.rb for the fake user
|
||||
# that we pretended to auth as
|
||||
|
||||
# Confirm page
|
||||
expect(page).to have_current_path '/members/johnnyt/finish_signup'
|
||||
|
||||
fill_in 'Login name', with: 'tdawg'
|
||||
fill_in 'Email', with: 'tdawg@hotmail.com'
|
||||
check 'member_tos_agreement'
|
||||
click_button 'Continue'
|
||||
|
||||
# Signed up and logged in
|
||||
expect(page).to have_current_path root_path, ignore_query: true
|
||||
expect(page.text).to include("Welcome to #{ENV['GROWSTUFF_SITE_NAME']}, tdawg")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -103,7 +103,6 @@ RSpec.configure do |config|
|
||||
if page.driver.browser.respond_to?(:url_blacklist)
|
||||
page.driver.browser.url_blacklist = [
|
||||
'gravatar.com',
|
||||
'mapbox.com',
|
||||
'okfn.org',
|
||||
'googlecode.com'
|
||||
]
|
||||
|
||||
@@ -16,6 +16,6 @@ describe "crops/new" do
|
||||
end
|
||||
|
||||
it "shows a link to crop wrangling guidelines" do
|
||||
assert_select "a[href^='http://wiki.growstuff.org']", "crop wrangling guide"
|
||||
assert_select "a[href^='https://github.com/Growstuff/growstuff/wiki/Crop-Wrangling']", "crop wrangling guide"
|
||||
end
|
||||
end
|
||||
|
||||
@@ -18,7 +18,9 @@ describe "scientific_names/edit" do
|
||||
expect(rendered).to have_content "Added by #{member} less than a minute ago."
|
||||
end
|
||||
|
||||
xit { expect(rendered).to have_link member_path(member) }
|
||||
it "render member link" do
|
||||
expect(rendered).to have_link member.login_name, href: member_path(member)
|
||||
end
|
||||
|
||||
it "renders the edit scientific_name form" do
|
||||
assert_select "form", action: scientific_names_path(scientific_name), method: "post" do
|
||||
|
||||
@@ -92,13 +92,6 @@
|
||||
"type": "string",
|
||||
"description": "Display field",
|
||||
"required": false
|
||||
},
|
||||
{
|
||||
"name": "fields[crops]",
|
||||
"in": "query",
|
||||
"type": "string",
|
||||
"description": "Display field",
|
||||
"required": false
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -132,32 +125,32 @@
|
||||
"name": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Name"
|
||||
},
|
||||
"en_wikipedia_url": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Wikipedia URL (English)"
|
||||
},
|
||||
"perennial": {
|
||||
"type": "boolean",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Is the item perennial? (A plant that lives more than two years)"
|
||||
},
|
||||
"median_lifespan": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Median lifespan"
|
||||
},
|
||||
"median_days_to_first_harvest": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Median days to first harvest"
|
||||
},
|
||||
"median_days_to_last_harvest": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Median days to last harvest"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -371,13 +364,6 @@
|
||||
"type": "string",
|
||||
"description": "Display field",
|
||||
"required": false
|
||||
},
|
||||
{
|
||||
"name": "fields[crops]",
|
||||
"in": "query",
|
||||
"type": "string",
|
||||
"description": "Display field",
|
||||
"required": false
|
||||
}
|
||||
],
|
||||
"responses": {
|
||||
@@ -413,32 +399,32 @@
|
||||
"name": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Name"
|
||||
},
|
||||
"en_wikipedia_url": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Wikipedia URL (English)"
|
||||
},
|
||||
"perennial": {
|
||||
"type": "boolean",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Is the item perennial? (A plant that lives more than two years)"
|
||||
},
|
||||
"median_lifespan": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Median lifespan"
|
||||
},
|
||||
"median_days_to_first_harvest": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Median days to first harvest"
|
||||
},
|
||||
"median_days_to_last_harvest": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Median days to last harvest"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -666,7 +652,7 @@
|
||||
"name": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Name"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -868,7 +854,7 @@
|
||||
"name": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Name"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -1084,12 +1070,12 @@
|
||||
"login_name": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Login name"
|
||||
},
|
||||
"slug": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Slug"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -1345,12 +1331,12 @@
|
||||
"login_name": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Login name"
|
||||
},
|
||||
"slug": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Slug"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -1585,32 +1571,32 @@
|
||||
"harvested_at": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Harvested date time"
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Description"
|
||||
},
|
||||
"unit": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Unit"
|
||||
},
|
||||
"weight_quantity": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Weight/Quanitity"
|
||||
},
|
||||
"weight_unit": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Weight Unit"
|
||||
},
|
||||
"si_weight": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "SI Weight"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -1839,32 +1825,32 @@
|
||||
"harvested_at": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Harvested datetime"
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Description"
|
||||
},
|
||||
"unit": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Unit"
|
||||
},
|
||||
"weight_quantity": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Weight/Quantity"
|
||||
},
|
||||
"weight_unit": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Weight Unit"
|
||||
},
|
||||
"si_weight": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "SI Weight"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -2065,47 +2051,47 @@
|
||||
"description": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Description"
|
||||
},
|
||||
"quantity": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Quanitity"
|
||||
},
|
||||
"plant_before": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Plant before"
|
||||
},
|
||||
"tradable_to": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Tradeable to"
|
||||
},
|
||||
"days_until_maturity_min": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Days until maturity (min)"
|
||||
},
|
||||
"days_until_maturity_max": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Days until maturity (max)"
|
||||
},
|
||||
"organic": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Organic"
|
||||
},
|
||||
"gmo": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "GMO"
|
||||
},
|
||||
"heirloom": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Heirloom"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -2280,47 +2266,47 @@
|
||||
"description": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Description"
|
||||
},
|
||||
"quantity": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Quanity"
|
||||
},
|
||||
"plant_before": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Plant before"
|
||||
},
|
||||
"tradable_to": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Tradable to"
|
||||
},
|
||||
"days_until_maturity_min": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Days until maturity (min)"
|
||||
},
|
||||
"days_until_maturity_max": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Days until maturity (max)"
|
||||
},
|
||||
"organic": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Organic"
|
||||
},
|
||||
"gmo": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "GMO"
|
||||
},
|
||||
"heirloom": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Heirloom"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -2537,42 +2523,42 @@
|
||||
"slug": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Slug"
|
||||
},
|
||||
"planted_at": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Planted at"
|
||||
},
|
||||
"finished": {
|
||||
"type": "boolean",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Finished?"
|
||||
},
|
||||
"finished_at": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Finished at"
|
||||
},
|
||||
"quantity": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Quanity"
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Description"
|
||||
},
|
||||
"sunniness": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Sunniness"
|
||||
},
|
||||
"planted_from": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Planted from"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -2801,42 +2787,42 @@
|
||||
"slug": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Slug"
|
||||
},
|
||||
"planted_at": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Planted at"
|
||||
},
|
||||
"finished": {
|
||||
"type": "boolean",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Finished?"
|
||||
},
|
||||
"finished_at": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Finished at"
|
||||
},
|
||||
"quantity": {
|
||||
"type": "integer",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Quantity"
|
||||
},
|
||||
"description": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Description"
|
||||
},
|
||||
"sunniness": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Sunniness"
|
||||
},
|
||||
"planted_from": {
|
||||
"type": "string",
|
||||
"x-nullable": true,
|
||||
"description": null
|
||||
"description": "Planted from"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -3051,27 +3037,27 @@
|
||||
"thumbnail_url": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Thumbnail URL"
|
||||
},
|
||||
"fullsize_url": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Full-size URL"
|
||||
},
|
||||
"license_name": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "License name"
|
||||
},
|
||||
"link_url": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Link URL"
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Title"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
@@ -3300,27 +3286,27 @@
|
||||
"thumbnail_url": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Thumbnail URL"
|
||||
},
|
||||
"fullsize_url": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Full-size URL"
|
||||
},
|
||||
"license_name": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "License name"
|
||||
},
|
||||
"link_url": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Link URL"
|
||||
},
|
||||
"title": {
|
||||
"type": "string",
|
||||
"x-nullable": false,
|
||||
"description": null
|
||||
"description": "Title"
|
||||
}
|
||||
},
|
||||
"description": "Attributes"
|
||||
|
||||
Reference in New Issue
Block a user