lhj-tools 0.2.27 → 0.2.28

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0cd0cf9fa51bf5e5ec87fbca804a09979f31353bc6c85e7b39bd53135a92c503
4
- data.tar.gz: d1bded3032e77cd2fa59f83c47743079c986c4110816352206dec3348c9b28a9
3
+ metadata.gz: e94e1905e459e9be531bc985e002c26e743c7c642d2489fb4f8ed5eb0ec84c29
4
+ data.tar.gz: c381978186ef918f95428253f355ba7abef8e5d3310e905efadcac868b4b5e26
5
5
  SHA512:
6
- metadata.gz: 1718fdbdf8e3582362c6dfc82b77af13ae8159301312c99fc65ea7b26a6c50e64c7466722899f65c3198513fb8362bcc7970d8a68ca61ecf41ae7232d157c4e0
7
- data.tar.gz: 8ffdc538278b52a894e32e4352981e2692cbefda23c2c0430078e7e5b23189cb357de5e3cc6522caf478e751d7a156023edfb6c56504cc4d479002b83ec98a2c
6
+ metadata.gz: 8f01e8a6806633435912ac4a87fbd9bf5821ebfe5c8dcc39b994628edb0e832b5605508324e6252945fb35faa263b7673668733d294201ed7a8417bb1e145b43
7
+ data.tar.gz: d107bd31f5334a85265af95da2b1cf45bbb3f765582b9f20304b38f10c420fc50ef5ef56a3d405a4081aa1980b41503fbd34adfc0d1847fc7c8321439eebd3bb
@@ -31,17 +31,47 @@ module Lhj
31
31
  end
32
32
 
33
33
  def handle
34
+ api = Lhj::YapiHelper.new(project_id: 694, interface_id: 70595, model_name: 'Order', model_pre: 'AA')
35
+ api.process
36
+ file_list = api.save_to_file
37
+ key = Lhj::IOSRobotConfig.app_key
38
+ secret = Lhj::IOSRobotConfig.app_secret
39
+ conversation_id = 'cid31Wevlrdq9L4Q0WugLb0tw=='
40
+ user_ids = []
41
+ file_list.each { |f| Lhj::Dingtalk.upload_file_and_notify(key, secret, f, conversation_id, user_ids) }
42
+
43
+ #
44
+ #
45
+ # file = File.join(Lhj::Config.instance.home_dir, 'oc_code_notify.erb')
46
+ # conversation_id = 'cid31Wevlrdq9L4Q0WugLb0tw=='
47
+ # user_ids = []
48
+ # base_name = File.basename(file)
49
+ # file_type = File.extname(file)[1..-1]
50
+ #
51
+ # key = Lhj::IOSRobotConfig.app_key
52
+ # secret = Lhj::IOSRobotConfig.app_secret
53
+ # token = Lhj::Dingtalk.get_token(key, secret)
54
+ # content = File.open(file)
55
+ # media_id = Lhj::Dingtalk.upload(token, content)
56
+ # msg_key = 'sampleFile'
57
+ # msg_param = Lhj::Dingtalk.sample_file_param(media_id, base_name, file_type)
58
+ # msg_body = Lhj::Dingtalk.group_message_body(key, conversation_id, user_ids, msg_key, msg_param)
59
+ # Lhj::Dingtalk.send_group_message(token, msg_body)
60
+
61
+ # task = l.find { |task| d.include?(task) }
62
+ # puts task
63
+
34
64
  job_name = 'aom_uat_haijian'
35
65
  # job_name = 'aom_uat_haijian'
