wireway 202009261101 → 202012161641

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9237eaee0fd2deb0be287b9fbdc82c055547985a059d4f60c36f22ca6ebd56c
4
- data.tar.gz: f524f667e4a0c2b4feb00fc4194c2647ceeaee07dcfeb8a5b4961b526e48caa2
3
+ metadata.gz: 8330c413fc8bd8b3bddd33990d1c124c2974ad0a9a45c4ec7e8b220f933dc417
4
+ data.tar.gz: db406a9c62ad0fbb1c0d42f4f41f20490e35ca6e7b95957f9424d881bd78728f
5
5
  SHA512:
6
- metadata.gz: 2b72a87f14671df8d89f55673f3321f27f27742fb848d293a7880f7e038f526ae7f90a8aab5cfe9f0de9f9f54dd6615a6fcac97baff50fd157cd059673029bbf
7
- data.tar.gz: 3d3e2e50c7bef6c6e0ccb1a8990b0f0fe6d94d6a6d47db85e4067dd3461fe094226277a1f04b2c17ce14404b29c39d19e3145bf925cff60a4ed85dc4b2f30e49
6
+ metadata.gz: 4d84f15fe9da85b6348362085c0b0e574061448262b50701f209b2b234bbfbfcf92806e223fabba2b8b3d67eecd6f73094a777cd415acca2fb0f718465e8a72f
7
+ data.tar.gz: a42d73253abb53f7ac68c6ba95225bee4cb164238e2548d2c1233af639201da95f81b0169f44cb41dbcd77e84bd9e1ce488c544860e2afe3f6e348815eb7fc47
data/README.md CHANGED
@@ -1,3 +1,15 @@
1
+
2
+ <!-- TOC -->
3
+
4
+ - [说明](#说明)
5
+ - [执照](#执照)
6
+ - [插件作用](#插件作用)
7
+ - [行为准则](#行为准则)
8
+ - [关于C919](#关于c919)
9
+ - [使用示例](#使用示例)
10
+
11
+ <!-- /TOC -->
12
+
1
13
  # 说明
2
14
 
3
15
  ## 执照
@@ -27,4 +39,14 @@ C919为系列Gem组件的集合,具体组成部分及相关示例[参考](https:
27
39
  ```ruby
28
40
  Wireway::Spark.satcom(api_code: :finance_fund_base_info, code: '161725')
29
41
  # => [true, {:基金全称=>"招商中证白酒指数分级证券投资基金", :基金简称=>"招商中证白酒指数分级", :基金代码=>"161725(前端)", :基金类型=>"股票指数", :发行日期=>"2015年05月12日", :"成立日期/规模"=>"2015年05月27日 / 3.965亿份", :资产规模=>"129.25亿元(截止至:2020年06月30日)", :份额规模=>"184.0866亿份(截止至:2020年08月26日)", :基金经理人=>"侯昊", :基金托管人=>"中国银行", :成立来分红=>"每份累计0.00元(0次)", :管理费率=>"1.00%(每年)", :托管费率=>"0.22%(每年)", :销售服务费率=>"---(每年)", :最高认购费率=>"0.80%(前端)", :业绩比较基准=>"中证白酒指数收益率×95%+金融机构人民币活期存款基准利率(税后)×5%", :跟踪标的=>"中证白酒指数", :母子基金=>"161725(母)150269 150270(子)", :是否配对转换=>"是", :是否转LOF=>"否", :封闭期=>"无", :提前结束条款=>"无", :定期折算日=>"每个会计年度的12月15日(遇节假日顺延)", :不定期折算条件=>"当招商中证白酒份额的基金份额净值达到1.500元;当招商中证白酒B份额的基金份额参考净值达到0.250元。", :固定收益份额年化收益率=>"一年期定期存款利率(税后)+3%", :亏损临界点=>"无", :保收益临界点=>"无", :超额收益临界点=>"无"}]
42
+ ```
43
+
44
+ 或无需引用Gem直接发起Post请求:
45
+
46
+ ```bash
47
+ curl --location --request POST '123.57.155.17:3114/wireway/restful/request_api' \
48
+ --header 'Content-Type: application/x-www-form-urlencoded' \
49
+ --data-urlencode 'platform=satcom' \
50
+ --data-urlencode 'api_code=finance_fund_base_info' \
51
+ --data-urlencode 'code=161725'
30
52
  ```
@@ -1,5 +1,6 @@
1
1
  module Wireway
2
2
  class ApplicationController < ActionController::Base
3
3
  protect_from_forgery with: :exception
4
+ skip_before_action :verify_authenticity_token
4
5
  end
5
6
  end
@@ -0,0 +1,13 @@
1
+ module Wireway
2
+ class RestfulController < ApplicationController
3
+ def request_api
4
+ # TODO 初步了解为rails5的安全机制 去除存在风险 暂时先这样
5
+ args = params.permit!.to_hash.reject!{|key| ["action", "controller"].include?(key)}.deep_symbolize_keys
6
+
7
+ res = Wireway::Spark.send(args[:platform], args)
8
+ tmp = {success: res[0], result: res[1]}
9
+ (tmp.merge!(res[2]) rescue nil) if res[2].present?
10
+ render json: tmp.merge!(tmp)
11
+ end
12
+ end
13
+ end
@@ -11,14 +11,16 @@ module Wireway
11
11
  def node_addresses
12
12
  return $wireway_node_addresses unless $wireway_node_addresses == 404
13
13
 
14
- hosts = ['172.28.81.156:3113']
14
+ nodes = ['123.57.155.17:3113']
15
15
  route = '/satcom/other/c919/node_addresses.json'
16
- res = get(addresses: hosts, route: route) do |result|
16
+ res = get(addresses: nodes, route: route) do |result|
17
17
  hash = JSON.parse(result[1][:body]).deep_symbolize_keys
18
18
  [true, hash]
19
19
  end
20
- raise res[1] unless res[0]
21
- $wireway_node_addresses = res[1].map{|key, value| [key, value[:nodes]]}.to_h
20
+
21
+ return res unless res[0]
22
+ nodes = res[1].map{|key, value| [key, value[:nodes]]}.to_h
23
+ $wireway_node_addresses = [true, nodes]
22
24
  end
23
25
 
24
26
  def dashboard(**args)
@@ -26,8 +28,9 @@ module Wireway
26
28
  response_type: 'json',
27
29
  }.merge!(args)
28
30
  route = '/dashboard/restful/request_api'
29
-
30
- post(addresses: node_addresses[:dashboard], route: route, params: params) do |result|
31
+ res = node_addresses
32
+ return res unless res[0]
33
+ post(addresses: res[1][:dashboard], route: route, params: params) do |result|
31
34
  return result if (params[:response_type] != 'json')
32
35
  body = JSON.parse(result[1][:body]).deep_symbolize_keys
33
36
  return [false, body[:result]] unless body[:success]
@@ -38,14 +41,40 @@ module Wireway
38
41
  def satcom(**args)
39
42
  params = {}.merge!(args)
40
43
  route = '/satcom/restful/request_api'
44
+ res = node_addresses
45
+ return res unless res[0]
46
+ post(addresses: res[1][:satcom], route: route, params: params) do |result|
47
+ body = JSON.parse(result[1][:body]).deep_symbolize_keys
48
+ return [false, body[:result], body[:errors]].compact unless body[:success]
49
+ [true, body[:result]]
50
+ end
51
+ end
41
52
 
42
- post(addresses: node_addresses[:satcom], route: route, params: params) do |result|
53
+ def wireway(**args)
54
+ params = {
55
+ local: false
56
+ }.merge!(args)
57
+ route = '/wireway/restful/request_api'
58
+ res = node_addresses
59
+ return res unless res[0]
60
+ post(addresses: res[1][:wireway], route: route, params: params) do |result|
43
61
  body = JSON.parse(result[1][:body]).deep_symbolize_keys
44
- return [false, body[:result]] unless body[:success]
62
+ return [false, body[:result], body[:errors]].compact unless body[:success]
45
63
  [true, body[:result]]
46
64
  end
47
65
  end
48
66
 
67
+ def black_box(**args)
68
+ params = {}.merge!(args)
69
+ route = '/black_box/restful/request_api'
70
+ res = node_addresses
71
+ return res unless res[0]
72
+ res = post(addresses: res[1][:black_box], route: route, params: params) do |result|
73
+ body = JSON.parse(result[1][:body]).deep_symbolize_keys
74
+ return [false, body[:result], body[:errors]].compact unless body[:success]
75
+ [true, body]
76
+ end
77
+ end
49
78
 
50
79
  def get(addresses:, route:, params: {})
51
80
  result = round_robin(addresses: addresses) do |address|
@@ -58,7 +87,7 @@ module Wireway
58
87
  begin
59
88
  yield result
60
89
  rescue
61
- return [false, '运行时结果处理异常', {errors: {message: $!.to_s, path: $@}}]
90
+ return [false, '[Wireway]运行时结果处理异常', {errors: {message: $!.to_s, path: $@}}]
62
91
  end
63
92
  end
64
93
 
@@ -71,7 +100,7 @@ module Wireway
71
100
  begin
72
101
  yield result
73
102
  rescue
74
- return [false, '运行时结果处理异常', {errors: {message: $!.to_s, path: $@}}]
103
+ return [false, '[Wireway]运行时结果处理异常', {errors: {message: $!.to_s, path: $@}}]
75
104
  end
76
105
  end
77
106
 
@@ -92,7 +121,7 @@ module Wireway
92
121
  def get_response
93
122
  begin
94
123
  response = yield
95
- return [false, "响应码异常:#{response.code}", {response: response}] unless (response.code == 200)
124
+ return [false, "[Wireway]响应码异常:#{response.code}", {response: response}] unless (response.code == 200)
96
125
 
97
126
  hash = {code: 200}
98
127
  res = handle_body_encode(body: response.body)
@@ -100,7 +129,7 @@ module Wireway
100
129
 
101
130
  hash.merge!({body: res[1]})
102
131
  rescue
103
- return [false, '请求异常', {errors: {message: $!.to_s, path: $@}}]
132
+ return [false, '[Wireway]请求异常', {errors: {message: $!.to_s, path: $@}}]
104
133
  end
105
134
 
106
135
  [true, hash]
@@ -1,17 +1,21 @@
1
1
  module Wireway
2
2
  module Spark
3
-
4
- # Wireway::Spark.dashboard(api_code: :publish_other_request_assets, rely_assets: ["bootstrap_4", "jQuery_3_5_1", "chart_js"])
5
- # Wireway::Spark.satcom(api_code: :finance_fund_base_info, code: '161725')
6
- def self.method_missing(method_name, **args)
3
+ def self.method_missing(method_name, local: true, **args)
7
4
  begin
8
5
  target = Wireway::BusinessLogic::Restful
9
- return [false, '未找到相关定义方法'] unless target.respond_to?(method_name)
6
+ unless [true, 'true', 1, '1', 'yes'].include?(local)
7
+ return [false, "未找到名称为:#{method_name}的方法定义."] unless target.respond_to?(method_name)
8
+ end
10
9
  res = target.send(method_name, args)
11
10
  rescue
12
- return [false, '请求异常', {errors: {message: $!.to_s, path: $@}}]
11
+ error_msg = [false, '[Wireway]请求异常', {errors: {message: $!.to_s, path: $@}}]
12
+ return error_msg unless [true, 'true', 1, '1', 'yes'].include?(local)
13
+ # 当以Gem形式的组件无法处理请求时,尝试请求线上版组件是否可以正常处理请求
14
+ # 即当gem出现问题时会请求线上服务 有利于断点排查
15
+ args.merge!(platform: method_name)
16
+ res = target.wireway(args)
13
17
  end
14
- end
18
+ end
15
19
 
16
20
  end
17
21
  end
@@ -0,0 +1,145 @@
1
+ module Wireway
2
+ # 接口请求参数标准
3
+ module Standard
4
+ extend self
5
+
6
+ # 全自检项检查
7
+ def inspect_all(ideal:, reality:)
8
+ ideal_reality = {ideal: ideal, reality: reality}
9
+
10
+ res = default_value(ideal_reality)
11
+ return res unless res[0]
12
+
13
+ res = value_type(ideal_reality)
14
+ return res unless res[0]
15
+
16
+ res = attribute_necessary(ideal_reality)
17
+ return res unless res[0]
18
+
19
+ # res = check_data_format(described: described, reality: reality)
20
+ # return res unless res[0]
21
+ [true, '']
22
+ end
23
+
24
+ # 参数项检查
25
+ def attribute_necessary(ideal:, reality:)
26
+ # 检查必须参数是否缺失
27
+ necessary_standards = ideal.select{|standard| standard[:necessary] == true}
28
+ necessary_standards.each do |standard|
29
+ key = standard[:key]
30
+ unless (reality[key.to_sym] || reality[key]).present?
31
+ return [false, "#{standard[:name]}(#{key})为必须项,不能为空"]
32
+ end
33
+ end
34
+
35
+ # 检查参数值是否符合正则式要求
36
+ reality.each do |key, value|
37
+ standard = ideal.select{|standard| [key, key.to_sym, key.to_s].uniq.include?(standard[:key])}[0]
38
+ # return [false, "未找到关于参数:#{key} 的定义"] unless standard
39
+ next unless standard
40
+
41
+ if standard[:regular] && (value.to_s =~ standard[:regular]).nil?
42
+ tmp = "参数:#{standard[:name]}(#{key})的参数值(#{value})不满足要求"
43
+ tmp+= ", 请参考: #{standard[:explain]}" if standard[:explain].present?
44
+ tmp+= ", 示例值: #{standard[:example]}" if standard[:example].present?
45
+ tmp+= ", 默认值: #{standard[:default]}" if standard[:default].present?
46
+ tmp+='.'
47
+ return [false, tmp]
48
+ end
49
+ end
50
+
51
+ [true, '']
52
+ end
53
+
54
+ # 参数默认值检查
55
+ def default_value(ideal:, reality:)
56
+ ideal.select{|standard| !standard[:default].nil?}.each do |standard|
57
+ unless reality[standard[:key].to_sym].present?
58
+ reality.merge!({standard[:key].to_sym => standard[:default]})
59
+ end
60
+ end
61
+
62
+ [true, '']
63
+ end
64
+
65
+ # 参数值格式检查
66
+ def value_type(ideal:, reality:)
67
+ ideal.each do |standard|
68
+ unless standard[:value_type].present?
69
+ return [false, "自描述参数标准检查异常: #{standard[:name]}(#{standard[:key]})未设置对应参数值类型(value_type)."]
70
+ end
71
+ end
72
+
73
+ ideal.each do |standard|
74
+ old_value = reality[standard[:key].to_sym]
75
+
76
+ case standard[:value_type].to_sym
77
+ when :string_or_array, :array_or_string
78
+ new_value = (JSON.parse(old_value) rescue false)
79
+ new_value = old_value.split(/, |,/) unless new_value
80
+ when :array
81
+ error_msg = [false, "参数:#{standard[:key]},参数类型不符合Json数组要求."]
82
+ next if old_value.is_a?(Array)
83
+
84
+ new_value = (JSON.parse(old_value) rescue (return error_msg))
85
+ return error_msg unless new_value.is_a?(Array)
86
+ when :key_value
87
+ error_msg = [false, "参数:#{standard[:key]},参数类型不符合Json键值对要求."]
88
+ next if old_value.is_a?(Hash)
89
+
90
+ new_value = (JSON.parse(old_value) rescue (return error_msg))
91
+ return error_msg unless new_value.is_a?(Hash)
92
+ when :boolean
93
+ new_value = [true, 'true', '1', 1].include?(old_value)
94
+ when :integer
95
+ max_value = standard[:max]
96
+ return [false, "参数:#{standard[:key]},参数值:#{old_value} 大于接口定义最大值:#{max_value}."] if max_value.present? && (old_value.to_i > max_value)
97
+ next if old_value.is_a?(Integer)
98
+ if old_value == '0'
99
+ new_value = 0
100
+ else
101
+ return [false, "参数:#{standard[:key]},参数类型不符合数字要求."] if ((old_value.to_i rescue 0) == 0)
102
+ new_value = old_value.to_i
103
+ end
104
+ else
105
+ next
106
+ end
107
+
108
+ unless (old_value == new_value)
109
+ reality.merge!({standard[:key].to_sym => new_value})
110
+ end
111
+ end
112
+
113
+ [true, '']
114
+ end
115
+
116
+ def check_data_format(described:, reality:)
117
+ data_format = {}
118
+ if (reality[:data_format] == ['original']) && (reality[:key_type] == 'zh')
119
+ described[:data_structure].map do |key, value|
120
+ data_format.merge!([[value, key]].to_h)
121
+ end
122
+ reality[:data_format] = data_format
123
+ return [true, '']
124
+ elsif (reality[:data_format] == ['original'])
125
+ described[:data_structure].each do |key, value|
126
+ data_format.merge!([[key, key]].to_h)
127
+ end
128
+ reality[:data_format] = data_format
129
+ return [true, '']
130
+ end
131
+
132
+ data_format = reality[:data_format]
133
+ data_format = data_format.map(&:to_sym)
134
+ data_structure = {}
135
+ described[:data_structure].map{|key, value| data_structure.merge!([[key, key], [value.to_sym, key]].to_h)}
136
+ hit_items = data_structure.select{|key, value| data_format.include?(key)}
137
+ missed = (data_format - hit_items.keys).join(',')
138
+ return [false, "所提供数据格式中:#{missed},未找到对应匹配数据项"] if missed.present?
139
+
140
+ reality[:data_format] = hit_items
141
+ [true, '']
142
+ end
143
+
144
+ end
145
+ end
@@ -1,2 +1,7 @@
1
1
  Wireway::Engine.routes.draw do
2
+ resources :restful, only:[] do
3
+ collection do
4
+ post :request_api
5
+ end
6
+ end
2
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wireway
3
3
  version: !ruby/object:Gem::Version
4
- version: '202009261101'
4
+ version: '202012161641'
5
5
  platform: ruby
6
6
  authors:
7
7
  - ff4c00
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-26 00:00:00.000000000 Z
11
+ date: 2020-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -86,12 +86,14 @@ files:
86
86
  - app/assets/javascripts/wireway/application.js
87
87
  - app/assets/stylesheets/wireway/application.css
88
88
  - app/controllers/wireway/application_controller.rb
89
+ - app/controllers/wireway/restful_controller.rb
89
90
  - app/helpers/wireway/application_helper.rb
90
91
  - app/jobs/wireway/application_job.rb
91
92
  - app/mailers/wireway/application_mailer.rb
92
93
  - app/models/wireway/application_record.rb
93
94
  - app/models/wireway/business_logic/restful.rb
94
95
  - app/models/wireway/spark.rb
96
+ - app/models/wireway/standard.rb
95
97
  - app/views/layouts/wireway/application.html.erb
96
98
  - config/routes.rb
97
99
  - lib/tasks/wireway_tasks.rake