yk_command 0.4.5 → 0.4.6
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/.idea/yk_command.iml +20 -21
- data/Gemfile.lock +30 -32
- data/lib/yk_command/analyze/analyze.rb +153 -0
- data/lib/yk_command/{dependency_handler.rb → analyze/dependency_handler.rb} +0 -0
- data/lib/yk_command/analyze/dependency_result.rb +143 -0
- data/lib/yk_command/{request.rb → analyze/request.rb} +0 -0
- data/lib/yk_command/commands.rb +9 -300
- data/lib/yk_command/{template → module/template}/objc/CategoryHeader.h +0 -0
- data/lib/yk_command/{template → module/template}/objc/PrefixHeader.pch +0 -0
- data/lib/yk_command/{template → module/template}/objc/RouterDefine.h +0 -0
- data/lib/yk_command/{template → module/template}/objc/RouterRegister.h +0 -0
- data/lib/yk_command/{template → module/template}/objc/RouterRegister.m +0 -0
- data/lib/yk_command/{template → module/template}/objc/ServiceProtocol.h +0 -0
- data/lib/yk_command/{template → module/template}/objc/ServiceRegister.h +0 -0
- data/lib/yk_command/{template → module/template}/objc/ServiceRegister.m +0 -0
- data/lib/yk_command/{template → module/template}/objc/ToolsHeader.h +0 -0
- data/lib/yk_command/{template → module/template}/objc/VendorHeader.h +0 -0
- data/lib/yk_command/{template → module/template}/objc/demo/DemoViewController.h +0 -0
- data/lib/yk_command/{template → module/template}/objc/demo/DemoViewController.m +0 -0
- data/lib/yk_command/{template → module/template}/objc/demo/DemoViewModel.h +0 -0
- data/lib/yk_command/{template → module/template}/objc/demo/DemoViewModel.m +0 -0
- data/lib/yk_command/{template → module/template}/swift/RouterDefine.swift +0 -0
- data/lib/yk_command/module/yk_module.rb +226 -0
- data/lib/yk_command/version.rb +1 -1
- data/yk_command.gemspec +2 -3
- metadata +29 -42
- data/lib/yk_command/analyze.rb +0 -129
- data/lib/yk_command/yk_module.rb +0 -0
data/lib/yk_command/commands.rb
CHANGED
@@ -1,332 +1,41 @@
|
|
1
|
-
require 'colored2'
|
2
1
|
require 'thor'
|
3
|
-
|
4
|
-
require '
|
5
|
-
require '
|
6
|
-
require 'yk_command/
|
7
|
-
require 'yk_command/request'
|
8
|
-
require 'git'
|
2
|
+
|
3
|
+
require 'yk_command/analyze/analyze'
|
4
|
+
require 'yk_command/analyze/request'
|
5
|
+
require 'yk_command/module/yk_module'
|
9
6
|
|
10
7
|
module YkCommand
|
8
|
+
|
11
9
|
class CLI < Thor
|
12
10
|
include Thor::Actions
|
13
11
|
|
14
|
-
CONFIG_FILE = '.YKModuleFilesConfig.yml'.freeze
|
15
|
-
|
16
12
|
desc 'generate <Path> <Module Name> <Language> <Prefix - 前缀> <Author - 作者>', '直接生成项目 例子: yk_command generate . HomeModule oc MT Tom.Liu '
|
17
13
|
method_option :generate, aliases: '-g'
|
18
14
|
|
19
15
|
def generate(path = nil, name, lang, class_prefix, author)
|
20
|
-
@name = name
|
21
|
-
@module = @name
|
22
|
-
@lang = lang
|
23
|
-
@class_prefix = class_prefix
|
24
|
-
@final_path = "#{path}/#{@name}"
|
25
|
-
@author = author
|
26
|
-
@prefixed_module = @class_prefix + @module
|
27
|
-
|
28
|
-
say "generating file in path:#{@final_path}", :green
|
29
16
|
|
30
|
-
|
31
|
-
say "#{@final_path} 已存在:", :red
|
32
|
-
else
|
33
|
-
prepare_folder
|
34
|
-
if File.exist?("#{@final_path}/configure")
|
35
|
-
system("#{@final_path}/configure", @name, @lang, @class_prefix, *@additional_args)
|
36
|
-
else
|
37
|
-
say 'Template does not have a configure file', :red
|
38
|
-
end
|
39
|
-
yk_module_folders
|
40
|
-
yk_template_files
|
41
|
-
end
|
17
|
+
YkModule.new(self .args,self .options).generate(path, name, lang, class_prefix, author)
|
42
18
|
end
|
43
19
|
|
44
20
|
desc 'create <Path>', '在某个路径下交互式生成项目'
|
45
21
|
method_option :create, aliases: '-c'
|
46
22
|
|
47
23
|
def create(path = nil)
|
48
|
-
|
49
|
-
|
50
|
-
say '模块名:', :green
|
51
|
-
config_file_path = "#{path}/#{CONFIG_FILE}"
|
52
|
-
config = File.exist?(config_file_path) ? YAML.load_file(config_file_path) : {}
|
53
|
-
input_name = ask("Project name [#{config[:project]}] ?")
|
54
|
-
|
55
|
-
if input_name != ''
|
56
|
-
@name = input_name
|
57
|
-
config[:project] = input_name if input_name != config[:project]
|
58
|
-
else
|
59
|
-
@name = config[:project]
|
60
|
-
end
|
61
|
-
|
62
|
-
File.open(config_file_path, 'w') do |f|
|
63
|
-
f.write config.to_yaml
|
64
|
-
end
|
65
|
-
|
66
|
-
@final_path = "#{path}/#{@name}"
|
67
|
-
|
68
|
-
if File.exist?(@final_path.to_s)
|
69
|
-
say "#{@final_path} 已存在:", :red
|
70
|
-
else
|
71
|
-
prepare_folder
|
72
|
-
read_config(path)
|
73
|
-
|
74
|
-
if File.exist?("#{@final_path}/configure")
|
75
|
-
system("#{@final_path}/configure", @name, @lang, @class_prefix, *@additional_args)
|
76
|
-
else
|
77
|
-
say 'Template does not have a configure file', :red
|
78
|
-
end
|
79
|
-
|
80
|
-
yk_module_folders
|
81
|
-
yk_template_files
|
82
|
-
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
no_commands do
|
87
|
-
def read_config(path)
|
88
|
-
config_file_path = "#{path}/#{CONFIG_FILE}"
|
89
|
-
config = File.exist?(config_file_path) ? YAML.load_file(config_file_path) : {}
|
90
|
-
|
91
|
-
project = @name
|
92
|
-
say '语言:', :green
|
93
|
-
language = ask("Project language [#{config[:language]}] ?", limited_to: ['objc', 'swift', ''])
|
94
|
-
say '类名前缀:', :green
|
95
|
-
class_prefix = ask("Class prefix [#{config[:class_prefix]}] ?")
|
96
|
-
say '文件作者:', :green
|
97
|
-
author = ask("Author [#{config[:author]}] ?")
|
98
|
-
|
99
|
-
config[:project] = project.empty? ? config[:project] || '' : project
|
100
|
-
config[:language] = language.empty? ? config[:language] || 'objc' : language
|
101
|
-
config[:class_prefix] = class_prefix.empty? ? config[:class_prefix] || '' : class_prefix
|
102
|
-
config[:author] = author.empty? ? config[:author] || '' : author
|
103
|
-
|
104
|
-
File.open(config_file_path, 'w') do |f|
|
105
|
-
f.write config.to_yaml
|
106
|
-
# f.write YAML.to_yaml(config)
|
107
|
-
end
|
108
|
-
|
109
|
-
@module = @name
|
110
|
-
@class_prefix = config[:class_prefix]
|
111
|
-
@prefixed_module = config[:class_prefix] + @module
|
112
|
-
@project = config[:project]
|
113
|
-
@author = config[:author]
|
114
|
-
@date = Time.now.strftime('%d/%m/%y')
|
115
|
-
@lang = config[:language]
|
116
|
-
end
|
117
|
-
|
118
|
-
def prepare_folder
|
119
|
-
host_a = 'yeah'
|
120
|
-
host_b = 'ka'
|
121
|
-
template_repo_url = "http://gitlab.#{host_a}#{host_b}.com/App/iOS/YKComponents/YKProjectTemplate.git"
|
122
|
-
system("git clone #{template_repo_url} #{@final_path}")
|
123
|
-
|
124
|
-
# FileUtils.remove_dir(@final_path, true)
|
125
|
-
# FileUtils.cp_r('/Users/imacn24/Documents/dev/YKProjectTemplate', @final_path)
|
126
|
-
# FileUtils.remove_dir("#{@final_path}/.git", true)
|
127
|
-
end
|
128
|
-
|
129
|
-
def yk_module_folders
|
130
|
-
class_folder_path = "#{@final_path}/#{@name}/Classes"
|
131
|
-
|
132
|
-
first_level_folders = %w[Public Private]
|
133
|
-
|
134
|
-
# public_level_folders = ['Register']
|
135
|
-
# public_level_folders.each do |folder|
|
136
|
-
# path = "#{class_folder_path}/Public/#{folder}"
|
137
|
-
# empty_directory path
|
138
|
-
# end
|
139
|
-
|
140
|
-
private_level_folders = %w[Business Category Vendor Tools]
|
141
|
-
|
142
|
-
first_level_folders.each do |folder|
|
143
|
-
path = "#{class_folder_path}/#{folder}"
|
144
|
-
empty_directory path
|
145
|
-
end
|
146
|
-
|
147
|
-
private_level_folders.each do |folder|
|
148
|
-
path = "#{class_folder_path}/Private/#{folder}"
|
149
|
-
empty_directory path
|
150
|
-
end
|
151
|
-
end
|
152
|
-
|
153
|
-
CLI.source_root(File.dirname(__FILE__))
|
154
|
-
|
155
|
-
def yk_template_files
|
156
|
-
register_path = "#{@final_path}/#{@name}/Classes/Private/Register"
|
157
|
-
registger = {
|
158
|
-
'RouterRegister.h' => 'RouterRegister',
|
159
|
-
'RouterRegister.m' => 'RouterRegister',
|
160
|
-
'ServiceRegister.h' => 'ServiceRegister',
|
161
|
-
'ServiceRegister.m' => 'ServiceRegister'
|
162
|
-
}
|
163
|
-
|
164
|
-
registger.each do |file_name, _folder|
|
165
|
-
final_file = "#{register_path}/#{@prefixed_module}#{file_name}"
|
166
|
-
template "#{__dir__}/template/objc/#{file_name}", final_file
|
167
|
-
end
|
168
|
-
|
169
|
-
public_folder_path = "#{@final_path}/#{@name}/Classes/Public"
|
170
|
-
|
171
|
-
template_code_filename = ['ServiceProtocol.h', 'RouterDefine.h']
|
172
|
-
template_code_filename.each do |file_name|
|
173
|
-
final_file = "#{public_folder_path}/#{@prefixed_module}#{file_name}"
|
174
|
-
source = "#{__dir__}/template/objc/#{file_name}"
|
175
|
-
template source, final_file
|
176
|
-
end
|
177
|
-
|
178
|
-
swift_template_code_filename = ['RouterDefine.swift']
|
179
|
-
swift_template_code_filename.each do |file_name|
|
180
|
-
final_file = "#{public_folder_path}/#{@prefixed_module}_Swift_#{file_name}"
|
181
|
-
source = "#{__dir__}/template/swift/#{file_name}"
|
182
|
-
template source, final_file
|
183
|
-
end
|
184
|
-
|
185
|
-
private_folder_path = "#{@final_path}/#{@name}/Classes/Private"
|
186
|
-
#pch file
|
187
|
-
# pch_file_name = "PrefixHeader.pch"
|
188
|
-
# final_file = "#{private_folder_path}/#{@prefixed_module}#{pch_file_name}"
|
189
|
-
# source = "#{__dir__}/template/objc/#{pch_file_name}"
|
190
|
-
# template source, final_file
|
191
|
-
|
192
|
-
private_level_folder_files = {
|
193
|
-
'PrefixHeader.pch' => 'Business',
|
194
|
-
'CategoryHeader.h' => 'Category',
|
195
|
-
'ToolsHeader.h' => 'Tools',
|
196
|
-
'vendorHeader.h' => 'Vendor'
|
197
|
-
}
|
198
|
-
|
199
|
-
private_level_folder_files.each do |file_name, folder|
|
200
|
-
final_prefix = @prefixed_module
|
201
|
-
if file_name == 'PrefixHeader.pch'
|
202
|
-
final_prefix = @module
|
203
|
-
end
|
204
|
-
|
205
|
-
final_file = "#{private_folder_path}/#{folder}/#{final_prefix}#{file_name}"
|
206
|
-
source = "#{__dir__}/template/objc/#{file_name}"
|
207
|
-
template source, final_file
|
208
|
-
end
|
209
|
-
|
210
|
-
business_demo_path = "#{@final_path}/#{@name}/Classes/Private/Business"
|
211
|
-
demo_replace_file = ['DemoViewController.h', 'DemoViewController.m', 'DemoViewModel.h', 'DemoViewModel.m']
|
212
|
-
demo_replace_file.each do |file_name|
|
213
|
-
final_file = "#{business_demo_path}/Demo/#{@prefixed_module}#{file_name}"
|
214
|
-
source = "#{__dir__}/template/objc/demo/#{file_name}"
|
215
|
-
template source, final_file
|
216
|
-
end
|
217
|
-
|
218
|
-
Dir.chdir("#{@final_path}/Example") do
|
219
|
-
system 'pod install'
|
220
|
-
system "open './#{@name}.xcworkspace'"
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
24
|
+
YkModule.new(self .args,self .options ).create(path)
|
224
25
|
end
|
225
26
|
|
226
|
-
require 'gitlab'
|
227
|
-
require 'gitlab/paginated_response'
|
228
|
-
|
229
|
-
include Gitlab
|
230
27
|
desc 'dependency <Podfile.lock Path>', '解析Podfile.lock'
|
231
28
|
method_option :dependency, aliases: '-d'
|
232
29
|
|
233
30
|
def dependency(path = nil)
|
234
|
-
|
235
|
-
project_path = ''
|
236
|
-
project_name = ''
|
237
|
-
begin
|
238
|
-
g = Git.open(path)
|
239
|
-
project_path = Pathname.new(g.lib.git_work_dir)
|
240
|
-
project_name = g.config['remote.origin.url'].split('/').last.split('.')[0]
|
241
|
-
|
242
|
-
unless project_name.empty?
|
243
|
-
podfiles = Dir.glob("#{path}/**/Podfile")
|
244
|
-
if !podfiles.empty?
|
245
|
-
begin
|
246
|
-
project_path = podfiles[podfiles.length - 1]
|
247
|
-
podfile_dir = Pathname.new(project_path).dirname.to_s
|
248
|
-
say "start analyze... path contain [Podfile ,Pods/ ,Podfile.lock] is #{podfile_dir} \n ", :green
|
249
|
-
result = Analyzer.new.analyze(podfile_dir)
|
250
|
-
app_info = Request.new.get_project_info(project_name)
|
251
|
-
if app_info['id']
|
252
|
-
say "uploading dependencies for project #{project_name} ..."
|
253
|
-
upload_res = Request.new.upload_app_dependency(app_info['id'], result)
|
254
|
-
if upload_res['code'] == 0
|
255
|
-
say 'uploaded , finished ', :green
|
256
|
-
say "\n<-- \n"
|
257
|
-
{ 'code' => '0', 'name' => project_name }
|
258
|
-
else
|
259
|
-
say "Error :upload dependencies for project #{project_name} - #{app_info["id"]} failed ", :red
|
260
|
-
say "\n<-- \n"
|
261
|
-
{ 'code' => '1', 'name' => project_name }
|
262
|
-
end
|
263
|
-
else
|
264
|
-
say "Error :Get App project ID failed , #{project_name}", :red
|
265
|
-
say "\n<-- \n"
|
266
|
-
{ 'code' => '1', 'name' => project_name }
|
267
|
-
end
|
268
|
-
|
269
|
-
rescue
|
270
|
-
say "Error : #{$!}", :red
|
271
|
-
say "Error : #{ $@}", :red
|
272
|
-
say "Skip folder : #{podfile_dir} ", :red
|
273
|
-
say "\n<-- \n"
|
274
|
-
{ 'code' => '1', 'name' => project_name }
|
275
|
-
end
|
276
|
-
|
277
|
-
else
|
278
|
-
say "No podfile find ,Skip folder : #{project_name} ", :yellow
|
279
|
-
say "\n<-- \n"
|
280
|
-
{ 'code' => '2', 'name' => '' }
|
281
|
-
end
|
282
|
-
|
283
|
-
end
|
284
|
-
|
285
|
-
rescue
|
286
|
-
say "No .git folder find in #{path} ,skip folder ... ", :yellow
|
287
|
-
say "\n<--\n", :yellow
|
288
|
-
{ 'code' => '2', 'name' => '' }
|
289
|
-
end
|
290
|
-
|
31
|
+
Analyzer.new.dependency path
|
291
32
|
end
|
292
33
|
|
293
34
|
desc 'workspace_analyze <AppHost Path>', '遍历项目目录 批量上传项目依赖信息'
|
294
35
|
method_option :workspace_analyze, aliases: '-w'
|
295
36
|
|
296
37
|
def workspace_analyze(path = nil)
|
297
|
-
|
298
|
-
subdir_list = Dir['*'].reject { |o| not File.directory?(o) }
|
299
|
-
say "Start in Workspace : #{path} ...", :yellow
|
300
|
-
subdir_list.each do |project_dir|
|
301
|
-
say "\n#{Pathname.new(project_dir).split[1]} ", :yellow
|
302
|
-
end
|
303
|
-
say "\n ... start scanning to analyze ...\n\n"
|
304
|
-
|
305
|
-
success_count = 0
|
306
|
-
success_name_list = []
|
307
|
-
failed_count = 0
|
308
|
-
failed_name_list = []
|
309
|
-
skip_count = 0
|
310
|
-
|
311
|
-
subdir_list.each { |project_dir|
|
312
|
-
project_path = "#{path}/#{project_dir}"
|
313
|
-
res = dependency project_path
|
314
|
-
if res['code'] == '0'
|
315
|
-
success_count += 1
|
316
|
-
success_name_list << res['name']
|
317
|
-
elsif res['code'] == '1'
|
318
|
-
failed_count += 1
|
319
|
-
failed_name_list << res['name']
|
320
|
-
else
|
321
|
-
skip_count += 1
|
322
|
-
end
|
323
|
-
}
|
324
|
-
|
325
|
-
say "\nworkspace analyze done ! ..."
|
326
|
-
say "success:#{success_count},#{success_name_list}", :green
|
327
|
-
say "failed :#{failed_count},#{failed_name_list}", :red
|
328
|
-
say "skip :#{skip_count}", :yellow
|
329
|
-
|
38
|
+
Analyzer.new.workspace_analyze path
|
330
39
|
end
|
331
40
|
|
332
41
|
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,226 @@
|
|
1
|
+
|
2
|
+
require 'colored'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'psych'
|
5
|
+
require 'yaml'
|
6
|
+
require 'thor/actions'
|
7
|
+
|
8
|
+
|
9
|
+
module YkCommand
|
10
|
+
|
11
|
+
CONFIG_FILE = '.YKModuleFilesConfig.yml'.freeze
|
12
|
+
|
13
|
+
class YkModule < Thor
|
14
|
+
include Thor::Actions
|
15
|
+
no_commands do
|
16
|
+
|
17
|
+
def initialize(args = [], options = {}, config = {})
|
18
|
+
super
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
def generate(path = nil, name, lang, class_prefix, author)
|
23
|
+
|
24
|
+
@name = name
|
25
|
+
@module = @name
|
26
|
+
@lang = lang
|
27
|
+
@class_prefix = class_prefix
|
28
|
+
@final_path = "#{path}/#{@name}"
|
29
|
+
@author = author
|
30
|
+
@prefixed_module = @class_prefix + @module
|
31
|
+
|
32
|
+
say "generating file in path:#{@final_path}", :green
|
33
|
+
|
34
|
+
if File.exist?(@final_path.to_s)
|
35
|
+
say "#{@final_path} 已存在:", :red
|
36
|
+
else
|
37
|
+
prepare_folder
|
38
|
+
if File.exist?("#{@final_path}/configure")
|
39
|
+
system("#{@final_path}/configure", @name, @lang, @class_prefix, *@additional_args)
|
40
|
+
else
|
41
|
+
say 'Template does not have a configure file', :red
|
42
|
+
end
|
43
|
+
yk_module_folders
|
44
|
+
yk_template_files
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def create(path = nil)
|
49
|
+
|
50
|
+
path = Dir.pwd if path.nil?
|
51
|
+
say '模块名:', :green
|
52
|
+
config_file_path = "#{path}/#{CONFIG_FILE}"
|
53
|
+
config = File.exist?(config_file_path) ? YAML.load_file(config_file_path) : {}
|
54
|
+
input_name = ask("Project name [#{config[:project]}] ?")
|
55
|
+
|
56
|
+
if input_name != ''
|
57
|
+
@name = input_name
|
58
|
+
config[:project] = input_name if input_name != config[:project]
|
59
|
+
else
|
60
|
+
@name = config[:project]
|
61
|
+
end
|
62
|
+
|
63
|
+
File.open(config_file_path, 'w') do |f|
|
64
|
+
f.write config.to_yaml
|
65
|
+
end
|
66
|
+
|
67
|
+
@final_path = "#{path}/#{@name}"
|
68
|
+
|
69
|
+
if File.exist?(@final_path.to_s)
|
70
|
+
say "#{@final_path} 已存在:", :red
|
71
|
+
else
|
72
|
+
prepare_folder
|
73
|
+
read_config(path)
|
74
|
+
|
75
|
+
if File.exist?("#{@final_path}/configure")
|
76
|
+
system("#{@final_path}/configure", @name, @lang, @class_prefix, *@additional_args)
|
77
|
+
else
|
78
|
+
say 'Template does not have a configure file', :red
|
79
|
+
end
|
80
|
+
|
81
|
+
yk_module_folders
|
82
|
+
yk_template_files
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def read_config(path)
|
88
|
+
config_file_path = "#{path}/#{CONFIG_FILE}"
|
89
|
+
config = File.exist?(config_file_path) ? YAML.load_file(config_file_path) : {}
|
90
|
+
|
91
|
+
project = @name
|
92
|
+
say '语言:', :green
|
93
|
+
language = ask("Project language [#{config[:language]}] ?", limited_to: ['objc', 'swift', ''])
|
94
|
+
say '类名前缀:', :green
|
95
|
+
class_prefix = ask("Class prefix [#{config[:class_prefix]}] ?")
|
96
|
+
say '文件作者:', :green
|
97
|
+
author = ask("Author [#{config[:author]}] ?")
|
98
|
+
|
99
|
+
config[:project] = project.empty? ? config[:project] || '' : project
|
100
|
+
config[:language] = language.empty? ? config[:language] || 'objc' : language
|
101
|
+
config[:class_prefix] = class_prefix.empty? ? config[:class_prefix] || '' : class_prefix
|
102
|
+
config[:author] = author.empty? ? config[:author] || '' : author
|
103
|
+
|
104
|
+
File.open(config_file_path, 'w') do |f|
|
105
|
+
f.write config.to_yaml
|
106
|
+
# f.write YAML.to_yaml(config)
|
107
|
+
end
|
108
|
+
|
109
|
+
@module = @name
|
110
|
+
@class_prefix = config[:class_prefix]
|
111
|
+
@prefixed_module = config[:class_prefix] + @module
|
112
|
+
@project = config[:project]
|
113
|
+
@author = config[:author]
|
114
|
+
@date = Time.now.strftime('%d/%m/%y')
|
115
|
+
@lang = config[:language]
|
116
|
+
end
|
117
|
+
|
118
|
+
def prepare_folder
|
119
|
+
host_a = 'yeah'
|
120
|
+
host_b = 'ka'
|
121
|
+
template_repo_url = "http://gitlab.#{host_a}#{host_b}.com/App/iOS/YKComponents/YKProjectTemplate.git"
|
122
|
+
system("git clone #{template_repo_url} #{@final_path}")
|
123
|
+
|
124
|
+
# FileUtils.remove_dir(@final_path, true)
|
125
|
+
# FileUtils.cp_r('/Users/imacn24/Documents/dev/YKProjectTemplate', @final_path)
|
126
|
+
# FileUtils.remove_dir("#{@final_path}/.git", true)
|
127
|
+
end
|
128
|
+
|
129
|
+
def yk_module_folders
|
130
|
+
class_folder_path = "#{@final_path}/#{@name}/Classes"
|
131
|
+
|
132
|
+
first_level_folders = %w[Public Private]
|
133
|
+
|
134
|
+
# public_level_folders = ['Register']
|
135
|
+
# public_level_folders.each do |folder|
|
136
|
+
# path = "#{class_folder_path}/Public/#{folder}"
|
137
|
+
# empty_directory path
|
138
|
+
# end
|
139
|
+
|
140
|
+
private_level_folders = %w[Business Category Vendor Tools]
|
141
|
+
|
142
|
+
first_level_folders.each do |folder|
|
143
|
+
path = "#{class_folder_path}/#{folder}"
|
144
|
+
empty_directory path
|
145
|
+
end
|
146
|
+
|
147
|
+
private_level_folders.each do |folder|
|
148
|
+
path = "#{class_folder_path}/Private/#{folder}"
|
149
|
+
empty_directory path
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
YkCommand::YkModule.source_root(File.dirname(__FILE__))
|
155
|
+
def yk_template_files
|
156
|
+
|
157
|
+
register_path = "#{@final_path}/#{@name}/Classes/Private/Register"
|
158
|
+
registger = {
|
159
|
+
'RouterRegister.h' => 'RouterRegister',
|
160
|
+
'RouterRegister.m' => 'RouterRegister',
|
161
|
+
'ServiceRegister.h' => 'ServiceRegister',
|
162
|
+
'ServiceRegister.m' => 'ServiceRegister'
|
163
|
+
}
|
164
|
+
|
165
|
+
registger.each do |file_name, _folder|
|
166
|
+
final_file = "#{register_path}/#{@prefixed_module}#{file_name}"
|
167
|
+
template "#{__dir__}/template/objc/#{file_name}", final_file
|
168
|
+
end
|
169
|
+
|
170
|
+
public_folder_path = "#{@final_path}/#{@name}/Classes/Public"
|
171
|
+
|
172
|
+
template_code_filename = ['ServiceProtocol.h', 'RouterDefine.h']
|
173
|
+
template_code_filename.each do |file_name|
|
174
|
+
final_file = "#{public_folder_path}/#{@prefixed_module}#{file_name}"
|
175
|
+
source = "#{__dir__}/template/objc/#{file_name}"
|
176
|
+
template source, final_file
|
177
|
+
end
|
178
|
+
|
179
|
+
swift_template_code_filename = ['RouterDefine.swift']
|
180
|
+
swift_template_code_filename.each do |file_name|
|
181
|
+
final_file = "#{public_folder_path}/#{@prefixed_module}_Swift_#{file_name}"
|
182
|
+
source = "#{__dir__}/template/swift/#{file_name}"
|
183
|
+
template source, final_file
|
184
|
+
end
|
185
|
+
|
186
|
+
private_folder_path = "#{@final_path}/#{@name}/Classes/Private"
|
187
|
+
#pch file
|
188
|
+
# pch_file_name = "PrefixHeader.pch"
|
189
|
+
# final_file = "#{private_folder_path}/#{@prefixed_module}#{pch_file_name}"
|
190
|
+
# source = "#{__dir__}/template/objc/#{pch_file_name}"
|
191
|
+
# template source, final_file
|
192
|
+
|
193
|
+
private_level_folder_files = {
|
194
|
+
'PrefixHeader.pch' => 'Business',
|
195
|
+
'CategoryHeader.h' => 'Category',
|
196
|
+
'ToolsHeader.h' => 'Tools',
|
197
|
+
'vendorHeader.h' => 'Vendor'
|
198
|
+
}
|
199
|
+
|
200
|
+
private_level_folder_files.each do |file_name, folder|
|
201
|
+
final_prefix = @prefixed_module
|
202
|
+
if file_name == 'PrefixHeader.pch'
|
203
|
+
final_prefix = @module
|
204
|
+
end
|
205
|
+
|
206
|
+
final_file = "#{private_folder_path}/#{folder}/#{final_prefix}#{file_name}"
|
207
|
+
source = "#{__dir__}/template/objc/#{file_name}"
|
208
|
+
template source, final_file
|
209
|
+
end
|
210
|
+
|
211
|
+
business_demo_path = "#{@final_path}/#{@name}/Classes/Private/Business"
|
212
|
+
demo_replace_file = ['DemoViewController.h', 'DemoViewController.m', 'DemoViewModel.h', 'DemoViewModel.m']
|
213
|
+
demo_replace_file.each do |file_name|
|
214
|
+
final_file = "#{business_demo_path}/Demo/#{@prefixed_module}#{file_name}"
|
215
|
+
source = "#{__dir__}/template/objc/demo/#{file_name}"
|
216
|
+
template source, final_file
|
217
|
+
end
|
218
|
+
|
219
|
+
Dir.chdir("#{@final_path}/Example") do
|
220
|
+
system 'pod install'
|
221
|
+
system "open './#{@name}.xcworkspace'"
|
222
|
+
end
|
223
|
+
end
|
224
|
+
end
|
225
|
+
end
|
226
|
+
end
|
data/lib/yk_command/version.rb
CHANGED
data/yk_command.gemspec
CHANGED
@@ -41,16 +41,15 @@ Gem::Specification.new do |spec|
|
|
41
41
|
spec.add_development_dependency 'cocoapods'
|
42
42
|
spec.add_development_dependency 'cocoapods-core'
|
43
43
|
spec.add_development_dependency 'httparty'
|
44
|
-
spec.add_development_dependency 'gitlab'
|
45
44
|
|
46
45
|
spec.add_dependency 'git'
|
47
46
|
spec.add_dependency 'bundler'
|
48
47
|
spec.add_dependency 'thor'
|
49
48
|
spec.add_dependency 'xcodeproj'
|
50
49
|
spec.add_dependency 'colored'
|
51
|
-
spec.add_dependency '
|
50
|
+
spec.add_dependency 'colored2'
|
51
|
+
spec.add_dependency 'pathname','0.1.0'
|
52
52
|
spec.add_dependency 'httparty'
|
53
|
-
spec.add_dependency 'gitlab'
|
54
53
|
# For more information and examples about making a new gem, checkout our
|
55
54
|
# guide at: https://bundler.io/guides/creating_gem.html
|
56
55
|
end
|