Improve Project model

This commit is contained in:
brunosimon
2016-06-03 00:59:45 +02:00
parent 0c2955c01b
commit 6e4bc28c90
5 changed files with 191 additions and 98 deletions
+154 -64
View File
@@ -7,8 +7,9 @@ let path = require( 'path' ),
class Project
{
constructor()
constructor( name )
{
this.name = name
this.folders = {
root:
{
@@ -19,7 +20,83 @@ class Project
}
}
create_file( _path, _content )
{
// Set up
let normalize_path = path.normalize( _path ),
parsed_path = path.parse( normalize_path )
// Retrieve file
let file = this.get_file( normalize_path )
// File already exist
if( file )
return false
// Retrieve folder (force creation)
let folder = this.get_folder( parsed_path.dir, true )
// Create
file = new File( parsed_path.base )
folder.files[ file.name ] = file
// Has content
if( _content )
file.create_version( _content )
return file
}
get_file( _path, _force_creation )
{
// Params
if( typeof _force_creation === 'undefined' )
_force_creation = false
// Set up
let normalize_path = path.normalize( _path ),
parsed_path = path.parse( normalize_path )
// Retrieve folder
let folder = this.get_folder( parsed_path.dir, _force_creation )
// Folder not found
if( !folder )
return false
// Retrieve file
let file = folder.files[ parsed_path.base ]
// File found
if( file )
return file
// Force creation
if( _force_creation )
{
// Create folders
file = this.create_file( normalize_path )
return file
}
// Not found
return false
}
update_file( _path, _content )
{
// Set up
let normalize_path = path.normalize( _path )
// Retrieve file
let file = this.get_file( normalize_path, true )
// Create version
file.create_version( _content )
}
delete_file( _path )
{
// Set up
let normalize_path = path.normalize( _path ),
@@ -28,48 +105,26 @@ class Project
// Retrieve folder
let folder = this.get_folder( parsed_path.dir )
// Folder doesn't exist
if( !folder )
// Folder found
if( folder )
{
// Create folders
folder = this.create_folder( parsed_path.dir )
let file = folder.files[ parsed_path.base ]
// File found
if( file )
{
file.destructor()
delete folder.files[ parsed_path.base ]
}
}
// Retrieve file
let file = folder.files[ parsed_path.base ]
// File doesn't exist
if( !file )
{
file = new File( parsed_path.base )
folder.files[ file.name ] = file
}
file.create_version( _content )
}
get_folder( _path )
{
let path_parts = _path.split( path.sep ),
folder = this.folders.root
for( let _path_part of path_parts )
{
folder = folder.folders[ _path_part ]
// Folder not found
if(typeof folder === 'undefined')
return false
}
return folder
}
create_folder( _path )
{
// Set up
let path_parts = _path.split( path.sep ),
folder = this.folders.root
let normalize_path = path.normalize( _path ),
path_parts = normalize_path.split( path.sep ),
folder = this.folders.root
for( let _path_part of path_parts )
{
@@ -90,46 +145,81 @@ class Project
folder = __folder
}
return folder;
return folder
}
// clean_folders()
// {
// // Empty all
// this.folders.all = {}
get_folder( _path, _force_creation )
{
// Params
if( typeof _force_creation === 'undefined' )
_force_creation = false
// let clean_folder = function( folder )
// {
// for( let _folder_name in folder.folders )
// {
// clean_folder( folder.folders[ _folder_name ] )
// }
// }
let normalize_path = path.normalize( _path ),
path_parts = normalize_path.split( path.sep ),
folder = this.folders.root,
found = true
// clean_folder( this.folders.root )
// }
for( let _path_part of path_parts )
{
folder = folder.folders[ _path_part ]
delete_file( _path )
// Folder not found
if(typeof folder === 'undefined')
{
found = false
break
}
}
// Folder found
if( found )
return folder
// Force creation
if( _force_creation )
{
// Create folders
folder = this.create_folder( normalize_path )
return folder
}
// Not found
return false
}
delete_folder( _path )
{
// Set up
let normalize_path = path.normalize( _path ),
parsed_path = path.parse( normalize_path )
path_parts = _path.split( path.sep ),
folder = this.get_folder( normalize_path )
// Retrieve folder
let folder = this.get_folder( parsed_path.dir )
// Folder not found
if( !folder )
return false
// Folder found
if( folder )
{
let file = folder.files[ parsed_path.base ]
// File found
if( file )
// Recursive callback
let delete_folder = function( folder )
{
delete folder.files[ parsed_path.base ]
for( let _folder_name in folder.folders )
{
delete_folder( folder.folders[ _folder_name ] )
}
for( let _file_name in folder.files )
{
let file = folder.files[ _file_name ]
file.destructor()
delete folder.files[ _file_name ]
}
}
}
delete_folder( folder )
return true
}
}
module.exports = Project
module.exports = Project