cocoapods-vipers 0.0.1

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: e62efc7b04bbda415047eb96be9ce771674cb7d377cc8461680533f4a5d661b9
4
+ data.tar.gz: a3a602c6509127e2be989c6c3a4e755d5802622f2379160d8502b3ea8b0fe3f3
5
+ SHA512:
6
+ metadata.gz: 82eefc076f1b37d8828ae1d1e5e3e0c4f584ede0fcd0814dc10d8e70a02a335ca97ed4673989cfbe57fef2ee7550708101d4ceb337d6fd7d72820e09ae18182a
7
+ data.tar.gz: 5adf1cf269783de67fcea45d5202d0f2df405e5dcc8c5d8f705b471f4d55bb871d5a3eb332e6f411402d6fbb0e42d0afdd14f4c3f795334d65392c5d4a0d31c8
@@ -0,0 +1,45 @@
1
+ require 'cocoapods-vipers/vipers-sync'
2
+ require 'cocoapods'
3
+ include CocoapodsVipers
4
+
5
+ module Pod
6
+ class Command
7
+ # This is an example of a cocoapods plugin adding a top-level subcommand
8
+ # to the 'pod' command.
9
+ #
10
+ # You can also create subcommands of existing or new commands. Say you
11
+ # wanted to add a subcommand to `list` to show newly deprecated pods,
12
+ # (e.g. `pod list deprecated`), there are a few things that would need
13
+ # to change.
14
+ #
15
+ # - move this file to `lib/pod/command/list/deprecated.rb` and update
16
+ # the class to exist in the the Pod::Command::List namespace
17
+ # - change this class to extend from `List` instead of `Command`. This
18
+ # tells the plugin system that it is a subcommand of `list`.
19
+ # - edit `lib/cocoapods_plugins.rb` to require this file
20
+ #
21
+ # @todo Create a PR to add your plugin to CocoaPods/cocoapods.org
22
+ # in the `plugins.json` file, once your plugin is released.
23
+ #
24
+ class Vipers < Command
25
+ self.summary = 'Short description of cocoapods-vipers.'
26
+
27
+ self.description = <<-DESC
28
+ Longer description of cocoapods-vipers.
29
+ DESC
30
+
31
+ def initialize(argv)
32
+ super
33
+ end
34
+
35
+ def validate!
36
+ super
37
+ end
38
+
39
+ def run
40
+ Pod::UI.puts "Use 'pod install' or 'pod update' to do vipers generate"
41
+ # CocoapodsVipers::Vipers.new.sync()
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1 @@
1
+ require 'cocoapods-vipers/command/vipers'
@@ -0,0 +1,3 @@
1
+ module CocoapodsVipers
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,44 @@
1
+ import Curry
2
+
3
+ //脚本里的模板
4
+
5
+ extension VIPERBinderHelper {
6
+ static func initAllBinder() {
7
+ /** Injection VIPERBinderHelper autoCreateBinder **/
8
+ }
9
+ }
10
+
11
+
12
+ extension VIPERParams {
13
+
14
+ /** Injection VIPERParams class **/
15
+
16
+ }
17
+
18
+ extension VIPERs {
19
+
20
+ /** Injection VIPERs extension **/
21
+
22
+ /// 第三方账号绑定 1
23
+ // func thirdPartyBind() -> Self {
24
+ // return .thirdPartyBind
25
+ // }
26
+
27
+ /// 第三方账号绑定参数 参数列表 2
28
+ /// - Parameters:
29
+ /// - id: 页面id
30
+ /// - path: 路径
31
+ /// - Returns: 参数返回值
32
+ // func thirdPartyBindParams(id: Int, path: String) -> VIPERParams.thirdPartyBind {
33
+ // return VIPERParams.thirdPartyBind(id: id, path: path)
34
+ // }
35
+
36
+ // /// 第三方账号绑定参数 柯里化 3
37
+ // var thirdPartyBindCurry: (Int) -> (String) -> VIPERParams.thirdPartyBind {
38
+ // return curry(thirdPartyBindParams)
39
+ // }
40
+ }
41
+
42
+ // Useage:
43
+ //VIPERs.function.thirdPartyBindParams(id: 1, path: "2")
44
+ //VIPERs.function.thirdPartyBindCurry(1)("2")
@@ -0,0 +1,182 @@
1
+ require 'cocoapods'
2
+ require 'fileutils'
3
+ require 'yaml'
4
+ require 'json'
5
+
6
+ def handleClsAndMethod(viper, vipers_params_class, vipers_ext_func)
7
+
8
+ if !viper["params"] || viper["params"].empty?
9
+ return
10
+ end
11
+
12
+ var_lines = []
13
+ assign_lines = []
14
+ init_params = [] #id: Int, path: String = "/", ids: Array<Int>
15
+ return_types = []
16
+ parmas_desc = []
17
+ return_args = []
18
+
19
+ viper["params"].each do |key, value|
20
+ defaultValue = ''
21
+ ketType = value["type"]
22
+ if value["default"] != nil
23
+ if ketType == 'String' || ketType == 'NSString'
24
+ defaultValue = " = \"#{value["default"]}\""
25
+ else
26
+ defaultValue = " = #{value["default"]}"
27
+ end
28
+ end
29
+ return_types.push("(#{ketType})")
30
+ parmas_desc.push(" /// - #{key}: #{value["description"]}")
31
+ init_params.push("#{key}: #{ketType}#{defaultValue}")
32
+ var_lines.push(" public var #{key}: #{ketType}#{defaultValue}")
33
+ assign_lines.push(" self.#{key} = #{key}")
34
+ return_args.push("#{key}: #{key}")
35
+ end
36
+
37
+ var_lines_text = var_lines.join("\n")
38
+ assign_lines_text = assign_lines.join("\n")
39
+ init_params_text = init_params.join(", ")
40
+ init_params_text_line = " public required init(#{init_params_text}) {"
41
+
42
+ class_text = <<-RUBY
43
+ // MARK: - VIPERParams.#{viper["viper"]}
44
+ public class #{viper["viper"]}: Base {
45
+ #{var_lines_text}
46
+ #{init_params_text_line}
47
+ #{assign_lines_text}
48
+ }
49
+ required public init() {
50
+ fatalError("init() has not been implemented")
51
+ }
52
+ }
53
+ RUBY
54
+ init_params_text_method = " public func #{viper["viper"]}Params(#{init_params_text}) -> VIPERParams.#{viper["viper"]} {"
55
+ curry_return = " return curry(#{viper["viper"]}Params)"
56
+ curry_return_type = ": #{return_types.join(' -> ')} -> VIPERParams.#{viper["viper"]} {"
57
+ method_text = <<-RUBY
58
+ // MARK: - Methods of #{viper["viper"]}
59
+ /// #{viper["description"]}
60
+ public func #{viper["viper"]}() -> Self {
61
+ return .#{viper["viper"]}
62
+ }
63
+
64
+ /// #{viper["description"]}页面参数列表
65
+ /// - Parameters:
66
+ #{parmas_desc.join("\n")}
67
+ /// - Returns: 页面参数对象
68
+ #{init_params_text_method}
69
+ return VIPERParams.#{viper["viper"]}(#{return_args.join(", ")})
70
+ }
71
+
72
+ /// #{viper["description"]}页面参数 柯里化
73
+ public var #{viper["viper"]}Curry#{curry_return_type}
74
+ #{curry_return}
75
+ }
76
+ RUBY
77
+
78
+ vipers_params_class.push(class_text)
79
+ vipers_ext_func.push(method_text)
80
+ end
81
+
82
+ module CocoapodsVipers
83
+ class Vipers
84
+ def sync(paths)
85
+ Pod::UI.puts "Synchronizing Vipers yml"
86
+
87
+ if !File.exists?("vipers_config.yml")
88
+ Pod::UI.puts "vipers_config.yml not found"
89
+ return
90
+ end
91
+
92
+ json = YAML.load(File.open("vipers_config.yml"))
93
+ ext_path = json['hycan_service_injects_extension_path']
94
+ vipers_json_path = json['podspec_project_vipers_json_path']
95
+ main_project_vipers_json_path = json['main_project_vipers_json_path']
96
+ extension_template_path = json['extension_template_path']
97
+ # Pod::UI.puts "json: #{json}"
98
+ # Pod::UI.puts "ext_path: #{ext_path}"
99
+ # Pod::UI.puts "pod_paths: #{paths}"
100
+
101
+ # vipers_case = []
102
+ vipers_create_binder = []
103
+ vipers_params_class = []
104
+ vipers_ext_func = []
105
+
106
+ if !paths
107
+ Pod::UI.puts "没有找到对应的业务组件,以Hycan开头的"
108
+ return
109
+ end
110
+
111
+ paths.insert(0, { 'spec_path' => '', 'spec_name' => main_project_vipers_json_path})
112
+
113
+ paths.each do |spec|
114
+ # puts "spec: #{spec}"
115
+ spec_path = spec['spec_path']
116
+ json_path = ''
117
+ spec_json_path = ''
118
+
119
+ if spec['spec_name'] == main_project_vipers_json_path
120
+ json_path = spec['spec_name']
121
+ else
122
+ spec_json_path = "#{vipers_json_path}"
123
+ spec_json_path.gsub!("SPECNAME", spec['spec_name'])
124
+ json_path = spec_path + "/" + spec_json_path
125
+ end
126
+
127
+ if !File.exists?(json_path)
128
+ Pod::UI.puts "没有找到对应#{json_path}下的路由json"
129
+ else
130
+
131
+ file = File.read(json_path)
132
+ data_hash = JSON.parse(file)
133
+ vipers = data_hash["vipers"]
134
+
135
+ # vipers_case.push("// MARK: - #{data_hash["moduleName"]} #{data_hash["description"]}")
136
+ vipers_create_binder.push(" // MARK: - #{data_hash["moduleName"]} Create Binder")
137
+ vipers_params_class.push(" // MARK: - #{data_hash["moduleName"]} Params Class\n")
138
+ vipers_ext_func.push(" // MARK: - #{data_hash["moduleName"]} Extension Func\n")
139
+
140
+ vipers.each do |viper|
141
+ # vipers_case.push(" case #{viper["viper"]}")
142
+ handleClsAndMethod(viper, vipers_params_class, vipers_ext_func)
143
+ if spec['spec_name'] == main_project_vipers_json_path
144
+ vipers_create_binder.push(" //#{viper["description"]}\n VIPERBinder.addUnity(className: \"#{viper["class"]}\", identifier: VIPERs.#{viper["viper"]}.identifier)")
145
+ else
146
+ vipers_create_binder.push(" //#{viper["description"]}\n VIPERBinder.addUnity(projectClassName: \"#{data_hash["moduleName"]}.#{viper["class"]}\", identifier: VIPERs.#{viper["viper"]}.identifier)")
147
+ end
148
+ end
149
+ vipers_create_binder.push("\n")
150
+ end
151
+ end
152
+
153
+ # injection_vipers_case = vipers_case.join("\n")
154
+ injection_vipers_params_class = vipers_params_class.join("\n")
155
+ injection_vipers_ext_func = vipers_ext_func.join("\n")
156
+ injection_vipers_create_binder = vipers_create_binder.join("\n")
157
+
158
+ template_file = ''
159
+
160
+ if extension_template_path
161
+ template_file = extension_template_path
162
+ else
163
+ template_file = File.dirname(__FILE__) + '/template/Vipers+Extension.swift' # 脚本所在目录 寻找模板文件
164
+ end
165
+
166
+ template = File.read(template_file)
167
+
168
+ # 替换 /** Injection VIPERS case **/ (暂不执行)
169
+ template.gsub!("/** Injection VIPERBinderHelper autoCreateBinder **/", injection_vipers_create_binder)
170
+ template.gsub!("/** Injection VIPERs extension **/", injection_vipers_ext_func)
171
+ template.gsub!("/** Injection VIPERParams class **/", injection_vipers_params_class)
172
+
173
+ File.open(ext_path, "w") { |file| file.puts template }
174
+
175
+ # 1 校验没有重复的 枚举值 enum
176
+ # 2 读取模板的swift文件
177
+ # 3 遍历读取模块里的json ps: 主工程 + 业务工程
178
+ # 4 主工程的目标文件(HycanService下的) 注入各个模块绑定语句以及参数方法
179
+
180
+ end
181
+ end
182
+ end
@@ -0,0 +1 @@
1
+ require 'cocoapods-vipers/gem_version'
@@ -0,0 +1,34 @@
1
+ require 'cocoapods-vipers/vipers-sync'
2
+ require 'cocoapods'
3
+
4
+ module CocoapodsVipers
5
+
6
+ Pod::HooksManager.register('cocoapods-vipers', :pre_install) do |_context, _|
7
+ paths = []
8
+ puts 'vipers hook pre_install'
9
+ dependencies = _context.podfile.dependencies
10
+ dependencies.each do |d|
11
+ # puts d
12
+ ins_vars = d.instance_variables.map{|v|v.to_s[1..-1]}
13
+ methods = d.methods.map &:to_s
14
+ attribute = ins_vars & methods #attribute
15
+ # puts attribute
16
+ if d.name.match(/^Hycan/) && d.external_source
17
+ # puts d.external_source[:path]
18
+ paths.push({ 'spec_path' => d.external_source[:path], 'spec_name' => d.name })
19
+ end
20
+ end
21
+ CocoapodsVipers::Vipers.new.sync(paths)
22
+ end
23
+
24
+ Pod::HooksManager.register('cocoapods-vipers', :post_install) do |context|
25
+ # CocoapodsVipers::Vipers.new.sync()
26
+ puts 'vipers hook post_install'
27
+ end
28
+
29
+ Pod::HooksManager.register('cocoapods-vipers', :post_update) do |context|
30
+ puts 'vipers hook post_update'
31
+ # CocoapodsVipers::Vipers.new.sync()
32
+ end
33
+
34
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cocoapods-vipers
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - fengjx
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-10-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: tool to generate VIPER enum and medthod for Router
42
+ email:
43
+ - 1026366384@qq.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - lib/cocoapods-vipers.rb
49
+ - lib/cocoapods-vipers/command.rb
50
+ - lib/cocoapods-vipers/command/vipers.rb
51
+ - lib/cocoapods-vipers/gem_version.rb
52
+ - lib/cocoapods-vipers/template/Vipers+Extension.swift
53
+ - lib/cocoapods-vipers/vipers-sync.rb
54
+ - lib/cocoapods_plugin.rb
55
+ homepage: https://github.com/EXAMPLE/cocoapods-vipers
56
+ licenses:
57
+ - MIT
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubygems_version: 3.1.4
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: cocoapods-vipers generate VIPER enum and medthod for Router which is in HycanServices
78
+ test_files: []