gwtools 0.0.5 → 0.0.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/gwtools/analysis/file_handler.rb +3 -3
- data/lib/gwtools/command/generate/req_info.rb +1 -1
- data/lib/gwtools/generate/swift.rb +138 -24
- data/lib/gwtools/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 001eef35553a92118abccc74a73ef133fce57509e775e9cb7361b014a2bc6436
|
4
|
+
data.tar.gz: 35ed21f791aee545295149c39b747b789d02057616b7c0e747861e9fb6f9ff14
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dd259aa0fde7b6c9c958b5b49b8bd83dc70d4cfde0dc3eafea2265f1b6976a657ebd4beee4c559b866e25e133e02d58b704312babed58cfac442bf010c78d229
|
7
|
+
data.tar.gz: 2e8e27d43e284ccf7301d0ce5eff6b3e9b49cd18908ce32e4c87dadded65104da415d5cb8bb753b1b87f5992e58020278f4a0dd3d08e8f806970f797b77d5a38
|
@@ -32,8 +32,8 @@ module Gwtools
|
|
32
32
|
# """
|
33
33
|
|
34
34
|
makeDirAndFile(@url)
|
35
|
-
# 生成对应Model文件
|
36
|
-
Generate::Swift.createModelAndRequest(@target_path, @responseJson)
|
35
|
+
# # 生成对应Model文件
|
36
|
+
# Generate::Swift.createModelAndRequest(@target_path, @responseJson)
|
37
37
|
|
38
38
|
end
|
39
39
|
|
@@ -57,7 +57,7 @@ module Gwtools
|
|
57
57
|
end
|
58
58
|
|
59
59
|
# create file
|
60
|
-
Generate::Swift.createPathFile(dir_path, dir, dirs, index)
|
60
|
+
Generate::Swift.createPathFile(dir_path, dir, dirs, index, @httpMethod, @responseJson, path)
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require 'erb'
|
4
4
|
require 'json'
|
5
|
+
require 'pp'
|
5
6
|
|
6
7
|
module Gwtools
|
7
8
|
class Generate
|
@@ -37,13 +38,61 @@ extension <%="#{@api_name}"%> {
|
|
37
38
|
|
38
39
|
class ModelReqGenerateConfig
|
39
40
|
include(ERB::Util)
|
40
|
-
attr_accessor :api_name, :httpmethod, :prefixPath, :modulePath, :detailPath, :model_name, :model_data
|
41
|
+
attr_accessor :api_name, :httpmethod, :prefixPath, :modulePath, :detailPath, :model_name, :model_data, :json_data_is_arr
|
41
42
|
|
43
|
+
# 将 erb 文件的一个实例化,绑定到当前的一个对象的上下文
|
42
44
|
def config_file
|
43
|
-
ERB.new(File.read('
|
45
|
+
# ERB.new(File.read('restful_url.swift.erb'), nil, '>').result(binding)
|
46
|
+
template = <<-ERB
|
47
|
+
/// 此文件由代码生成,不要修改任何路径相关参数,仅可对 headerParms 和 parms 做处理
|
48
|
+
|
49
|
+
import RxSwift
|
50
|
+
import GWNetWork
|
51
|
+
import GWUserCenterBase
|
52
|
+
import SwiftyUserDefaults
|
53
|
+
import HandyJSON
|
54
|
+
|
55
|
+
public extension <%="#{@api_name}"%> {
|
56
|
+
<%="#{@model_data}\n"%>
|
57
|
+
}
|
58
|
+
|
59
|
+
public extension <%="#{@api_name}"%> {
|
60
|
+
static func <%="#{@httpmethod}"%>(/*custom_params,*/
|
61
|
+
isCache: Bool = false,
|
62
|
+
isLoading: Bool = false,
|
63
|
+
module: String? = nil,
|
64
|
+
<% if #{@json_data_is_arr} %>
|
65
|
+
des: String? = nil) -> Observable<[Self.<%="#{@model_name}"%>]> {
|
66
|
+
<% else %>
|
67
|
+
des: String? = nil) -> Observable<Self.<%="#{@model_name}"%>> {
|
68
|
+
<% end %>
|
69
|
+
// ================= 逻辑处理 =================
|
70
|
+
let headerParms: [String : String] = [:]
|
71
|
+
let parms: [String : Any] = [:]
|
72
|
+
// ================= 逻辑处理 =================
|
73
|
+
|
74
|
+
return GWNetworkManager.request(requestType: .<%="#{@httpmethod}"%>,
|
75
|
+
prefixPath: "<%="#{@prefixPath}"%>",
|
76
|
+
modulePath: "<%="#{@modulePath}"%>",
|
77
|
+
detailPath: "<%="#{@detailPath}"%>",
|
78
|
+
parms: parms,
|
79
|
+
headerParms: headerParms,
|
80
|
+
isCache: isCache,
|
81
|
+
isLoading: isLoading,
|
82
|
+
module: module,
|
83
|
+
des: des)
|
84
|
+
<% if #{@json_data_is_arr} %>
|
85
|
+
.mapHandyJSON2Array(Self.<%="#{@model_name}"%>.self)
|
86
|
+
<% else %>
|
87
|
+
.mapHandyJSON(Self.<%="#{@model_name}"%>.self)
|
88
|
+
<% end %>
|
89
|
+
}
|
90
|
+
}
|
91
|
+
ERB
|
92
|
+
ERB.new(template, nil, '>').result(binding)
|
44
93
|
end
|
45
94
|
|
46
|
-
def initialize(file_path, api_name, httpmethod, prefixPath, modulePath, detailPath, model_name, model_data)
|
95
|
+
def initialize(file_path, api_name, httpmethod, prefixPath, modulePath, detailPath, model_name, model_data, json_data_is_arr)
|
47
96
|
@api_name = api_name
|
48
97
|
@httpmethod = httpmethod
|
49
98
|
@prefixPath = prefixPath
|
@@ -51,6 +100,7 @@ extension <%="#{@api_name}"%> {
|
|
51
100
|
@detailPath = detailPath
|
52
101
|
@model_name = model_name
|
53
102
|
@model_data = model_data
|
103
|
+
@json_data_is_arr = json_data_is_arr
|
54
104
|
|
55
105
|
File.open(file_path, 'w+') do |f|
|
56
106
|
f.puts(config_file)
|
@@ -58,22 +108,89 @@ extension <%="#{@api_name}"%> {
|
|
58
108
|
end
|
59
109
|
end
|
60
110
|
|
61
|
-
def self.
|
62
|
-
|
63
|
-
|
111
|
+
def self.getPrefixPath(dir_path)
|
112
|
+
prefixPaths = %w[app-api/api/v1.0 app-api/api/v2.0]
|
113
|
+
|
114
|
+
prefixPaths.each do |prefix_path|
|
115
|
+
return prefix_path.gsub(/^\/|\/$/, "") if dir_path.start_with?(prefix_path)
|
64
116
|
end
|
65
|
-
|
66
|
-
|
67
|
-
"AppAPI.#{dirs[0..index-1].join('.')}",
|
68
|
-
dir
|
69
|
-
)
|
117
|
+
|
118
|
+
return ''
|
70
119
|
end
|
71
120
|
|
72
|
-
def self.
|
73
|
-
|
121
|
+
def self.getModulePath(dir_path, prefixPath)
|
122
|
+
modulePaths = %w[content community]
|
123
|
+
dir_path = dir_path.gsub(/\A#{prefixPath}/, "").gsub(/^\/|\/$/, "")
|
124
|
+
modulePaths.each do |modulePath|
|
125
|
+
return modulePath if dir_path.start_with?(modulePath)
|
126
|
+
end
|
127
|
+
|
128
|
+
return ''
|
129
|
+
end
|
130
|
+
|
131
|
+
def self.getDetailPath(dir_path, prefixPath, modulePath)
|
132
|
+
return dir_path.gsub(/^\/|\/$/, "").gsub(/\A#{prefixPath}/, "")
|
133
|
+
.gsub(/^\/|\/$/, "").gsub(/\A#{modulePath}/, "")
|
134
|
+
.gsub(/^\/|\/$/, "")
|
135
|
+
end
|
136
|
+
|
137
|
+
def self.createPathFile(dir_path, dir, dirs, index, http_method, response_json, url_path)
|
138
|
+
app_name = "AppAPI.#{dirs[0..index-1].join('.')}"
|
139
|
+
if index == 0
|
140
|
+
app_name = "AppAPI"
|
141
|
+
end
|
142
|
+
if dir == 'restful'
|
143
|
+
swift_model = generate_model("#{http_method.capitalize.chomp}Model", response_json)
|
144
|
+
prefixPath = getPrefixPath(url_path)
|
145
|
+
modulePath = getModulePath(url_path, prefixPath)
|
146
|
+
detailPath = getDetailPath(url_path, prefixPath, modulePath)
|
147
|
+
ModelReqGenerateConfig.new(
|
148
|
+
"#{dir_path}.swift",
|
149
|
+
app_name,
|
150
|
+
http_method.capitalize.chomp,
|
151
|
+
prefixPath,
|
152
|
+
modulePath,
|
153
|
+
detailPath,
|
154
|
+
"#{http_method.capitalize.chomp}Model",
|
155
|
+
swift_model,
|
156
|
+
@json_data_is_arr
|
157
|
+
)
|
158
|
+
|
159
|
+
`swiftformat --swiftversion 5.0 #{dir_path}.swift`
|
160
|
+
else
|
161
|
+
|
162
|
+
PathGenerateConfig.new(
|
163
|
+
"#{dir_path}.swift",
|
164
|
+
app_name,
|
165
|
+
dir
|
166
|
+
)
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
def self.generate_model(name, json_data, level = 0)
|
172
|
+
|
74
173
|
if json_data == nil
|
75
174
|
return ''
|
76
175
|
end
|
176
|
+
|
177
|
+
if level == 0
|
178
|
+
# 找到 真正要处理的 data 数据
|
179
|
+
json_data.each do |key, value|
|
180
|
+
if key == 'data'
|
181
|
+
case value
|
182
|
+
when Array
|
183
|
+
json_data = value.first
|
184
|
+
@json_data_is_arr = true
|
185
|
+
when Hash
|
186
|
+
json_data = value
|
187
|
+
@json_data_is_arr = false
|
188
|
+
end
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
swift_model = "struct #{name}: HandyJSON {\n"
|
77
194
|
json_data.each do |key, value|
|
78
195
|
case value
|
79
196
|
when NilClass # nil 对象默认给个Stirng?类型
|
@@ -89,25 +206,22 @@ extension <%="#{@api_name}"%> {
|
|
89
206
|
when String
|
90
207
|
swift_model += " var #{key}: String?\n"
|
91
208
|
when Array
|
92
|
-
|
93
|
-
|
209
|
+
if !value.empty?
|
210
|
+
swift_model += " var #{key}: [#{key.capitalize}] = []\n"
|
211
|
+
swift_model += generate_model("#{key.capitalize}", value.first, level+1)
|
212
|
+
else
|
213
|
+
swift_model += " var #{key}: [Any] = []\n"
|
214
|
+
end
|
94
215
|
when Hash
|
95
216
|
swift_model += " var #{key}: #{key.capitalize}?\n"
|
96
|
-
swift_model += generate_model("#{key.capitalize}", value)
|
217
|
+
swift_model += generate_model("#{key.capitalize}", value, level+1)
|
97
218
|
else
|
98
219
|
swift_model += " var #{key}: #{value.class == String ? 'String' : 'Int'}\n"
|
99
220
|
end
|
100
221
|
end
|
101
|
-
swift_model + "}\n"
|
222
|
+
swift_model + "public init() {}\n}\n"
|
102
223
|
end
|
103
224
|
|
104
|
-
def self.createModelAndRequest(target_path, responseJson)
|
105
|
-
swift_model = generate_model("Model", responseJson)
|
106
|
-
File.write(target_path + 'Model.swift', swift_model)
|
107
|
-
end
|
108
|
-
|
109
|
-
# 生成 Swift 模型
|
110
|
-
|
111
225
|
end
|
112
226
|
end
|
113
227
|
end
|
data/lib/gwtools/version.rb
CHANGED