lhj-tools 0.1.6 → 0.1.7
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/lib/lhj/action/sh_helper.rb +138 -0
- data/lib/lhj/command/config/info.rb +47 -0
- data/lib/lhj/command/config.rb +11 -0
- data/lib/lhj/command/file_path.rb +20 -0
- data/lib/lhj/command/head_import.rb +19 -3
- data/lib/lhj/command/http.rb +14 -0
- data/lib/lhj/command/init.rb +1 -3
- data/lib/lhj/command/local/fetch.rb +1 -1
- data/lib/lhj/command/local/filter.rb +1 -1
- data/lib/lhj/command/local/local.rb +1 -1
- data/lib/lhj/command/local/local_upload.rb +1 -1
- data/lib/lhj/command/local/micro_service.rb +1 -1
- data/lib/lhj/command/oss/del.rb +1 -1
- data/lib/lhj/command/oss/list.rb +1 -1
- data/lib/lhj/command/oss/upload.rb +1 -1
- data/lib/lhj/command/refactor_rename.rb +1 -1
- data/lib/lhj/command/rename_image.rb +1 -1
- data/lib/lhj/command/sync_pod_repo.rb +138 -0
- data/lib/lhj/command/trans.rb +1 -1
- data/lib/lhj/command/yapi.rb +15 -14
- data/lib/lhj/command.rb +25 -7
- data/lib/lhj/tools/version.rb +1 -1
- data/lib/lhj/tools.rb +1 -0
- data/lib/lhj/tree/hash_walker.rb +1 -1
- data/lib/lhj/tree/path_walker.rb +1 -2
- data/lib/lhj/tree/tree.rb +5 -5
- data/lib/lhj/ui/errors/lhj_common_error.rb +19 -0
- data/lib/lhj/ui/errors/lhj_crash.rb +11 -0
- data/lib/lhj/ui/errors/lhj_error.rb +25 -0
- data/lib/lhj/ui/errors/lhj_exception.rb +19 -0
- data/lib/lhj/ui/errors/lhj_shell_error.rb +11 -0
- data/lib/lhj/ui/errors.rb +1 -0
- data/lib/lhj/ui/implementations/shell.rb +148 -0
- data/lib/lhj/ui/interface.rb +205 -0
- data/lib/lhj/ui/ui.rb +26 -0
- metadata +51 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bc16cb199d5effe6c4e343846614075ce57b187a5ffc94029018b6aba9984806
|
4
|
+
data.tar.gz: 95f135ea8bc7b9149ca8c0038ddd8b385e0d56b6ff5f19f8da871c844ff5bae1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0738172f4def843dfd49872dabb456db63dec9a1f92b335dfa5fd027cbba51077890f0e693349d08b9cb91b020506fae1fd3676aa32b00d14d0d074d80331a4a'
|
7
|
+
data.tar.gz: 5b835d1c230e54377d9fa2c8ad9a847b00c37fa57a5737d60fbdf6834a1925f84033f58f429671cef50e57319e39ed18c8662bdfdd9141d403e5e72371394d8e
|
@@ -0,0 +1,138 @@
|
|
1
|
+
require "open3"
|
2
|
+
|
3
|
+
module Lhj
|
4
|
+
module Actions
|
5
|
+
# Execute a shell command
|
6
|
+
# This method will output the string and execute it
|
7
|
+
# Just an alias for sh_no_action
|
8
|
+
# When running this in tests, it will return the actual command instead of executing it
|
9
|
+
# @param log [Boolean] should fastlane print out the executed command
|
10
|
+
# @param error_callback [Block] a callback invoked with the command output if there is a non-zero exit status
|
11
|
+
def self.sh(*command, log: true, error_callback: nil, &b)
|
12
|
+
sh_control_output(*command, print_command: log, print_command_output: log, error_callback: error_callback, &b)
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.sh_no_action(*command, log: true, error_callback: nil, &b)
|
16
|
+
sh_control_output(*command, print_command: log, print_command_output: log, error_callback: error_callback, &b)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.sh_enabled?
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
# @param command The command to be executed (variadic)
|
24
|
+
# @param print_command [Boolean] Should we print the command that's being executed
|
25
|
+
# @param print_command_output [Boolean] Should we print the command output during execution
|
26
|
+
# @param error_callback [Block] A block that's called if the command exits with a non-zero status
|
27
|
+
# @yield [status, result, cmd] The return status of the command, all output from the command and an equivalent shell command
|
28
|
+
# @yieldparam [Process::Status] status A Process::Status indicating the status of the completed command
|
29
|
+
# @yieldparam [String] result The complete output to stdout and stderr of the completed command
|
30
|
+
# @yieldparam [String] cmd A shell command equivalent to the arguments passed
|
31
|
+
# rubocop: disable Metrics/PerceivedComplexity
|
32
|
+
def self.sh_control_output(*command, print_command: true, print_command_output: true, error_callback: nil)
|
33
|
+
print_command = print_command_output = true if $troubleshoot
|
34
|
+
# Set the encoding first, the user might have set it wrong
|
35
|
+
previous_encoding = [Encoding.default_external, Encoding.default_internal]
|
36
|
+
Encoding.default_external = Encoding::UTF_8
|
37
|
+
Encoding.default_internal = Encoding::UTF_8
|
38
|
+
|
39
|
+
# Workaround to support previous Fastlane syntax.
|
40
|
+
# This has some limitations. For example, it requires the caller to shell escape
|
41
|
+
# everything because of usages like ["ls -la", "/tmp"] instead of ["ls", "-la", "/tmp"].
|
42
|
+
command = [command.first.join(" ")] if command.length == 1 && command.first.kind_of?(Array)
|
43
|
+
|
44
|
+
shell_command = shell_command_from_args(*command)
|
45
|
+
UI.command(shell_command) if print_command
|
46
|
+
|
47
|
+
result = ''
|
48
|
+
exit_status = nil
|
49
|
+
if sh_enabled?
|
50
|
+
# The argument list is passed directly to Open3.popen2e, which
|
51
|
+
# handles the variadic argument list in the same way as Kernel#spawn.
|
52
|
+
# (http://ruby-doc.org/core-2.4.2/Kernel.html#method-i-spawn) or
|
53
|
+
# Process.spawn (http://ruby-doc.org/core-2.4.2/Process.html#method-c-spawn).
|
54
|
+
#
|
55
|
+
# sh "ls -la /Applications/Xcode\ 7.3.1.app"
|
56
|
+
# sh "ls", "-la", "/Applications/Xcode 7.3.1.app"
|
57
|
+
# sh({ "FOO" => "Hello" }, "echo $FOO")
|
58
|
+
Open3.popen2e(*command) do |stdin, io, thread|
|
59
|
+
io.sync = true
|
60
|
+
io.each do |line|
|
61
|
+
UI.command_output(line.strip) if print_command_output
|
62
|
+
result << line
|
63
|
+
end
|
64
|
+
exit_status = thread.value
|
65
|
+
end
|
66
|
+
|
67
|
+
# Checking Process::Status#exitstatus instead of #success? makes for more
|
68
|
+
# testable code. (Tests mock exitstatus only.) This is also consistent
|
69
|
+
# with previous implementations of sh and... probably portable to all
|
70
|
+
# relevant platforms.
|
71
|
+
if exit_status.exitstatus != 0
|
72
|
+
message = if print_command
|
73
|
+
"Exit status of command '#{shell_command}' was #{exit_status.exitstatus} instead of 0."
|
74
|
+
else
|
75
|
+
"Shell command exited with exit status #{exit_status.exitstatus} instead of 0."
|
76
|
+
end
|
77
|
+
message += "\n#{result}" if print_command_output
|
78
|
+
|
79
|
+
if error_callback || block_given?
|
80
|
+
UI.error(message)
|
81
|
+
# block notified below, on success or failure
|
82
|
+
error_callback && error_callback.call(result)
|
83
|
+
else
|
84
|
+
UI.shell_error!(message)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
else
|
88
|
+
result << shell_command # only for the tests
|
89
|
+
end
|
90
|
+
|
91
|
+
if block_given?
|
92
|
+
# Avoid yielding nil in tests. $? will be meaningless, but calls to
|
93
|
+
# it will not crash. There is no Process::Status.new. The alternative
|
94
|
+
# is to move this inside the sh_enabled? check and not yield in tests.
|
95
|
+
return yield(exit_status || $?, result, shell_command)
|
96
|
+
end
|
97
|
+
result
|
98
|
+
rescue => ex
|
99
|
+
raise ex
|
100
|
+
ensure
|
101
|
+
Encoding.default_external = previous_encoding.first
|
102
|
+
Encoding.default_internal = previous_encoding.last
|
103
|
+
end
|
104
|
+
# rubocop: enable Metrics/PerceivedComplexity
|
105
|
+
|
106
|
+
# Used to produce a shell command string from a list of arguments that may
|
107
|
+
# be passed to methods such as Kernel#system, Kernel#spawn and Open3.popen2e
|
108
|
+
# in order to print the command to the terminal. The same *args are passed
|
109
|
+
# directly to a system call (Open3.popen2e). This interpretation is not
|
110
|
+
# used when executing a command.
|
111
|
+
#
|
112
|
+
# @param args Any number of arguments used to construct a command
|
113
|
+
# @raise [ArgumentError] If no arguments passed
|
114
|
+
# @return [String] A shell command representing the arguments passed in
|
115
|
+
def self.shell_command_from_args(*args)
|
116
|
+
raise ArgumentError, "sh requires at least one argument" unless args.count > 0
|
117
|
+
|
118
|
+
command = ""
|
119
|
+
|
120
|
+
# Optional initial environment Hash
|
121
|
+
if args.first.kind_of?(Hash)
|
122
|
+
command = args.shift.map { |k, v| "#{k}=#{v.shellescape}" }.join(" ") + " "
|
123
|
+
end
|
124
|
+
|
125
|
+
# Support [ "/usr/local/bin/foo", "foo" ], "-x", ...
|
126
|
+
if args.first.kind_of?(Array)
|
127
|
+
command += args.shift.first.shellescape + " " + args.shelljoin
|
128
|
+
command.chomp!(" ")
|
129
|
+
elsif args.count == 1 && args.first.kind_of?(String)
|
130
|
+
command += args.first
|
131
|
+
else
|
132
|
+
command += args.shelljoin
|
133
|
+
end
|
134
|
+
|
135
|
+
command
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'highline'
|
2
|
+
require 'lhj/config'
|
3
|
+
|
4
|
+
module Lhj
|
5
|
+
class Command
|
6
|
+
class Config < Command
|
7
|
+
# show config info
|
8
|
+
class Info < Config
|
9
|
+
self.summary = '查看配置信息'
|
10
|
+
|
11
|
+
def initialize(argv)
|
12
|
+
@cli = HighLine.new
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
def handle
|
17
|
+
show_config
|
18
|
+
end
|
19
|
+
|
20
|
+
def show_config
|
21
|
+
config_arr = Dir.glob("#{config_dir}/**/*.yml")
|
22
|
+
config_arr.each_index { |i| puts "#{i}.#{File.basename(config_arr[i])}".yellow }
|
23
|
+
idx = ask_which_one
|
24
|
+
config_file = config_arr[idx]
|
25
|
+
show_yaml(config_file)
|
26
|
+
end
|
27
|
+
|
28
|
+
def show_yaml(file)
|
29
|
+
table_rows = []
|
30
|
+
yaml = YAML.load_file(file)
|
31
|
+
yaml.each { |key, value| table_rows << [key, value] }
|
32
|
+
title = File.basename(file).to_s
|
33
|
+
table = Terminal::Table.new title: title, headings: %w[键 值], rows: table_rows
|
34
|
+
puts table
|
35
|
+
end
|
36
|
+
|
37
|
+
def ask_which_one
|
38
|
+
@cli.ask('查看哪个配置: '.green).strip.to_i
|
39
|
+
end
|
40
|
+
|
41
|
+
def config_dir
|
42
|
+
Lhj::Config.instance.home_dir
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'lhj/tree/tree'
|
2
|
+
|
3
|
+
module Lhj
|
4
|
+
class Command
|
5
|
+
# show file path
|
6
|
+
class Filepath < Command
|
7
|
+
self.summary = '显示文件目录'
|
8
|
+
|
9
|
+
def initialize(argv)
|
10
|
+
@current_path = argv.shift_argument || Dir.pwd
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def handle
|
15
|
+
tree = Lhj::Tree.new(@current_path)
|
16
|
+
puts tree.render
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -5,7 +5,8 @@ require 'fileutils'
|
|
5
5
|
|
6
6
|
module Lhj
|
7
7
|
class Command
|
8
|
-
|
8
|
+
# modify header
|
9
|
+
class HeaderImport < Command
|
9
10
|
self.summary = '更改头文件引入'
|
10
11
|
|
11
12
|
def initialize(argv)
|
@@ -13,14 +14,16 @@ module Lhj
|
|
13
14
|
@framework = argv.option('framework')
|
14
15
|
@header_map = {}
|
15
16
|
@header_folder_map = {}
|
17
|
+
@modify_files = []
|
16
18
|
super
|
17
19
|
end
|
18
20
|
|
19
|
-
def
|
21
|
+
def handle
|
20
22
|
generate_header_map
|
21
23
|
# say_header_map
|
22
24
|
# find_all_sub_folder
|
23
25
|
update_source_header
|
26
|
+
# print_modify_info
|
24
27
|
end
|
25
28
|
|
26
29
|
# @return [@header_map]
|
@@ -109,7 +112,10 @@ module Lhj
|
|
109
112
|
result = line
|
110
113
|
if line =~ /#import/
|
111
114
|
ma = find_head_key(line)
|
112
|
-
|
115
|
+
if ma && !exist_in_file(file, ma[0])
|
116
|
+
result = line.gsub(ma[0], @header_map[ma[0].to_sym] || ma[0])
|
117
|
+
# @modify_files << file unless @modify_files.include?(file)
|
118
|
+
end
|
113
119
|
end
|
114
120
|
result
|
115
121
|
end
|
@@ -123,6 +129,16 @@ module Lhj
|
|
123
129
|
header_reg = /"\D*.h"/
|
124
130
|
line.match(header_reg)
|
125
131
|
end
|
132
|
+
|
133
|
+
def print_modify_info
|
134
|
+
rows = []
|
135
|
+
@modify_files.each do |file|
|
136
|
+
rows << [File.basename(file), File.absolute_path(file)]
|
137
|
+
end
|
138
|
+
title = "修改了#{rows.count}个文件"
|
139
|
+
table = Terminal::Table.new title: title, headings: %w[文件 路径], rows: rows
|
140
|
+
puts table
|
141
|
+
end
|
126
142
|
end
|
127
143
|
end
|
128
144
|
end
|
data/lib/lhj/command/init.rb
CHANGED
data/lib/lhj/command/oss/del.rb
CHANGED
data/lib/lhj/command/oss/list.rb
CHANGED
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'lhj/config'
|
2
|
+
require 'highline'
|
3
|
+
|
4
|
+
module Lhj
|
5
|
+
class Command
|
6
|
+
# sync code to pod
|
7
|
+
class SyncPod < Command
|
8
|
+
self.summary = '同步代码到私用仓库'
|
9
|
+
|
10
|
+
def initialize(argv)
|
11
|
+
@cli = HighLine.new
|
12
|
+
super
|
13
|
+
end
|
14
|
+
|
15
|
+
def handle
|
16
|
+
sync
|
17
|
+
end
|
18
|
+
|
19
|
+
def sync
|
20
|
+
config_file = File.join(Lhj::Config.instance.home_dir, 'pod_config.yml')
|
21
|
+
arr = YAML.load_file(config_file)
|
22
|
+
arr.each_index { |i| puts "#{i}.#{arr[i]['pod']}".yellow }
|
23
|
+
idx = @cli.ask('请选择哪一个库同步: '.green).strip.to_i
|
24
|
+
pod_name = arr[idx]['pod']
|
25
|
+
src = arr[idx]['main_path']
|
26
|
+
dest = arr[idx]['pod_path']
|
27
|
+
FileUtils.cp_r(src, dest, remove_destination: true)
|
28
|
+
puts '1.从主工程复制代码到pod库成功'.green
|
29
|
+
|
30
|
+
ma = nil
|
31
|
+
Dir.chdir(dest) do
|
32
|
+
Dir.glob("*.podspec").each do |p|
|
33
|
+
update_podspec_version(p)
|
34
|
+
version_line = IO.readlines(p).find{ |line| (/\.version/ =~ line) && (version_regex =~ line) }
|
35
|
+
ma = version_line.match(version_regex)
|
36
|
+
end
|
37
|
+
puts '2.更新版本号成功'.green
|
38
|
+
|
39
|
+
Actions.sh("git add .")
|
40
|
+
puts '3.git add成功'.green
|
41
|
+
|
42
|
+
Actions.sh("git commit -m '同步主工程代码by fastlane'")
|
43
|
+
puts '4.git 提交成功'.green
|
44
|
+
|
45
|
+
Actions.sh("git push")
|
46
|
+
puts '5.git 推送成功'.green
|
47
|
+
|
48
|
+
add_tag(ma[0]) if ma
|
49
|
+
puts "6.设置tag成功! tag号:#{ma[0]}".green
|
50
|
+
|
51
|
+
push_tag
|
52
|
+
puts '7.推送tag成功'.green
|
53
|
+
|
54
|
+
update_pod_repo
|
55
|
+
puts "8.#{pod_name}推送pod repo成功".green
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
if ma
|
60
|
+
pod_version = ma[0]
|
61
|
+
update_all_pod_dependency(pod_name, pod_version)
|
62
|
+
puts '9.更新主工程引用pod版本号成功'.green
|
63
|
+
end
|
64
|
+
|
65
|
+
puts '10.手动执行`pod update --verbose --no-repo-update`更新pod'.green
|
66
|
+
end
|
67
|
+
|
68
|
+
def version_regex
|
69
|
+
/\d+\.\d+\.(\d+)/
|
70
|
+
end
|
71
|
+
|
72
|
+
def update_podspec_version(path)
|
73
|
+
str = ''
|
74
|
+
File.readlines(path).each do |l|
|
75
|
+
if (/\.version/ =~ l) && (version_regex =~ l)
|
76
|
+
last_version = l.scan(version_regex).flatten.first
|
77
|
+
next_version = last_version.to_i + 1
|
78
|
+
next_version_str = next_version.to_s
|
79
|
+
str += l.gsub(/(\d+\.\d+\.)(\d+)/, '\1' + next_version_str)
|
80
|
+
else
|
81
|
+
str += l.dup
|
82
|
+
end
|
83
|
+
end
|
84
|
+
File.write(path, str)
|
85
|
+
end
|
86
|
+
|
87
|
+
def add_tag(tag)
|
88
|
+
cmd = ['git tag']
|
89
|
+
cmd << '--force'
|
90
|
+
cmd << tag
|
91
|
+
UI.message("Adding git tag '#{tag}' 🎯.")
|
92
|
+
Actions.sh(cmd.join(' '))
|
93
|
+
end
|
94
|
+
|
95
|
+
def push_tag
|
96
|
+
cmd = ['git push --tags']
|
97
|
+
UI.message("git push --tags 🎯.")
|
98
|
+
Actions.sh(cmd.join(' '))
|
99
|
+
end
|
100
|
+
|
101
|
+
def update_pod_repo
|
102
|
+
# pod repo push miguatech-aomi_ios-mlspecs *.podspec --sources=miguatech-aomi_ios-mlspecs,aliyun,trunk --allow-warnings --use-libraries --verbose
|
103
|
+
cmd = ['pod repo push']
|
104
|
+
pod_repo_name = 'miguatech-aomi_ios-mlspecs'
|
105
|
+
cmd << pod_repo_name
|
106
|
+
cmd << "*.podspec"
|
107
|
+
cmd << "--sources=#{pod_repo_name},aliyun,trunk"
|
108
|
+
cmd << "--allow-warnings"
|
109
|
+
cmd << "--use-libraries"
|
110
|
+
cmd << "--verbose"
|
111
|
+
Actions.sh(cmd.join(' '), log: true, error_callback: nil)
|
112
|
+
end
|
113
|
+
|
114
|
+
def update_all_pod_dependency(pod_name, pod_version)
|
115
|
+
Dir.glob(["./**/*.podspec", "./**/Podfile"]).each do |p|
|
116
|
+
unless /Example/ =~ p
|
117
|
+
puts "更新文件:#{p}".magenta
|
118
|
+
update_main_proj_podspec_version(p, pod_name, pod_version)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def update_main_proj_podspec_version(path, pod_name, pod_version)
|
124
|
+
cont = ''
|
125
|
+
File.readlines(path).each do |l|
|
126
|
+
if (/#{pod_name}/ =~ l) && (/\d+\.\d+\.\d+/ =~ l)
|
127
|
+
l.scan(/\d+\.\d+\.\d+/).each do |key|
|
128
|
+
cont += l.gsub(key, pod_version)
|
129
|
+
end
|
130
|
+
else
|
131
|
+
cont += l.dup
|
132
|
+
end
|
133
|
+
end
|
134
|
+
File.write(path, cont)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
data/lib/lhj/command/trans.rb
CHANGED
data/lib/lhj/command/yapi.rb
CHANGED
@@ -5,6 +5,7 @@ require 'yaml'
|
|
5
5
|
|
6
6
|
module Lhj
|
7
7
|
class Command
|
8
|
+
# generate model from yapi
|
8
9
|
class Yapi < Command
|
9
10
|
self.summary = '通过yapi接口生成请求'
|
10
11
|
self.description = '更新 ~/.lhj/yapi.yml 文件配置后执行`lhj api`生成接口模型'
|
@@ -34,7 +35,7 @@ module Lhj
|
|
34
35
|
super
|
35
36
|
end
|
36
37
|
|
37
|
-
def
|
38
|
+
def handle
|
38
39
|
load_config
|
39
40
|
fetch_model
|
40
41
|
print_methods
|
@@ -49,13 +50,13 @@ module Lhj
|
|
49
50
|
end
|
50
51
|
|
51
52
|
def puts_h(str)
|
52
|
-
puts str
|
53
|
+
puts str.magenta
|
53
54
|
@h_file_array ||= []
|
54
55
|
@h_file_array << str
|
55
56
|
end
|
56
57
|
|
57
58
|
def puts_m(str)
|
58
|
-
puts str
|
59
|
+
puts str.blue
|
59
60
|
@m_file_array ||= []
|
60
61
|
@m_file_array << str
|
61
62
|
end
|
@@ -65,9 +66,9 @@ module Lhj
|
|
65
66
|
file_name = gen_model_name('')
|
66
67
|
h_file = File.join('.', "#{file_name}.h")
|
67
68
|
m_file = File.join('.', "#{file_name}.m")
|
68
|
-
File.write(h_file, @h_file_array.join("\n")) if @h_file_array.count
|
69
|
-
File.write(m_file, @m_file_array.join("\n")) if @m_file_array.count
|
70
|
-
puts "\n\n生成文件成功!所在路径:\n#{File.expand_path(h_file)} \n#{File.expand_path(m_file)}"
|
69
|
+
File.write(h_file, @h_file_array.join("\n")) if @h_file_array.count.positive?
|
70
|
+
File.write(m_file, @m_file_array.join("\n")) if @m_file_array.count.positive?
|
71
|
+
puts "\n\n生成文件成功!所在路径:\n#{File.expand_path(h_file)} \n#{File.expand_path(m_file)}".green
|
71
72
|
end
|
72
73
|
|
73
74
|
def url_str
|
@@ -78,7 +79,7 @@ module Lhj
|
|
78
79
|
yml = File.join(Lhj::Config.instance.home_dir, 'yapi.yml')
|
79
80
|
config = YAML.load_file(yml)
|
80
81
|
config.each do |k, v|
|
81
|
-
@http_headers << "#{k}=#{v}" if
|
82
|
+
@http_headers << "#{k}=#{v}" if k.eql?('__wpkreporterwid_') || k.eql?('_yapi_token') || k.eql?('_yapi_uid')
|
82
83
|
end
|
83
84
|
@http_url = config['url']
|
84
85
|
@config_id = config['id']
|
@@ -107,27 +108,27 @@ module Lhj
|
|
107
108
|
res = Net::HTTP.start(uri.hostname, uri.port) do |http|
|
108
109
|
http.request(req)
|
109
110
|
end
|
110
|
-
puts res.body
|
111
|
+
puts res.body unless res.body['errcode'].to_i.zero?
|
111
112
|
JSON.parse(res.body)
|
112
113
|
end
|
113
114
|
|
114
115
|
def fetch_model
|
115
116
|
res_json = req_model
|
116
117
|
begin
|
117
|
-
puts "\n<===============打印返回数据模型-Begin=====================>\n"
|
118
|
+
puts "\n<===============打印返回数据模型-Begin=====================>\n".green
|
118
119
|
fetch_res_boy(res_json)
|
119
120
|
print_models
|
120
121
|
print_models_implementation
|
121
|
-
puts "\n<===============打印返回数据模型-End=====================>\n"
|
122
|
+
puts "\n<===============打印返回数据模型-End=====================>\n".green
|
122
123
|
end
|
123
124
|
begin
|
124
|
-
puts "\n<===============打印请求模型-Begin=====================>\n"
|
125
|
+
puts "\n<===============打印请求模型-Begin=====================>\n".green
|
125
126
|
@models = []
|
126
127
|
@model_names = []
|
127
128
|
fetch_req_body(res_json)
|
128
129
|
print_models
|
129
130
|
print_models_implementation
|
130
|
-
puts "\n<===============打印请求模型-End=====================>\n"
|
131
|
+
puts "\n<===============打印请求模型-End=====================>\n".green
|
131
132
|
end
|
132
133
|
end
|
133
134
|
|
@@ -221,7 +222,7 @@ module Lhj
|
|
221
222
|
@models.each do |model|
|
222
223
|
puts_m "@implementation #{model[:name]}"
|
223
224
|
str = model[:properties].filter { |p| p[:type].eql?('array') && !p[:type_name].eql?('NSString') }.map { |p| "@\"#{p[:key]}\": #{p[:type_name]}.class" }.join(', ')
|
224
|
-
if str && str.length
|
225
|
+
if str && str.length.positive?
|
225
226
|
puts_m '+(NSDictionary *)modelContainerPropertyGenericClass {'
|
226
227
|
puts_m " return @{#{str}};"
|
227
228
|
puts_m '}'
|
@@ -268,7 +269,7 @@ module Lhj
|
|
268
269
|
end
|
269
270
|
|
270
271
|
def print_methods
|
271
|
-
puts "\n<===============方法调用=====================>\n"
|
272
|
+
puts "\n<===============方法调用=====================>\n".green
|
272
273
|
puts_m '/**'
|
273
274
|
puts_m " * #{@data_json['title']} -- #{@data_json['username']}"
|
274
275
|
puts_m ' */'
|