vsvipergen 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9b4a8acaf7de1ccfd04b970cfb8fc7530e78529467b58e8f4009c9a1dd65d5b8
4
+ data.tar.gz: 0fbbfb76e39006e5b4cd02d76452bffd8a63fc62b37379f1dec025be55f0ce0d
5
+ SHA512:
6
+ metadata.gz: 9465f69809918284942ca705f088a9f581d93c9ad522c07aafd3e0ec765722ecfd008c05b8a082d28736ae0ce47cd5ccd13c939e3d50be514b3def38aaace97e
7
+ data.tar.gz: f196f298698b1b30bebefe25bf784feb18b4489f3adaf6db3509cc322e6d5849e445dda19b630ba915a33c14296cbf08d7b7f20c9d10a3b3aa923146f0fa04de
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.5.2
5
+ before_install: gem install bundler -v 1.16.2
@@ -0,0 +1,74 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, gender identity and expression, level of experience,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at lch@vendys.co.kr. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at [http://contributor-covenant.org/version/1/4][version]
72
+
73
+ [homepage]: http://contributor-covenant.org
74
+ [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in vsvipergen.gemspec
6
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,32 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ vsvipergen (0.1.0)
5
+ xcodeproj (~> 1.7.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ CFPropertyList (3.0.0)
11
+ atomos (0.1.3)
12
+ claide (1.0.2)
13
+ colored2 (3.1.2)
14
+ nanaimo (0.2.6)
15
+ rake (10.5.0)
16
+ xcodeproj (1.7.0)
17
+ CFPropertyList (>= 2.3.3, < 4.0)
18
+ atomos (~> 0.1.3)
19
+ claide (>= 1.0.2, < 2.0)
20
+ colored2 (~> 3.1)
21
+ nanaimo (~> 0.2.6)
22
+
23
+ PLATFORMS
24
+ ruby
25
+
26
+ DEPENDENCIES
27
+ bundler (~> 1.16)
28
+ rake (~> 10.0)
29
+ vsvipergen!
30
+
31
+ BUNDLED WITH
32
+ 1.16.2
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 vendys-choohyoung
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,108 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "vsvipergen"
5
+ require "vsvipergen_contracts"
6
+ require "vsvipergen_model"
7
+ require "vsvipergen_interactor"
8
+ require "vsvipergen_presenter"
9
+ require "vsvipergen_view"
10
+ require "vsvipergen_router"
11
+ require "xcodeproj"
12
+
13
+ #################################################
14
+ ############ handle user input start ############
15
+ projectName = ""
16
+ lang = ""
17
+ filePrefix = ""
18
+ modelPrefix = ""
19
+ now = Time.now.strftime("%Y/%m/%d")
20
+ year = Time.now.strftime("%Y")
21
+
22
+ while true
23
+ puts "input language [o:objc, a:android] : "
24
+ lang = gets
25
+
26
+ break if (lang.strip == "objc" || lang.strip == "o" || lang.strip == "android" || lang.strip == "a")
27
+ end
28
+
29
+ if lang.strip == "objc" || lang.strip == "o" then
30
+ puts "input project file name [ex:VLunch] :"
31
+ while true
32
+ projectName = gets
33
+
34
+ break if (projectName.strip != "")
35
+ end
36
+ end
37
+
38
+ puts "input file prefix(ex:Login) : "
39
+ filePrefix = gets
40
+
41
+ if filePrefix == "" then
42
+ filePrefix = "Default"
43
+ end
44
+
45
+ puts "input model prefix(ex:User) : "
46
+ modelPrefix = gets
47
+
48
+ if modelPrefix == "" then
49
+ modelPrefix = "Default"
50
+ end
51
+
52
+ ############# handle user input end #############
53
+ #################################################
54
+
55
+
56
+
57
+
58
+ #################################################
59
+ ############# create file generator #############
60
+ fileGenerators = []
61
+ generatedFilePaths = []
62
+
63
+ generatorFactory = Vsvipergen::ViperGeneratorFactory.new
64
+ generatorFactory.init(filePrefix, modelPrefix, now, year)
65
+
66
+ if lang.strip == "objc" || lang.strip == "o" then
67
+ fileGenerators = generatorFactory.createObjcGenerator
68
+ else
69
+ fileGenerators = generatorFactory.createAndroidGenerator
70
+ end
71
+ ############# create file generator #############
72
+ #################################################
73
+
74
+
75
+
76
+ #################################################
77
+ ################## make file ###################
78
+ for generator in fileGenerators
79
+ files = generator.makeFiles
80
+
81
+ for file in files
82
+ generatedFilePaths.push(file)
83
+ end
84
+ end
85
+ ################## make file ###################
86
+ #################################################
87
+
88
+ #################################################
89
+ ############# add file to project ##############
90
+ # Open the existing Xcode project
91
+ xcodeProjectFile = projectName.strip + ".xcodeproj".strip
92
+ project = Xcodeproj::Project.open(xcodeProjectFile.strip)
93
+ targets = project.targets
94
+ mainTarget = project.targets.first
95
+ newGroup = project.new_group(filePrefix.strip)
96
+
97
+ # Add a file to the project in the main group
98
+ for filePath in generatedFilePaths
99
+ file = newGroup.new_file(filePath.strip)
100
+
101
+ # Add the file to the main target
102
+ mainTarget.add_file_references([file])
103
+ end
104
+
105
+ # Save the project file
106
+ project.save(xcodeProjectFile)
107
+ ############# add file to project ##############
108
+ #################################################
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/exe/vsvipergen ADDED
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "vsvipergen"
4
+ require "vsvipergen_contracts"
5
+ require "vsvipergen_model"
6
+ require "vsvipergen_interactor"
7
+ require "vsvipergen_presenter"
8
+ require "vsvipergen_view"
9
+ require "vsvipergen_router"
10
+ require "xcodeproj"
11
+
12
+ #################################################
13
+ ############ handle user input start ############
14
+ projectName = ""
15
+ lang = ""
16
+ filePrefix = ""
17
+ modelPrefix = ""
18
+ now = Time.now.strftime("%Y/%m/%d")
19
+ year = Time.now.strftime("%Y")
20
+
21
+ while true
22
+ puts "input language [o:objc, a:android] : "
23
+ lang = gets
24
+
25
+ break if (lang.strip == "objc" || lang.strip == "o" || lang.strip == "android" || lang.strip == "a")
26
+ end
27
+
28
+ if lang.strip == "objc" || lang.strip == "o" then
29
+ puts "input project file name [ex:VLunch] :"
30
+ while true
31
+ projectName = gets
32
+
33
+ break if (projectName.strip != "")
34
+ end
35
+ end
36
+
37
+ puts "input file prefix(ex:Login) : "
38
+ filePrefix = gets
39
+
40
+ if filePrefix == "" then
41
+ filePrefix = "Default"
42
+ end
43
+
44
+ puts "input model prefix(ex:User) : "
45
+ modelPrefix = gets
46
+
47
+ if modelPrefix == "" then
48
+ modelPrefix = "Default"
49
+ end
50
+
51
+ ############# handle user input end #############
52
+ #################################################
53
+
54
+
55
+
56
+
57
+ #################################################
58
+ ############# create file generator #############
59
+ fileGenerators = []
60
+ generatedFilePaths = []
61
+
62
+ generatorFactory = Vsvipergen::ViperGeneratorFactory.new
63
+ generatorFactory.init(filePrefix, modelPrefix, now, year)
64
+
65
+ if lang.strip == "objc" || lang.strip == "o" then
66
+ fileGenerators = generatorFactory.createObjcGenerator
67
+ else
68
+ fileGenerators = generatorFactory.createAndroidGenerator
69
+ end
70
+ ############# create file generator #############
71
+ #################################################
72
+
73
+
74
+
75
+ #################################################
76
+ ################## make file ###################
77
+ for generator in fileGenerators
78
+ files = generator.makeFiles
79
+
80
+ for file in files
81
+ generatedFilePaths.push(file)
82
+ end
83
+ end
84
+ ################## make file ###################
85
+ #################################################
86
+
87
+ #################################################
88
+ ############# add file to project ##############
89
+ # Open the existing Xcode project
90
+ xcodeProjectFile = projectName.strip + ".xcodeproj".strip
91
+ project = Xcodeproj::Project.open(xcodeProjectFile.strip)
92
+ targets = project.targets
93
+ mainTarget = project.targets.first
94
+ newGroup = project.new_group(filePrefix.strip)
95
+
96
+ # Add a file to the project in the main group
97
+ for filePath in generatedFilePaths
98
+ file = newGroup.new_file(filePath.strip)
99
+
100
+ # Add the file to the main target
101
+ mainTarget.add_file_references([file])
102
+ end
103
+
104
+ # Save the project file
105
+ project.save(xcodeProjectFile)
106
+ ############# add file to project ##############
107
+ #################################################
@@ -0,0 +1,32 @@
1
+ //
2
+ // VS<$filePrefix$>Contracts.h
3
+ // VLunch
4
+ //
5
+ // Created by Vendys on <$now$>..
6
+ // Copyright © <$year$>년 Vendys. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import <UIKit/UIKit.h>
11
+ #import "VS<$modelPrefix$>VO.h"
12
+
13
+ // view -> presenter
14
+ @protocol I<$prefix$>PresenterForView <NSObject>
15
+ @end
16
+
17
+ // presenter -> view
18
+ @protocol I<$prefix$>ViewForPresenter <NSObject>
19
+ @end
20
+
21
+ // presenter -> Interactor
22
+ @protocol I<$prefix$>InteractorForPresenter <NSObject>
23
+ @end
24
+
25
+ // interactor -> presenter
26
+ @protocol I<$prefix$>PresenterForInteractor <NSObject>
27
+ @end
28
+
29
+ // router
30
+ @protocol I<$prefix$>Router <NSObject>
31
+ + (UIViewController *)create<$prefix$>Module;
32
+ @end
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Created by Vendys on <$now$>..
3
+ */
4
+
5
+ public class VS<$prefix$>Contracts {
6
+
7
+ //Presenter -> View
8
+ public interface I<$prefix$>ViewForPresenter {
9
+ }
10
+
11
+ //View -> Presenter
12
+ public interface I<$prefix$>PresenterForView {
13
+ }
14
+
15
+ //Interactor -> Presenter
16
+ public interface I<$prefix$>PresenterForInteractor {
17
+ }
18
+
19
+ //Presenter -> Interactor
20
+ public interface I<$prefix$>InteractorForPresenter {
21
+ }
22
+
23
+ //Presenter -> Router
24
+ public interface I<$prefix$>Router {
25
+ }
26
+ }
@@ -0,0 +1,14 @@
1
+ //
2
+ // VS<$modelPrefix$>VO.h
3
+ // VLunch
4
+ //
5
+ // Created by vendys on <$now$>..
6
+ // Copyright © <$year$>년 Vendys. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import "VS<$prefix$>Contracts.h"
11
+
12
+ @interface VS<$modelPrefix$>Interactor : NSObject<I<$prefix$>InteractorForPresenter>
13
+ @property (nonatomic, weak) id<I<$prefix$>PresenterForInteractor> presenter;
14
+ @end
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Created by Vendys on <$now$>..
3
+ */
4
+
5
+ public class VS<$prefix$>Interactor extends CommonDataManager implements VS<$prefix$>Constracts.I<$prefix$>InteractorForPresenter {
6
+
7
+ public VS<$prefix$>Constracts.I<$prefix$>PresenterForInteractor presenter;
8
+
9
+ public VS<$prefix$>Interactor(HomeActivity activity) {
10
+ super(activity);
11
+ }
12
+ }
@@ -0,0 +1,21 @@
1
+ //
2
+ // VS<$modelPrefix$>VO.h
3
+ // VLunch
4
+ //
5
+ // Created by vendys on <$now$>..
6
+ // Copyright © <$year$>년 Vendys. All rights reserved.
7
+ //
8
+
9
+ #import "VS<$prefix$>Interactor.h"
10
+
11
+ /**
12
+ class category
13
+ */
14
+ @interface VS<$prefix$>Interactor ()
15
+ @end
16
+
17
+ @implementation VS<$prefix$>Interactor
18
+ - (void)<#methodWithParam#> {
19
+ <#network request#>
20
+ }
21
+ @end
@@ -0,0 +1,13 @@
1
+ //
2
+ // VS<$modelPrefix$>VO.h
3
+ // VLunch
4
+ //
5
+ // Created by vendys on <$now$>..
6
+ // Copyright © <$year$>년 Vendys. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+
11
+ @interface VS<$modelPrefix$>VO : JSONModel
12
+ <$properties$>
13
+ @end
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Created by Vendys on <$now$>..
3
+ */
4
+
5
+ public class VS<$modelPrefix$> {
6
+ <$properties$>
7
+ }
@@ -0,0 +1,18 @@
1
+ //
2
+ // VS<$modelPrefix$>VO.h
3
+ // VLunch
4
+ //
5
+ // Created by vendys on <$now$>..
6
+ // Copyright © <$year$>년 Vendys. All rights reserved.
7
+ //
8
+
9
+ #import "VS<$modelPrefix$>VO.h"
10
+
11
+ /**
12
+ class category
13
+ */
14
+ @interface VS<$modelPrefix$>VO ()
15
+ @end
16
+
17
+ @implementation VS<$modelPrefix$>VO
18
+ @end
@@ -0,0 +1,16 @@
1
+ //
2
+ // VS<$modelPrefix$>VO.h
3
+ // VLunch
4
+ //
5
+ // Created by vendys on <$now$>..
6
+ // Copyright © <$year$>년 Vendys. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import "VS<$prefix$>Contracts.h"
11
+
12
+ @interface VS<$prefix$>Presenter : NSObject <I<$prefix$>PresenterForView, I<$prefix$>PresenterForInteractor>
13
+ @property (nonatomic, weak) id<I<$prefix$>ViewForPresenter> view;
14
+ @property (nonatomic, weak) id<I<$prefix$>InteractorForPresenter> interactor;
15
+ @property (nonatomic, weak) id<I<$prefix$>Router> router;
16
+ @end
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Created by Vendys on <$now$>..
3
+ */
4
+
5
+ public class VS<$prefix$>Presenter implements VS<$prefix$>Constracts.I<$prefix$>PresenterForView, VS<$prefix$>Constracts.I<$prefix$>PresenterForInteractor {
6
+
7
+ public VS<$prefix$>Constracts.I<$prefix$>InteractorForPresenter interactor;
8
+ public VS<$prefix$>Constracts.I<$prefix$>ViewForPresenter view;
9
+ public VS<$prefix$>Constracts.I<$prefix$>Router router;
10
+
11
+ }
@@ -0,0 +1,22 @@
1
+ //
2
+ // VS<$modelPrefix$>VO.h
3
+ // VLunch
4
+ //
5
+ // Created by vendys on <$now$>..
6
+ // Copyright © <$year$>년 Vendys. All rights reserved.
7
+ //
8
+
9
+ #import "VS<$prefix$>Presenter.h"
10
+ #import "VS<$modelPrefix$>VO.h"
11
+
12
+ /**
13
+ class category
14
+ */
15
+ @interface VS<$prefix$>Presenter ()
16
+ @end
17
+
18
+ @implementation VS<$prefix$>Presenter
19
+ - (void)<#methodWithParam#> {
20
+ <#comunicate with interactor or view or router#>
21
+ }
22
+ @end
@@ -0,0 +1,14 @@
1
+ //
2
+ // VS<$modelPrefix$>VO.h
3
+ // VLunch
4
+ //
5
+ // Created by vendys on <$now$>..
6
+ // Copyright © <$year$>년 Vendys. All rights reserved.
7
+ //
8
+
9
+ #import <Foundation/Foundation.h>
10
+ #import "VS<$prefix$>Contracts.h"
11
+
12
+ @interface VS<$prefix$>>Router : NSObject <I<$prefix>Router>
13
+
14
+ @end
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Created by Vendys on <$now$>..
3
+ */
4
+
5
+ public class VS<$prefix$>Router implements VS<$prefix$>Constracts.I<$prefix$>Router {
6
+
7
+ public static VS<$prefix$>Page create<$prefix$>Module(FlipperPage flipperPage) {
8
+ VS<$prefix$>Page view = new VS<$prefix$>Page(flipperPage.getActivity());
9
+ VS<$prefix$>Presenter presenter = new VS<$prefix$>Presenter();
10
+ VS<$prefix$>Interactor interactor = new VS<$prefix$>Interactor(flipperPage.getActivity());
11
+ VS<$prefix$>Router router = new VS<$prefix$>Router();
12
+
13
+ view.presenter = presenter;
14
+ presenter.view = view;
15
+ presenter.router = router;
16
+ presenter.interactor = interactor;
17
+ interactor.presenter = presenter;
18
+
19
+ return view;
20
+ }
21
+ }
@@ -0,0 +1,41 @@
1
+ //
2
+ // VS<$modelPrefix$>VO.h
3
+ // VLunch
4
+ //
5
+ // Created by vendys on <$now$>..
6
+ // Copyright © <$year$>년 Vendys. All rights reserved.
7
+ //
8
+
9
+ #import "VS<$prefix$>Router.h"
10
+ #import "VS<$prefix$>ViewController.h"
11
+ #import "VS<$prefix$>Interactor.h"
12
+ #import "VS<$prefix$>Presenter.h"
13
+
14
+ /**
15
+ class category
16
+ */
17
+ @interface VS<$prefix$>Router ()
18
+ @end
19
+
20
+ @implementation VS<$prefix$>Router
21
+ + (UIViewController *)create<$prefix$>Module {
22
+ // get storyboard with name
23
+ UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"VS<$prefix$>ViewController" bundle:nil];
24
+
25
+ // create specific module
26
+ VS<$prefix$>ViewController * view = [storyboard instantiateViewControllerWithIdentifier:@"VS<$prefix$>ViewController"];
27
+ VS<$prefix$>Presenter * presenter = [[VS<$prefix$>Presenter alloc] init];
28
+ VS<$prefix$>Interactor * interactor = [[VS<$prefix$>Interactor alloc] init];
29
+ VS<$prefix$>Router * router = [[VS<$prefix$>Router alloc] init];
30
+
31
+ view.presenter = presenter;
32
+ presenter.view = view;
33
+ presenter.interactor = interactor;
34
+ presenter.router = router;
35
+ interactor.presenter = presenter;
36
+
37
+ UINavigationController * navi = [[UINavigationController alloc] initWithRootViewController:view];
38
+ navi.navigationBar.hidden = YES;
39
+ return navi;
40
+ }
41
+ @end