Heard of Yelp? Well this is a yelp for people, a rating system that goes beyond businesses and into your personal world. Facebook is social and connects people. Linkedin is for getting a job and for companies. Glassdoor allows anonymous ratings on companies and bosses.
It's about time that we as humans are allowed to rate anyone and everyone. From a family member, to a classmate, to a teammate on a sports team, to a friend, to an ex-lover, or current-lover, review a boss, or an worker, review a customer, review your doorman, or your janitor, review the person who serves you coffee, you get the idea.
It works because there is a front end using React.js and a backend using Ruby on Rails w PostGRES
- Google maps, facebook, email/text notification
- Created user Stories
- Created ERD
- Created wireframes
- Created Repos
- Created Readmes
- As a user I would like to create a profile for myself
- As a user I would like to create profiles of others
- As a user I would like to leave reviews about others
Link to ERD:
- a USER has one 'self-profile' and many 'other profiles'
- a PROFILE can have many REVIEWS
- a REVIEW belongs to a profile
- a PROFILE belongs to a USER
- Ruby
- Rails
- PostGRES
Verb | URI Pattern | Controller#Action |
---|---|---|
POST | /sign-up |
users#signup |
POST | /sign-in |
users#signin |
PATCH | /change-password |
users#changepw |
DELETE | /sign-out |
users#signout |
Verb | URI Pattern | Controller#Action |
---|---|---|
GET | /users |
users#index |
GET | /users/1 |
users#show |
PATCH | /users/1 |
users#update |
- Install dependencies with
bundle install
. git add
andgit commit
your changes.- Create a
.env
for sensitive settings (touch .env
). - Generate new
development
andtest
secrets (bundle exec rails secret
). - Store them in
.env
with keysSECRET_KEY_BASE_<DEVELOPMENT|TEST>
respectively. - In order to make requests to your deployed API, you will need to set
SECRET_KEY_BASE
in the environment of the production API (for example, usingheroku config:set
or the Heroku dashboard). - In order to make requests from your deployed client application, you will
need to set
CLIENT_ORIGIN
in the environment of the production API (for example,heroku config:set CLIENT_ORIGIN=https://<github-username>.github.io
). See more about deploying to heroku rails-heroku-setup-guide
- bin/rails db:drop (if it already exists)
- bin/rails db:create
- bin/rails db:migrate
- bin/rails db:seed
- bin/rails db:examples
Note: Remember to follow the same commands when setting up your deployed database!
- Run the API server with
bin/rails server
orbundle exec rails server
.
Developers should run these often!
bin/rails routes
lists the endpoints available in your API.bin/rspec spec
runs automated tests.bin/rails console
opens a REPL that pre-loads the API.bin/rails db
opens your database client and loads the correct database.bin/rails server
starts the API.curl-scripts/*.sh
run variouscurl
commands to test the API. See below.
Request:
curl http://localhost:4741/sign-up \
--include \
--request POST \
--header "Content-Type: application/json" \
--data '{
"credentials": {
"email": "'"${EMAIL}"'",
"password": "'"${PASSWORD}"'",
"password_confirmation": "'"${PASSWORD}"'"
}
}'
EMAIL=ava@bob.com PASSWORD=hannah curl-scripts/auth/sign-up.sh
Response:
HTTP/1.1 201 Created
Content-Type: application/json; charset=utf-8
{
"user": {
"id": 1,
"email": "ava@bob.com"
}
}
Request:
curl http://localhost:4741/sign-in \
--include \
--request POST \
--header "Content-Type: application/json" \
--data '{
"credentials": {
"email": "'"${EMAIL}"'",
"password": "'"${PASSWORD}"'"
}
}'
EMAIL=ava@bob.com PASSWORD=hannah curl-scripts/auth/sign-in.sh
Response:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"user": {
"id": 1,
"email": "ava@bob.com",
"token": "BAhJIiVlZDIwZTMzMzQzODg5NTBmYjZlNjRlZDZlNzYxYzU2ZAY6BkVG--7e7f77f974edcf5e4887b56918f34cd9fe293b9f"
}
}
Request:
curl --include --request PATCH "http://localhost:4741/change-password" \
--header "Authorization: Token token=$TOKEN" \
--header "Content-Type: application/json" \
--data '{
"passwords": {
"old": "'"${OLDPW}"'",
"new": "'"${NEWPW}"'"
}
}'
OLDPW='hannah' NEWPW='elle' TOKEN='BAhJIiVlZDIwZTMzMzQzODg5NTBmYjZlNjRlZDZlNzYxYzU2ZAY6BkVG--7e7f77f974edcf5e4887b56918f34cd9fe293b9f' sh curl-scripts/auth/change-password.sh
Response:
HTTP/1.1 204 No Content
Request:
curl http://localhost:4741/sign-out \
--include \
--request DELETE \
--header "Authorization: Token token=$TOKEN"
TOKEN='BAhJIiVlZDIwZTMzMzQzODg5NTBmYjZlNjRlZDZlNzYxYzU2ZAY6BkVG--7e7f77f974edcf5e4887b56918f34cd9fe293b9f' sh curl-scripts/auth/sign-out.sh
Response:
HTTP/1.1 204 No Content
Request:
curl http://localhost:4741/users \
--include \
--request GET \
--header "Authorization: Token token=$TOKEN"
TOKEN=BAhJIiVlZDIwZTMzMzQzODg5NTBmYjZlNjRlZDZlNzYxYzU2ZAY6BkVG--7e7f77f974edcf5e4887b56918f34cd9fe293b9f curl-scripts/users.sh
Response:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"users": [
{
"id": 2,
"email": "bob@ava.com"
},
{
"id": 1,
"email": "ava@bob.com"
}
]
}
Request:
curl --include --request GET http://localhost:4741/users/$ID \
--header "Authorization: Token token=$TOKEN"
ID=2 TOKEN=BAhJIiVlZDIwZTMzMzQzODg5NTBmYjZlNjRlZDZlNzYxYzU2ZAY6BkVG--7e7f77f974edcf5e4887b56918f34cd9fe293b9f curl-scripts/user.sh
Response:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"user": {
"id": 2,
"email": "bob@ava.com"
}
}
Request:
curl "http://localhost:4741/users/${ID}" \
--include \
--request PATCH \
--header "Authorization: Token token=${TOKEN}" \
--header "Content-Type: application/json" \
--data '{
"user": {
"email": "'"${EMAIL}"'"
}
}'
ID=1 TOKEN="BAhJIiU1NGNlYjRmMjBhM2NkZTZiNzk1MGNiYmZiYWMyY2U4MwY6BkVG--ddb1e16af0e05921aa56d771e4a2f816f2a1d46e"
EMAIL=mike@m
sh curl-scripts/users/user-update.sh
Response:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{"user":{"id":1,"email":"mike@m"}}