ccios 5.0.0 → 5.1.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/.ruby-version +1 -1
- data/CHANGELOG.md +9 -0
- data/Gemfile.lock +34 -15
- data/MAINTAINER.md +8 -0
- data/README.md +3 -2
- data/ccios.gemspec +2 -2
- data/lib/ccios/file_creator.rb +15 -4
- data/lib/ccios/file_template_definition.rb +3 -2
- data/lib/ccios/pbxproj_parser.rb +1 -1
- data/lib/ccios/templates/Coordinator/coordinator.mustache +5 -2
- data/lib/ccios/templates/Coordinator/template.yml +0 -1
- data/lib/ccios/templates/Interactor/interactor_implementation.mustache +2 -2
- data/lib/ccios/templates/Interactor/template.yml +0 -1
- data/lib/ccios/templates/Presenter/dependency_provider.mustache +6 -2
- data/lib/ccios/templates/Presenter/presenter.mustache +2 -0
- data/lib/ccios/templates/Presenter/presenter_implementation.mustache +4 -1
- data/lib/ccios/templates/Presenter/template.yml +9 -3
- data/lib/ccios/templates/Presenter/view_contract.mustache +2 -1
- data/lib/ccios/templates/Presenter/view_controller.mustache +4 -0
- data/lib/ccios/templates/Presenter/view_model.mustache +12 -0
- data/lib/ccios/templates/Presenter/view_model_mapper.mustache +16 -0
- data/lib/ccios/templates/Repository/template.yml +0 -1
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dc6f5c81e7b9f2abf46e0f373717896e51762b3565f616205bd6a666d888fc65
|
4
|
+
data.tar.gz: 0f8661b91001f98ebe5e6435e8572bf1d671d871a22c120d85d29783d294cb36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7113bdee060f5d5808bb43951a0e0485b45cc058d857ccd0c64e36702a6418ed893e62a6a1dc9695ffa2c770c177931b9705a533cf2f2f8727bbabbbe0c25244
|
7
|
+
data.tar.gz: b0d3109396e17b9d8d3b4979901b3c2b6183de19da7df9f60ad784d6e0c7b26b6da9a730f6f0c607f4fd344634d8ca9f1ae505207f86131e677261fee451a4a1
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.3.0
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
|
5
5
|
## [Unreleased]
|
6
6
|
|
7
|
+
## [5.1.0]
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
|
11
|
+
- Target variable is now optional, an empty string or an unset value will use the first target of the project. This change allows templates to not overrides global target settings in `.ccios.yml`
|
12
|
+
- When multiple targets are provided for a file, `{{project_name}}` will now be replaced by the name of the project instead of the name of the first target
|
13
|
+
- `@MainActor` has been added to relevent files in Coordinator and Presenter templates to improve Swift 6 support
|
14
|
+
- dependency provider snippets has been updated to handle Swift 6 issue (see [this issue](https://github.com/Swinject/Swinject/issues/571) for why this is required)
|
15
|
+
|
7
16
|
## [5.0.0]
|
8
17
|
|
9
18
|
This release is an entire rewrite of the templating system, allowing customization of template and settings.
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ccios (5.
|
4
|
+
ccios (5.1.0)
|
5
5
|
activesupport (> 4)
|
6
6
|
mustache (~> 1.0)
|
7
7
|
xcodeproj (~> 1.4)
|
@@ -9,33 +9,52 @@ PATH
|
|
9
9
|
GEM
|
10
10
|
remote: https://rubygems.org/
|
11
11
|
specs:
|
12
|
-
CFPropertyList (3.0.
|
12
|
+
CFPropertyList (3.0.7)
|
13
|
+
base64
|
14
|
+
nkf
|
13
15
|
rexml
|
14
|
-
activesupport (
|
15
|
-
|
16
|
+
activesupport (8.0.1)
|
17
|
+
base64
|
18
|
+
benchmark (>= 0.3)
|
19
|
+
bigdecimal
|
20
|
+
concurrent-ruby (~> 1.0, >= 1.3.1)
|
21
|
+
connection_pool (>= 2.2.5)
|
22
|
+
drb
|
16
23
|
i18n (>= 1.6, < 2)
|
24
|
+
logger (>= 1.4.2)
|
17
25
|
minitest (>= 5.1)
|
18
|
-
|
26
|
+
securerandom (>= 0.3)
|
27
|
+
tzinfo (~> 2.0, >= 2.0.5)
|
28
|
+
uri (>= 0.13.1)
|
19
29
|
atomos (0.1.3)
|
30
|
+
base64 (0.2.0)
|
31
|
+
benchmark (0.4.0)
|
32
|
+
bigdecimal (3.1.9)
|
20
33
|
claide (1.1.0)
|
21
34
|
colored2 (3.1.2)
|
22
|
-
concurrent-ruby (1.
|
23
|
-
|
35
|
+
concurrent-ruby (1.3.5)
|
36
|
+
connection_pool (2.5.0)
|
37
|
+
drb (2.2.1)
|
38
|
+
i18n (1.14.7)
|
24
39
|
concurrent-ruby (~> 1.0)
|
25
|
-
|
40
|
+
logger (1.6.6)
|
41
|
+
minitest (5.25.4)
|
26
42
|
mustache (1.1.1)
|
27
|
-
nanaimo (0.
|
28
|
-
|
29
|
-
|
43
|
+
nanaimo (0.4.0)
|
44
|
+
nkf (0.2.0)
|
45
|
+
rake (13.2.1)
|
46
|
+
rexml (3.4.1)
|
47
|
+
securerandom (0.4.1)
|
30
48
|
tzinfo (2.0.6)
|
31
49
|
concurrent-ruby (~> 1.0)
|
32
|
-
|
50
|
+
uri (1.0.3)
|
51
|
+
xcodeproj (1.27.0)
|
33
52
|
CFPropertyList (>= 2.3.3, < 4.0)
|
34
53
|
atomos (~> 0.1.3)
|
35
54
|
claide (>= 1.0.2, < 2.0)
|
36
55
|
colored2 (~> 3.1)
|
37
|
-
nanaimo (~> 0.
|
38
|
-
rexml (
|
56
|
+
nanaimo (~> 0.4.0)
|
57
|
+
rexml (>= 3.3.6, < 4.0)
|
39
58
|
|
40
59
|
PLATFORMS
|
41
60
|
ruby
|
@@ -43,7 +62,7 @@ PLATFORMS
|
|
43
62
|
DEPENDENCIES
|
44
63
|
ccios!
|
45
64
|
minitest (~> 5.11)
|
46
|
-
rake (~>
|
65
|
+
rake (~> 13.2)
|
47
66
|
|
48
67
|
BUNDLED WITH
|
49
68
|
2.4.10
|
data/MAINTAINER.md
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
|
2
|
+
## How to release a new version
|
3
|
+
|
4
|
+
- Create the release branch `release/vA.B.C`
|
5
|
+
- Complete the changelog and add the new vertion title
|
6
|
+
- Update the version in ccios.gemspec & run `bundle install`
|
7
|
+
- Create a Pull Request
|
8
|
+
- Once merged, create a tag `A.B.C` on the merged commit
|
data/README.md
CHANGED
@@ -138,6 +138,7 @@ templates_collection: ccios/templates
|
|
138
138
|
# Global overrides of variables [Optional]
|
139
139
|
variables:
|
140
140
|
project: Project.xcodeproj
|
141
|
+
target: SomeDefaultTarget
|
141
142
|
|
142
143
|
# Per template variables override
|
143
144
|
templates_config:
|
@@ -224,8 +225,8 @@ variables:
|
|
224
225
|
project: "*.xcodeproj"
|
225
226
|
# The base path used to generate an element. This variable must be defined once here, or on each elements below.
|
226
227
|
base_path: "path/to/base_group"
|
227
|
-
# The target in which files are added. Can be a string, a list of strings, or an empty string. This variable must be defined once here, or on each elements below. If an empty string is provided, it will use the first target found in the Xcode project.
|
228
|
-
target: ""
|
228
|
+
# The target in which files are added. Can be a string, a list of strings, or an empty string. This variable must be defined once here, or on each elements below. If this variable is not set or if an empty string is provided, it will use the first target found in the Xcode project. If present it will override the global default target. [Optional]
|
229
|
+
target: "SomeTarget"
|
229
230
|
# List of generated elements. [Required]
|
230
231
|
# Each element can be a file (using `file`), or an empty folder (using `group`)
|
231
232
|
generated_elements:
|
data/ccios.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'ccios'
|
3
|
-
s.version = '5.
|
3
|
+
s.version = '5.1.0'
|
4
4
|
s.executables << 'ccios'
|
5
5
|
s.date = '2016-08-03'
|
6
6
|
s.summary = "Clean Code iOS Generator"
|
@@ -15,6 +15,6 @@ Gem::Specification.new do |s|
|
|
15
15
|
s.add_dependency 'xcodeproj', '~> 1.4'
|
16
16
|
s.add_dependency "mustache", "~> 1.0"
|
17
17
|
|
18
|
-
s.add_development_dependency 'rake', '~>
|
18
|
+
s.add_development_dependency 'rake', '~> 13.2'
|
19
19
|
s.add_development_dependency 'minitest', '~> 5.11'
|
20
20
|
end
|
data/lib/ccios/file_creator.rb
CHANGED
@@ -15,6 +15,13 @@ class Xcodeproj::Project::Object::PBXGroup
|
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
18
|
+
class Xcodeproj::Project
|
19
|
+
|
20
|
+
def project_name_from_path
|
21
|
+
File.basename(@path, File.extname(@path))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
18
25
|
class FileCreator
|
19
26
|
|
20
27
|
def self.logger
|
@@ -25,12 +32,16 @@ class FileCreator
|
|
25
32
|
FileCreator.logger
|
26
33
|
end
|
27
34
|
|
28
|
-
def templater_options(
|
35
|
+
def templater_options(targets, project)
|
29
36
|
defaults = {
|
30
|
-
project_name: target.display_name,
|
31
37
|
full_username: git_username,
|
32
38
|
date: DateTime.now.strftime("%d/%m/%Y"),
|
33
39
|
}
|
40
|
+
if targets.count == 1
|
41
|
+
defaults["project_name"] = targets[0].display_name
|
42
|
+
else
|
43
|
+
defaults["project_name"] = project.project_name_from_path
|
44
|
+
end
|
34
45
|
defaults
|
35
46
|
end
|
36
47
|
|
@@ -44,7 +55,7 @@ class FileCreator
|
|
44
55
|
tags
|
45
56
|
end
|
46
57
|
|
47
|
-
def create_file_using_template_path(template_path, generated_filename, group, targets, context)
|
58
|
+
def create_file_using_template_path(template_path, generated_filename, group, targets, project, context)
|
48
59
|
file_path = File.join(group.real_path, generated_filename)
|
49
60
|
|
50
61
|
raise "File #{file_path} already exists" if File.exist?(file_path)
|
@@ -52,7 +63,7 @@ class FileCreator
|
|
52
63
|
FileUtils.mkdir_p dirname unless File.directory?(dirname)
|
53
64
|
file = File.new(file_path, 'w')
|
54
65
|
|
55
|
-
context = context.merge(templater_options(targets
|
66
|
+
context = context.merge(templater_options(targets, project))
|
56
67
|
file_content = CodeTemplater.new.render_file_content_from_template(template_path, generated_filename, context)
|
57
68
|
|
58
69
|
file.puts(file_content)
|
@@ -37,7 +37,7 @@ class FileTemplateDefinition
|
|
37
37
|
raise "Base path \"#{base_path}\" is missing" if base_group.nil?
|
38
38
|
|
39
39
|
target_name = merged_variables["target"]
|
40
|
-
if target_name.is_a?(String)
|
40
|
+
if target_name.is_a?(String) || target_name.nil?
|
41
41
|
target = parser.target_for(project, target_name)
|
42
42
|
raise "Unable to find target \"#{target_name}\"" if target.nil?
|
43
43
|
elsif target_name.is_a?(Array)
|
@@ -77,7 +77,7 @@ class FileTemplateDefinition
|
|
77
77
|
target_name = merged_variables["target"]
|
78
78
|
|
79
79
|
targets = []
|
80
|
-
if target_name.is_a?(String)
|
80
|
+
if target_name.is_a?(String) || target_name.nil?
|
81
81
|
targets = [parser.target_for(project, target_name)]
|
82
82
|
elsif target_name.is_a?(Array)
|
83
83
|
targets = target_name.map { |name| parser.target_for(project, name) }
|
@@ -88,6 +88,7 @@ class FileTemplateDefinition
|
|
88
88
|
generated_filename,
|
89
89
|
group,
|
90
90
|
targets,
|
91
|
+
project,
|
91
92
|
context
|
92
93
|
)
|
93
94
|
end
|
data/lib/ccios/pbxproj_parser.rb
CHANGED
@@ -27,7 +27,7 @@ class PBXProjParser
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def target_for(project, target_name)
|
30
|
-
if target_name.blank?
|
30
|
+
if target_name.blank? || target_name.nil?
|
31
31
|
project.targets.find { |t| t.product_type == "com.apple.product-type.application" }
|
32
32
|
else
|
33
33
|
project.targets.find { |t| t.name == target_name }
|
@@ -10,6 +10,7 @@ import Foundation
|
|
10
10
|
import ADCoordinator
|
11
11
|
|
12
12
|
{{#generate_delegate}}
|
13
|
+
@MainActor
|
13
14
|
protocol {{name}}CoordinatorDelegate: AnyObject {
|
14
15
|
|
15
16
|
}
|
@@ -23,8 +24,10 @@ class {{name}}Coordinator: Coordinator {
|
|
23
24
|
private let dependencyProvider: ApplicationDependencyProvider
|
24
25
|
private unowned var navigationController: UINavigationController
|
25
26
|
|
26
|
-
init(
|
27
|
-
|
27
|
+
init(
|
28
|
+
navigationController: UINavigationController,
|
29
|
+
dependencyProvider: ApplicationDependencyProvider
|
30
|
+
) {
|
28
31
|
self.navigationController = navigationController
|
29
32
|
self.dependencyProvider = dependencyProvider
|
30
33
|
}
|
@@ -2,13 +2,17 @@
|
|
2
2
|
func {{lowercased_name}}Presenter(viewContract: {{name}}ViewContract, presenterDelegate: {{name}}PresenterDelegate) -> {{name}}Presenter? {
|
3
3
|
return presenterAssembler
|
4
4
|
.resolver
|
5
|
-
.resolve(
|
5
|
+
.resolve(
|
6
|
+
{{name}}Presenter.self,
|
7
|
+
arguments: viewContract as {{name}}ViewContract,
|
8
|
+
presenterDelegate as {{name}}PresenterDelegate
|
9
|
+
)
|
6
10
|
}
|
7
11
|
{{/generate_delegate}}
|
8
12
|
{{^generate_delegate}}
|
9
13
|
func {{lowercased_name}}Presenter(viewContract: {{name}}ViewContract) -> {{name}}Presenter? {
|
10
14
|
return presenterAssembler
|
11
15
|
.resolver
|
12
|
-
.resolve({{name}}Presenter.self, argument: viewContract)
|
16
|
+
.resolve({{name}}Presenter.self, argument: viewContract as {{name}}ViewContract)
|
13
17
|
}
|
14
18
|
{{/generate_delegate}}
|
@@ -15,6 +15,8 @@ class {{name}}PresenterImplementation: {{name}}Presenter {
|
|
15
15
|
private weak var delegate: {{name}}PresenterDelegate?
|
16
16
|
{{/generate_delegate}}
|
17
17
|
|
18
|
+
// MARK: - Lifecycle
|
19
|
+
|
18
20
|
{{#generate_delegate}}
|
19
21
|
init(viewContract: {{name}}ViewContract, delegate: {{name}}PresenterDelegate) {
|
20
22
|
self.viewContract = viewContract
|
@@ -30,6 +32,7 @@ class {{name}}PresenterImplementation: {{name}}Presenter {
|
|
30
32
|
// MARK: - {{name}}Presenter
|
31
33
|
|
32
34
|
func start() {
|
33
|
-
|
35
|
+
let viewModel = {{name}}ViewModelMapper().map()
|
36
|
+
viewContract?.configure(with: viewModel)
|
34
37
|
}
|
35
38
|
}
|
@@ -11,7 +11,6 @@ parameters:
|
|
11
11
|
variables:
|
12
12
|
project: "*.xcodeproj"
|
13
13
|
base_path: "App"
|
14
|
-
target: ""
|
15
14
|
generated_elements:
|
16
15
|
- name: "ui_view_group"
|
17
16
|
group: "{{ name }}/UI/View"
|
@@ -32,8 +31,13 @@ generated_elements:
|
|
32
31
|
file: "{{ name }}/Presenter/{{ name }}PresenterImplementation.swift"
|
33
32
|
template: "presenter_implementation"
|
34
33
|
variables: {}
|
35
|
-
- name: "
|
36
|
-
|
34
|
+
- name: "view_model"
|
35
|
+
file: "{{ name }}/Model/{{ name }}ViewModel.swift"
|
36
|
+
template: "view_model"
|
37
|
+
variables: {}
|
38
|
+
- name: "view_model_mapper"
|
39
|
+
file: "{{ name }}/Model/Mapper/{{ name }}ViewModelMapper.swift"
|
40
|
+
template: "view_model_mapper"
|
37
41
|
variables: {}
|
38
42
|
code_snippets:
|
39
43
|
- name: DependencyProvider
|
@@ -45,5 +49,7 @@ template_file_source:
|
|
45
49
|
view_contract: "view_contract.mustache"
|
46
50
|
presenter: "presenter.mustache"
|
47
51
|
presenter_implementation: "presenter_implementation.mustache"
|
52
|
+
view_model: "view_model.mustache"
|
53
|
+
view_model_mapper: "view_model_mapper.mustache"
|
48
54
|
dependency_provider: "dependency_provider.mustache"
|
49
55
|
presenter_assembly: "presenter_assembly.mustache"
|
@@ -12,6 +12,8 @@ import UIKit
|
|
12
12
|
class {{name}}ViewController: SharedViewController, {{name}}ViewContract {
|
13
13
|
var presenter: {{name}}Presenter?
|
14
14
|
|
15
|
+
// MARK: - Lifecycle
|
16
|
+
|
15
17
|
override func viewDidLoad() {
|
16
18
|
super.viewDidLoad()
|
17
19
|
presenter?.start()
|
@@ -19,4 +21,6 @@ class {{name}}ViewController: SharedViewController, {{name}}ViewContract {
|
|
19
21
|
|
20
22
|
// MARK: - {{name}}ViewContract
|
21
23
|
|
24
|
+
func configure(with viewModel: {{name}}ViewModel) {
|
25
|
+
}
|
22
26
|
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
//
|
2
|
+
// {{name}}ViewModelMapper.swift
|
3
|
+
// {{project_name}}
|
4
|
+
//
|
5
|
+
// Created by {{full_username}} on {{date}}.
|
6
|
+
//
|
7
|
+
//
|
8
|
+
|
9
|
+
import Foundation
|
10
|
+
|
11
|
+
struct {{name}}ViewModelMapper {
|
12
|
+
|
13
|
+
func map() -> {{name}}ViewModel {
|
14
|
+
{{name}}ViewModel()
|
15
|
+
}
|
16
|
+
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ccios
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.
|
4
|
+
version: 5.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre Felgines
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '13.2'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '13.2'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: minitest
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -93,6 +93,7 @@ files:
|
|
93
93
|
- CHANGELOG.md
|
94
94
|
- Gemfile
|
95
95
|
- Gemfile.lock
|
96
|
+
- MAINTAINER.md
|
96
97
|
- Makefile
|
97
98
|
- README.md
|
98
99
|
- Rakefile
|
@@ -122,6 +123,8 @@ files:
|
|
122
123
|
- lib/ccios/templates/Presenter/template.yml
|
123
124
|
- lib/ccios/templates/Presenter/view_contract.mustache
|
124
125
|
- lib/ccios/templates/Presenter/view_controller.mustache
|
126
|
+
- lib/ccios/templates/Presenter/view_model.mustache
|
127
|
+
- lib/ccios/templates/Presenter/view_model_mapper.mustache
|
125
128
|
- lib/ccios/templates/Repository/repository.mustache
|
126
129
|
- lib/ccios/templates/Repository/repository_assembly.mustache
|
127
130
|
- lib/ccios/templates/Repository/repository_implementation.mustache
|
@@ -156,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
156
159
|
- !ruby/object:Gem::Version
|
157
160
|
version: '0'
|
158
161
|
requirements: []
|
159
|
-
rubygems_version: 3.5.
|
162
|
+
rubygems_version: 3.5.3
|
160
163
|
signing_key:
|
161
164
|
specification_version: 4
|
162
165
|
summary: Clean Code iOS Generator
|