Skip to content

Data loading #17

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 3 commits into
base: new-design-and-stuff
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions app/routes/rfcs-help.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
import Route from '@ember/routing/route';
import toc from 'rfcs-app-toc-builder:toc.json';

import accepted from 'rfcs-app-toc-builder:stage-accepted.json'

export default class RfcsHelpRoute extends Route {
async model() {
console.log(accepted)
return [...toc.stageLinks["accepted"], ...toc.stageLinks["released"]];
}
}
4 changes: 2 additions & 2 deletions app/routes/rfcs-input.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@ import Route from '@ember/routing/route';
import toc from 'rfcs-app-toc-builder:toc.json';
export default class RfcsInputRoute extends Route {
async model() {
return toc.stageLinks["exploring"];
}
return toc.stageLinks["exploring"];
}
}
113 changes: 113 additions & 0 deletions combineData.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
#!/usr/bin/env node

import { readdir, readFile, writeFile } from "fs/promises";
import { join } from "path";

const rfcsFiles = await readdir("./data/raw");

rfcsFiles.sort((a, b) => parseInt(a) - parseInt(b));

let rfcMap = {};

function getDays(date1, date2) {
if (date1) {
return Math.ceil(
(new Date(date1) - new Date(date2)) / (1000 * 60 * 60 * 24),
);
} else {
return Math.ceil((new Date() - new Date(date2)) / (1000 * 60 * 60 * 24));
}
}

function findFirstStage(rfc) {
if (rfc.merged) {
return "accepted";
} else if (!rfc.closed) {
if (
rfc.timelineItems.filter((item) => item.label == "S-Exploring").length ==
1
) {
return "exploring";
} else {
return "proposed";
}
} else {
return "closed";
}
}

function getFirstStagesDuration(rfc) {
if (!rfc.closed || rfc.merged) {
let exploringLabels = rfc.timelineItems.filter(
(item) => item.label == "S-Exploring",
);
if (exploringLabels.length > 0) {
if (rfc.merged) {
return {
proposed: getDays(exploringLabels[0].createdAt, rfc.createdAt),
exploring: getDays(rfc.mergedAt, exploringLabels[0].createdAt),
accepted: null,
release: null,
released: null,
};
} else {
return {
proposed: getDays(exploringLabels[0].createdAt, rfc.createdAt),
exploring: getDays(new Date(), exploringLabels[0].createdAt),
accepted: null,
release: null,
released: null,
};
}
} else {
return {
proposed: getDays(new Date(), rfc.createdAt),
exploring: null,
accepted: null,
release: null,
released: null,
};
}
} else {
return {
closed: this.getDays(rfc.closedAt, rfc.createdAt),
};
}
}

for (let file of rfcsFiles) {
const rfc = JSON.parse(await readFile(join("data/raw", file), "utf8"));

if (rfc.title.includes("Advance RFC")) {
let advanceRFC = rfc.title.match(/[0-9]+/);
let num = parseInt(advanceRFC, 10);
let stage = rfc.title.split(" ").pop().toLowerCase();
rfcMap[num].stageDuration[`${rfcMap[num].currentStage}`] = getDays(
rfc.mergedAt,
rfc.createdAt,
);
if (rfc.merged) {
rfcMap[num].currentStage = stage;
}
if (rfc.assignees.length > 0) {
rfcMap[num].assignees.push(...rfc.assignees);
}
rfcMap[num].connected.push(rfc);
} else {
rfcMap[rfc.number] = {
...rfc,
currentStage: findFirstStage(rfc),
labels: rfc.timelineItems.filter((item) => item.label == "S-Exploring"),
stageDuration: getFirstStagesDuration(rfc),
connected: [],
assignees: rfc.assignees,
};
}
}

