molt 0.1.4 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +111 -78
- data/bundle/partials/_header.liquid +1 -0
- data/bundle/template_sets/{viper_table → VIPER_TableView}/DataManagers/LocalDataManager.swift.liquid +2 -3
- data/bundle/template_sets/{viper_table → VIPER_TableView}/DataManagers/RemoteDataManager.swift.liquid +4 -6
- data/bundle/template_sets/{viper_table → VIPER_TableView}/Interactor.swift.liquid +2 -3
- data/bundle/template_sets/{viper_table → VIPER_TableView}/Presenter.swift.liquid +4 -5
- data/bundle/template_sets/{viper_table → VIPER_TableView}/Protocols.swift.liquid +5 -6
- data/bundle/template_sets/{viper_table → VIPER_TableView}/View.swift.liquid +2 -3
- data/bundle/template_sets/{viper_table/WireFrame.swift.liquid → VIPER_TableView/Wireframe.swift.liquid} +8 -9
- data/bundle/template_sets/viper_detail/Presenter.swift.liquid +3 -4
- data/bundle/template_sets/viper_detail/Protocols.swift.liquid +4 -5
- data/bundle/template_sets/viper_detail/View.swift.liquid +2 -3
- data/bundle/template_sets/viper_detail/WireFrame.swift.liquid +5 -6
- data/lib/molt.rb +12 -1
- data/lib/molt/cli/create_module.rb +20 -12
- data/lib/molt/cli/main.rb +13 -2
- data/lib/molt/cli/setup.rb +1 -2
- data/lib/molt/configuration.rb +15 -3
- data/lib/molt/version.rb +1 -1
- data/sample_configs/TemplateIcon.png +0 -0
- data/sample_configs/TemplateIcon@2x.png +0 -0
- data/sample_configs/TemplateInfo.plist +57 -0
- metadata +11 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: edf7d6d814c587a5e3f82421e79d35c500225d7e
|
|
4
|
+
data.tar.gz: 44f63fccebce865328ca4419bcb4168a4b025709
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7c0e15fedccc8ef6d6f23640dd0e2fcc14c10a3d57d28bd463821c143f974cb35f83de7c63d9572a1b7c590260ec17f4f059edf00e3b5e9cad9ad7cfc0779934
|
|
7
|
+
data.tar.gz: 91dc7c49226a93a91f4fe5340e50d77f3e9fa9415ad7c42b983eaf378e2f138940bceae9b65aa46e1ff95a46f9c107123202863f1d2477200480c0e6131adb3a
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -5,40 +5,55 @@ Molt is a simple VIPER module generator for Swift apps.
|
|
|
5
5
|
|
|
6
6
|
[](https://badge.fury.io/rb/molt) [](https://travis-ci.org/MarcoCabazal/Molt) [](https://circleci.com/gh/MarcoCabazal/Molt)
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
### Table of Contents
|
|
9
|
+
1. [Installation](#installation)
|
|
10
|
+
2. [Global Configuration](#global-configuration)
|
|
11
|
+
3. [Per-Project Configuration](#per-project-configuration)
|
|
12
|
+
4. [Template Sets](#template-sets)
|
|
13
|
+
5. [Creating (generating) a module](#creation)
|
|
14
|
+
6. [Additional options/overrides when generating modules](#options)
|
|
15
|
+
7. [Exporting template sets as Xcode templates](#xcode)
|
|
16
|
+
8. [Notes about the bundled `VIPER_TableView` template set](#notes)
|
|
17
|
+
9. [TODOs](#todos)
|
|
18
|
+
10. [Contributing](#contributing)
|
|
19
|
+
11. [License](#license)
|
|
20
|
+
12. [Code of Conduct](#coc)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## Installation <a name="installation"></a>
|
|
9
24
|
|
|
10
25
|
$ gem install molt
|
|
11
26
|
|
|
12
|
-
|
|
27
|
+
## Global Configuration <a name="global-configuration"></a>
|
|
13
28
|
|
|
14
29
|
To initialize global configuration in `~/.molt`:
|
|
15
30
|
|
|
16
31
|
$ molt setup
|
|
17
|
-
create
|
|
18
|
-
create
|
|
19
|
-
create
|
|
20
|
-
create
|
|
21
|
-
create
|
|
22
|
-
create
|
|
23
|
-
create
|
|
24
|
-
create
|
|
25
|
-
create
|
|
26
|
-
create
|
|
27
|
-
create
|
|
28
|
-
create
|
|
29
|
-
create
|
|
30
|
-
create
|
|
31
|
-
create
|
|
32
|
-
create
|
|
33
|
-
create
|
|
34
|
-
create
|
|
35
|
-
create
|
|
36
|
-
create
|
|
37
|
-
create
|
|
38
|
-
create
|
|
39
|
-
create
|
|
40
|
-
create
|
|
41
|
-
create
|
|
32
|
+
create ~/.molt
|
|
33
|
+
create ~/.molt/models/Entity+CoreData.swift.liquid
|
|
34
|
+
create ~/.molt/models/Entity.swift.liquid
|
|
35
|
+
create ~/.molt/models/Model.swift.liquid
|
|
36
|
+
create ~/.molt/partials/_header.liquid
|
|
37
|
+
create ~/.molt/swift_helpers/ErrorTypes/APIError.swift
|
|
38
|
+
create ~/.molt/swift_helpers/ErrorTypes/ErrorTypes.swift
|
|
39
|
+
create ~/.molt/swift_helpers/ErrorTypes/PersistenceError.swift
|
|
40
|
+
create ~/.molt/swift_helpers/ISODateTransform.swift
|
|
41
|
+
create ~/.molt/swift_helpers/Identifiable.swift
|
|
42
|
+
create ~/.molt/swift_helpers/Loadable.swift
|
|
43
|
+
create ~/.molt/swift_helpers/Networking/APIRouter.swift
|
|
44
|
+
create ~/.molt/swift_helpers/StoryboardExtensions.swift
|
|
45
|
+
create ~/.molt/template_sets/VIPER_Detail/Presenter.swift.liquid
|
|
46
|
+
create ~/.molt/template_sets/VIPER_Detail/Protocols.swift.liquid
|
|
47
|
+
create ~/.molt/template_sets/VIPER_Detail/View.swift.liquid
|
|
48
|
+
create ~/.molt/template_sets/VIPER_Detail/Wireframe.swift.liquid
|
|
49
|
+
create ~/.molt/template_sets/VIPER_TableView/DataManagers/LocalDataManager.swift.liquid
|
|
50
|
+
create ~/.molt/template_sets/VIPER_TableView/DataManagers/RemoteDataManager.swift.liquid
|
|
51
|
+
create ~/.molt/template_sets/VIPER_TableView/Interactor.swift.liquid
|
|
52
|
+
create ~/.molt/template_sets/VIPER_TableView/Presenter.swift.liquid
|
|
53
|
+
create ~/.molt/template_sets/VIPER_TableView/Protocols.swift.liquid
|
|
54
|
+
create ~/.molt/template_sets/VIPER_TableView/View.swift.liquid
|
|
55
|
+
create ~/.molt/template_sets/VIPER_TableView/Wireframe.swift.liquid
|
|
56
|
+
create ~/.molt/config.yml
|
|
42
57
|
|
|
43
58
|
This will create the folder `~/.molt`, copy bundled template sets and helper Swift extensions onto it.
|
|
44
59
|
|
|
@@ -54,7 +69,7 @@ You should customize this with your information before you proceed with generati
|
|
|
54
69
|
project:
|
|
55
70
|
name: CapoRegime
|
|
56
71
|
|
|
57
|
-
|
|
72
|
+
## Per-Project Configuration <a name="per-project-configuration"></a>
|
|
58
73
|
|
|
59
74
|
On the other hand, to setup per-project configuration, go to your project's root folder, then:
|
|
60
75
|
|
|
@@ -72,23 +87,23 @@ On the other hand, to setup per-project configuration, go to your project's root
|
|
|
72
87
|
create .molt/swift_helpers/Loadable.swift
|
|
73
88
|
create .molt/swift_helpers/Networking/APIRouter.swift
|
|
74
89
|
create .molt/swift_helpers/StoryboardExtensions.swift
|
|
75
|
-
create .molt/template_sets/
|
|
76
|
-
create .molt/template_sets/
|
|
77
|
-
create .molt/template_sets/
|
|
78
|
-
create .molt/template_sets/
|
|
79
|
-
create .molt/template_sets/
|
|
80
|
-
create .molt/template_sets/
|
|
81
|
-
create .molt/template_sets/
|
|
82
|
-
create .molt/template_sets/
|
|
83
|
-
create .molt/template_sets/
|
|
84
|
-
create .molt/template_sets/
|
|
85
|
-
create .molt/template_sets/
|
|
90
|
+
create .molt/template_sets/VIPER_Detail/Presenter.swift.liquid
|
|
91
|
+
create .molt/template_sets/VIPER_Detail/Protocols.swift.liquid
|
|
92
|
+
create .molt/template_sets/VIPER_Detail/View.swift.liquid
|
|
93
|
+
create .molt/template_sets/VIPER_Detail/Wireframe.swift.liquid
|
|
94
|
+
create .molt/template_sets/VIPER_TableView/DataManagers/LocalDataManager.swift.liquid
|
|
95
|
+
create .molt/template_sets/VIPER_TableView/DataManagers/RemoteDataManager.swift.liquid
|
|
96
|
+
create .molt/template_sets/VIPER_TableView/Interactor.swift.liquid
|
|
97
|
+
create .molt/template_sets/VIPER_TableView/Presenter.swift.liquid
|
|
98
|
+
create .molt/template_sets/VIPER_TableView/Protocols.swift.liquid
|
|
99
|
+
create .molt/template_sets/VIPER_TableView/View.swift.liquid
|
|
100
|
+
create .molt/template_sets/VIPER_TableView/Wireframe.swift.liquid
|
|
86
101
|
create .molt/config.yml
|
|
87
102
|
|
|
88
103
|
|
|
89
|
-
|
|
104
|
+
## Template Sets <a name="template-sets"></a>
|
|
90
105
|
|
|
91
|
-
Template sets are groups of [Liquid](https://shopify.github.io/liquid/) template files which make up a VIPER module. This gem comes with two sample sets that can be used to generate a module for use with a `UITableView` (`
|
|
106
|
+
Template sets are groups of [Liquid](https://shopify.github.io/liquid/) template files which make up a VIPER module. This gem comes with two sample sets that can be used to generate a module for use with a `UITableView` (`VIPER_TableView`) and a detail screen (`VIPER_Detail`). These should serve as good starting points for your own customizations. Just duplicate the respective folders under `~/.molt/template_sets`, then customize to suit your taste.
|
|
92
107
|
|
|
93
108
|
The template system makes use of `Liquid` and supports partials which are located in `.molt/partials`.
|
|
94
109
|
|
|
@@ -96,12 +111,12 @@ To list available template sets (search order: current project directory, global
|
|
|
96
111
|
|
|
97
112
|
$ molt template_sets
|
|
98
113
|
./.molt:
|
|
99
|
-
./.molt/template_sets/
|
|
114
|
+
./.molt/template_sets/VIPER_TableView
|
|
100
115
|
./.molt/template_sets/some_project_specific_template
|
|
101
116
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
117
|
+
~/.molt:
|
|
118
|
+
~/.molt/template_sets/VIPER_TableView
|
|
119
|
+
~/.molt/template_sets/VIPER_Detail
|
|
105
120
|
|
|
106
121
|
Add --verbose to list all files in each template set
|
|
107
122
|
|
|
@@ -113,35 +128,35 @@ To list available template sets and the template files they contain:
|
|
|
113
128
|
./.molt/models/Entity+CoreData.swift.liquid
|
|
114
129
|
./.molt/models/Model.swift.liquid
|
|
115
130
|
./.molt/models/Entity.swift.liquid
|
|
116
|
-
./.molt/template_sets/
|
|
117
|
-
./.molt/template_sets/
|
|
118
|
-
./.molt/template_sets/
|
|
119
|
-
./.molt/template_sets/
|
|
120
|
-
./.molt/template_sets/
|
|
121
|
-
./.molt/template_sets/
|
|
122
|
-
./.molt/template_sets/
|
|
131
|
+
./.molt/template_sets/VIPER_TableView/Protocols.swift.liquid
|
|
132
|
+
./.molt/template_sets/VIPER_TableView/Presenter.swift.liquid
|
|
133
|
+
./.molt/template_sets/VIPER_TableView/DataManagers/RemoteDataManager.swift.liquid
|
|
134
|
+
./.molt/template_sets/VIPER_TableView/DataManagers/LocalDataManager.swift.liquid
|
|
135
|
+
./.molt/template_sets/VIPER_TableView/View.swift.liquid
|
|
136
|
+
./.molt/template_sets/VIPER_TableView/Wireframe.swift.liquid
|
|
137
|
+
./.molt/template_sets/VIPER_TableView/Interactor.swift.liquid
|
|
123
138
|
./.molt/template_sets/some_project_specific_template/Protocols.swift.liquid
|
|
124
139
|
./.molt/template_sets/some_project_specific_template/Presenter.swift.liquid
|
|
125
140
|
./.molt/template_sets/some_project_specific_template/View.swift.liquid
|
|
126
|
-
./.molt/template_sets/some_project_specific_template/
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
141
|
+
./.molt/template_sets/some_project_specific_template/Wireframe.swift.liquid
|
|
142
|
+
|
|
143
|
+
~/.molt:
|
|
144
|
+
~/.molt/models/Entity+CoreData.swift.liquid
|
|
145
|
+
~/.molt/models/Model.swift.liquid
|
|
146
|
+
~/.molt/models/Entity.swift.liquid
|
|
147
|
+
~/.molt/template_sets/VIPER_TableView/Protocols.swift.liquid
|
|
148
|
+
~/.molt/template_sets/VIPER_TableView/Presenter.swift.liquid
|
|
149
|
+
~/.molt/template_sets/VIPER_TableView/DataManagers/RemoteDataManager.swift.liquid
|
|
150
|
+
~/.molt/template_sets/VIPER_TableView/DataManagers/LocalDataManager.swift.liquid
|
|
151
|
+
~/.molt/template_sets/VIPER_TableView/View.swift.liquid
|
|
152
|
+
~/.molt/template_sets/VIPER_TableView/Wireframe.swift.liquid
|
|
153
|
+
~/.molt/template_sets/VIPER_TableView/Interactor.swift.liquid
|
|
154
|
+
~/.molt/template_sets/VIPER_Detail/Protocols.swift.liquid
|
|
155
|
+
~/.molt/template_sets/VIPER_Detail/Presenter.swift.liquid
|
|
156
|
+
~/.molt/template_sets/VIPER_Detail/View.swift.liquid
|
|
157
|
+
~/.molt/template_sets/VIPER_Detail/Wireframe.swift.liquid
|
|
158
|
+
|
|
159
|
+
## Creating (generating) a module <a name="creation"></a>
|
|
145
160
|
|
|
146
161
|
$ molt create_module Friends viper_table
|
|
147
162
|
+---------------------------------------------------------+-------------------------------------------------------+
|
|
@@ -158,7 +173,7 @@ To list available template sets and the template files they contain:
|
|
|
158
173
|
| viper_table/DataManagers/RemoteDataManager.swift.liquid | ./Friends/DataManagers/FriendsRemoteDataManager.swift |
|
|
159
174
|
| viper_table/DataManagers/LocalDataManager.swift.liquid | ./Friends/DataManagers/FriendsLocalDataManager.swift |
|
|
160
175
|
| viper_table/View.swift.liquid | ./Friends/FriendsView.swift |
|
|
161
|
-
| viper_table/
|
|
176
|
+
| viper_table/Wireframe.swift.liquid | ./Friends/FriendsWireframe.swift |
|
|
162
177
|
| viper_table/Interactor.swift.liquid | ./Friends/FriendsInteractor.swift |
|
|
163
178
|
+---------------------------------------------------------+-------------------------------------------------------+
|
|
164
179
|
|
|
@@ -166,7 +181,7 @@ To list available template sets and the template files they contain:
|
|
|
166
181
|
|
|
167
182
|
Note that generating a new module will never touch your Xcode project, but it's just a matter of dragging the resulting folder onto Xcode.
|
|
168
183
|
|
|
169
|
-
|
|
184
|
+
## Additional options/overrides when generating modules <a name="options"></a>
|
|
170
185
|
|
|
171
186
|
$ molt help create_module
|
|
172
187
|
Usage:
|
|
@@ -182,7 +197,25 @@ Note that generating a new module will never touch your Xcode project, but it's
|
|
|
182
197
|
-create-model # If specified, it creates corresponding Mappable struct (ObjectMapper) and Core Data entity; requires --model to be set
|
|
183
198
|
-do-it # Release the Kraken and write the files
|
|
184
199
|
|
|
185
|
-
|
|
200
|
+
## Exporting template sets as Xcode templates <a name="xcode"></a>
|
|
201
|
+
|
|
202
|
+
$ molt xcode viper_table
|
|
203
|
+
+---------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------+
|
|
204
|
+
| Template Set | viper_table |
|
|
205
|
+
| | |
|
|
206
|
+
| Source | Destination |
|
|
207
|
+
| viper_table/Protocols.swift.liquid | ~/Library/Developer/Xcode/Templates/File Templates/Molt/viper_table.xctemplate/___FILEBASENAME___Protocols.swift |
|
|
208
|
+
| viper_table/Presenter.swift.liquid | ~/Library/Developer/Xcode/Templates/File Templates/Molt/viper_table.xctemplate/___FILEBASENAME___Presenter.swift |
|
|
209
|
+
| viper_table/DataManagers/RemoteDataManager.swift.liquid | ~/Library/Developer/Xcode/Templates/File Templates/Molt/viper_table.xctemplate/___FILEBASENAME___RemoteDataManager.swift |
|
|
210
|
+
| viper_table/DataManagers/LocalDataManager.swift.liquid | ~/Library/Developer/Xcode/Templates/File Templates/Molt/viper_table.xctemplate/___FILEBASENAME___LocalDataManager.swift |
|
|
211
|
+
| viper_table/View.swift.liquid | ~/Library/Developer/Xcode/Templates/File Templates/Molt/viper_table.xctemplate/___FILEBASENAME___View.swift |
|
|
212
|
+
| viper_table/Wireframe.swift.liquid | ~/Library/Developer/Xcode/Templates/File Templates/Molt/viper_table.xctemplate/___FILEBASENAME___Wireframe.swift |
|
|
213
|
+
| viper_table/Interactor.swift.liquid | ~/Library/Developer/Xcode/Templates/File Templates/Molt/viper_table.xctemplate/___FILEBASENAME___Interactor.swift |
|
|
214
|
+
+---------------------------------------------------------+------------------------------------------------------------------------===-----------------------------------------------+
|
|
215
|
+
|
|
216
|
+
This command basically exports a template set and makes it available as an Xcode template, which makes your often-used template instantly available from within Xcode itself. When you do create a new file from within Xcode, you will be prompted for the module name and the model. Other meta details normally available in `create_module` won't be necessary during the export.
|
|
217
|
+
|
|
218
|
+
## Notes about the bundled `viper_table` template set <a name="notes"></a>
|
|
186
219
|
|
|
187
220
|
1. The `RemoteDataManager` makes use of `Alamofire` and `ObjectMapper`
|
|
188
221
|
2. The `LocalDataManager` makes use of `Core Data`
|
|
@@ -192,19 +225,19 @@ Note that generating a new module will never touch your Xcode project, but it's
|
|
|
192
225
|
|
|
193
226
|
To appreciate, please see the sample rendered source code for [Friends](https://github.com/MarcoCabazal/Molt/tree/development/sample_output).
|
|
194
227
|
|
|
195
|
-
### TODOs
|
|
228
|
+
### TODOs <a name="todos"></a>
|
|
196
229
|
|
|
197
230
|
1. Demo a working app done created using generators
|
|
198
231
|
1. Write more comprehensive tests
|
|
199
232
|
|
|
200
|
-
### Contributing
|
|
233
|
+
### Contributing <a name="contributing"></a>
|
|
201
234
|
|
|
202
235
|
Bug reports and pull requests are welcome on GitHub at https://github.com/MarcoCabazal/molt. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
|
|
203
236
|
|
|
204
|
-
### License
|
|
237
|
+
### License <a name="license"></a>
|
|
205
238
|
|
|
206
239
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
|
207
240
|
|
|
208
|
-
### Code of Conduct
|
|
241
|
+
### Code of Conduct <a name="coc"></a>
|
|
209
242
|
|
|
210
243
|
Everyone interacting in the Molt project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/darthmarku/molt/blob/master/CODE_OF_CONDUCT.md).
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
{% include 'header' %}
|
|
1
|
+
{% if target != "xcode" %}{% assign filename_suffix = "RemoteDataManager.swift" %}{% include 'header' %}{% else %}//___FILEHEADER___ {% endif %}
|
|
2
|
+
|
|
4
3
|
import Alamofire
|
|
5
4
|
import AlamofireObjectMapper
|
|
6
5
|
import Hydra
|
|
@@ -10,10 +9,9 @@ class {{ module_name }}RemoteDataManager: {{ module_name }}RemoteDataManagerProt
|
|
|
10
9
|
|
|
11
10
|
func retrieveDataFromAPI() -> Promise<[{{ model }}]> {
|
|
12
11
|
return Promise<[{{ model }}]>(in: .background) { resolve, reject, _ in
|
|
13
|
-
Alamofire.request(APIRouter
|
|
12
|
+
Alamofire.request(APIRouter.<# Enum Key #>)
|
|
14
13
|
.validate()
|
|
15
|
-
.responseArray(keyPath: "
|
|
16
|
-
|
|
14
|
+
.responseArray(keyPath: "<# JSON KeyPath #>") { (response: DataResponse<[{{ model }}]>) in
|
|
17
15
|
switch response.result {
|
|
18
16
|
case .success(let data):
|
|
19
17
|
resolve(data)
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
{% include 'header' %}
|
|
1
|
+
{% if target != "xcode" %}{% assign filename_suffix = "Interactor.swift" %}{% include 'header' %}{% else %}//___FILEHEADER___{% endif %}
|
|
2
|
+
|
|
4
3
|
final class {{ module_name }}Interactor {
|
|
5
4
|
weak var presenter: {{ module_name }}InteractorOutputProtocol?
|
|
6
5
|
var localDataManager: {{ module_name }}LocalDataManagerProtocol?
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
{% include 'header' %}
|
|
1
|
+
{% if target != "xcode" %}{% assign filename_suffix = "Presenter.swift" %}{% include 'header' %}{% else %}//___FILEHEADER___{% endif %}
|
|
2
|
+
|
|
4
3
|
final class {{ module_name }}Presenter {
|
|
5
4
|
|
|
6
5
|
weak var view: {{ module_name }}ViewProtocol?
|
|
7
|
-
var
|
|
6
|
+
var wireframe: {{ module_name }}WireframeProtocol?
|
|
8
7
|
var interactor: {{ module_name }}InteractorProtocol?
|
|
9
8
|
var dataSource: [{{ model }}] = []
|
|
10
9
|
}
|
|
@@ -29,7 +28,7 @@ extension {{ module_name }}Presenter: {{ module_name }}PresenterProtocol {
|
|
|
29
28
|
|
|
30
29
|
func process(object: {{ model }}) {
|
|
31
30
|
guard let view = view else { return }
|
|
32
|
-
|
|
31
|
+
wireframe?.navigate(to: object, from: view)
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
34
|
|
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
{% include 'header' %}
|
|
1
|
+
{% if target != "xcode" %}{% assign filename_suffix = "Protocols.swift" %}{% include 'header' %}{% else %}//___FILEHEADER___{% endif %}
|
|
2
|
+
|
|
4
3
|
import UIKit
|
|
5
4
|
import Hydra
|
|
6
5
|
|
|
7
6
|
// MARK: Called by VIEW -> Implemented BY PRESENTER
|
|
8
7
|
protocol {{ module_name }}PresenterProtocol: class {
|
|
9
8
|
var view: {{ module_name }}ViewProtocol? { get set }
|
|
10
|
-
var
|
|
9
|
+
var wireframe: {{ module_name }}WireframeProtocol? { get set }
|
|
11
10
|
var interactor: {{ module_name }}InteractorProtocol? { get set }
|
|
12
11
|
|
|
13
12
|
func viewDidLoad()
|
|
@@ -15,7 +14,7 @@ protocol {{ module_name }}PresenterProtocol: class {
|
|
|
15
14
|
// datasource
|
|
16
15
|
var numberOfSection: Int { get }
|
|
17
16
|
func numberOfRows(in section: Int) -> Int
|
|
18
|
-
func content(at row: Int) ->
|
|
17
|
+
func content(at row: Int) -> {{ model }}?
|
|
19
18
|
|
|
20
19
|
func process(object: {{ model }})
|
|
21
20
|
}
|
|
@@ -52,7 +51,7 @@ protocol {{ module_name }}ViewProtocol: Loadable {
|
|
|
52
51
|
}
|
|
53
52
|
|
|
54
53
|
// MARK: PRESENTER -> WIREFRAME
|
|
55
|
-
protocol {{ module_name }}
|
|
54
|
+
protocol {{ module_name }}WireframeProtocol: class {
|
|
56
55
|
static func prepareModule() -> UIViewController
|
|
57
56
|
func navigate(to object: {{ model }}, from view: {{ module_name }}ViewProtocol)
|
|
58
57
|
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
{% include 'header' %}
|
|
1
|
+
{% if target != "xcode" %}{% assign filename_suffix = "Wireframe.swift" %}{% include 'header' %}{% else %}//___FILEHEADER___{% endif %}
|
|
2
|
+
|
|
4
3
|
import UIKit
|
|
5
4
|
|
|
6
|
-
final class {{ module_name }}
|
|
5
|
+
final class {{ module_name }}Wireframe {
|
|
7
6
|
|
|
8
7
|
static func prepareModule() -> UIViewController {
|
|
9
8
|
let navController = UINavigationController.instantiate(from: .main, identifier: "mainNavigationController")
|
|
@@ -14,14 +13,14 @@ final class {{ module_name }}WireFrame {
|
|
|
14
13
|
|
|
15
14
|
let presenter: {{ module_name }}PresenterProtocol & {{ module_name }}InteractorOutputProtocol = {{ module_name }}Presenter()
|
|
16
15
|
let interactor: {{ module_name }}InteractorProtocol = {{ module_name }}Interactor()
|
|
17
|
-
let
|
|
16
|
+
let wireframe: {{ module_name }}WireframeProtocol = {{ module_name }}Wireframe()
|
|
18
17
|
let localDataManager: {{ module_name }}LocalDataManagerProtocol = {{ module_name }}LocalDataManager()
|
|
19
18
|
let remoteDataManager: {{ module_name }}RemoteDataManagerProtocol = {{ module_name }}RemoteDataManager()
|
|
20
19
|
|
|
21
20
|
// INTEGRATION
|
|
22
21
|
view.presenter = presenter
|
|
23
22
|
presenter.view = view
|
|
24
|
-
presenter.
|
|
23
|
+
presenter.wireframe = wireframe
|
|
25
24
|
presenter.interactor = interactor
|
|
26
25
|
interactor.presenter = presenter
|
|
27
26
|
interactor.localDataManager = localDataManager
|
|
@@ -32,12 +31,12 @@ final class {{ module_name }}WireFrame {
|
|
|
32
31
|
}
|
|
33
32
|
|
|
34
33
|
// MARK: NAVIGATION
|
|
35
|
-
extension {{ module_name }}
|
|
34
|
+
extension {{ module_name }}Wireframe: {{ module_name }}WireframeProtocol {
|
|
36
35
|
|
|
37
36
|
func navigate(to object: {{ model }}, from view: {{ module_name }}ViewProtocol) {
|
|
38
37
|
guard let sourceView = view as? UIViewController else { return }
|
|
39
38
|
|
|
40
|
-
let detailVC = {{ module_name }}
|
|
41
|
-
sourceView.navigationController?.pushViewController(detailVC, animated: true)
|
|
39
|
+
// let detailVC = {{ module_name }}DetailWireframe.prepareModule(with: object)
|
|
40
|
+
// sourceView.navigationController?.pushViewController(detailVC, animated: true)
|
|
42
41
|
}
|
|
43
42
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
{% include 'header' %}
|
|
1
|
+
{% if target != "xcode" %}{% assign filename_suffix = "Presenter.swift" %}{% include 'header' %}{% else %}//___FILEHEADER___{% endif %}
|
|
2
|
+
|
|
4
3
|
final class {{ module_name }}Presenter {
|
|
5
4
|
|
|
6
5
|
weak var view: {{ module_name }}ViewProtocol?
|
|
7
|
-
var
|
|
6
|
+
var wireframe: {{ module_name }}WireframeProtocol?
|
|
8
7
|
var dataSource: {{ model }}?
|
|
9
8
|
}
|
|
10
9
|
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
{% include 'header' %}
|
|
1
|
+
{% if target != "xcode" %}{% assign filename_suffix = "Protocols.swift" %}{% include 'header' %}{% else %}//___FILEHEADER___{% endif %}
|
|
2
|
+
|
|
4
3
|
import UIKit
|
|
5
4
|
|
|
6
5
|
// MARK: Called by VIEW -> Implemented BY PRESENTER
|
|
7
6
|
protocol {{ module_name }}PresenterProtocol: class {
|
|
8
7
|
weak var view: {{ module_name }}ViewProtocol? { get set }
|
|
9
|
-
weak var
|
|
8
|
+
weak var wireframe: {{ module_name }}WireframeProtocol? { get set }
|
|
10
9
|
var dataSource: {{ model }}? { get set }
|
|
11
10
|
|
|
12
11
|
func viewDidLoad()
|
|
@@ -18,6 +17,6 @@ protocol {{ module_name }}ViewProtocol: Loadable {
|
|
|
18
17
|
}
|
|
19
18
|
|
|
20
19
|
// MARK: PRESENTER -> WIREFRAME
|
|
21
|
-
protocol {{ module_name }}
|
|
20
|
+
protocol {{ module_name }}WireframeProtocol: class {
|
|
22
21
|
static func prepareModule(with object: {{ model }}) -> UIViewController
|
|
23
22
|
}
|
|
@@ -1,20 +1,19 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
{% include 'header' %}
|
|
1
|
+
{% if target != "xcode" %}{% assign filename_suffix = "Wireframe.swift" %}{% include 'header' %}{% else %}//___FILEHEADER___{% endif %}
|
|
2
|
+
|
|
4
3
|
import UIKit
|
|
5
4
|
|
|
6
|
-
final class {{ module_name }}
|
|
5
|
+
final class {{ module_name }}Wireframe: {{ module_name }}WireframeProtocol {
|
|
7
6
|
|
|
8
7
|
static func prepareModule(with object: {{ model }}) -> UIViewController {
|
|
9
8
|
let view = {{ module_name }}View.instantiate(from: .main)
|
|
10
9
|
|
|
11
10
|
let presenter: {{ module_name }}PresenterProtocol = {{ module_name }}Presenter()
|
|
12
|
-
let
|
|
11
|
+
let wireframe = {{ module_name }}Wireframe()
|
|
13
12
|
|
|
14
13
|
view.presenter = presenter
|
|
15
14
|
presenter.view = view
|
|
16
15
|
presenter.dataSource = object
|
|
17
|
-
presenter.
|
|
16
|
+
presenter.wireframe = wireframe
|
|
18
17
|
|
|
19
18
|
return view
|
|
20
19
|
}
|
data/lib/molt.rb
CHANGED
|
@@ -5,17 +5,28 @@ require "molt/cli/main"
|
|
|
5
5
|
require "generamba/string-colorize"
|
|
6
6
|
|
|
7
7
|
module Molt
|
|
8
|
+
ROOT = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
|
8
9
|
MOLT_GLOBAL = "#{Dir.home}/.molt"
|
|
9
10
|
MOLT_PROJECT = "./.molt"
|
|
10
11
|
CONFIG_GLOBAL = "#{MOLT_GLOBAL}/config.yml"
|
|
11
12
|
CONFIG_PROJECT = "#{MOLT_PROJECT}/config.yml"
|
|
12
|
-
|
|
13
|
+
LONG_DESC_CREATE_MODULE = <<-TAG
|
|
13
14
|
This generates a scaffold for a new VIPER module all contained in a folder. You will then have onto drag this folder onto Xcode.
|
|
14
15
|
|
|
15
16
|
This command runs in dry-run mode by default (without using -f). That means this will only print the project/module configuration, list of templates, and eventual output files.
|
|
16
17
|
|
|
17
18
|
When you're happy with what you see, just add --do-it or -f to exit dry-run mode.
|
|
18
19
|
|
|
20
|
+
* Note that the default template set "viper_table" uses several Swift helper extensions all of which could be found in either ~/.molt or your project's ./.molt folder. These were all copied when you ran "molt setup" or "molt setup_project". Feel free to copy them or modify the template files to suit your preference.
|
|
21
|
+
TAG
|
|
22
|
+
LONG_DESC_XCODE = <<-TAG
|
|
23
|
+
|
|
24
|
+
This command basically exports a template set and makes it available as an Xcode template, which makes your often-used template instantly available from within Xcode itself. When you do create a new file from within Xcode, you will be prompted for the module name and the model. Other meta details normally available in create_module won't be necessary during the export.
|
|
25
|
+
|
|
26
|
+
This command runs in dry-run mode by default (without using -f). That means this will only print the project/module configuration, list of templates, and eventual output files.
|
|
27
|
+
|
|
28
|
+
When you're happy with what you see, just add --do-it or -f to exit dry-run mode.
|
|
29
|
+
|
|
19
30
|
* Note that the default template set "viper_table" uses several Swift helper extensions all of which could be found in either ~/.molt or your project's ./.molt folder. These were all copied when you ran "molt setup" or "molt setup_project". Feel free to copy them or modify the template files to suit your preference.
|
|
20
31
|
TAG
|
|
21
32
|
end
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
module Molt::CLI
|
|
2
2
|
class Generator
|
|
3
3
|
|
|
4
|
-
def self.create_module(module_name, template_set, options)
|
|
5
|
-
puts "OPTIONS #{options.inspect}".blue
|
|
4
|
+
def self.create_module(module_name, template_set, options, xcode = false)
|
|
6
5
|
config = Molt::Configuration.load_or_initialize
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
if !xcode
|
|
7
|
+
config = Molt::Configuration.apply_cli_overrides config, options, module_name, template_set
|
|
8
|
+
else
|
|
9
|
+
config = Molt::Configuration.config_for_xcode config, options, module_name, template_set
|
|
10
|
+
end
|
|
11
|
+
rows = table_rows_for config, xcode
|
|
9
12
|
|
|
10
13
|
sets = ""
|
|
11
14
|
models = ""
|
|
@@ -20,14 +23,17 @@ module Molt::CLI
|
|
|
20
23
|
|
|
21
24
|
Dir["#{sets}/#{template_set}/**/*swift.liquid"].each do |template_file|
|
|
22
25
|
template_base_folder = File.dirname(template_file).gsub(/#{sets}\/#{template_set}/, "")
|
|
23
|
-
destination_folder = "#{options.output_folder}/#{module_name}#{template_base_folder}"
|
|
26
|
+
destination_folder = "#{options.output_folder}/#{module_name}#{template_base_folder}" if !xcode
|
|
27
|
+
destination_folder = File.expand_path("~/Library/Developer/Xcode/Templates/File Templates/Molt/#{template_set.gsub(/_/, " ")}.xctemplate") if xcode
|
|
24
28
|
|
|
25
29
|
base_file = File.basename(template_file.gsub(/.liquid$/, ""))
|
|
26
|
-
output_file = "#{destination_folder}/#{module_name}#{base_file}"
|
|
30
|
+
output_file = "#{destination_folder}/#{module_name}#{base_file}" if !xcode
|
|
31
|
+
output_file = "#{destination_folder}/___FILEBASENAME___#{base_file}" if xcode
|
|
27
32
|
rows << [template_file.gsub(/#{sets}\//, ""), output_file.blue]
|
|
28
33
|
|
|
29
34
|
if options.do_it
|
|
30
35
|
FileUtils.mkdir_p destination_folder
|
|
36
|
+
FileUtils.cp Dir.glob("#{Molt::ROOT}/sample_configs/Template*"), destination_folder
|
|
31
37
|
Molt::Template.liquify(template: template_file, output_file: output_file, config: config)
|
|
32
38
|
end
|
|
33
39
|
end
|
|
@@ -55,14 +61,16 @@ module Molt::CLI
|
|
|
55
61
|
end
|
|
56
62
|
|
|
57
63
|
private
|
|
58
|
-
def self.table_rows_for config
|
|
64
|
+
def self.table_rows_for config, xcode
|
|
59
65
|
rows = []
|
|
60
|
-
rows << ["Developer", config["developer"]["name"].blue]
|
|
61
|
-
rows << ["Email", config["developer"]["email"].blue]
|
|
62
|
-
rows << ["Company", config["developer"]["company"].blue]
|
|
63
|
-
rows << ["Project", config["project"]["name"].blue]
|
|
64
66
|
|
|
65
|
-
|
|
67
|
+
if !xcode
|
|
68
|
+
rows << ["Developer", config["developer"]["name"].blue]
|
|
69
|
+
rows << ["Email", config["developer"]["email"].blue]
|
|
70
|
+
rows << ["Company", config["developer"]["company"].blue]
|
|
71
|
+
rows << ["Project", config["project"]["name"].blue]
|
|
72
|
+
rows << [" ", " "]
|
|
73
|
+
end
|
|
66
74
|
rows << ["Template Set", config["template_set"].yellow]
|
|
67
75
|
rows << [" ", " "]
|
|
68
76
|
rows << ["Source".green, "Destination".green]
|
data/lib/molt/cli/main.rb
CHANGED
|
@@ -51,7 +51,7 @@ module Molt::CLI
|
|
|
51
51
|
command :create_module do |c|
|
|
52
52
|
c.syntax = 'molt create_module MODULE_NAME TEMPLATE_SET'
|
|
53
53
|
c.summary = "Generate component files for a VIPER module"
|
|
54
|
-
c.description = Molt::
|
|
54
|
+
c.description = Molt::LONG_DESC_CREATE_MODULE
|
|
55
55
|
c.option '--name NAME', String, "Author name"
|
|
56
56
|
c.option '--email EMAIL', String, "Author email"
|
|
57
57
|
c.option '--company COMPANY', String, "Author company"
|
|
@@ -62,12 +62,23 @@ module Molt::CLI
|
|
|
62
62
|
c.option '--do-it', false, "Release the Kraken and write the files"
|
|
63
63
|
c.action do |args, options|
|
|
64
64
|
options.default :output_folder => "."
|
|
65
|
-
puts "ARGS #{args}\nOPTS #{options.inspect}"
|
|
66
65
|
Molt::CLI::Generator.create_module(args[0], args[1], options)
|
|
67
66
|
end
|
|
68
67
|
end
|
|
69
68
|
alias_command :'c', :create_module
|
|
70
69
|
|
|
70
|
+
command :xcode do |c|
|
|
71
|
+
c.syntax = 'molt xcode TEMPLATE_SET'
|
|
72
|
+
c.summary = "Export template set as Xcode template"
|
|
73
|
+
c.description = Molt::LONG_DESC_XCODE
|
|
74
|
+
c.option '--output-folder DIRECTORY', String, "Create module folder in this directory. Defaults to \"./\""
|
|
75
|
+
c.option '--do-it', false, "Release the Kraken and write the files"
|
|
76
|
+
c.action do |args, options|
|
|
77
|
+
options.default :output_folder => "."
|
|
78
|
+
Molt::CLI::Generator.create_module("", args[0], options, true)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
alias_command :'c', :create_module
|
|
71
82
|
end
|
|
72
83
|
end
|
|
73
84
|
end
|
data/lib/molt/cli/setup.rb
CHANGED
data/lib/molt/configuration.rb
CHANGED
|
@@ -24,19 +24,31 @@ module Molt
|
|
|
24
24
|
end
|
|
25
25
|
|
|
26
26
|
def self.apply_cli_overrides config, options, module_name, template_set
|
|
27
|
+
config["template_set"] = template_set
|
|
28
|
+
config["target"] = "raw"
|
|
29
|
+
|
|
27
30
|
config["developer"]["name"] = options.name if options.name
|
|
28
31
|
config["developer"]["email"] = options.email if options.email
|
|
29
32
|
config["developer"]["company"] = options.company if options.company
|
|
30
33
|
config["project"]["name"] = options.project if options.project
|
|
34
|
+
|
|
35
|
+
config["module_name"] = module_name
|
|
31
36
|
config["model"] = "#{options.model}Model" || "<# Model #>"
|
|
32
37
|
config["entity"] = options.model || "<# Entity #>"
|
|
33
38
|
|
|
34
|
-
# meta
|
|
35
|
-
config["module_name"] = module_name
|
|
36
|
-
config["template_set"] = template_set
|
|
37
39
|
config["year"] = Time.now.strftime("%Y")
|
|
38
40
|
config["date"] = Time.now.strftime("%d/%m/%Y")
|
|
39
41
|
config
|
|
40
42
|
end
|
|
43
|
+
|
|
44
|
+
def self.config_for_xcode config, options, module_name, template_set
|
|
45
|
+
config["template_set"] = template_set
|
|
46
|
+
config["target"] = "xcode"
|
|
47
|
+
|
|
48
|
+
config["module_name"] = "___VARIABLE_productName:identifier___"
|
|
49
|
+
config["model"] = "___VARIABLE_MODEL___Model"
|
|
50
|
+
config["entity"] = "___VARIABLE_MODEL___"
|
|
51
|
+
config
|
|
52
|
+
end
|
|
41
53
|
end
|
|
42
54
|
end
|
data/lib/molt/version.rb
CHANGED
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
3
|
+
<plist version="1.0">
|
|
4
|
+
<dict>
|
|
5
|
+
<key>Kind</key>
|
|
6
|
+
<string>Xcode.IDEFoundation.TextSubstitutionFileTemplateKind</string>
|
|
7
|
+
<key>Description</key>
|
|
8
|
+
<string>VIPER Module for a TableView</string>
|
|
9
|
+
<key>Summary</key>
|
|
10
|
+
<string>VIPER Module for a TableView</string>
|
|
11
|
+
<key>SortOrder</key>
|
|
12
|
+
<string>30</string>
|
|
13
|
+
<key>AllowedTypes</key>
|
|
14
|
+
<array>
|
|
15
|
+
<string>public.swift-source</string>
|
|
16
|
+
</array>
|
|
17
|
+
<key>DefaultCompletionName</key>
|
|
18
|
+
<string>File</string>
|
|
19
|
+
<key>MainTemplateFile</key>
|
|
20
|
+
<string>___FILEBASENAME___.swift</string>
|
|
21
|
+
<key>Options</key>
|
|
22
|
+
<array>
|
|
23
|
+
<dict>
|
|
24
|
+
<key>Identifier</key>
|
|
25
|
+
<string>MODEL</string>
|
|
26
|
+
<key>Required</key>
|
|
27
|
+
<true/>
|
|
28
|
+
<key>Name</key>
|
|
29
|
+
<string>Model</string>
|
|
30
|
+
<key>Description</key>
|
|
31
|
+
<string>Model</string>
|
|
32
|
+
<key>Type</key>
|
|
33
|
+
<string>text</string>
|
|
34
|
+
<key>Default</key>
|
|
35
|
+
<string><# Model #></string>
|
|
36
|
+
<key>NotPersisted</key>
|
|
37
|
+
<true/>
|
|
38
|
+
</dict>
|
|
39
|
+
<dict>
|
|
40
|
+
<key>Identifier</key>
|
|
41
|
+
<string>productName</string>
|
|
42
|
+
<key>Required</key>
|
|
43
|
+
<true/>
|
|
44
|
+
<key>Name</key>
|
|
45
|
+
<string>Module Name</string>
|
|
46
|
+
<key>Description</key>
|
|
47
|
+
<string>Module Description</string>
|
|
48
|
+
<key>Type</key>
|
|
49
|
+
<string>text</string>
|
|
50
|
+
<key>Default</key>
|
|
51
|
+
<string>Awesome</string>
|
|
52
|
+
<key>NotPersisted</key>
|
|
53
|
+
<true/>
|
|
54
|
+
</dict>
|
|
55
|
+
</array>
|
|
56
|
+
</dict>
|
|
57
|
+
</plist>
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: molt
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Marco Cabazal
|
|
@@ -169,17 +169,17 @@ files:
|
|
|
169
169
|
- bundle/swift_helpers/Loadable.swift
|
|
170
170
|
- bundle/swift_helpers/Networking/APIRouter.swift
|
|
171
171
|
- bundle/swift_helpers/StoryboardExtensions.swift
|
|
172
|
+
- bundle/template_sets/VIPER_TableView/DataManagers/LocalDataManager.swift.liquid
|
|
173
|
+
- bundle/template_sets/VIPER_TableView/DataManagers/RemoteDataManager.swift.liquid
|
|
174
|
+
- bundle/template_sets/VIPER_TableView/Interactor.swift.liquid
|
|
175
|
+
- bundle/template_sets/VIPER_TableView/Presenter.swift.liquid
|
|
176
|
+
- bundle/template_sets/VIPER_TableView/Protocols.swift.liquid
|
|
177
|
+
- bundle/template_sets/VIPER_TableView/View.swift.liquid
|
|
178
|
+
- bundle/template_sets/VIPER_TableView/Wireframe.swift.liquid
|
|
172
179
|
- bundle/template_sets/viper_detail/Presenter.swift.liquid
|
|
173
180
|
- bundle/template_sets/viper_detail/Protocols.swift.liquid
|
|
174
181
|
- bundle/template_sets/viper_detail/View.swift.liquid
|
|
175
182
|
- bundle/template_sets/viper_detail/WireFrame.swift.liquid
|
|
176
|
-
- bundle/template_sets/viper_table/DataManagers/LocalDataManager.swift.liquid
|
|
177
|
-
- bundle/template_sets/viper_table/DataManagers/RemoteDataManager.swift.liquid
|
|
178
|
-
- bundle/template_sets/viper_table/Interactor.swift.liquid
|
|
179
|
-
- bundle/template_sets/viper_table/Presenter.swift.liquid
|
|
180
|
-
- bundle/template_sets/viper_table/Protocols.swift.liquid
|
|
181
|
-
- bundle/template_sets/viper_table/View.swift.liquid
|
|
182
|
-
- bundle/template_sets/viper_table/WireFrame.swift.liquid
|
|
183
183
|
- lib/generamba/string-colorize.rb
|
|
184
184
|
- lib/molt.rb
|
|
185
185
|
- lib/molt/cli/create_module.rb
|
|
@@ -190,6 +190,9 @@ files:
|
|
|
190
190
|
- lib/molt/template.rb
|
|
191
191
|
- lib/molt/version.rb
|
|
192
192
|
- molt.gemspec
|
|
193
|
+
- sample_configs/TemplateIcon.png
|
|
194
|
+
- sample_configs/TemplateIcon@2x.png
|
|
195
|
+
- sample_configs/TemplateInfo.plist
|
|
193
196
|
- sample_configs/global_config.yml.erb
|
|
194
197
|
homepage: https://github.com/MarcoCabazal/Molt
|
|
195
198
|
licenses:
|