36
- server_ip = Lhj::JenkinsConfig.server_ip
37
- server_port = Lhj::JenkinsConfig.server_port
38
- username = Lhj::JenkinsConfig.username
39
- password = Lhj::JenkinsConfig.password
40
- client = JenkinsApi::Client.new(server_ip: server_ip, server_port: server_port, username: username, password: password)
41
-
42
- client.job.list_all.each do |a|
43
- add_property(client, a, 'WEBHOOK', 'https://oapi.dingtalk.com/robot/sendBySession?session=bd640dea6cd28b6c880c4f3cc0945c8f', 'Webhook url')
44
- end
66
+ # server_ip = Lhj::JenkinsConfig.server_ip
67
+ # server_port = Lhj::JenkinsConfig.server_port
68
+ # username = Lhj::JenkinsConfig.username
69
+ # password = Lhj::JenkinsConfig.password
70
+ # client = JenkinsApi::Client.new(server_ip: server_ip, server_port: server_port, username: username, password: password)
71
+ #
72
+ # client.job.list_all.each do |a|
73
+ # add_property(client, a, 'WEBHOOK', 'https://oapi.dingtalk.com/robot/sendBySession?session=bd640dea6cd28b6c880c4f3cc0945c8f', 'Webhook url')
74
+ # end
45
75
  # puts client.job.get_config('aomi_uat')
46
76
  #
47
77
  end
@@ -134,5 +134,112 @@ module Lhj
134
134
  'feedCard' => links
135
135
  }.to_json
136
136
  end
137
+
138
+ def self.get_token(app_key, app_secret)
139
+ token_url = "https://oapi.dingtalk.com/gettoken?appkey=#{app_key}&appsecret=#{app_secret}"
140
+ url = URI(token_url)
141
+ https = Net::HTTP.new(url.host, url.port)
142
+ https.use_ssl = true
143
+ request = Net::HTTP::Get.new(url)
144
+ response = https.request(request)
145
+ res_body = JSON.parse(response.body)
146
+ res_body['access_token'] if res_body['errcode'].to_i.zero?
147
+ end
148
+
149
+ def self.post_token(app_key, app_secret)
150
+ url = URI('https://api.dingtalk.com/v1.0/oauth2/accessToken')
151
+ https = Net::HTTP.new(url.host, url.port)
152
+ https.use_ssl = true
153
+ request = Net::HTTP::Post.new(url)
154
+ request['Content-Type'] = 'application/json'
155
+ request.body = { 'appKey' => app_key, 'appSecret' => app_secret }.to_json
156
+ response = https.request(request)
157
+ JSON.parse(response.body)['accessToken']
158
+ end
159
+
160
+ def self.upload(token, file)
161
+ upload_url = "https://oapi.dingtalk.com/media/upload?access_token=#{token}"
162
+ url = URI(upload_url)
163
+ https = Net::HTTP.new(url.host, url.port)
164
+ https.use_ssl = true
165
+ request = Net::HTTP::Post.new(url)
166
+ form_data = [['media', file], ['type', 'file']]
167
+ request.set_form(form_data, 'multipart/form-data')
168
+ response = https.request(request)
169
+ res_body = JSON.parse(response.body)
170
+ res_body['media_id'] if res_body['errcode'].to_i.zero?
171
+ end
172
+
173
+ def self.send_group_message(token, body)
174
+ url = URI('https://api.dingtalk.com/v1.0/robot/groupMessages/send')
175
+ https = Net::HTTP.new(url.host, url.port)
176
+ https.use_ssl = true
177
+ request = Net::HTTP::Post.new(url)
178
+ request['x-acs-dingtalk-access-token'] = token
179
+ request['Content-Type'] = 'application/json'
180
+ request.body = body
181
+ response = https.request(request)
182
+ JSON.parse(response.body)
183
+ end
184
+
185
+ # sampleText,sampleMarkdown,sampleImageMsg,sampleLink,sampleActionCard,sampleActionCard6,sampleAudio,sampleFile,sampleVideo
186
+ def self.group_message_body(robot_code, conversation_id, user_ids, msg_key, msg_param)
187
+ {
188
+ 'robotCode' => robot_code,
189
+ 'openConversationId' => conversation_id,
190
+ 'userIds' => user_ids,
191
+ 'msgKey' => msg_key,
192
+ 'msgParam' => msg_param
193
+ }.to_json
194
+ end
195
+
196
+ def self.sample_text_param(content)
197
+ {
198
+ 'content' => content
199
+ }.to_json
200
+ end
201
+
202
+ def self.sample_markdown_param(title, text)
203
+ {
204
+ 'title' => title,
205
+ 'text' => text
206
+ }.to_json
207
+ end
208
+
209
+ def self.sample_image_msg_param(photo_url)
210
+ {
211
+ 'photoURL' => photo_url
212
+ }.to_json
213
+ end
214
+
215
+ def self.sample_file_param(media_id, file_name, file_type)
216
+ {
217
+ 'mediaId' => media_id,
218
+ 'fileName' => file_name,
219
+ 'fileType' => file_type
220
+ }.to_json
221
+ end
222
+
223
+ def self.sample_video_param(duration, video_media_id, video_type, pic_media_id)
224
+ {
225
+ 'duration' => duration,
226
+ 'videoMediaId' => video_media_id,
227
+ 'videoType' => video_type,
228
+ 'picMediaId' => pic_media_id
229
+ }.to_json
230
+ end
231
+
232
+ def self.upload_file_and_notify(key, secret, upload_file, conversation_id, user_ids)
233
+ base_name = File.basename(upload_file)
234
+ file_type = File.extname(upload_file)[1..-1]
235
+ token = get_token(key, secret)
236
+ content = File.open(upload_file)
237
+ media_id = upload(token, content)
238
+ msg_key = 'sampleFile'
239
+ msg_param = sample_file_param(media_id, base_name, file_type) if media_id
240
+ msg_body = group_message_body(key, conversation_id, user_ids, msg_key, msg_param) if msg_param
241
+ send_group_message(token, msg_body) if msg_body
242
+ end
243
+
137
244
  end
