From 2e8d00bc2c96d1036c0ee163d7059b65075765d4 Mon Sep 17 00:00:00 2001 From: bumi Date: Mon, 23 Apr 2018 16:26:03 +0200 Subject: [PATCH 1/3] Add a filter by account function to contributors This allows to filter contributors by the account entries. For example: ```js Contributor.filterByAccount({site: 'github.com'}); // returns all contributors with github account Contributor.filterByAccount({site: 'github.com', username: 'bumi'}); // returns bumi ``` --- lib/contracts/contributor.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/contracts/contributor.js b/lib/contracts/contributor.js index 1845730..bf44de8 100644 --- a/lib/contracts/contributor.js +++ b/lib/contracts/contributor.js @@ -34,6 +34,21 @@ class Contributor extends Base { }); } + filterByAccount(search) { + return this.all().then((contributors) => { + const searchEntries = Object.entries(search); + + return contributors.filter((contributor) => { + if (!contributor.accounts) { return false; } + return contributor.accounts.find((account) => { + return searchEntries.reduce((accumulator, searchValue) => { + return accumulator && account[searchValue[0]] === searchValue[1]; + }, true); + }); + }); + }); + } + add(contributorAttr, callOptions = {}) { let json = ContributorSerializer.serialize(contributorAttr); // TODO: validate against schema -- 2.25.1 From fe1fa2e881357dd108f4251fdf4b273866327f34 Mon Sep 17 00:00:00 2001 From: bumi Date: Thu, 26 Apr 2018 14:51:18 +0200 Subject: [PATCH 2/3] Allow filter and find for contributors by account data --- lib/contracts/contributor.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/lib/contracts/contributor.js b/lib/contracts/contributor.js index bf44de8..4845d31 100644 --- a/lib/contracts/contributor.js +++ b/lib/contracts/contributor.js @@ -35,10 +35,18 @@ class Contributor extends Base { } filterByAccount(search) { + return this._byAccount(search, 'filter'); + } + + findByAccount(search) { + return this._byAccount(search, 'find'); + } + + _byAccount(search, method = 'filter') { return this.all().then((contributors) => { const searchEntries = Object.entries(search); - return contributors.filter((contributor) => { + return contributors[method]((contributor) => { if (!contributor.accounts) { return false; } return contributor.accounts.find((account) => { return searchEntries.reduce((accumulator, searchValue) => { -- 2.25.1 From 017073018f04f616abfb69177c46301b682014ca Mon Sep 17 00:00:00 2001 From: bumi Date: Thu, 26 Apr 2018 15:35:32 +0200 Subject: [PATCH 3/3] Use more readable Array.every method instead of reduce --- lib/contracts/contributor.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/contracts/contributor.js b/lib/contracts/contributor.js index 4845d31..b122c20 100644 --- a/lib/contracts/contributor.js +++ b/lib/contracts/contributor.js @@ -49,9 +49,10 @@ class Contributor extends Base { return contributors[method]((contributor) => { if (!contributor.accounts) { return false; } return contributor.accounts.find((account) => { - return searchEntries.reduce((accumulator, searchValue) => { - return accumulator && account[searchValue[0]] === searchValue[1]; - }, true); + return searchEntries.every((item) => { + let [ key, value ] = item; + return account[key] === value; + }); }); }); }); -- 2.25.1