cocoapods-vipers 0.0.1 → 0.0.4
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 955f762815a084b35b851037fc3b3a82be44f13ce49cef0f496cf70f32bde70d
|
4
|
+
data.tar.gz: 208b7100f16ac29a91797b282d7344c89931e60acd6202f0a17184b37818a7e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 64e2b36364468a508cd87c9f7c9b711c66aa661acd7f9f6b509d92aeaa9a8d0f3d08a348621f518393d077143d3927a5020a9b682af2697c8cae22f87e558d3c
|
7
|
+
data.tar.gz: 904ca06ed03e28b425574535cccc87660fe05526505c8bf07996e4e75cb46adbe088ccdc2ac02b2dd152f9ea083426a81f30b1df2010ff6fc714bdf60b6b1c74
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import UIKit
|
2
|
+
|
3
|
+
// MARK: VIPERs Enum
|
4
|
+
public enum VIPERs: String {
|
5
|
+
public typealias RawValue = String
|
6
|
+
/** Injection VIPERS case **/
|
7
|
+
}
|
8
|
+
|
9
|
+
public struct VIPERBinderHelper {
|
10
|
+
|
11
|
+
public static func initBinder(shouldObserveForAppLaunch: Bool = true) {
|
12
|
+
|
13
|
+
// initAllBinder
|
14
|
+
/** Injection VIPERBinderHelper call init function **/
|
15
|
+
|
16
|
+
if shouldObserveForAppLaunch {
|
17
|
+
Router.observeForAppLaunch()
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
@@ -47,7 +47,7 @@ def handleClsAndMethod(viper, vipers_params_class, vipers_ext_func)
|
|
47
47
|
#{assign_lines_text}
|
48
48
|
}
|
49
49
|
required public init() {
|
50
|
-
|
50
|
+
print("default init")
|
51
51
|
}
|
52
52
|
}
|
53
53
|
RUBY
|
@@ -79,9 +79,56 @@ RUBY
|
|
79
79
|
vipers_ext_func.push(method_text)
|
80
80
|
end
|
81
81
|
|
82
|
+
def traverse_dir(file_path)
|
83
|
+
if File.directory? file_path
|
84
|
+
Dir.foreach(file_path) do |file|
|
85
|
+
if file != "." && file != ".."
|
86
|
+
traverse_dir(file_path + "/" + file){|x| yield x}
|
87
|
+
end
|
88
|
+
end
|
89
|
+
else
|
90
|
+
yield file_path
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# 返回 { Bool, String } 是否存在重复的viper
|
95
|
+
def check_duplicate_viper(paths, main_path, vipers_json_path)
|
96
|
+
arr = []
|
97
|
+
paths.each do |spec|
|
98
|
+
json_path = ''
|
99
|
+
if spec['spec_name'] == main_path
|
100
|
+
json_path = spec['spec_name']
|
101
|
+
else
|
102
|
+
spec_json_path = "#{vipers_json_path}"
|
103
|
+
spec_json_path.gsub!("SPECNAME", spec['spec_name'])
|
104
|
+
json_path = spec['spec_path'] + "/" + spec_json_path
|
105
|
+
end
|
106
|
+
|
107
|
+
if File.exists?(json_path)
|
108
|
+
file = File.read(json_path)
|
109
|
+
data_hash = JSON.parse(file)
|
110
|
+
vipers = data_hash["vipers"]
|
111
|
+
|
112
|
+
vipers.each do |viper|
|
113
|
+
arr.push(viper["viper"])
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
result = arr.detect {|e| arr.rindex(e) != arr.index(e) }
|
120
|
+
|
121
|
+
if result
|
122
|
+
return { 'result' => true, 'viper' => result }
|
123
|
+
else
|
124
|
+
return { 'result' => false }
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
82
129
|
module CocoapodsVipers
|
83
130
|
class Vipers
|
84
|
-
def sync(paths)
|
131
|
+
def sync(paths, pods)
|
85
132
|
Pod::UI.puts "Synchronizing Vipers yml"
|
86
133
|
|
87
134
|
if !File.exists?("vipers_config.yml")
|
@@ -94,14 +141,46 @@ module CocoapodsVipers
|
|
94
141
|
vipers_json_path = json['podspec_project_vipers_json_path']
|
95
142
|
main_project_vipers_json_path = json['main_project_vipers_json_path']
|
96
143
|
extension_template_path = json['extension_template_path']
|
144
|
+
prorocols_template_path = json['prorocols_template_path']
|
145
|
+
protocols_path = json['hycan_service_injects_protocols_path']
|
146
|
+
pod_frameworks_all_path = json['pod_frameworks_all_path']
|
147
|
+
|
148
|
+
flag = check_duplicate_viper(paths, main_project_vipers_json_path, vipers_json_path)
|
149
|
+
|
150
|
+
if flag['result']
|
151
|
+
raise "viper脚本执行失败,出现重复定义的viper: #{flag['viper']}"
|
152
|
+
end
|
153
|
+
|
154
|
+
check_unused_pods = false
|
155
|
+
|
156
|
+
if json['check_unused_pods'] == 'true'
|
157
|
+
check_unused_pods = true
|
158
|
+
end
|
159
|
+
|
160
|
+
framework_array = pods
|
161
|
+
|
162
|
+
if pod_frameworks_all_path
|
163
|
+
if File.exists?(pod_frameworks_all_path)
|
164
|
+
fileData = File.read(pod_frameworks_all_path)
|
165
|
+
all_framework = JSON.parse(fileData)
|
166
|
+
framework_array = all_framework
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
should_check = false
|
171
|
+
if json['check_json'] == 'true'
|
172
|
+
should_check = true
|
173
|
+
end
|
174
|
+
|
97
175
|
# Pod::UI.puts "json: #{json}"
|
98
176
|
# Pod::UI.puts "ext_path: #{ext_path}"
|
99
177
|
# Pod::UI.puts "pod_paths: #{paths}"
|
100
178
|
|
101
|
-
|
179
|
+
vipers_case = []
|
102
180
|
vipers_create_binder = []
|
103
181
|
vipers_params_class = []
|
104
182
|
vipers_ext_func = []
|
183
|
+
vipers_call_binder = []
|
105
184
|
|
106
185
|
if !paths
|
107
186
|
Pod::UI.puts "没有找到对应的业务组件,以Hycan开头的"
|
@@ -132,28 +211,111 @@ module CocoapodsVipers
|
|
132
211
|
data_hash = JSON.parse(file)
|
133
212
|
vipers = data_hash["vipers"]
|
134
213
|
|
135
|
-
|
214
|
+
vipers_case.push("// MARK: - #{data_hash["moduleName"]} #{data_hash["description"]}")
|
136
215
|
vipers_create_binder.push(" // MARK: - #{data_hash["moduleName"]} Create Binder")
|
137
216
|
vipers_params_class.push(" // MARK: - #{data_hash["moduleName"]} Params Class\n")
|
138
217
|
vipers_ext_func.push(" // MARK: - #{data_hash["moduleName"]} Extension Func\n")
|
139
|
-
|
218
|
+
vipers_call_binder.push(" init#{data_hash["moduleName"]}Binder()")
|
219
|
+
vipers_create_binder.push(" public static func init#{data_hash["moduleName"]}Binder() {")
|
220
|
+
cls_array = []
|
140
221
|
vipers.each do |viper|
|
141
|
-
|
222
|
+
if viper["description"] == ""
|
223
|
+
vipers_case.push(" case #{viper["viper"]}")
|
224
|
+
else
|
225
|
+
vipers_case.push(" //#{viper["description"]}\n case #{viper["viper"]}")
|
226
|
+
end
|
142
227
|
handleClsAndMethod(viper, vipers_params_class, vipers_ext_func)
|
143
228
|
if spec['spec_name'] == main_project_vipers_json_path
|
144
229
|
vipers_create_binder.push(" //#{viper["description"]}\n VIPERBinder.addUnity(className: \"#{viper["class"]}\", identifier: VIPERs.#{viper["viper"]}.identifier)")
|
145
230
|
else
|
146
231
|
vipers_create_binder.push(" //#{viper["description"]}\n VIPERBinder.addUnity(projectClassName: \"#{data_hash["moduleName"]}.#{viper["class"]}\", identifier: VIPERs.#{viper["viper"]}.identifier)")
|
147
|
-
end
|
232
|
+
end
|
233
|
+
cls_array.push(viper["class"])
|
148
234
|
end
|
149
|
-
|
235
|
+
vipers_case.push("\n")
|
236
|
+
vipers_create_binder.push(" }\n")
|
237
|
+
|
238
|
+
# 检测模块内未使用的Pods-framework
|
239
|
+
if check_unused_pods
|
240
|
+
# Pod::UI.puts "检测模块内未使用的Pods-framework"
|
241
|
+
dir_path = spec_path + '/' + data_hash["moduleName"]
|
242
|
+
if spec['spec_name'] == main_project_vipers_json_path
|
243
|
+
dir_path = '.' + '/HycanCommunity/Swift'
|
244
|
+
end
|
245
|
+
|
246
|
+
traverse_dir(dir_path) { |f|
|
247
|
+
if f.to_s() =~ /\.swift$/ || f.to_s() =~ /\.h$/ || f.to_s() =~ /\.m$/
|
248
|
+
lineNumber = 0
|
249
|
+
IO.readlines(f).each { |line|
|
250
|
+
framework_array.each do |framew|
|
251
|
+
if line =~ /^[\/\/]/
|
252
|
+
else
|
253
|
+
if line.index("#import <#{framew}")
|
254
|
+
# Pod::UI.puts "in file: #{f} - line in #{data_hash["moduleName"]}"
|
255
|
+
# Pod::UI.puts line
|
256
|
+
framework_array.delete(framew)
|
257
|
+
break
|
258
|
+
end
|
259
|
+
|
260
|
+
if line.index("import #{framew}")
|
261
|
+
# Pod::UI.puts "in file: #{f} - line in #{data_hash["moduleName"]}"
|
262
|
+
# Pod::UI.puts line
|
263
|
+
framework_array.delete(framew)
|
264
|
+
break
|
265
|
+
end
|
266
|
+
end
|
267
|
+
end
|
268
|
+
if lineNumber > 200
|
269
|
+
break
|
270
|
+
end
|
271
|
+
lineNumber += 1
|
272
|
+
}
|
273
|
+
end
|
274
|
+
}
|
275
|
+
end
|
276
|
+
|
277
|
+
# 检测模块内是否有未定义的 class
|
278
|
+
if should_check
|
279
|
+
# Pod::UI.puts "检测模块内是否有未定义的 class"
|
280
|
+
dir_path = spec_path + '/' + data_hash["moduleName"]
|
281
|
+
if spec['spec_name'] == main_project_vipers_json_path
|
282
|
+
dir_path = '.' + '/HycanCommunity/Swift'
|
283
|
+
end
|
284
|
+
traverse_dir(dir_path) { |f|
|
285
|
+
if f.to_s() =~ /\.swift$/
|
286
|
+
lineNumber = 0
|
287
|
+
IO.readlines(f).each { |line|
|
288
|
+
cls_array.each do |cls|
|
289
|
+
if line.index("class #{cls}")
|
290
|
+
cls_array.delete(cls)
|
291
|
+
break
|
292
|
+
end
|
293
|
+
end
|
294
|
+
if lineNumber > 100
|
295
|
+
break
|
296
|
+
end
|
297
|
+
lineNumber += 1
|
298
|
+
}
|
299
|
+
end
|
300
|
+
}
|
301
|
+
|
302
|
+
Pod::UI.puts "以下 Class 在 #{data_hash["moduleName"]} 没找到定义"
|
303
|
+
Pod::UI.puts cls_array.to_s()
|
304
|
+
end
|
305
|
+
|
150
306
|
end
|
151
307
|
end
|
152
308
|
|
153
|
-
|
309
|
+
if check_unused_pods
|
310
|
+
Pod::UI.puts "以下 Pod 的 Framework 在主工程+Pod工程都没找到定义"
|
311
|
+
Pod::UI.puts framework_array.to_s()
|
312
|
+
end
|
313
|
+
|
314
|
+
injection_vipers_case = vipers_case.join("\n")
|
154
315
|
injection_vipers_params_class = vipers_params_class.join("\n")
|
155
316
|
injection_vipers_ext_func = vipers_ext_func.join("\n")
|
156
317
|
injection_vipers_create_binder = vipers_create_binder.join("\n")
|
318
|
+
injection_vipers_call_binder = vipers_call_binder.join("\n")
|
157
319
|
|
158
320
|
template_file = ''
|
159
321
|
|
@@ -164,14 +326,25 @@ module CocoapodsVipers
|
|
164
326
|
end
|
165
327
|
|
166
328
|
template = File.read(template_file)
|
167
|
-
|
168
|
-
# 替换 /** Injection VIPERS case **/ (暂不执行)
|
169
|
-
template.gsub!("/** Injection VIPERBinderHelper autoCreateBinder **/", injection_vipers_create_binder)
|
329
|
+
template.gsub!("/** Injection VIPERBinderHelper autoCreateBinder init **/", injection_vipers_create_binder)
|
170
330
|
template.gsub!("/** Injection VIPERs extension **/", injection_vipers_ext_func)
|
171
331
|
template.gsub!("/** Injection VIPERParams class **/", injection_vipers_params_class)
|
172
332
|
|
173
333
|
File.open(ext_path, "w") { |file| file.puts template }
|
174
334
|
|
335
|
+
prorocols_template_file = ''
|
336
|
+
|
337
|
+
if prorocols_template_path
|
338
|
+
prorocols_template_file = prorocols_template_path
|
339
|
+
else
|
340
|
+
prorocols_template_file = File.dirname(__FILE__) + '/template/Protocols.swift' # 脚本所在目录 寻找模板文件
|
341
|
+
end
|
342
|
+
|
343
|
+
prorocols_template = File.read(prorocols_template_file)
|
344
|
+
prorocols_template.gsub!("/** Injection VIPERS case **/", injection_vipers_case)
|
345
|
+
prorocols_template.gsub!("/** Injection VIPERBinderHelper call init function **/", injection_vipers_call_binder)
|
346
|
+
File.open(protocols_path, "w") { |file| file.puts prorocols_template }
|
347
|
+
|
175
348
|
# 1 校验没有重复的 枚举值 enum
|
176
349
|
# 2 读取模板的swift文件
|
177
350
|
# 3 遍历读取模块里的json ps: 主工程 + 业务工程
|
data/lib/cocoapods_plugin.rb
CHANGED
@@ -5,6 +5,7 @@ module CocoapodsVipers
|
|
5
5
|
|
6
6
|
Pod::HooksManager.register('cocoapods-vipers', :pre_install) do |_context, _|
|
7
7
|
paths = []
|
8
|
+
pods = []
|
8
9
|
puts 'vipers hook pre_install'
|
9
10
|
dependencies = _context.podfile.dependencies
|
10
11
|
dependencies.each do |d|
|
@@ -17,8 +18,9 @@ module CocoapodsVipers
|
|
17
18
|
# puts d.external_source[:path]
|
18
19
|
paths.push({ 'spec_path' => d.external_source[:path], 'spec_name' => d.name })
|
19
20
|
end
|
21
|
+
pods.push(d.name)
|
20
22
|
end
|
21
|
-
CocoapodsVipers::Vipers.new.sync(paths)
|
23
|
+
CocoapodsVipers::Vipers.new.sync(paths, pods)
|
22
24
|
end
|
23
25
|
|
24
26
|
Pod::HooksManager.register('cocoapods-vipers', :post_install) do |context|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cocoapods-vipers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- fengjx
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -49,10 +49,11 @@ files:
|
|
49
49
|
- lib/cocoapods-vipers/command.rb
|
50
50
|
- lib/cocoapods-vipers/command/vipers.rb
|
51
51
|
- lib/cocoapods-vipers/gem_version.rb
|
52
|
+
- lib/cocoapods-vipers/template/Protocols.swift
|
52
53
|
- lib/cocoapods-vipers/template/Vipers+Extension.swift
|
53
54
|
- lib/cocoapods-vipers/vipers-sync.rb
|
54
55
|
- lib/cocoapods_plugin.rb
|
55
|
-
homepage: https://github.com/
|
56
|
+
homepage: https://github.com/Cellphoness/cocoapods-vipers/
|
56
57
|
licenses:
|
57
58
|
- MIT
|
58
59
|
metadata: {}
|
@@ -71,7 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
72
|
- !ruby/object:Gem::Version
|
72
73
|
version: '0'
|
73
74
|
requirements: []
|
74
|
-
rubygems_version: 3.
|
75
|
+
rubygems_version: 3.3.11
|
75
76
|
signing_key:
|
76
77
|
specification_version: 4
|
77
78
|
summary: cocoapods-vipers generate VIPER enum and medthod for Router which is in HycanServices
|