138
245
  end
@@ -5,7 +5,7 @@ module Lhj
5
5
  # ios Robot Config
6
6
  class IOSRobotConfig
7
7
 
8
- CONFIG_NAME = 'robot_notify_config.yml'
8
+ CONFIG_NAME = 'ios_robot_config.yml'
9
9
 
10
10
  def self.config_file
11
11
  File.join(Lhj::Config.instance.home_dir, CONFIG_NAME)
@@ -15,25 +15,16 @@ module Lhj
15
15
  @yaml ||= YAML.load_file(config_file)
16
16
  end
17
17
 
18
- def self.fetch_robot_url(conversation)
19
- url = config[0]['robot_url']
20
- robot = config.find { |r| r['conversation_title'].eql?(conversation) } if conversation
21
- url = robot['robot_url'] if robot && robot['robot_url']
22
- url
18
+ def self.agent_id
19
+ config['agent_id']
23
20
  end
24
21
 
25
- def self.fetch_robot_title(conversation)
26
- title = '信息来自iOS机器人'
27
- robot = config.find { |r| r['conversation_title'].eql?(conversation) } if conversation
28
- title = robot['message_title'] if robot && robot['message_title']
29
- title
22
+ def self.app_key
23
+ config['app_key']
30
24
  end
31
25
 
32
- def self.fetch_robot_message_type(conversation)
33
- type = :markdown
34
- robot = config.find { |r| r['conversation_title'].eql?(conversation) } if conversation
35
- type = :text if robot && robot['message_type'] && robot['message_type'].eql?('text')
36
- type
26
+ def self.app_secret
27
+ config['app_secret']
37
28
  end
38
29
  end
39
30
  end
