{"id":15551162,"url":"https://github.com/naomiyocum/lunch_and_learn","last_synced_at":"2026-04-20T10:32:10.686Z","repository":{"id":65300243,"uuid":"588266651","full_name":"naomiyocum/lunch_and_learn","owner":"naomiyocum","description":"An API to search for recipes by country and provide learning opportunities about said country's culture!","archived":false,"fork":false,"pushed_at":"2023-05-25T21:10:32.000Z","size":1815,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-29T01:45:25.750Z","etag":null,"topics":["api","json","ruby-on-rails","vcr","webmock"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/naomiyocum.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-12T18:09:21.000Z","updated_at":"2023-02-15T18:44:07.000Z","dependencies_parsed_at":"2024-12-08T21:51:18.892Z","dependency_job_id":null,"html_url":"https://github.com/naomiyocum/lunch_and_learn","commit_stats":{"total_commits":47,"total_committers":2,"mean_commits":23.5,"dds":0.2978723404255319,"last_synced_commit":"76b1a3ba483605e30f576d8645d078e40d6c4b04"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/naomiyocum/lunch_and_learn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naomiyocum%2Flunch_and_learn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naomiyocum%2Flunch_and_learn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naomiyocum%2Flunch_and_learn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naomiyocum%2Flunch_and_learn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/naomiyocum","download_url":"https://codeload.github.com/naomiyocum/lunch_and_learn/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naomiyocum%2Flunch_and_learn/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32043004,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T00:18:06.643Z","status":"online","status_checked_at":"2026-04-20T02:00:06.527Z","response_time":94,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","json","ruby-on-rails","vcr","webmock"],"created_at":"2024-10-02T14:02:51.825Z","updated_at":"2026-04-20T10:32:10.650Z","avatar_url":"https://github.com/naomiyocum.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e Lunch and Learn 🍱📚 \u003c/h1\u003e\n\n![GitHub Contributors](https://img.shields.io/github/contributors/naomiyocum/lunch_and_learn)\n![GitHub language count](https://img.shields.io/github/languages/count/naomiyocum/lunch_and_learn)\n![GitHub top language](https://img.shields.io/github/languages/top/naomiyocum/lunch_and_learn?color=yellow)\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://media3.giphy.com/media/3oz8xB06mHyoGE7ZoQ/giphy.gif?cid=ecf05e47k1n1ibrrbqr4tjzmtg148yazo3vep62jc826m0x3\u0026rid=giphy.gif\u0026ct=g\" width=\"600\" height=\"300\"/\u003e\n\u003c/div\u003e\n\n## Table of Contents\n* [General Info](#general-info)\n* [Learning Goals](#learning-goals)\n* [Technologies](#technologies)\n* [Usage](#usage)\n* [API Endpoints](#api-endpoints)\n\n## General Info\nMy team is working in a service-oriented architecture. The front-end will communicate with my back-end through the API exposed.\n\nWe are building an application that allows users to search for cuisines by country, and provide opportunity to learn more about that country's culture. This app will allow users to search for recipes by country, favorite recipes, and learn more about a particular country via a YouTube video and a variety of images.\n\n## Learning Goals\n- Expose an API that aggregates data from multiple external APIs\n- Expose an API that requires an authentication token\n- Expose an API for CRUD functionality\n- Determine completion criteria based on the needs of other developers\n- Create appropriate error messages to assist developers\n- Test both API consumption and exposure, making use of Webmock and VCR\n\n## Technologies\n- Ruby 2.7.4\n- Rails 5.2.8\n\n## Usage\nYou will need to get your own free API keys from the following services:\n1. [Edamam Recipe API](https://developer.edamam.com/edamam-recipe-api)\n2. [YouTube API](https://developers.google.com/youtube/v3/getting-started)\n3. [Unsplash API](https://unsplash.com/documentation#getting-started)\n\nAfter getting your 3 keys, fork and clone this repo to your local machine.\n\nThen, run the following commands:\n```\ncd lunch_and_learn\nbundle install\nbundle exec figaro install\nrails db:{drop,create,migrate,seed}\n```\n\nIn the `config/application.yml` file, copy and paste the code block below and replace the values with your API keys:\n```ruby\nedamam-app-id: \u003cYOUR_EDAMAM_API_ID\u003e\nedamam-app-key: \u003cYOUR_EDAMAM_API_KEY\u003e\nyoutube-key: \u003cYOUR_YOUTUBE_API_KEY\u003e\nunsplash-key: \u003cYOUR_UNSPLASH_API_KEY\u003e\n```\n\nStart your server in the root directory:\n```\nrails s\n```\n\nLastly, head to your web browser or Postman to consume my API. The base URL is `http://localhost:3000` and endpoints are listed below!\n\nYou can stop the server by clicking `Ctrl + C` on your keyboard.\n\n## API Endpoints\n\n#### REQUIRED HEADERS\n```\n{\n'Content-Type': 'application/json',\n'Accept': 'application/json'\n}\n```\n\n- ### GET /api/v1/recipes\n  \u003e fetch recipes based on a particular country\n  \n  | Query Parameter        | Type          |  |\n  | ------------- |:-------------:| -----:|\n  | country      | string | Optional |\n\n  \u003csub\u003e\u003csup\u003eif no country is provided, a random country will be searched for you\u003c/sup\u003e\u003c/sub\u003e\n  \n    #### Example Response\n  ```json\n  {\n    \"data\": [\n        {\n            \"id\": null,\n            \"type\": \"recipe\",\n            \"attributes\": {\n                \"title\": \"Passport to Japan: Edamame, Gyoza, Rice and Teriyaki Beef\",\n                \"url\": \"https://www.foodnetwork.com/recipes/rachael-ray/passport-to-japan-edamame-gyoza-rice-and-teriyaki-beef-recipe-2013871\",\n                \"country\": \"japan\",\n                \"image\": \"https://edamam-product-images.s3.amazonaws.com/web-img/237/2374bd7d348b32ba325739f8d9169119.jpeg...\"\n            }\n        },\n        {\n            \"id\": null,\n            \"type\": \"recipe\",\n            \"attributes\": {\n                \"title\": \"Zero Proof: Shiso Limeade Recipe\",\n                \"url\": \"http://www.seriouseats.com/recipes/2011/08/zero-proof-shiso-limeade.html\",\n                \"country\": \"japan\",\n                \"image\": \"https://edamam-product-images.s3.amazonaws.com/web-img/847/8475a2dca7024c9d5a7fa2a3e2806979.jpg...\"\n            }\n        }\n     ]\n  }\n  ```\n\u003cbr\u003e\n\n- ### GET /api/v1/learning_resources\n  \u003e fetch learning resources for a particular country\n\n  | Query Parameter        | Type          |  |\n  | ------------- |:-------------:| -----:|\n  | country      | string | Optional |\n  \n  \u003csub\u003e\u003csup\u003eif no country is provided, a random country will be searched for you\u003c/sup\u003e\u003c/sub\u003e\n  \n  #### Example Response\n  ```json\n  {\n    \"data\": {\n        \"id\": null,\n        \"type\": \"learning_resource\",\n        \"attributes\": {\n            \"country\": \"philippines\",\n            \"video\": {\n                \"title\": \"A Super Quick History of the Philippines\",\n                \"youtube_video_id\": \"De08VKktvJ4\"\n            },\n            \"images\": [\n                {\n                    \"alt_tag\": \"landscape photography of island with boats\",\n                    \"url\": \"https://images.unsplash.com/photo-1531761535209-180857e963b9?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=MnwzOTkxMzV8MHwxfHNlYXJjaHwyfHxwaGlsaXBwaW5lc3xlbnwwfHx8fDE2NzM4MDYyOTc\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=1080\"\n                },\n                {\n                    \"alt_tag\": \"aerial photo of body of water between mountains\",\n                    \"url\": \"https://images.unsplash.com/photo-1518509562904-e7ef99cdcc86?crop=entropy\u0026cs=tinysrgb\u0026fit=max\u0026fm=jpg\u0026ixid=MnwzOTkxMzV8MHwxfHNlYXJjaHwzfHxwaGlsaXBwaW5lc3xlbnwwfHx8fDE2NzM4MDYyOTc\u0026ixlib=rb-4.0.3\u0026q=80\u0026w=1080\"\n                }\n             ]\n         }\n      }\n  }\n  ```\n  \u003cbr\u003e\n  \n- ### POST /api/v1/users\n  \u003e registers a user with Lunch and Learn\n \n   | Body (JSON)        | Type          |  |\n  | ------------- |:-------------:| -----:|\n  | name      | string | Required |\n  | email      | string | Required |\n  | password      | string | Required |\n  | password_confirmation      | string | Required |\n  \n  #### Example Response\n  ```json\n  {\n    \"data\": {\n        \"id\": \"3\",\n        \"type\": \"user\",\n        \"attributes\": {\n            \"name\": \"Roronoa Zoro\",\n            \"email\": \"piratehunter@onepiece.jp\",\n            \"api_key\": \"D+W0GG0gYdj85zquv2U12w==\"\n          }\n      }\n  }\n  ```\n  \u003cbr\u003e\n  \n- ### POST /api/v1/sessions\n  \u003e logs user in\n  \n   | Body (JSON)        | Type          |  |\n  | ------------- |:-------------:| -----:|\n  | email      | string | Required |\n  | password      | string | Required |\n  \n  #### Example Response\n  ```json\n  {\n    \"data\": {\n        \"id\": \"4\",\n        \"type\": \"user\",\n        \"attributes\": {\n            \"name\": \"Sanji\",\n            \"email\": \"sanji@onepiece.jp\",\n            \"api_key\": \"/cN53CTIOr2xHD/93BVpvg==\"\n          }\n      }\n  }\n  ```\n  \u003cbr\u003e\n  \n- ### POST /api/v1/favorites\n  \u003e adds recipes to a favorited list for a particular user\n  \n  | Body (JSON)        | Type          |  |\n  | ------------- |:-------------:| -----:|\n  | api_key      | string | Required |\n  | country      | string | Required |\n  | recipe_link      | string | Required |\n  | recipe_title      | string | Required |\n  \n  #### Successful Response\n  ```json\n  {\n    \"success\": \"Favorite added successfully\"\n  }\n  ```\n  \u003cbr\u003e\n\n- ### GET /api/v1/favorites\n  \u003e fetch favorites of a particular user\n  \n  | Query Parameter        | Type          |  |\n  | ------------- |:-------------:| -----:|\n  | api_key      | string | Required |\n  \n  #### Example Response\n  ```json\n  {\n    \"data\": [\n        {\n            \"id\": \"7\",\n            \"type\": \"favorite\",\n            \"attributes\": {\n                \"recipe_title\": \"Okinawa Soba 沖縄そば\",\n                \"recipe_link\": \"https://www.justonecookbook.com/okinawa-soba/\",\n                \"country\": \"japan\",\n                \"created_at\": \"2023-01-16T03:28:49.956Z\"\n              }\n          },\n          {\n            \"id\": \"10\",\n            \"type\": \"favorite\",\n            \"attributes\": {\n                \"recipe_title\": \"Kare Kare\",\n                \"recipe_link\": \"https://panlasangpinoy.com/kare-kare-recipe/\",\n                \"country\": \"Philippines\",\n                \"created_at\": \"2023-01-16T03:42:22.956Z\"\n              }\n          }\n      ]\n  }\n  ```\n  \u003cbr\u003e\n  \n  \n- ### DELETE /api/v1/favorites\n  \u003e deletes a favorite\n  \n  | Query Parameters        | Type          |  |\n  | ------------- |:-------------:| -----:|\n  | api_key      | string | Required |\n  | recipe_link      | string | Required |\n  \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaomiyocum%2Flunch_and_learn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnaomiyocum%2Flunch_and_learn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaomiyocum%2Flunch_and_learn/lists"}