lhj-tools 0.1.65 → 0.1.66

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: a240ecea0c02bc2351914fa2106519b155f9a10dd6e0cd949633ce61b38008bc
4
- data.tar.gz: 10726a49406152ef2fdf5033566d0b5a0641f60955c61dc64d46400019816d7c
3
+ metadata.gz: 6df1841d5e97dbe6377056223a5f2c0ccfed590f6747080384bdc3cbace9d074
4
+ data.tar.gz: bfc4897e5922f4375142b45d48b2f599e82a36915e0017023fd5a956aa2970aa
5
5
  SHA512:
6
- metadata.gz: b0c20d242daf9fc0bae5c8fc4823f25d92098637dd72740cc7380b9512902a73cb7a5aa0181b6b5d7df2fa4d30cd236966a63d06f841716347fe8c2298c75953
7
- data.tar.gz: 4041061d05b0003afa3579812b16abccfdcd150347d7f6099ad9281d1dd71a77688c00c4aecd5dd8e2210c2f700ae25d0f0d864a74279cdcfee729dfdf4ab333
6
+ metadata.gz: 5da3a711e8d422449eb1d71edbb6587d9a0c90dd65af4bca924cc3979e1954f0f3743f9b2f883b3f630430f32117618424b0179c147b2fa3fdf212800fb1cbd4
7
+ data.tar.gz: 5dc4eaf4e99f1a195dfce0f9b9a8411db60dd1b5415264a01b61e8424c5da6ccf4bfeec34d410216d966bdbeeeeae1f21827e40d2081d85790d0772568a0553a
@@ -3,6 +3,8 @@ require 'uri'
3
3
  require 'json'
4
4
  require 'yaml'
5
5
  require 'lhj/command/yapi/formatters/service'
6
+ require 'lhj/helper/dingtalk_config'
7
+ require 'lhj/helper/erb_template_helper'
6
8
 
7
9
  module Lhj
8
10
  class Command
@@ -22,10 +24,13 @@ module Lhj
22
24
  def initialize(argv)
23
25
  @id = argv.option('id')
24
26
  @model_pre_name = argv.option('model-pre')
27
+ @language = argv.option('lan', 'oc')
25
28
  @save = argv.flag?('save', false)
29
+ @sync = argv.flag?('sync', false)
30
+ @notify = argv.flag?('notify', false)
26
31
  @debug = argv.flag?('debug', false)
27
- @language = argv.option('lan', 'oc')
28
- @http_url = ''
32
+ @sync = true if @notify
33
+ @save = true if @sync
29
34
  @http_headers = []
30
35
  @config_id = ''
31
36
  @config_model_pre = 'ML'
@@ -33,26 +38,10 @@ module Lhj
33
38
  @type_trans = {}
34
39
  @config_model_names = []
35
40
  @model_names = []
36
- # <<<===== model for template
37
- @result_model_name = ''
38
- @param_model_name = ''
39
- @model_template = ''
40
- @desc = ''
41
- @path = ''
42
- @path_name = ''
43
- @path_key = ''
44
- @method = 'GET'
45
- @title = ''
46
- @username = ''
47
- @req_body_is_json_schema = false
48
- # =====>>>
41
+ @http_url = ''
49
42
  super
50
43
  end
51
44
 
52
- def begin_title
53
- '读取配置文件~/.lhj/yapi.yml'
54
- end
55
-
56
45
  def handle
57
46
  process(yml_file) if File.exist?(yml_file)
58
47
  end
@@ -67,22 +56,19 @@ module Lhj
67
56
  return unless res_body && !res_body.empty?
68
57
 
69
58
  # 1.print request result
70
- print_res_body_model(res_body)
59
+ result_model_name = print_res_body_model(res_body)
71
60
  # 2.print request json body
72
- print_req_body_model(res_body)
61
+ param_model_name = print_req_body_model(res_body)
73
62
  # 3.print request param
74
63
  print_req_query(res_body['data'])
75
64
  # 4.print request method
76
- print_http_method(res_body['data'])
65
+ service_code = print_http_method(res_body['data'], result_model_name, param_model_name)
77
66
  # 5.save to file
78
- save_to_file if @save
79
- end
80
-
81
- def test_ding
82
- require 'net/http'
83
- require 'uri'
84
- body = { 'msgtype' => 'text', 'text' => { 'content' => 'error:上传蒲公英超时失败!' } }.to_json
85
- Net::HTTP.post(URI('https://oapi.dingtalk.com/robot/send?access_token=6a3519057170cdb1b7274edfe43934c84a0062ffe2c9bcced434699296a7e26e'), body, 'Content-Type' => 'application/json')
67
+ file_map = save_to_file(service_code) if @save
68
+ # 6.push to git
69
+ push_to_git if @sync
70
+ # 7.notify robot
71
+ notify_robot(file_map) if @notify
86
72
  end
