{"action":"created","comment":{"url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/comments/55233261","id":55233261,"diff_hunk":"@@ -73,72 +75,182 @@ foam.CLASS({\n });\n \n \n+/**\n+ * Base class for all mLang queries.\n+ *\n+ * Contains many default implementations of methods.\n+ */\n foam.CLASS({\n-  package: 'foam.mlang',\n-  name: 'Expr'\n+  package: 'foam.mlang.predicate',\n+  name: 'Expr',\n+  abstract: true,\n+  // PORT: There should be several interfaces here eventually, eg.\n+  // Functor/Projectable/whatever we call f()'s interface.\n+  // implements: ['ExprProtocol'],\n+\n+  methods: [\n+    /**\n+     * Abstract projection method. Given an object, extracts the value of a\n+     * particular property from it.\n+     */\n+    {\n+      name: 'f',\n+      args: [\n+        {\n+          name: 'obj',\n+        },\n+      ],\n+    },\n+    /**\n+     * Converts this expression into MQL syntax, as used in eg. Gmail searches.\n+     */\n+    function toMQL() {","path":"src/lib/mlang.js","position":64,"original_position":64,"commit_id":"672c0be910d6153c584cb09d5afed86f3dc97c37","original_commit_id":"672c0be910d6153c584cb09d5afed86f3dc97c37","user":{"login":"shepheb","id":157812,"avatar_url":"https://avatars.githubusercontent.com/u/157812?v=3","gravatar_id":"","url":"https://api.github.com/users/shepheb","html_url":"https://github.com/shepheb","followers_url":"https://api.github.com/users/shepheb/followers","following_url":"https://api.github.com/users/shepheb/following{/other_user}","gists_url":"https://api.github.com/users/shepheb/gists{/gist_id}","starred_url":"https://api.github.com/users/shepheb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shepheb/subscriptions","organizations_url":"https://api.github.com/users/shepheb/orgs","repos_url":"https://api.github.com/users/shepheb/repos","events_url":"https://api.github.com/users/shepheb/events{/privacy}","received_events_url":"https://api.github.com/users/shepheb/received_events","type":"User","site_admin":false},"body":"Done. Fixed `toString()` to not use `toMQL()` as well.","created_at":"2016-03-07T16:54:07Z","updated_at":"2016-03-07T16:54:07Z","html_url":"https://github.com/jacksonic/vjlofvhjfgm/pull/1#discussion_r55233261","pull_request_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/1","_links":{"self":{"href":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/comments/55233261"},"html":{"href":"https://github.com/jacksonic/vjlofvhjfgm/pull/1#discussion_r55233261"},"pull_request":{"href":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/1","id":61568736,"html_url":"https://github.com/jacksonic/vjlofvhjfgm/pull/1","diff_url":"https://github.com/jacksonic/vjlofvhjfgm/pull/1.diff","patch_url":"https://github.com/jacksonic/vjlofvhjfgm/pull/1.patch","issue_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/issues/1","number":1,"state":"open","locked":false,"title":"Add expression MLangs","user":{"login":"shepheb","id":157812,"avatar_url":"https://avatars.githubusercontent.com/u/157812?v=3","gravatar_id":"","url":"https://api.github.com/users/shepheb","html_url":"https://github.com/shepheb","followers_url":"https://api.github.com/users/shepheb/followers","following_url":"https://api.github.com/users/shepheb/following{/other_user}","gists_url":"https://api.github.com/users/shepheb/gists{/gist_id}","starred_url":"https://api.github.com/users/shepheb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shepheb/subscriptions","organizations_url":"https://api.github.com/users/shepheb/orgs","repos_url":"https://api.github.com/users/shepheb/repos","events_url":"https://api.github.com/users/shepheb/events{/privacy}","received_events_url":"https://api.github.com/users/shepheb/received_events","type":"User","site_admin":false},"body":"With decently complete tests against a real DAO.\r\n\r\nPlus some small core tweaks to fix some small bugs encountered.","created_at":"2016-03-03T14:44:47Z","updated_at":"2016-03-07T16:54:07Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9d92acd4ecec331d18b63dc6d4015e8b3186a4b9","assignee":{"login":"kgrgreer","id":7460787,"avatar_url":"https://avatars.githubusercontent.com/u/7460787?v=3","gravatar_id":"","url":"https://api.github.com/users/kgrgreer","html_url":"https://github.com/kgrgreer","followers_url":"https://api.github.com/users/kgrgreer/followers","following_url":"https://api.github.com/users/kgrgreer/following{/other_user}","gists_url":"https://api.github.com/users/kgrgreer/gists{/gist_id}","starred_url":"https://api.github.com/users/kgrgreer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kgrgreer/subscriptions","organizations_url":"https://api.github.com/users/kgrgreer/orgs","repos_url":"https://api.github.com/users/kgrgreer/repos","events_url":"https://api.github.com/users/kgrgreer/events{/privacy}","received_events_url":"https://api.github.com/users/kgrgreer/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/1/commits","review_comments_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/1/comments","review_comment_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/issues/1/comments","statuses_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/statuses/672c0be910d6153c584cb09d5afed86f3dc97c37","head":{"label":"shepheb:mlangs","ref":"mlangs","sha":"672c0be910d6153c584cb09d5afed86f3dc97c37","user":{"login":"shepheb","id":157812,"avatar_url":"https://avatars.githubusercontent.com/u/157812?v=3","gravatar_id":"","url":"https://api.github.com/users/shepheb","html_url":"https://github.com/shepheb","followers_url":"https://api.github.com/users/shepheb/followers","following_url":"https://api.github.com/users/shepheb/following{/other_user}","gists_url":"https://api.github.com/users/shepheb/gists{/gist_id}","starred_url":"https://api.github.com/users/shepheb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shepheb/subscriptions","organizations_url":"https://api.github.com/users/shepheb/orgs","repos_url":"https://api.github.com/users/shepheb/repos","events_url":"https://api.github.com/users/shepheb/events{/privacy}","received_events_url":"https://api.github.com/users/shepheb/received_events","type":"User","site_admin":false},"repo":{"id":53057607,"name":"vjlofvhjfgm","full_name":"shepheb/vjlofvhjfgm","owner":{"login":"shepheb","id":157812,"avatar_url":"https://avatars.githubusercontent.com/u/157812?v=3","gravatar_id":"","url":"https://api.github.com/users/shepheb","html_url":"https://github.com/shepheb","followers_url":"https://api.github.com/users/shepheb/followers","following_url":"https://api.github.com/users/shepheb/following{/other_user}","gists_url":"https://api.github.com/users/shepheb/gists{/gist_id}","starred_url":"https://api.github.com/users/shepheb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/shepheb/subscriptions","organizations_url":"https://api.github.com/users/shepheb/orgs","repos_url":"https://api.github.com/users/shepheb/repos","events_url":"https://api.github.com/users/shepheb/events{/privacy}","received_events_url":"https://api.github.com/users/shepheb/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/shepheb/vjlofvhjfgm","description":"Nothing to see here.","fork":true,"url":"https://api.github.com/repos/shepheb/vjlofvhjfgm","forks_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/forks","keys_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/teams","hooks_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/hooks","issue_events_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/issues/events{/number}","events_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/events","assignees_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/assignees{/user}","branches_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/branches{/branch}","tags_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/tags","blobs_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/git/refs{/sha}","trees_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/statuses/{sha}","languages_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/languages","stargazers_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/stargazers","contributors_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/contributors","subscribers_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/subscribers","subscription_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/subscription","commits_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/commits{/sha}","git_commits_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/git/commits{/sha}","comments_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/comments{/number}","issue_comment_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/issues/comments{/number}","contents_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/contents/{+path}","compare_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/merges","archive_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/downloads","issues_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/issues{/number}","pulls_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/pulls{/number}","milestones_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/milestones{/number}","notifications_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/labels{/name}","releases_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/releases{/id}","deployments_url":"https://api.github.com/repos/shepheb/vjlofvhjfgm/deployments","created_at":"2016-03-03T14:43:21Z","updated_at":"2016-03-03T14:43:22Z","pushed_at":"2016-03-07T14:48:17Z","git_url":"git://github.com/shepheb/vjlofvhjfgm.git","ssh_url":"git@github.com:shepheb/vjlofvhjfgm.git","clone_url":"https://github.com/shepheb/vjlofvhjfgm.git","svn_url":"https://github.com/shepheb/vjlofvhjfgm","homepage":null,"size":935,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"jacksonic:master","ref":"master","sha":"5c74f2ba941c639cf19002ca67ec485f3d602ebb","user":{"login":"jacksonic","id":8561456,"avatar_url":"https://avatars.githubusercontent.com/u/8561456?v=3","gravatar_id":"","url":"https://api.github.com/users/jacksonic","html_url":"https://github.com/jacksonic","followers_url":"https://api.github.com/users/jacksonic/followers","following_url":"https://api.github.com/users/jacksonic/following{/other_user}","gists_url":"https://api.github.com/users/jacksonic/gists{/gist_id}","starred_url":"https://api.github.com/users/jacksonic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacksonic/subscriptions","organizations_url":"https://api.github.com/users/jacksonic/orgs","repos_url":"https://api.github.com/users/jacksonic/repos","events_url":"https://api.github.com/users/jacksonic/events{/privacy}","received_events_url":"https://api.github.com/users/jacksonic/received_events","type":"User","site_admin":false},"repo":{"id":50441060,"name":"vjlofvhjfgm","full_name":"jacksonic/vjlofvhjfgm","owner":{"login":"jacksonic","id":8561456,"avatar_url":"https://avatars.githubusercontent.com/u/8561456?v=3","gravatar_id":"","url":"https://api.github.com/users/jacksonic","html_url":"https://github.com/jacksonic","followers_url":"https://api.github.com/users/jacksonic/followers","following_url":"https://api.github.com/users/jacksonic/following{/other_user}","gists_url":"https://api.github.com/users/jacksonic/gists{/gist_id}","starred_url":"https://api.github.com/users/jacksonic/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jacksonic/subscriptions","organizations_url":"https://api.github.com/users/jacksonic/orgs","repos_url":"https://api.github.com/users/jacksonic/repos","events_url":"https://api.github.com/users/jacksonic/events{/privacy}","received_events_url":"https://api.github.com/users/jacksonic/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/jacksonic/vjlofvhjfgm","description":"Nothing to see here.","fork":false,"url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm","forks_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/forks","keys_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/teams","hooks_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/hooks","issue_events_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/issues/events{/number}","events_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/events","assignees_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/assignees{/user}","branches_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/branches{/branch}","tags_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/tags","blobs_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/git/refs{/sha}","trees_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/statuses/{sha}","languages_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/languages","stargazers_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/stargazers","contributors_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/contributors","subscribers_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/subscribers","subscription_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/subscription","commits_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/commits{/sha}","git_commits_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/git/commits{/sha}","comments_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/comments{/number}","issue_comment_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/issues/comments{/number}","contents_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/contents/{+path}","compare_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/merges","archive_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/downloads","issues_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/issues{/number}","pulls_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls{/number}","milestones_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/milestones{/number}","notifications_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/labels{/name}","releases_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/releases{/id}","deployments_url":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/deployments","created_at":"2016-01-26T16:13:38Z","updated_at":"2016-01-28T18:10:51Z","pushed_at":"2016-03-07T15:23:59Z","git_url":"git://github.com/jacksonic/vjlofvhjfgm.git","ssh_url":"git@github.com:jacksonic/vjlofvhjfgm.git","clone_url":"https://github.com/jacksonic/vjlofvhjfgm.git","svn_url":"https://github.com/jacksonic/vjlofvhjfgm","homepage":null,"size":954,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"open_issues_count":1,"forks":1,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/1"},"html":{"href":"https://github.com/jacksonic/vjlofvhjfgm/pull/1"},"issue":{"href":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/issues/1"},"comments":{"href":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/jacksonic/vjlofvhjfgm/statuses/672c0be910d6153c584cb09d5afed86f3dc97c37"}}}}