@@ -0,0 +1,453 @@
1
+ require 'json'
2
+
3
+ module Lhj
4
+ # yapi helper
5
+ class YapiHelper
6
+
7
+ API_INTERFACE_URL = 'api/interface/get'.freeze
8
+ API_PROJECT_URL = 'api/project/get'.freeze
9
+
10
+ attr_reader :project_id, :interface_id, :model_pre, :model_name, :language
11
+
12
+ def initialize(args)
13
+ args.each { |key, value| instance_variable_set("@#{key}", value) } if args.is_a? Hash
14
+
15
+ raise ArgumentError, 'add project_id and interface_id args' unless @project_id || @interface_id
16
+
17
+ @base_url ||= Lhj::YapiTokenConfig.base_url
18
+ @language ||= :oc
19
+ @model_pre ||= 'ML'
20
+ @model_name ||= 'Info'
21
+ @model_suffix ||= 'Model'
22
+ end
23
+
24
+ def interface_url_str
25
+ token = Lhj::YapiTokenConfig.token(@project_id)
26
+ "#{@base_url}/#{API_INTERFACE_URL}?id=#{@interface_id}&token=#{token}"
27
+ end
28
+
29
+ def project_url_str
30
+ token = Lhj::YapiTokenConfig.token(@project_id)
31
+ "#{@base_url}/#{API_PROJECT_URL}?token=#{token}"
32
+ end
33
+
34
+ def api_original_url
35
+ "#{@base_url}/project/#{@project_id}/interface/api/#{@interface_id}"
36
+ end
37
+
38
+ def process
39
+ res_body = get_interface_api_model
40
+ # get project info
41
+ project_info = get_project_info
42
+ # 1.print response result
43
+ res_models = print_res_body_model(res_body)
44
+ # 2.print request json body
45
+ req_models = print_req_body_model(res_body) if res_body['data']['req_body_is_json_schema']
46
+ # 3.print request param
47
+ req_models ||= print_req_query(res_body['data']) unless res_body['data']['req_body_is_json_schema']
48
+ # 4.print request method
49
+ print_http_method(res_body['data'], project_info)
50
+ # print request mock data
51
+ print_mock_request_data(req_models) if !req_models.nil? && !req_models.empty?
52
+ end
53
+
54
+ def save_to_file
55
+ name = model_name
56
+ file_name = gen_model_name
57
+ n_folder = File.expand_path(sub_folder_name, '.')
58
+ FileUtils.mkdir_p(n_folder) unless File.exist?(n_folder)
59
+ h_file = File.join('.', sub_folder_name, "#{file_name}.h")
60
+ m_file = File.join('.', sub_folder_name, "#{file_name}.m")
61
+ service_file = File.join('.', sub_folder_name, "#{model_pre}#{name}Service.m")
62
+ req_mock_file = File.join('.', sub_folder_name, "#{model_pre}#{name}Mock.m")
63
+
64
+ result = []
65
+ if @h_file_array.count.positive?
66
+ File.write(h_file, @h_file_array.join("\n"))
67
+ result << h_file
68
+ end
69
+ if @m_file_array.count.positive?
70
+ File.write(m_file, @m_file_array.join("\n"))
71
+ result << m_file
72
+ end
73
+ if @service_content
74
+ File.write(service_file, @service_content)
75
+ result << service_file
76
+ end
77
+ if @req_mock_array&.count&.positive?
78
+ File.write(req_mock_file, @req_mock_array.join("\n"))
79
+ result << req_mock_file
80
+ end
81
+ result
82
+ end
83
+
84
+ def puts_h(str)
85
+ puts str.magenta
86
+ @h_file_array ||= []
87
+ @h_file_array << str
88
+ end
89
+
90
+ def puts_m(str)
91
+ puts str.blue
92
+ @m_file_array ||= []
93
+ @m_file_array << str
94
+ end
95
+
96
+ def puts_s(str)
97
+ puts str.green
98
+ @service_content = str
99
+ end
100
+
101
+ def puts_mock(str)
102
+ puts str.green
103
+ @req_mock_array ||= []
104
+ @req_mock_array << str
105
+ end
106
+
107
+ def sub_folder_name
108
+ return @sub_folder_name if @sub_folder_name
109
+
110
+ time = Time.now
111
+ @sub_folder_name ||= time.strftime('%Y%m%d%H%M%S')
112
+ @sub_folder_name
113
+ end
114
+
115
+ def req_model_name
116
+ 'RequestParam'
117
+ end
118
+
119
+ def model_suffix
120
+ @model_suffix || 'Model'
121
+ end
122
+
123
+ def property_mapper
124
+ { 'id' => 'gid' }
125
+ end
126
+
127
+ def get_interface_api_model
128
+ url = URI.parse(interface_url_str)
129
+ http = Net::HTTP.new(url.host, url.port)
130
+ request = Net::HTTP::Get.new(url)
131
+
132
+ response = http.request(request)
133
+ res_json = JSON.parse(response.body)
134
+ puts response.body unless res_json['errcode'].to_i.zero?
135
+ res_json
136
+ end
137
+
138
+ def get_project_info
139
+ url_str = project_url_str
140
+ url = URI.parse(url_str)
141
+ http = Net::HTTP.new(url.host, url.port)
142
+ request = Net::HTTP::Get.new(url)
143
+ response = http.request(request)
144
+ JSON.parse(response.body)
145
+ end
146
+
147
+ def print_res_body_model(res_json)
148
+ res_body = fetch_res_boy(res_json)
149
+ return unless res_body
150
+
151
+ puts "\n<===============打印返回数据模型-Begin=====================>\n".green
152
+ models = []
153
+ handle_model(res_body, :res) do |model|
154
+ models << model
155
+ end
156
+ case language
157
+ when :oc
158
+ print_models(models)
159
+ print_models_impl(models)
160
+ when :java
161
+ print_models_for_java(models)
162
+ end
163
+ puts "\n<===============打印返回数据模型-End=====================>\n".green
164
+ models
165
+ end
166
+
167
+ def print_req_body_model(res_json)
168
+ req_body = fetch_req_body(res_json)
169
+ return unless req_body
170
+
171
+ puts "\n<===============打印请求模型-Begin=====================>\n".green
172
+ models = []
173
+ handle_model(req_body, :req) do |model|
174
+ models << model
175
+ end
176
+ case language
177
+ when :oc
178
+ print_models(models)
179
+ print_models_impl(models)
180
+ when :java
181
+ print_models_for_java(models)
182
+ end
183
+ puts "\n<===============打印请求模型-End=====================>\n".green
184
+ models
185
+ end
186
+
187
+ def fetch_res_boy(res_json)
188
+ return if !res_json || !res_json['data'] || !res_json['data']['res_body']
189
+
190
+ res_body = JSON.parse(res_json['data']['res_body'])
191
+
192
+ result = res_body
193
+ result = res_body['properties']['detailMsg'] if res_body['properties'] && res_body['properties']['detailMsg']
194
+
195
+ return unless result['type'] == 'object' || result['type'] == 'array'
196
+
197
+ result['name'] = gen_model_name
198
+ result
199
+ end
200
+
201
+ def fetch_req_body(res_json)
202
+ return if !res_json || !res_json['data'] || !res_json['data']['req_body_other']
203
+
204
+ result = JSON.parse(res_json['data']['req_body_other'])
205
+ result['name'] = gen_model_name(nil, :req)
206
+ result
207
+ end
208
+
209
+ def gen_model_name(property_name = nil, type = :res)
210
+ name = model_name
211
+ unless property_name.nil?
212
+ name = property_name.gsub(/vo|model|list/i, '').gsub(/(.*)s$/, '\1').gsub(/^\w/) { Regexp.last_match(0).upcase }
213
+ name = property_name.gsub(/^\w/) { Regexp.last_match(0).upcase } if name.length <= 0
214
+ end
215
+ if type == :req
216
+ "#{model_pre}#{name}#{req_model_name}"
217
+ else
218
+ "#{model_pre}#{name}#{model_suffix}"
219
+ end
220
+ end
221
+
222
+ def handle_model(model, type, &block)
223
+ p_type = model['type']
224
+ p_name = model['name']
225
+ p_properties = model['properties']
226
+ p_model = { name: p_name }
227
+
228
+ properties = []
229
+ case p_type
230
+ when 'object'
231
+ p_properties.each do |k, v|
232
+ c_type = v['type']
233
+ c_model = { key: k, type: c_type, description: v['description'], default: '' }
234
+ if v['type'].eql?('object') || v['type'].eql?('array')
235
+ o = v['items'] || v
236
+ o['name'] = gen_model_name(k, type)
237
+ if v['type'].eql?('array') && v['items']['type'].eql?('string')
238
+ c_model[:type_name] = 'NSString'
239
+ else
240
+ c_model[:type_name] = o['name']
241
+ handle_model(o, type, &block)
242
+ end
243
+ end
244
+ properties << c_model
245
+ end
246
+ p_model[:properties] = properties
247
+ block[p_model] if block_given?
248
+ when 'array'
249
+ t = model['items']
250
+ t['name'] = p_name
251
+ handle_model(t, type, &block)
252
+ end
253
+ end
254
+
255
+ def print_models(models)
256
+ models.each do |model|
257
+ model_name = model[:name] || ''
258
+ model_properties = model[:properties]
259
+ puts_h "@interface #{model_name} : NSObject"
260
+ model_properties.each do |m|
261
+ print_model(m)
262
+ end
263
+ puts_h "@end\n\n\n"
264
+ end
265
+ end
266
+
267
+ def print_models_for_java(models)
268
+ models.each do |model|
269
+ model_name = model[:name] || ''
270
+ model_properties = model[:properties]
271
+ puts_h "public class #{model_name} extends BaseModel implements BusinessEvent.ProductDataCollect {"
272
+ model_properties.each do |m|
273
+ print_model_for_java(m)
274
+ end
275
+ puts_h "}\n\n\n"
276
+ end
277
+ end
278
+
279
+ def print_models_impl(models)
280
+ models.each do |model|
281
+ puts_m "@implementation #{model[:name]}"
282
+ str = model[:properties].filter { |p| p[:type].eql?('array') && !p[:type_name].eql?('NSString') }.map { |p| "@\"#{p[:key]}\": #{p[:type_name]}.class" }.join(', ')
283
+ if str&.length&.positive?
284
+ puts_m '+(NSDictionary *)modelContainerPropertyGenericClass {'
285
+ puts_m " return @{#{str}};"
286
+ puts_m '}'
287
+ end
288
+ properties = model[:properties].filter { |p| property_mapper.keys.include?(p[:key]) }.map do |p|
289
+ "@\"#{property_mapper[p[:key]]}\": @\"#{p[:key]}\""
290
+ end
291
+ property_mapper_str = properties.join(', ') if properties.count.positive?
292
+ if property_mapper_str&.length&.positive?
293
+ puts_m '+ (NSDictionary<NSString *, id> *)modelCustomPropertyMapper {'
294
+ puts_m " return @{#{property_mapper_str}};"
295
+ puts_m '}'
296
+ end
297
+ puts_m "@end\n"
298
+ puts "\n\n"
299
+ end
300
+ end
301
+
302
+ def print_model(m)
303
+ key = m[:key]
304
+ key = property_mapper[key] if property_mapper.keys.include?(key)
305
+ type_name = m[:type_name]
306
+ type = m[:type]
307
+ des = m[:description] || ''
308
+ des.gsub!(/\n/, ' ')
309
+ default = m[:default]
310
+ puts_h "///#{des} #{default}"
311
+ case type
312
+ when 'integer'
313
+ puts_h "@property (nonatomic, assign) NSInteger #{key};"
314
+ when 'string'
315
+ puts_h "@property (nonatomic, copy) NSString *#{key};"
316
+ when 'number'
317
+ puts_h "@property (nonatomic, strong) NSNumber *#{key};"
318
+ when 'float'
319
+ puts_h "@property (nonatomic, assign) CGFloat #{key};"
320
+ when 'double'
321
+ puts_h "@property (nonatomic, assign) double #{key};"
322
+ when 'boolean'
323
+ puts_h "@property (nonatomic, assign) BOOL #{key};"
324
+ when 'object'
325
+ puts_h "@property (nonatomic, strong) #{type_name} *#{key};"
326
+ when 'array'
327
+ puts_h "@property (nonatomic, strong) NSArray<#{type_name} *> *#{key};"
328
+ else
329
+ puts_h "@property (nonatomic, copy) NSString *#{key};"
330
+ end
331
+ end
332
+
333
+ def print_model_for_java(m)
334
+ key = m[:key]
335
+ type_name = m[:type_name]
336
+ type = m[:type]
337
+ des = m[:description] || ''
338
+ des.gsub!(/\n/, ' ')
339
+ default = m[:default]
340
+ case type
341
+ when 'integer'
342
+ puts_h "int #{key};//#{des} #{default}"
343
+ when 'string'
344
+ puts_h "String #{key};//#{des} #{default}"
345
+ when 'number'
346
+ puts_h "double #{key};//#{des} #{default}"
347
+ when 'float'
348
+ puts_h "double #{key};//#{des} #{default}"
349
+ when 'double'
350
+ puts_h "double #{key};//#{des} #{default}"
351
+ when 'boolean'
352
+ puts_h "boolean #{key};//#{des} #{default}"
353
+ when 'object'
354
+ puts_h "#{type_name} #{key};//#{des} #{default}"
355
+ when 'array'
356
+ puts_h "#{type_name}[] #{key};//#{des} #{default}"
357
+ else
358
+ puts_h "String #{key};//#{des} #{default}"
359
+ end
360
+ end
361
+
362
+ # @param [Object] data
363
+ def print_req_query(data)
364
+ return unless data && data['req_query']
365
+
366
+ properties = []
367
+ data['req_query'].each do |h|
368
+ properties << { key: h['name'], type: 'string', description: h['desc'], default: '' }
369
+ end
370
+ param_model_name = gen_model_name(nil, :req)
371
+ req_model = { name: param_model_name, properties: properties }
372
+
373
+ models = [req_model]
374
+ print_models(models)
375
+ print_models_impl(models)
376
+ models
377
+ end
378
+
379
+ def print_http_method(data, project_info)
380
+ return unless data
381
+
382
+ path = data['path']
383
+ if path
384
+ arr = path.split('/').map do |s|
385
+ re = s.gsub(/[^A-Za-z0-9](.)/) { Regexp.last_match(0).upcase }
386
+ re = re.gsub(/[^A-Za-z0-9]/, '')
387
+ re.gsub(/^\w/) { Regexp.last_match(0).upcase }
388
+ end
389
+ path_name = arr.join('')
390
+ end
391
+ path_key = "k#{path_name}URL"
392
+ display_path = "#{project_info['data']['basepath']}#{path}"
393
+ display_path = display_path[1..-1] if display_path.index('/') == 0
394
+ result_model_name = gen_model_name
395
+ param_model_name = gen_model_name(nil, :req)
396
+ mth = data['method']
397
+ mth = 'JSON' if data['req_body_is_json_schema']
398
+ case language
399
+ when :oc
400
+ puts "\n<===============方法调用=====================>\n".green
401
+ model_temp = Lhj::ErbTemplateHelper.load('oc_code_service_inner')
402
+ model_temp_result = Lhj::ErbTemplateHelper.render(model_temp, { result_model_name: result_model_name }, '-')
403
+
404
+ yapi_temp = Lhj::ErbTemplateHelper.load('oc_code_service')
405
+ yapi_vars = { title: data['title'],
406
+ desc: data['desc'],
407
+ username: data['username'],
408
+ path: display_path,
409
+ path_key: path_key,
410
+ path_name: path_name,
411
+ result_model_name: result_model_name,
412
+ param_model_name: param_model_name,
413
+ mth: mth,
414
+ model_template: model_temp_result }
415
+ yapi_temp_result = Lhj::ErbTemplateHelper.render(yapi_temp, yapi_vars, '-')
416
+ puts_s(yapi_temp_result)
417
+ when :java
418
+ end
419
+
420
+ end
421
+
422
+ def print_mock_request_data(req_models)
423
+ puts "\n<===============打印Mock Data-Begin=====================>\n".green
424
+ req_models.each do |model|
425
+ model_name = model[:name] || ''
426
+ model_properties = model[:properties]
427
+ puts_mock "#{model_name} *mock = [[#{model_name} alloc] init];"
428
+ model_properties.each do |m|
429
+ puts_mock "/// #{m[:description]}"
430
+ type = m[:type]
431
+ case type
432
+ when 'integer'
433
+ puts_mock "mock.#{m[:key]} = 0;"
434
+ when 'number'
435
+ puts_mock "mock.#{m[:key]} = 0;"
436
+ when 'float'
437
+ puts_mock "mock.#{m[:key]} = 0;"
438
+ when 'double'
439
+ puts_mock "mock.#{m[:key]} = 0;"
440
+ when 'object'
441
+ puts_mock "mock.#{m[:key]} = @{};"
442
+ when 'array'
443
+ puts_mock "mock.#{m[:key]} = @[];"
444
+ else
445
+ puts_mock "mock.#{m[:key]} = @\"\";"
446
+ end
447
+ end
448
+ puts_mock "\n\n"
449
+ end
450
+ puts "\n<===============打印Mock Data-End=====================>\n".green
451
+ end
452
+ end
453
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+ require 'yaml'
3
+
4
+ module Lhj
5
+ # yapi token Config
6
+ class YapiTokenConfig
7
+
8
+ CONFIG_NAME = 'yapi_token_config.yml'
9
+
10
+ def self.config_file
11
+ File.join(Lhj::Config.instance.home_dir, CONFIG_NAME)
12
+ end
13
+
14
+ def self.config
15
+ @yaml ||= YAML.load_file(config_file)
16
+ end
17
+
18
+ def self.base_url
19
+ config['base_url']
20
+ end
21
+
22
+ def self.webhook
23
+ config['webhook']
24
+ end
25
+
26
+ def self.token(project_id)
27
+ c = config['projects'].find { |i| i['project'] == project_id }
28
+ return c['token'] if c
29
+ end
30
+
31
+ def self.name(project_id)
32
+ c = config['projects'].find { |i| i['project'] == project_id }
33
+ return c['name'] if c
34
+ end
35
+ end
36
+ end
data/lib/lhj/lhj.rb CHANGED
@@ -14,6 +14,8 @@ module Lhj
14
14
  require 'lhj/helper/chat_gpt_config'