87
73
 
88
74
  def puts_h(str)
@@ -103,17 +89,43 @@ module Lhj
103
89
  @m_file_array << str
104
90
  end
105
91
 
106
- def save_to_file
92
+ def sub_folder_name
93
+ return @sub_folder_name if @sub_folder_name
94
+
95
+ time = Time.now
96
+ @sub_folder_name ||= time.strftime('%Y%m%d%H%M%S')
97
+ @sub_folder_name
98
+ end
99
+
100
+ def save_to_file(service_code)
107
101
  @model_names = []
102
+ model_name = @config_model_names.frist
108
103
  file_name = gen_model_name('')
109
- time = Time.now
110
- folder_name = time.strftime('%Y%m%d%H%M%S')
111
- FileUtils.mkdir_p(File.expand_path(folder_name, '.')) unless File.exist?(File.expand_path(folder_name, '.'))
112
- h_file = File.join('.', folder_name, "#{file_name}.h")
113
- m_file = File.join('.', folder_name, "#{file_name}.m")
104
+ unless File.exist?(File.expand_path(sub_folder_name, '.'))
105
+ FileUtils.mkdir_p(File.expand_path(sub_folder_name, '.'))
106
+ end
107
+ h_file = File.join('.', sub_folder_name, "#{file_name}.h")
108
+ m_file = File.join('.', sub_folder_name, "#{file_name}.m")
109
+ service_file = File.join('.', sub_folder_name, "#{model_pre}#{model_name}Service.m")
114
110
  File.write(h_file, @h_file_array.join("\n")) if @h_file_array.count.positive?
115
111
  File.write(m_file, @m_file_array.join("\n")) if @m_file_array.count.positive?
112
+ File.write(service_file, service_code) if service_code
116
113
  puts "\n\n生成文件成功!所在路径:\n#{File.expand_path(h_file)} \n#{File.expand_path(m_file)}".green
114
+ { h_file: h_file, m_file: m_file, s_file: service_file }
115
+ end
116
+
117
+ def push_to_git
118
+ Actions.sh('git checkout master', log: false)
119
+ Actions.sh('git add .', log: false)
120
+ Actions.sh("git commit -m 'generate yapi code'", log: false)
121
+ Actions.sh('git push', log: false)
122
+ end
123
+
124
+ def notify_robot(template_vars)
125
+ robot_url = 'https://oapi.dingtalk.com/robot/send?access_token=fe879fd3e7a3b5e59d5719b2384845b7884901919be5a78fe443cbf777869807'
126
+ template = Lhj::ErbTemplateHelper.load('oc_code_notify')
127
+ output = Lhj::ErbTemplateHelper.render(template, template_vars, '-')
128
+ Lhj::Dingtalk.post_message_robot(robot_url, '生成代码', output)
117
129
  end
118
130
 
119
131
  def url_str
@@ -178,8 +190,8 @@ module Lhj
178
190
  when 'java'
179
191
  print_models_for_java(models)
180
192
  end
181
- @result_model_name = models.last[:name]
182
193
  puts "\n<===============打印返回数据模型-End=====================>\n".green
194
+ models.last[:name]
183
195
  end
184
196
 
185
197
  def print_req_body_model(res_json)
@@ -198,8 +210,8 @@ module Lhj
198
210
  when 'java'
199
211
  print_models_for_java(models)
200
212
  end
201
- @param_model_name = models.last[:name]
202
213
  puts "\n<===============打印请求模型-End=====================>\n".green
214
+ models.last[:name]
203
215
  end
204
216
 
205
217
  def fetch_res_boy(res_json)
@@ -379,27 +391,39 @@ module Lhj
379
391
  puts "\n\n"
380
392
  when 'java'
381
393
  end
382
- @param_model_name = 'MLParamModel' if @param_model_name.empty?
383
394
  end
384
395
 
385
- def print_http_method(data)
396
+ def print_http_method(data, result_model_name, param_model_name)
386
397
  return unless data
387
398
 
388
- @path = data['path']
389
- @method = data['method']
390
- @title = data['title']
391
- @username = data['username']
392
- @desc = data['desc']
393
- @method = 'JSON' if data['req_body_is_json_schema']
394
- @path_name = @path.split('/').map { |s| s.gsub(/[^A-Za-z0-9]/, '').gsub(/^\w/) { $&.upcase } }.join('') if @path
395
- @path_key = "k#{@path_name}URL"
399
+ path = data['path']
400
+ path_name = path.split('/').map { |s| s.gsub(/[^A-Za-z0-9]/, '').gsub(/^\w/) { $&.upcase } }.join('') if path
401
+ path_key = "k#{path_name}URL"
402
+ mth = data['method']
403
+ mth = 'JSON' if data['req_body_is_json_schema']
396
404
  case @language
