{"id":20390529,"url":"https://github.com/swlkr/snap","last_synced_at":"2026-05-11T09:46:35.987Z","repository":{"id":62434660,"uuid":"66093332","full_name":"swlkr/snap","owner":"swlkr","description":"Global atom state changes into restful urls","archived":false,"fork":false,"pushed_at":"2016-10-01T19:31:11.000Z","size":12,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-15T10:08:22.150Z","etag":null,"topics":["clojurescript","rest"],"latest_commit_sha":null,"homepage":null,"language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/swlkr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-08-19T15:41:57.000Z","updated_at":"2016-08-19T15:42:12.000Z","dependencies_parsed_at":"2022-11-01T21:16:12.088Z","dependency_job_id":null,"html_url":"https://github.com/swlkr/snap","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swlkr%2Fsnap","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swlkr%2Fsnap/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swlkr%2Fsnap/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/swlkr%2Fsnap/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/swlkr","download_url":"https://codeload.github.com/swlkr/snap/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241940579,"owners_count":20045883,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["clojurescript","rest"],"created_at":"2024-11-15T03:25:36.903Z","updated_at":"2026-05-11T09:46:30.541Z","avatar_url":"https://github.com/swlkr.png","language":"Clojure","funding_links":[],"categories":[],"sub_categories":[],"readme":"snap\n======================\n\nTurns your global state atom changes into restful urls\n\nPull requests are welcome!\n\nUsage\n-----\n\nIn your `project.clj`, add the following dependency:\n\n```clojure\n[snap \"1.0.0\"]\n```\n\nThen, set up your remotes, global state and, oh snap! restful http requests from state changes!\n\n```clojure\n(ns foo\n  (:require [snap.core :as snap]))\n\n; Define the restful urls for each key in the global state atom\n(def remotes {:posts {:get \"/posts\"\n                      :put \"/posts/:id\"\n                      :post \"/posts\"\n                      :delete \"/posts/:id\"}\n              :post {:get \"/posts/:id\"}})\n\n(def app-state {:posts [{:id 1 :title \"Hodor\" :content \"Hodor hodor hodor\"}]})\n(def new-state (update-in app-state [:posts] conj {:id 2 :title \"Hodor hodor\" :content \"Hodor\"})\n\n(snap/diff app-state new-state remotes)\n\n[{:url \"/posts\"\n  :method :post\n  :body {:id 2 :title \"Hodor hodor\" :content \"Hodor\"}\n  :path [:posts 1]}]\n```\n\nDevelopment\n-----\n```bash\ngit clone git@github.com:swlkr/snap.git\ncd snap\nlein deps\n```\n\nThen start hacking!\n\nTests\n-----\n\n```bash\nlein doo node test\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswlkr%2Fsnap","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fswlkr%2Fsnap","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fswlkr%2Fsnap/lists"}