{"action":"created","issue":{"url":"https://api.github.com/repos/quasar-analytics/quasar/issues/986","labels_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/986/labels{/name}","comments_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/986/comments","events_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/986/events","html_url":"https://github.com/quasar-analytics/quasar/pull/986","id":116660731,"number":986,"title":"[SD-983] Filesystem algebras and tests","user":{"login":"wemrysi","id":32185,"avatar_url":"https://avatars.githubusercontent.com/u/32185?v=3","gravatar_id":"","url":"https://api.github.com/users/wemrysi","html_url":"https://github.com/wemrysi","followers_url":"https://api.github.com/users/wemrysi/followers","following_url":"https://api.github.com/users/wemrysi/following{/other_user}","gists_url":"https://api.github.com/users/wemrysi/gists{/gist_id}","starred_url":"https://api.github.com/users/wemrysi/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wemrysi/subscriptions","organizations_url":"https://api.github.com/users/wemrysi/orgs","repos_url":"https://api.github.com/users/wemrysi/repos","events_url":"https://api.github.com/users/wemrysi/events{/privacy}","received_events_url":"https://api.github.com/users/wemrysi/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/quasar-analytics/quasar/labels/in%20progress","name":"in progress","color":"ededed"}],"state":"open","locked":false,"assignee":{"login":"sellout","id":33031,"avatar_url":"https://avatars.githubusercontent.com/u/33031?v=3","gravatar_id":"","url":"https://api.github.com/users/sellout","html_url":"https://github.com/sellout","followers_url":"https://api.github.com/users/sellout/followers","following_url":"https://api.github.com/users/sellout/following{/other_user}","gists_url":"https://api.github.com/users/sellout/gists{/gist_id}","starred_url":"https://api.github.com/users/sellout/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sellout/subscriptions","organizations_url":"https://api.github.com/users/sellout/orgs","repos_url":"https://api.github.com/users/sellout/repos","events_url":"https://api.github.com/users/sellout/events{/privacy}","received_events_url":"https://api.github.com/users/sellout/received_events","type":"User","site_admin":false},"milestone":null,"comments":2,"created_at":"2015-11-12T22:56:51Z","updated_at":"2015-11-17T17:26:06Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/quasar-analytics/quasar/pulls/986","html_url":"https://github.com/quasar-analytics/quasar/pull/986","diff_url":"https://github.com/quasar-analytics/quasar/pull/986.diff","patch_url":"https://github.com/quasar-analytics/quasar/pull/986.patch"},"body":"This is a mostly additive PR containing the new filesystem algebras, their MongoDB interpreters, and all the refactored tests to go along with them. Neither the rest API or REPL are using the new interpreters yet and this PR is primarily for integration and to try and break up the changes a bit so that there isn't a single enormous PR for all of SD-983 (though I know this one is pretty big).\r\n\r\nOnce the API and REPL PRs are submitted, a final PR will be submitted that deletes all the infrastructure being replaced and renames the `XXX2` variants to `XXX`.\r\n\r\nAlso, after reviewing @mossprescott 's views PR some concepts clarified a bit and as a result I am going to change the distribution of algebra terms a bit, merging the read-only bits of `ManageFile` with `ExecutePlan` into a new algebra called `QueryFile`. This doesn't change anything in this PR in a major semantic way, other than shuffling of where tests and some functions live and will tidy up some of the types a bit. So it doesn't need to hold up this PR, which is why I'm not waiting.\r\n\r\nA rough outline of what's in here\r\n* `ReadFile`, `WriteFile`, `ManageFile` and `ExecutePlan` algebras, describing the filesytem operations\r\n* `MongoDb` a thin wrapper around the async `mongo-java-driver`.\r\n* Interpreters for all the filesystem algebras in terms of `MongoDb`.\r\n* Conversion to pathy paths in all public filesystem apis (`quasar.fs.Path` is still used internally in a few places)\r\n* An in-memory filesystem interpreter useful for tests\r\n* Unit tests for all derived filesystem operations\r\n* A file system specification in the form of implementation agnostic integration tests, the idea being that if an implementation passes these tests, it should be a valid filesystem.\r\n* Implementation-specific filesystem tests for the MongoDb implementation\r\n* A side-by-side reimplementation of the regression test runner that is a bit more performant (though MongoDB is still the bottleneck here, I believe)\r\n* A thread-safe `TaskRef` cribbed from oncue/remotely\r\n* Various supporting functions in `quasar.fp` for interpreting free monads based on coproducts of functors\r\n* Broke apart regression test classes into own package and files for easier reuse.\r\n"},"comment":{"url":"https://api.github.com/repos/quasar-analytics/quasar/issues/comments/157443703","html_url":"https://github.com/quasar-analytics/quasar/pull/986#issuecomment-157443703","issue_url":"https://api.github.com/repos/quasar-analytics/quasar/issues/986","id":157443703,"user":{"login":"sellout","id":33031,"avatar_url":"https://avatars.githubusercontent.com/u/33031?v=3","gravatar_id":"","url":"https://api.github.com/users/sellout","html_url":"https://github.com/sellout","followers_url":"https://api.github.com/users/sellout/followers","following_url":"https://api.github.com/users/sellout/following{/other_user}","gists_url":"https://api.github.com/users/sellout/gists{/gist_id}","starred_url":"https://api.github.com/users/sellout/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/sellout/subscriptions","organizations_url":"https://api.github.com/users/sellout/orgs","repos_url":"https://api.github.com/users/sellout/repos","events_url":"https://api.github.com/users/sellout/events{/privacy}","received_events_url":"https://api.github.com/users/sellout/received_events","type":"User","site_admin":false},"created_at":"2015-11-17T17:26:06Z","updated_at":"2015-11-17T17:26:06Z","body":"Ok, nap time 😫\r\n\r\nVery excited about this approach and looking forward to all the deletion coming up. Also very excited to have a (partial) second filesystem that we can test without an external dependency – that’ll help keep us honest in terms of not having Mongo semantics leak out of the filesystem.\r\n\r\nAlso, good luck when you eventually merge/rebase this on master."}}