for (let rfc in rfcMap) {
await writeFile(
join("data", `${rfc}.json`),
JSON.stringify(rfcMap[rfc], null, 2),
);
}
41 changes: 41 additions & 0 deletions data/1.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
{
"number": 1,
"url": "https://api.github.com/repos/emberjs/rfcs/pulls/1",
"title": "RFC: Pass through attribute meta data to related Transform",
"createdAt": "2014-08-14T18:00:42Z",
"closedAt": "2016-01-27T18:18:58Z",
"mergedAt": null,
"assignees": [],
"timelineItems": [
{
"event": "labeled",
"createdAt": "2014-08-22T18:30:31Z",
"label": "ember-data"
},
{
"event": "labeled",
"createdAt": "2015-03-27T18:42:17Z",
"label": "Needs Response"
},
{
"event": "labeled",
"createdAt": "2016-01-06T18:23:03Z",
"label": "Needs Implementer"
},
{
"event": "unlabeled",
"createdAt": "2016-01-06T18:23:03Z",
"label": "Needs Response"
}
],
"currentStage": "proposed",
"labels": [],
"stageDuration": {
"proposed": 4004,
"exploring": null,
"accepted": null,
"release": null,
"released": null
},
"connected": []
}
20 changes: 20 additions & 0 deletions data/10.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"number": 10,
"url": "https://api.github.com/repos/emberjs/rfcs/pulls/10",
"title": "RFC: Engines",
"createdAt": "2014-10-25T00:32:05Z",
"closedAt": "2016-04-11T14:40:10Z",
"mergedAt": "2016-04-11T14:40:10Z",
"assignees": [],
"timelineItems": [],
"currentStage": "proposed",
"labels": [],
"stageDuration": {
"proposed": 3933,
"exploring": null,
"accepted": null,
"release": null,
"released": null
},
"connected": []
}
20 changes: 20 additions & 0 deletions data/100.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"number": 100,
"url": "https://api.github.com/repos/emberjs/rfcs/pulls/100",
"title": "Attribute Actions",
"createdAt": "2015-10-18T15:58:33Z",
"closedAt": "2016-01-18T05:12:41Z",
"mergedAt": null,
"assignees": [],
"timelineItems": [],
"currentStage": "proposed",
"labels": [],
"stageDuration": {
"proposed": 3575,
"exploring": null,
"accepted": null,
"release": null,
"released": null
},
"connected": []
}
69 changes: 69 additions & 0 deletions data/1000.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
{
"number": 1000,
"url": "https://api.github.com/repos/emberjs/rfcs/pulls/1000",
"title": "Make array built-in in strict-mode",
"createdAt": "2023-12-22T19:04:19Z",
"closedAt": "2024-06-12T14:36:10Z",
"mergedAt": "2024-06-12T14:36:10Z",
"assignees": [],
"timelineItems": [
{
"event": "labeled",
"createdAt": "2023-12-22T19:04:34Z",
"label": "S-Proposed"
},
{
"event": "labeled",
"createdAt": "2024-01-19T19:59:09Z",
"label": "S-Exploring"
},
{
"event": "unlabeled",
"createdAt": "2024-02-09T20:03:47Z",
"label": "S-Proposed"
},
{
"event": "labeled",
"createdAt": "2024-05-17T18:41:01Z",
"label": "Final Comment Period"
}
],
"currentStage": "exploring",
"labels": [
{
"event": "labeled",
"createdAt": "2024-01-19T19:59:09Z",
"label": "S-Exploring"
}
],
"stageDuration": {
"proposed": 29,
"exploring": 415,
"accepted": null,
"release": null,
"released": null
},
"connected": [
{
"number": 1034,
"url": "https://api.github.com/repos/emberjs/rfcs/pulls/1034",
"title": "Advance RFC #1000 `\"Make (array) a built in helper\"` to Stage Ready for Release",
"createdAt": "2024-06-12T14:37:25Z",
"closedAt": null,
"mergedAt": null,
"assignees": [],
"timelineItems": [
{
"event": "labeled",
"createdAt": "2024-06-12T14:37:27Z",
"label": "RFC Advancement"
},
{
"event": "labeled",
"createdAt": "2024-06-12T14:37:27Z",
"label": "S-Ready for Release"
}
]
}
]
}
Loading
Loading