aimtp 0.0.1

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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/bin/aimtp +13 -0
  3. data/lib/aimtp.rb +195 -0
  4. metadata +45 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: cfef737c86b72194a7d559f30ba73d5b4fff829748d90e4aef147c10be422461
4
+ data.tar.gz: 74063cfd4c0353322679ed33b242951659c9b8edf78d2b0d858b5a6a1edf4aa9
5
+ SHA512:
6
+ metadata.gz: b39459033aa5e1e22e3c5f9ca6f9d97566fa7340c54e63c800b1f35b2535f840863f123f8f9785092f3b4e0c16d530b6f26620d42351dc8b2d8a5f1d8dc624e2
7
+ data.tar.gz: b4c2c70ba852b3447cb165c53176fe38ad53f1782b86600c99ea9a9029d65891b827267d82e2bc191018fe2d4cc855403fd4d9e81e099734af9dd9c8517e76c5
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "aimtp"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ system("aimtp.rb")
@@ -0,0 +1,195 @@
1
+ include FileTest
2
+ require "fileutils"
3
+
4
+ @module_arr = [] #所有模块名称
5
+ $dep_arr = [] #依赖名称
6
+ $sub_pod_path_hash = Hash.new #子模块的名称和来源路径
7
+ $sub_pod_hash = Hash.new #子模块的名称和去向路径
8
+ $sub_need_root_hash = Hash.new #子模块是否只拷贝内容不创建根文件夹
9
+ $sub_file_path_arr = [] #子模块Aimfile的路径,包含主模块的Aimfile
10
+
11
+
12
+ class Template
13
+ attr_accessor :name
14
+ @c_path_arr = []
15
+ @tp_list = []
16
+
17
+ class << self
18
+ def config(name, &block)
19
+ tp = new
20
+ block.call(tp)
21
+ tp.name = name
22
+ @c_path_arr << name
23
+ @tp_list << tp
24
+ tp
25
+ end
26
+
27
+ def ret_all_module
28
+ @c_path_arr
29
+ end
30
+
31
+ def find_by_name(tp_name)
32
+ @tp_list.find { |tp| tp.name == tp_name }
33
+ end
34
+ end
35
+
36
+ def sub(name, path, nRoot = 1)
37
+ $sub_file_path_arr << 'sources/' + name + '/Aimfile'
38
+ name_arr = name.split('/')
39
+ mod_name = name_arr[name_arr.length - 1]
40
+ $sub_pod_hash[mod_name] = path
41
+ $sub_pod_path_hash[mod_name] = name
42
+ $sub_need_root_hash[mod_name] = nRoot
43
+ end
44
+
45
+ def pod(name, options = {})
46
+ if options == {}
47
+ $dep_arr.push('"' + name + '"')
48
+ elsif options.is_a? String
49
+ $dep_arr.push('"' + name + '"' + ', ' + '"' + options + '"')
50
+ elsif options.is_a? Hash
51
+ o_str = options.to_s
52
+ o_str = o_str.gsub(/[\{\}]/, '')
53
+ $dep_arr.push('"' + name + '"' + ', ' + o_str)
54
+ end
55
+ end
56
+ end
57
+
58
+ def sub(name, path, nRoot = 1)
59
+ $sub_file_path_arr << 'sources/' + name + '/Aimfile'
60
+ name_arr = name.split('/')
61
+ mod_name = name_arr[name_arr.length - 1]
62
+ $sub_pod_hash[mod_name] = path
63
+ $sub_pod_path_hash[mod_name] = name
64
+ $sub_need_root_hash[mod_name] = nRoot
65
+ end
66
+
67
+ def pod(name, options = {})
68
+ if options == {}
69
+ $dep_arr.push('"' + name + '"')
70
+ elsif options.is_a? String
71
+ $dep_arr.push('"' + name + '"' + ', ' + '"' + options + '"')
72
+ elsif options.is_a? Hash
73
+ o_str = options.to_s
74
+ o_str = o_str.gsub(/[\{\}]/, '')
75
+ $dep_arr.push('"' + name + '"' + ', ' + o_str)
76
+ end
77
+ end
78
+
79
+ # 循环深入文件夹
80
+ def traverse(from_path, to_path)
81
+ if File.directory?(from_path) # 如果是目录
82
+ if !FileTest.exist?(to_path)
83
+ FileUtils.mkdir_p(to_path)
84
+ end
85
+ dir = Dir.open(from_path)
86
+ while name = dir.read
87
+ next if name == "." # ※
88
+ next if name == ".." # ※
89
+ traverse(from_path + "/" + name, to_path + "/" + name)
90
+ end
91
+ dir.close
92
+ else
93
+ process_file(from_path, to_path) # 处理文件
94
+ end
95
+ end
96
+
97
+ # 拷贝文件
98
+ def process_file(from_path, to_path)
99
+ FileUtils.cp(from_path, to_path)
100
+ end
101
+
102
+ # 删除模块中的Aimfile
103
+ def delete_config_file(path)
104
+ file_name = path + '/Aimfile'
105
+ if FileTest.exist?(file_name)
106
+ FileUtils.rm(file_name)
107
+ end
108
+ end
109
+
110
+ # 加载主模块Aimfile
111
+ main_aimfile_path = './Aimfile'
112
+ if !FileTest.exist?(main_aimfile_path)
113
+ puts "Aimfile is not exist at current folder."
114
+ exit
115
+ else
116
+ content = File.read main_aimfile_path
117
+ eval content
118
+ end
119
+
120
+ # 将主模块的Aimfile单独添加进来,保证主工程的依赖也能引入
121
+ @module_arr = Template.ret_all_module.uniq
122
+ pro_dir_str = @module_arr[0]
123
+ $sub_file_path_arr << 'sources/' + pro_dir_str + '/Aimfile'
124
+ main_tp = Template.find_by_name(pro_dir_str)
125
+
126
+ # 拷贝模板主工程文件夹,主工程是@module_arr数组的第一个
127
+ traverse('sources/' + pro_dir_str, pro_dir_str)
128
+
129
+ # 加载子模块Aimfile
130
+ $sub_file_path_arr.each do |sub_str|
131
+ if !FileTest.exist?(sub_str)
132
+ puts "#{sub_str} is not exist."
133
+ else
134
+ sub_content = File.read sub_str
135
+ eval sub_content
136
+ end
137
+ end
138
+
139
+ # 依赖去重
140
+ $dep_arr = $dep_arr.uniq
141
+ @module_arr = Template.ret_all_module.uniq
142
+
143
+ # puts @module_arr
144
+ # puts $dep_arr
145
+ # puts $sub_pod_hash
146
+ # puts $sub_pod_path_hash
147
+
148
+ # 拷贝子模块文件夹
149
+ reg = Regexp.new(/\/$/)
150
+ @module_arr.each_with_index do |module_str, index|
151
+ if module_str != main_tp.name
152
+ cur_url = $sub_pod_hash[module_str]
153
+ nRoot = $sub_need_root_hash[module_str]
154
+ if nRoot == 0
155
+ to_path = cur_url
156
+ else
157
+ if reg =~ cur_url
158
+ to_path = cur_url + module_str
159
+ else
160
+ to_path = cur_url + '/' + module_str
161
+ end
162
+ end
163
+ # puts to_path
164
+ cur_from_path = $sub_pod_path_hash[module_str]
165
+ traverse('sources/' + cur_from_path, to_path)
166
+ delete_config_file(to_path)
167
+ end
168
+ end
169
+
170
+ # 删除主模块中的Aimfile
171
+ delete_config_file(main_tp.name)
172
+
173
+ # 添加依赖到podspec文件
174
+ podspec_path = "aim_project/{{cookiecutter.product_name}}/{{cookiecutter.product_name}}.podspec"
175
+ if FileTest.exist?(podspec_path)
176
+ File.open(podspec_path, "a") do |file|
177
+ $dep_arr.each do |dep_name|
178
+ file.puts("\ts.dependency " + dep_name + "\n")
179
+ end
180
+ file.puts :end
181
+ file.close
182
+ end
183
+ end
184
+
185
+ # 添加依赖到podfile文件
186
+ podfile_path = "aim_project/{{cookiecutter.product_name}}/App/Podfile"
187
+ if FileTest.exist?(podfile_path)
188
+ File.open(podfile_path, "a") do |file|
189
+ $dep_arr.each do |dep_name|
190
+ file.puts("\tpod " + dep_name + "\n")
191
+ end
192
+ file.puts :end
193
+ file.close
194
+ end
195
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aimtp
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - ZhangLe
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-08-24 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: 项目模板生成工具,可自定义选择需要接入的模块。
14
+ email: zhangle6@asiainfo.com
15
+ executables:
16
+ - aimtp
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - bin/aimtp
21
+ - lib/aimtp.rb
22
+ homepage: http://rubygems.org
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubygems_version: 3.0.3
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: 项目模板生成工具
45
+ test_files: []