15
15
  require 'lhj/helper/pod_repo_config'
16
16
  require 'lhj/helper/git_branch_feature_config'
17
+ require 'lhj/helper/yapi/yapi_token_config'
18
+ require 'lhj/helper/yapi/yapi_helper'
17
19
  require 'lhj/helper/erb_template_helper'
18
20
  require 'lhj/helper/trans_helper'
19
21
  require 'lhj/helper/pgyer_helper'
data/lib/lhj/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Lhj
4
- VERSION = '0.2.27'
4
+ VERSION = '0.2.28'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lhj-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.27
4
+ version: 0.2.28
5
5
  platform: ruby
6
6
  authors:
7
7
  - lihaijian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-23 00:00:00.000000000 Z
11
+ date: 2023-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj
@@ -408,6 +408,8 @@ files:
408
408
  - lib/lhj/helper/trans_helper.rb
409
409
  - lib/lhj/helper/vika_config.rb
410
410
  - lib/lhj/helper/vika_helper.rb
411
+ - lib/lhj/helper/yapi/yapi_helper.rb
412
+ - lib/lhj/helper/yapi/yapi_token_config.rb
411
413
  - lib/lhj/lhj.rb
412
414
  - lib/lhj/tree/directory_renderer.rb
413
415
  - lib/lhj/tree/hash_walker.rb