Skip to content

Commit

Permalink
Implement install command #587
Browse files Browse the repository at this point in the history
  • Loading branch information
Fatme Havaluova authored and Fatme Havaluova committed Jun 24, 2015
1 parent 3061fcd commit 28ddc2f
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 1 deletion.
Empty file modified bin/nativescript.js
100644 → 100755
Empty file.
3 changes: 2 additions & 1 deletion lib/bootstrap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -58,4 +58,5 @@ $injector.require("broccoliPluginWrapper", "./tools/broccoli/broccoli-plugin-wra

$injector.require("pluginsService", "./services/plugins-service");
$injector.requireCommand("plugin|add", "./commands/plugin/add-plugin");
$injector.requireCommand("plugin|remove", "./commands/plugin/remove-plugin");
$injector.requireCommand("plugin|remove", "./commands/plugin/remove-plugin");
$injector.requireCommand("install", "./commands/install");
84 changes: 84 additions & 0 deletions lib/commands/install.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
///<reference path="../.d.ts"/>
"use strict";

import path = require("path");

export class InstallCommand implements ICommand {
private _projectData: any;

constructor(private $fs: IFileSystem,
private $errors: IErrors,
private $logger: ILogger,
private $options: IOptions,
private $injector: IInjector,
private $staticConfig: IStaticConfig) { }

public enableHooks = false;

public allowedParameters: ICommandParameter[] = [];

public execute(args: string[]): IFuture<void> {
return (() => {
let projectFilePath = this.getProjectFilePath(args[0]);
let projectData = this.getProjectData(projectFilePath).wait();
let projectName = projectData.id.split(".")[2];

this.$injector.resolve("projectService").createProject(projectName).wait();

this.$options.path = path.join(this.$options.path || path.resolve("."), projectName);

this.$logger.info("Adding platforms...");

let $platformsData = this.$injector.resolve("platformsData");
let $platformService = this.$injector.resolve("platformService");
_.each($platformsData.platformsNames, platform => {
let platformData = $platformsData.getPlatformData(platform);
let frameworkPackageData = projectData[platformData.frameworkPackageName];
if(frameworkPackageData && frameworkPackageData.version) {
$platformService.addPlatforms([`${platform}@${frameworkPackageData.version}`]).wait();
}
});

}).future<void>()();
}

public canExecute(args: string[]): IFuture<boolean> {
return (() => {
let projectFilePath = this.getProjectFilePath(args[0]);
let errorMessage = args[0] ? "The provided path doesn't contain package.json." :
"The current directory doesn't contain package.json file. Execute the command in directory which contains package.json file or specify the path to package.json file.";

if(!this.$fs.exists(projectFilePath).wait()) {
this.$errors.failWithoutHelp(errorMessage);
}

let projectData = this.getProjectData(projectFilePath).wait();
if(!projectData) {
this.$errors.failWithoutHelp("Invalid project file. Verify that the specified package.json file contains a nativescript key and try again.");
}

if(!projectData.id) {
this.$errors.failWithoutHelp("Invalid project file. Verify that the specified package.json file contains an id and try again.");
}

return true;
}).future<boolean>()();
}

private getProjectFilePath(providedPath: string): string {
let resolvedPath = path.resolve(providedPath || ".");
return path.basename(resolvedPath) === "package.json" ? resolvedPath : path.join(resolvedPath, "package.json");
}

private getProjectData(projectFilePath: string): IFuture<any> {
return (() => {
if(!this._projectData) {
let fileContent = this.$fs.readJson(projectFilePath).wait();
this._projectData = fileContent[this.$staticConfig.CLIENT_NAME_KEY_IN_PROJECT_FILE];
}

return this._projectData;
}).future<any>()();
}
}
$injector.registerCommand("install", InstallCommand);

0 comments on commit 28ddc2f

Please sign in to comment.