Merge pull request #31 from OpenStackweb/development

Product release v1.0.2.4
This commit is contained in:
Arturo Nunez 2017-02-27 10:13:38 -06:00 committed by GitHub
commit 763b52a6b7
6 changed files with 138 additions and 137 deletions

View File

@ -2,18 +2,15 @@ module.exports = function(UserStory) {
var fs = require("fs");
var route = '../tracker';
var app = require('../../server/server');
var http = require("http");
var https = require('https');
var markdown = require("markdown").markdown;
var async = require("async");
var htmlparser = require("htmlparser");
var cheerio = require('cheerio');
var xssFilters = require("xss-filters");
const SPEC_URL = "http://specs.openstack.org/openstack/openstack-user-stories/user-stories/proposed/";
var blueprintsResume = [];
var getAllfiles = function(){
return fs.readdirSync(route)
.map(function(file){
@ -29,11 +26,11 @@ module.exports = function(UserStory) {
var userStories = getAllfiles();
//filter by Id
var file = userStories.filter(function(item){
return item.id == id;
// VALIDATE IF A VALID ID IS COMING!
return item.id == xssFilters.inHTMLData(id);
})
file = (file.length > 0)?file[0]:null;
return file;
};
@ -45,18 +42,18 @@ module.exports = function(UserStory) {
total: 0
}
userStory.tasks.forEach(function (taskName, index, array) {
userStory.tasks.forEach(function (taskName) {
var task = userStory.tasks_status[taskName];
task.projects.forEach(function (projectName, index, array) {
var blueprints = task.projects_status[projectName].blueprints;
task.projects.forEach(function (projectName) {
//VALIDATE projectName EXISTS
var blueprints = task.projects_status[xssFilters.inHTMLData(projectName)].blueprints;
var blueprintNames = Object.keys(blueprints);
blueprintNames.forEach(function (blueprintName, index, array) {
if (blueprints[blueprintName] == 'completed')
blueprintNames.forEach(function (blueprintName) {
// VALIDATE PROPERLY if this statement is not true
if (blueprints[xssFilters.inHTMLData(blueprintName)] == 'completed')
blueprintsResume.completed = blueprintsResume.completed + 1;
blueprintsResume.total = blueprintsResume.total + 1;
@ -77,7 +74,7 @@ module.exports = function(UserStory) {
var Patch = app.models.Patch;
var lastUpdate = '';
Patch.latestUpdate(userStory.source, function (err, response, next) {
Patch.latestUpdate(userStory.source, function (err, response) {
response = JSON.parse(response.substring(5));
if(response.length > 0){
@ -95,99 +92,7 @@ module.exports = function(UserStory) {
}
// Parse data from userStory
var parseUserStory = function(userStory, callback){
async.waterfall([function(cb){
getLastUpdated(userStory, cb)
},function(lastUpdated, cb){
userStory.updatedOn = lastUpdated;
userStory.showDetailedUri = SPEC_URL + userStory.source + '.html';
userStory.createdOn = userStory.date;
userStory.completed = getbluePrintResume(userStory);
cb(null, userStory);
},function(userStory, cb){
var tasksName = userStory.tasks;
var tasks = userStory.tasks_status;
parseTasks(userStory, tasksName, tasks, cb)
}],function(err,userStory){
callback(null, userStory);
})
}
//??
var parseTasks = function(userStory, tasksNames, tasks, callback) { //get tasks
var tmpTasks = {};
async.each(tasksNames, function(taskName, callbackInner) {
parseTask(tasks[taskName], function(err, parsedTask){
tmpTasks[taskName] = parsedTask;
var tmpProjects = {};
async.each(tmpTasks[taskName].projects, function(projectName, callbackInner2) {
parseProject(tmpTasks[taskName].projects_status[projectName], function(err, parsedProject){
tmpProjects[projectName] = parsedProject;
//Bluprints
var blueprintNames = Object.keys(tmpProjects[projectName].blueprints);
async.map(blueprintNames, function(blueprintName, callbackInner3) {
parseBlueprint(tmpProjects[projectName].blueprints[blueprintName], blueprintName, projectName, function(err, parsedBlueprint){
// tmpProjects[projectName].blueprints[blueprintName] = parsedBlueprint
callbackInner3(null, parsedBlueprint)
})
}, function(err, blueprints) {
tmpProjects[projectName].blueprints = blueprints;
var project = {};
project[projectName] = tmpProjects[projectName];
callbackInner2(null)
});
//fin blueprints
})
}, function(err) {
tmpTasks[taskName].projects_status = tmpProjects;
callbackInner(null)
});
})
}, function(err) {
userStory.tasks = tasksNames;
userStory.tasks_status = tmpTasks;
//userStory.percentageComplete = getPercentage(blueprintsResume)
callback(null, userStory);
});
}
//?
//getting task description
var getTaskDescription = function(task, callback){
var Rst = app.models.Rst;
@ -199,8 +104,9 @@ module.exports = function(UserStory) {
var $ = cheerio.load(html_content);
var index = null;
var description;
//Find the title
var description = $('h1').each(function(i, elem) {
$('h1').each(function(i, elem) {
if(elem.children[0].data == 'Problem description'){
index = i;
}
@ -218,13 +124,14 @@ module.exports = function(UserStory) {
})
}
//?
var getUriTask = function(spec){
var base = 'https://github.com/openstack/openstack-specs/blob/master/specs/';
return base + spec + '.rst';
}
//?
//parsing task
var parseTask = function(originalTask, callback){
getTaskDescription(originalTask, function(err, description){
@ -234,8 +141,8 @@ module.exports = function(UserStory) {
})
}
//?
//parsing project
var parseProject = function(originalProject, callback){
var urlArray = originalProject.spec.split('/');
@ -245,7 +152,7 @@ module.exports = function(UserStory) {
callback(null, originalProject)
}
//?
//parsing blueprints
var parseBlueprint = function(originalBlueprint, blueprintName, projectName, callback){
var Blueprint = app.models.Blueprint;
var Patch = app.models.Patch;
@ -287,8 +194,93 @@ module.exports = function(UserStory) {
}
//parsing tasks
var parseTasks = function(userStory, tasksNames, tasks, callback) { //get tasks
var tmpTasks = {};
async.each(tasksNames, function(taskName, callbackInner) {
parseTask(tasks[taskName], function(err, parsedTask){
tmpTasks[taskName] = parsedTask;
var tmpProjects = {};
async.each(tmpTasks[taskName].projects, function(projectName, callbackInner2) {
parseProject(tmpTasks[taskName].projects_status[projectName], function(err, parsedProject){
tmpProjects[projectName] = parsedProject;
//Bluprints
var blueprintNames = Object.keys(tmpProjects[projectName].blueprints);
async.map(blueprintNames, function(blueprintName, callbackInner3) {
parseBlueprint(tmpProjects[projectName].blueprints[blueprintName], blueprintName, projectName, function(err, parsedBlueprint){
// tmpProjects[projectName].blueprints[blueprintName] = parsedBlueprint
callbackInner3(null, parsedBlueprint)
})
}, function(err, blueprints) {
tmpProjects[projectName].blueprints = blueprints;
var project = {};
project[projectName] = tmpProjects[projectName];
callbackInner2(null)
});
//fin blueprints
})
}, function() {
tmpTasks[taskName].projects_status = tmpProjects;
callbackInner(null)
});
})
}, function() {
userStory.tasks = tasksNames;
userStory.tasks_status = tmpTasks;
//userStory.percentageComplete = getPercentage(blueprintsResume)
callback(null, userStory);
});
}
// Parse data from userStory
var parseUserStory = function(userStory, callback){
async.waterfall([function(cb){
getLastUpdated(userStory, cb)
},function(lastUpdated, cb){
userStory.updatedOn = lastUpdated;
userStory.showDetailedUri = SPEC_URL + userStory.source + '.html';
userStory.createdOn = userStory.date;
userStory.completed = getbluePrintResume(userStory);
cb(null, userStory);
},function(userStory, cb){
var tasksName = userStory.tasks;
var tasks = userStory.tasks_status;
parseTasks(userStory, tasksName, tasks, cb)
}],function(err,userStory){
callback(null, userStory);
})
}
//?
UserStory.on('attached',function(){
UserStory.findById = function(id, params, cb){
@ -316,10 +308,10 @@ module.exports = function(UserStory) {
var itemResult = {
completed: getbluePrintResume(userStory),
dateCreated: userStory.date,
lastUpdate: lastUpdated,
userStory: userStory.description,
id:userStory.id
dateCreated: xssFilters.inHTMLData(userStory.date),
lastUpdate: xssFilters.inHTMLData(lastUpdated),
userStory: xssFilters.inHTMLData(userStory.description),
id:xssFilters.inHTMLData(userStory.id)
};
cb(null, itemResult);

View File

@ -22,7 +22,8 @@
"loopback-datasource-juggler": "^2.39.0",
"markdown": "^0.5.0",
"serve-favicon": "^2.0.1",
"underscore": "^1.8.3"
"underscore": "^1.8.3",
"xss-filters": "^1.2.7"
},
"devDependencies": {
"jshint": "^2.5.6",

View File

@ -53,17 +53,25 @@
description;
}
$scope.userStory.updatedOn = moment($scope.userStory.
updatedOn).format("MM-DD-YYYY");
$scope.userStory.createdOn = moment($scope.userStory.
createdOn, "DD-MM-YYYY").format("MM-DD-YYYY");
if($scope.userStory.updatedOn !=='') {
$scope.userStory.updatedOn = moment($scope.userStory.
updatedOn, "YYYY-MM-DD").format("MM-DD-YYYY");
} else {
$scope.userStory.updatedOn = $scope.userStory.createdOn;
}
for(var key in $scope.userStory.tasks_status) {
$scope.actualProject[key] = $scope.userStory.
tasks_status[key].projects[0]
}
}, function onError(error){
}, function onError(){
$location.path('/projectDetail/notFound/' + $scope.taskId);
}
);
};
}
$scope.selectProject = function(keyProject, idTask){
$scope.actualProject[idTask] = keyProject

View File

@ -10,7 +10,7 @@ describe('Component: ProjectDetailComponent', function () {
// Initialize the controller and a mock scope
beforeEach(inject(function ($componentController, $rootScope) {
scope = $rootScope.$new();
ProjectDetailComponent = $componentController('ProjectDetailComponent', {
$componentController('ProjectDetailComponent', {
$scope: scope
});
}));

View File

@ -1,41 +1,41 @@
'use strict';
angular.module('dashboardProjectApp').controller('projectListCtrl', function(
angular.module('dashboardProjectApp').controller('projectListCtrl', function (
$scope,
UserStory
){
) {
var data = [];
var lastUpdate;
function getFiles() {
UserStory.find(
function success(userStories, fillTable) {
new Promise(function(resolve, reject) {
var stringDate, realDate;
function success(userStories) {
new Promise(function(resolve) {
userStories.forEach(function each (story) {
console.log('userStories', story);
if(story.lastUpdate !== '') {
lastUpdate = moment(story.lastUpdate, "YYYY-MM-DD").format("MM-DD-YYYY");
lastUpdate = moment(story.lastUpdate,
"YYYY-MM-DD").format("MM-DD-YYYY");
} else {
lastUpdate = moment(story.dateCreated, "DD-MM-YYYY").format("MM-DD-YYYY");
lastUpdate = moment(story.dateCreated,
"DD-MM-YYYY").format("MM-DD-YYYY");
}
data.push(
{
userStory: story.id+'-'+story.userStory,
dateCreated: moment(story.dateCreated, "DD-MM-YYYY").format("MM-DD-YYYY"),
dateCreated: moment(story.dateCreated,
"DD-MM-YYYY").format("MM-DD-YYYY"),
lastUpdate: lastUpdate,
progressPercentage: story.completed.percentage,
progressLabel: story.completed.completed + ' / ' + story.completed.total
progressLabel: story.completed.completed + ' / '
+ story.completed.total
}
)
console.log('data', data);
resolve(data);
});
})
.then(function(result) {
.then(function() {
$(function () {
$('#table').bootstrapTable({
data: data
@ -43,6 +43,6 @@ angular.module('dashboardProjectApp').controller('projectListCtrl', function(
});
});
});
};
}
getFiles();
});

View File

@ -10,7 +10,7 @@ describe('Component: ProjectListComponent', function () {
// Initialize the controller and a mock scope
beforeEach(inject(function ($componentController, $rootScope) {
scope = $rootScope.$new();
ProjectListComponent = $componentController('ProjectListComponent', {
$componentController('ProjectListComponent', {
$scope: scope
});
}));