397
405
  when 'oc'
398
406
  puts "\n<===============方法调用=====================>\n".green
399
- @model_template = Lhj::ErbFormatter::Service.new(self).render('model')
400
- puts Lhj::ErbFormatter::Service.new(self).render('yapi').blue
407
+ model_temp = Lhj::ErbTemplateHelper.load('oc_code_service_inner')
408
+ model_temp_result = Lhj::ErbTemplateHelper.render(model_temp, { result_model_name: result_model_name }, '-')
409
+
410
+ yapi_temp = Lhj::ErbTemplateHelper.load('oc_code_service')
411
+ yapi_vars = { title: data['title'],
412
+ desc: data['desc'],
413
+ username: data['username'],
414
+ path: path,
415
+ path_key: path_key,
416
+ path_name: path_name,
417
+ result_model_name: result_model_name,
418
+ param_model_name: param_model_name || 'MLParamModel',
419
+ mth: mth,
420
+ model_template: model_temp_result }
421
+ yapi_temp_result = Lhj::ErbTemplateHelper.render(yapi_temp, yapi_vars, '-')
422
+ puts yapi_temp_result.green
423
+ return yapi_temp_result
401
424
  when 'java'
402
425
  end
426
+
403
427
  end
404
428
  end
405
429
  end
@@ -24,6 +24,11 @@ module Lhj
24
24
  Net::HTTP.post(URI(robot_url), http_body, 'Content-Type' => 'application/json')
25
25
  end
26
26
 
27
+ def self.post_message_robot(robot_url, title, message)
28
+ http_body = { 'msgtype' => 'markdown', 'markdown' => { 'title' => title, 'text' => message } }.to_json
29
+ Net::HTTP.post(URI(robot_url), http_body, 'Content-Type' => 'application/json')
30
+ end
31
+
27
32
  def self.fetch_branch
28
33
  name = Lhj::Actions.git_branch || ''
29
34
  name.split('/').last
@@ -0,0 +1,38 @@
1
+ require 'lhj/config'
2
+
3
+ module Lhj
4
+ class ErbTemplateHelper
5
+ require "erb"
6
+ def self.load(template_name)
7
+ path = "#{Lhj::Config.instance.home_dir}/#{template_name}.erb"
8
+ load_from_path(path)
9
+ end
10
+
11
+ def self.load_from_path(template_filepath)
12
+ unless File.exist?(template_filepath)
13
+ UI.user_error!("Could not find template at path '#{template_filepath}'")
14
+ end
15
+ File.read(template_filepath)
16
+ end
17
+
18
+ def self.render(template, template_vars_hash, trim_mode = nil)
19
+ Lhj::ErbalT.new(template_vars_hash, trim_mode).render(template)
20
+ end
21
+ end
22
+ class ErbalT < OpenStruct
23
+ def initialize(hash, trim_mode = nil)
24
+ super(hash)
25
+ @trim_mode = trim_mode
26
+ end
27
+
28
+ def render(template)
29
+ # From Ruby 2.6, ERB.new takes keyword arguments and positional ones are deprecated
30
+ # https://bugs.ruby-lang.org/issues/14256
31
+ if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new("2.6.0")
32
+ ERB.new(template, trim_mode: @trim_mode).result(binding)
33
+ else
34
+ ERB.new(template, nil, @trim_mode).result(binding)
35
+ end
36
+ end
37
+ end
38
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Lhj
4
4
  module Tools
5
- VERSION = "0.1.65"
5
+ VERSION = "0.1.66"
6
6
  end
7
7
  end
data/lib/lhj/tools.rb CHANGED
@@ -14,6 +14,7 @@ module Lhj
14
14
  require 'lhj/config'
15
15
  require 'lhj/helper/pod_repo_config'
16
16
  require 'lhj/helper/git_branch_feature_config'
17
+ require 'lhj/helper/erb_template_helper'
17
18
  require 'lhj/helper/pgyer_helper'
18
19
  require 'lhj/helper/pgyer_shortcut_helper'
19
20
  require 'lhj/helper/dingtalk_helper'
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.1.65
4
+ version: 0.1.66
5
5
  platform: ruby
6
6
  authors:
7
7
  - lihaijian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-12-08 00:00:00.000000000 Z
11
+ date: 2022-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: xcodeproj
@@ -373,6 +373,7 @@ files:
373
373
  - lib/lhj/helper/app_version_info.rb
374
374
  - lib/lhj/helper/dingtalk_config.rb
375
375
  - lib/lhj/helper/dingtalk_helper.rb
376
+ - lib/lhj/helper/erb_template_helper.rb
376
377
  - lib/lhj/helper/git_branch_feature_config.rb
377
378
  - lib/lhj/helper/git_helper.rb
378
379
  - lib/lhj/helper/local_config.rb