Skip to content

Commit bef4e47

Browse files
Fatme HavaluovaFatme Havaluova
authored andcommitted
Extract projectData as separate class
1 parent e39b49c commit bef4e47

File tree

4 files changed

+73
-61
lines changed

4 files changed

+73
-61
lines changed

lib/bootstrap.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ require("./common/bootstrap");
22

33
$injector.require("nativescript-cli", "./nativescript-cli");
44

5+
$injector.require("projectData", "./services/project-service");
56
$injector.require("projectService", "./services/project-service");
67
$injector.require("androidProjectService", "./services/project-service");
78
$injector.require("iOSProjectService", "./services/project-service");

lib/definitions/project.d.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@ interface IProjectService {
44
prepareProject(normalizedPlatformName: string, platforms: string[]): IFuture<void>;
55
buildProject(platform: string): IFuture<void>;
66
ensureProject(): void;
7-
projectData: IProjectData;
87
}
98

109
interface IPlatformProjectService {
11-
createProject(projectData: IProjectData): IFuture<void>;
12-
buildProject(projectData: IProjectData): IFuture<void>;
10+
createProject(): IFuture<void>;
11+
buildProject(): IFuture<void>;
1312
}
1413

1514
interface IProjectData {

lib/services/platform-service.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ export class PlatformService implements IPlatformService {
1616
private platformNames = [];
1717

1818
constructor(private $errors: IErrors,
19-
private $fs: IFileSystem,
20-
private $projectService: IProjectService) {
19+
private $fs: IFileSystem,
20+
private $projectService: IProjectService,
21+
private $projectData: IProjectData) {
2122
this.platformNames = Object.keys(this.platformCapabilities);
2223
}
2324

@@ -33,7 +34,7 @@ export class PlatformService implements IPlatformService {
3334

3435
this.$projectService.ensureProject();
3536

36-
var platformsDir = this.$projectService.projectData.platformsDir;
37+
var platformsDir = this.$projectData.platformsDir;
3738
this.$fs.ensureDirectoryExists(platformsDir).wait();
3839

3940
_.each(platforms, platform => {
@@ -49,7 +50,7 @@ export class PlatformService implements IPlatformService {
4950

5051
this.validatePlatform(platform);
5152

52-
var platformPath = path.join(this.$projectService.projectData.platformsDir, platform);
53+
var platformPath = path.join(this.$projectData.platformsDir, platform);
5354

5455
// TODO: Check for version compatability if the platform is in format platform@version. This should be done in PR for semanting versioning
5556

@@ -65,11 +66,11 @@ export class PlatformService implements IPlatformService {
6566

6667
public getInstalledPlatforms(): IFuture<string[]> {
6768
return(() => {
68-
if(!this.$fs.exists(this.$projectService.projectData.platformsDir).wait()) {
69+
if(!this.$fs.exists(this.$projectData.platformsDir).wait()) {
6970
return [];
7071
}
7172

72-
var subDirs = this.$fs.readDirectory(this.$projectService.projectData.platformsDir).wait();
73+
var subDirs = this.$fs.readDirectory(this.$projectData.platformsDir).wait();
7374
return _.filter(subDirs, p => { return this.platformNames.indexOf(p) > -1; });
7475
}).future<string[]>()();
7576
}

lib/services/project-service.ts

Lines changed: 63 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -7,49 +7,57 @@ import osenv = require("osenv");
77
import util = require("util");
88
import helpers = require("./../common/helpers");
99

10-
export class ProjectService implements IProjectService {
11-
private static DEFAULT_PROJECT_ID = "com.telerik.tns.HelloWorld";
12-
private static DEFAULT_PROJECT_NAME = "HelloNativescript";
13-
public static APP_FOLDER_NAME = "app";
14-
private static APP_RESOURCES_FOLDER_NAME = "App_Resources";
15-
public static PROJECT_FRAMEWORK_DIR = "framework";
16-
17-
public projectData: IProjectData = null;
10+
class ProjectData implements IProjectData {
11+
public projectDir: string;
12+
public platformsDir: string;
13+
public projectFilePath: string;
14+
public projectId: string;
15+
public projectName: string;
1816

19-
constructor(private $logger: ILogger,
20-
private $errors: IErrors,
21-
private $fs: IFileSystem,
22-
private $projectTemplatesService: IProjectTemplatesService,
23-
private $androidProjectService: IPlatformProjectService,
24-
private $iOSProjectService: IPlatformProjectService,
17+
constructor(private $fs: IFileSystem,
2518
private $projectHelper: IProjectHelper,
2619
private $config) {
27-
this.projectData = this.getProjectData().wait();
20+
this.initializeProjectData().wait();
2821
}
2922

30-
private getProjectData(): IFuture<IProjectData> {
23+
private initializeProjectData(): IFuture<void> {
3124
return(() => {
32-
var projectData: IProjectData = null;
3325
var projectDir = this.$projectHelper.projectDir;
3426

3527
if(projectDir) {
36-
projectData = {
37-
projectDir: projectDir,
38-
platformsDir: path.join(projectDir, "platforms"),
39-
projectFilePath: path.join(projectDir, this.$config.PROJECT_FILE_NAME)
40-
};
28+
this.projectDir = projectDir;
29+
this.platformsDir = path.join(projectDir, "platforms");
30+
this.projectFilePath = path.join(projectDir, this.$config.PROJECT_FILE_NAME);
31+
4132
var projectFilePath = path.join(projectDir, this.$config.PROJECT_FILE_NAME);
4233

4334
if (this.$fs.exists(projectFilePath).wait()) {
4435
var fileContent = this.$fs.readJson(projectFilePath).wait();
45-
projectData.projectId = fileContent.id;
46-
projectData.projectName = path.basename(projectDir);
36+
this.projectId = fileContent.id;
37+
this.projectName = path.basename(projectDir);
4738
}
4839
}
4940

50-
return projectData;
51-
}).future<IProjectData>()();
41+
}).future<void>()();
5242
}
43+
}
44+
$injector.register("projectData", ProjectData);
45+
46+
export class ProjectService implements IProjectService {
47+
private static DEFAULT_PROJECT_ID = "com.telerik.tns.HelloWorld";
48+
private static DEFAULT_PROJECT_NAME = "HelloNativescript";
49+
public static APP_FOLDER_NAME = "app";
50+
private static APP_RESOURCES_FOLDER_NAME = "App_Resources";
51+
public static PROJECT_FRAMEWORK_DIR = "framework";
52+
53+
constructor(private $logger: ILogger,
54+
private $errors: IErrors,
55+
private $fs: IFileSystem,
56+
private $projectTemplatesService: IProjectTemplatesService,
57+
private $androidProjectService: IPlatformProjectService,
58+
private $iOSProjectService: IPlatformProjectService,
59+
private $projectData: IProjectData,
60+
private $config) { }
5361

5462
public createProject(projectName: string, projectId: string): IFuture<void> {
5563
return(() => {
@@ -134,12 +142,12 @@ export class ProjectService implements IProjectService {
134142
public prepareProject(normalizedPlatformName: string, platforms: string[]): IFuture<void> {
135143
return (() => {
136144
var platform = normalizedPlatformName.toLowerCase();
137-
var assetsDirectoryPath = path.join(this.projectData.platformsDir, platform, "assets");
145+
var assetsDirectoryPath = path.join(this.$projectData.platformsDir, platform, "assets");
138146
var appResourcesDirectoryPath = path.join(assetsDirectoryPath, ProjectService.APP_FOLDER_NAME, ProjectService.APP_RESOURCES_FOLDER_NAME);
139-
shell.cp("-r", path.join(this.projectData.projectDir, ProjectService.APP_FOLDER_NAME), assetsDirectoryPath);
147+
shell.cp("-r", path.join(this.$projectData.projectDir, ProjectService.APP_FOLDER_NAME), assetsDirectoryPath);
140148

141149
if(this.$fs.exists(appResourcesDirectoryPath).wait()) {
142-
shell.cp("-r", path.join(appResourcesDirectoryPath, normalizedPlatformName, "*"), path.join(this.projectData.platformsDir, platform, "res"));
150+
shell.cp("-r", path.join(appResourcesDirectoryPath, normalizedPlatformName, "*"), path.join(this.$projectData.platformsDir, platform, "res"));
143151
this.$fs.deleteDirectory(appResourcesDirectoryPath).wait();
144152
}
145153

@@ -189,18 +197,18 @@ export class ProjectService implements IProjectService {
189197
break;
190198
}
191199

192-
this.executeFunctionByName(functionName, platformProjectService, [this.projectData]).wait();
200+
this.executeFunctionByName(functionName, platformProjectService).wait();
193201
}).future<void>()();
194202
}
195203

196-
private executeFunctionByName(functionName, context , args: any[] ): IFuture<any> {
204+
private executeFunctionByName(functionName, context): IFuture<any> {
197205
return (() => {
198206
var namespaces = functionName.split(".");
199207
var func = namespaces.pop();
200208
for (var i = 0; i < namespaces.length; i++) {
201209
context = context[namespaces[i]];
202210
}
203-
return context[func].apply(context, args).wait();
211+
return context[func].apply(context).wait();
204212
}).future<any>()();
205213
}
206214

@@ -220,7 +228,7 @@ export class ProjectService implements IProjectService {
220228
}
221229

222230
public ensureProject() {
223-
if (this.projectData.projectDir === "" || !this.$fs.exists(this.projectData.projectFilePath).wait()) {
231+
if (this.$projectData.projectDir === "" || !this.$fs.exists(this.$projectData.projectFilePath).wait()) {
224232
this.$errors.fail("No project found at or above '%s' and neither was a --path specified.", process.cwd());
225233
}
226234
}
@@ -235,28 +243,29 @@ class AndroidProjectService implements IPlatformProjectService {
235243
private $logger: ILogger,
236244
private $childProcess: IChildProcess,
237245
private $projectTemplatesService: IProjectTemplatesService,
246+
private $projectData: IProjectData,
238247
private $propertiesParser: IPropertiesParser) { }
239248

240-
public createProject(projectData: IProjectData): IFuture<void> {
249+
public createProject(): IFuture<void> {
241250
return (() => {
242-
this.frameworkDir = this.getFrameworkDir(projectData).wait();
243-
244-
var packageName = projectData.projectId;
245-
var packageAsPath = packageName.replace(/\./g, path.sep);
246-
var projectDir = path.join(projectData.projectDir, "platforms", "android");
251+
var packageName = this.$projectData.projectId;
247252

248253
this.validatePackageName(packageName);
249-
this.validateProjectName(projectData.projectName);
254+
this.validateProjectName(this.$projectData.projectName);
250255

256+
var packageAsPath = packageName.replace(/\./g, path.sep);
257+
var projectDir = path.join(this.$projectData.projectDir, "platforms", "android");
258+
259+
this.frameworkDir = this.getFrameworkDir(this.$projectData).wait();
251260
this.checkRequirements().wait();
252261

253262
var targetApi = this.getTarget().wait();
254263

255264
// Log the values for project
256265
this.$logger.trace("Creating NativeScript project for the Android platform");
257266
this.$logger.trace("Path: %s", projectDir);
258-
this.$logger.trace("Package: %s", projectData.projectId);
259-
this.$logger.trace("Name: %s", projectData.projectName);
267+
this.$logger.trace("Package: %s", this.$projectData.projectId);
268+
this.$logger.trace("Name: %s", this.$projectData.projectName);
260269
this.$logger.trace("Android target: %s", targetApi);
261270

262271
this.$logger.out("Copying template files...");
@@ -273,13 +282,13 @@ class AndroidProjectService implements IPlatformProjectService {
273282
var activityDir = path.join(projectDir, 'src', packageAsPath);
274283
this.$fs.createDirectory(activityDir).wait();
275284

276-
this.$fs.deleteDirectory(path.join(projectData.platformsDir, "android", "node_modules")).wait();
285+
this.$fs.deleteDirectory(path.join(this.$projectData.platformsDir, "android", "node_modules")).wait();
277286

278287
// Interpolate the activity name and package
279288
var stringsFilePath = path.join(projectDir, 'res', 'values', 'strings.xml');
280-
shell.sed('-i', /__NAME__/, projectData.projectName, stringsFilePath);
281-
shell.sed('-i', /__TITLE_ACTIVITY__/, projectData.projectName, stringsFilePath);
282-
shell.sed('-i', /__NAME__/, projectData.projectName, path.join(projectDir, '.project'));
289+
shell.sed('-i', /__NAME__/, this.$projectData.projectName, stringsFilePath);
290+
shell.sed('-i', /__TITLE_ACTIVITY__/, this.$projectData.projectName, stringsFilePath);
291+
shell.sed('-i', /__NAME__/, this.$projectData.projectName, path.join(projectDir, '.project'));
283292
shell.sed('-i', /__PACKAGE__/, packageName, path.join(projectDir, "AndroidManifest.xml"));
284293

285294
this.runAndroidUpdate(projectDir, targetApi).wait();
@@ -289,9 +298,9 @@ class AndroidProjectService implements IPlatformProjectService {
289298
}).future<any>()();
290299
}
291300

292-
public buildProject(projectData: IProjectData): IFuture<void> {
301+
public buildProject(): IFuture<void> {
293302
return (() => {
294-
var projectRoot = path.join(projectData.platformsDir, "android");
303+
var projectRoot = path.join(this.$projectData.platformsDir, "android");
295304
var buildConfiguration = options.release || "--debug";
296305
var args = this.getAntArgs(buildConfiguration, projectRoot);
297306

@@ -427,17 +436,19 @@ class AndroidProjectService implements IPlatformProjectService {
427436
}
428437
$injector.register("androidProjectService", AndroidProjectService);
429438

430-
class iOSProjectService implements IPlatformProjectService {
431-
public createProject(projectData: IProjectData): IFuture<void> {
439+
class IOSProjectService implements IPlatformProjectService {
440+
441+
public createProject(): IFuture<void> {
432442
return (() => {
433443

434444
}).future<any>()();
435445
}
436446

437-
public buildProject(projectData: IProjectData): IFuture<void> {
447+
public buildProject(): IFuture<void> {
438448
return (() => {
439449

440450
}).future<void>()();
441451
}
452+
442453
}
443-
$injector.register("iOSProjectService", iOSProjectService);
454+
$injector.register("iOSProjectService", IOSProjectService);

0 commit comments

Comments
 (0)