k3cloud-sdk 0.4.2 → 0.4.4

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: cb22e56d62809750b9a0184ca7c85f3d0b54cad33808cae01dea08f387e950d4
4
- data.tar.gz: 8811b5a8226229361ba16038253540509c37a43ccebd193a973b4ce59670201b
3
+ metadata.gz: 9c129198e6a505d9b23108206100c842f1b0f94c0af6e23d7861653959ad45aa
4
+ data.tar.gz: dba6a6547c17d7e80fbf0aacee553a4c9f96f9c81c69d26867a52732ffdad93b
5
5
  SHA512:
6
- metadata.gz: 1ad03ae0ad58d2d5b11ab541f46f1786d76d2567d1e4ab24ab27fe991ac5031fa50a291ca620aeeafba5df934276d98c4dc82bae5e57f717d5ddf800f3329c76
7
- data.tar.gz: 2b66ed76217f6984789149e893e35328163feed7e0be687ff99accf0cc802c22463791d0267957de4ffa9b14f0a2632bab4ada8be08b520f5f42223628727a3a
6
+ metadata.gz: 53fd09b1ea66c3c07c282fbc61ba19b98a34976e91786bd92f3e9f692f69e782ce3d7680011db3191575a11a5746a87b5d173027768217f92fbd86dfeca89d13
7
+ data.tar.gz: d3878ab3f399a20c9d915feb73f0cd0b0c2b23148924b71640a9239a4f77cd29b3988549397be8cbc7b3152b2de97429d791bf6f3efa4638fc62c3698c91e876
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.6
2
+ TargetRubyVersion: 2.0
3
3
 
4
4
  Style/StringLiterals:
5
5
  Enabled: true
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- k3cloud-sdk (0.4.2)
4
+ k3cloud-sdk (0.4.4)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -24,6 +24,7 @@ GEM
24
24
 
25
25
  PLATFORMS
26
26
  arm64-darwin-22
27
+ arm64-darwin-23
27
28
 
28
29
  DEPENDENCIES
29
30
  k3cloud-sdk!
@@ -31,4 +32,4 @@ DEPENDENCIES
31
32
  rspec (~> 3.0)
32
33
 
33
34
  BUNDLED WITH
34
- 2.4.19
35
+ 2.4.14
data/k3cloud.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |spec|
9
9
  spec.email = ["zevinto@163.com"]
10
10
 
11
11
  spec.summary = "Ruby Gem for K3cloud API."
12
- spec.description = "Ruby Gem for K3Cloud that uses cryptographic signature technology to avoid plaintext transmission of keys and enables automatic login."
12
+ spec.description = "Ruby Gem for K3cloud OpenApi that uses cryptographic signature technology to avoid plaintext transmission of keys and enables automatic login."
13
13
  spec.homepage = "https://github.com/zevinto/k3cloud-sdk"
14
14
  spec.license = "MIT"
15
15
  spec.required_ruby_version = ">= 2.0.0"
@@ -22,8 +22,8 @@ Gem::Specification.new do |spec|
22
22
  (f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
23
23
  end
24
24
  end
25
- spec.bindir = "exe"
26
- spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
25
+ spec.bindir = "bin"
26
+ spec.executables = spec.files.grep(%r{\Abin/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ["lib"]
28
28
 
29
29
  # Uncomment to register a new dependency of your gem
@@ -2,27 +2,30 @@
2
2
 
3
3
  require "json"
4
4
 
5
- class K3cloudError < StandardError
6
- attr_accessor :message, :inner_ex_wrapper, :inner_exception
5
+ module K3cloud
6
+ class K3cloudError < StandardError
7
+ attr_accessor :message, :inner_ex_wrapper, :inner_exception
7
8
 
8
- def initialize
9
- @message = nil
10
- @inner_ex_wrapper = nil
11
- @inner_exception = nil
12
- super
13
- end
9
+ def initialize
10
+ @message = nil
11
+ @inner_ex_wrapper = nil
12
+ @inner_exception = nil
13
+ super
14
+ end
14
15
 
15
- def self.parse(json)
16
- index = json.index("{")
17
- json = json[index..-1] if index >= 0
16
+ def self.parse(json)
17
+ index = json.index("{")
18
+ json = json[index..-1] if index >= 0
18
19
 
19
- parsed_json = JSON.parse(json)
20
- kd_error = K3cloudError.new
21
- kd_error.message = parsed_json["Message"]
22
- kd_error.inner_ex_wrapper = K3cloudError.parse(parsed_json["InnerExWrapper"].to_json)
23
- kd_error.inner_exception = K3cloudError.parse(parsed_json["InnerException"].to_json)
24
- kd_error
25
- rescue StandardError => e
26
- nil
20
+ parsed_json = JSON.parse(json)
21
+ kd_error = K3cloudError.new
22
+ kd_error.message = parsed_json["Message"]
23
+ kd_error.inner_ex_wrapper = K3cloudError.parse(parsed_json["InnerExWrapper"].to_json)
24
+ kd_error.inner_exception = K3cloudError.parse(parsed_json["InnerException"].to_json)
25
+ kd_error
26
+ rescue StandardError => e
27
+ K3cloud.logger.error("k3cloud Failed to parse exception message: #{e.message}")
28
+ nil
29
+ end
27
30
  end
28
31
  end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module K3cloud
4
+ class ResponseError < StandardError; end
5
+ end
data/lib/k3cloud/http.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "k3cloud/errors/response_error"
3
4
  require "net/http"
4
5
  require "net/https"
5
6
  require "uri"
@@ -13,26 +14,42 @@ module K3cloud
13
14
  @url = url
14
15
  @header = header
15
16
  @body = body
16
- @connect_timeout = connect_timeout || 120
17
- @request_timeout = request_timeout || 120
17
+ @connect_timeout = connect_timeout || 2
18
+ @request_timeout = request_timeout || 2
18
19
  end
19
20
 
20
21
  def post
21
22
  uri = URI(@url)
22
23
  http = Net::HTTP.new(uri.host, uri.port)
23
24
  http.use_ssl = (uri.scheme == "https")
24
- http.open_timeout = @connect_timeout * 1000
25
- http.read_timeout = @request_timeout * 1000
25
+ http.open_timeout = @connect_timeout * 60
26
+ http.read_timeout = @request_timeout * 60
26
27
  request = Net::HTTP::Post.new(uri)
27
28
  request.initialize_http_header(@header)
28
29
  request["Content-Type"] = "application/json"
29
30
  request["User-Agent"] = "Kingdee/Ruby WebApi SDK"
30
31
  request.body = @body.to_json
31
- response = http.request(request)
32
- if response.code.to_i != 200 && response.code.to_i != 206
33
- raise StandardError, "status: #{response.code}, desc: #{response.body}"
32
+ max_retries = 5 # 最大重试次数
33
+ retry_count = 0
34
+ sleep_interval = 5 # 重试间隔时间,单位秒
35
+
36
+ begin
37
+ response = http.request(request)
38
+ if response.code.to_i != 200 && response.code.to_i != 206
39
+ raise K3cloud::ResponseError, "status: #{response.code}, desc: #{response.body}"
40
+ end
41
+ response.body
42
+ rescue Errno::ETIMEDOUT, Net::OpenTimeout, Net::ReadTimeout => e
43
+ K3cloud.logger.error("Request timed out: #{e.message}")
44
+ if retry_count < max_retries
45
+ retry_count += 1
46
+ K3cloud.logger.info("Request timed out. Retrying #{retry_count}/#{max_retries} in #{sleep_interval} seconds...")
47
+ sleep(sleep_interval)
48
+ retry
49
+ else
50
+ raise K3cloud::ResponseError, "Request failed after #{max_retries} retries: #{e.message}, backtrace: #{e.backtrace}"
51
+ end
34
52
  end
35
- response.body
36
53
  end
37
54
  end
38
55
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module K3cloud
4
- VERSION = "0.4.2"
4
+ VERSION = "0.4.4"
5
5
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "k3cloud/errors/k3cloud_error"
4
+ require "k3cloud/errors/response_error"
4
5
  require "k3cloud/utils/md5_utils"
5
6
  require "k3cloud/utils/base64_utils"
6
7
  require "k3cloud/utils/const_define"
@@ -19,20 +20,16 @@ module K3cloud
19
20
  result = execute_json(service_name, parameters)
20
21
  if result.start_with?("response_error:")
21
22
  error = K3cloudError.parse(result)
22
- if error.nil?
23
- raise StandardError, result
24
- else
25
- message = error.inner_ex_wrapper.nil? ? error.message : "#{error.message} --> #{error.inner_ex_wrapper&.message}"
26
- raise StandardError, message
27
- end
23
+ raise K3cloud::ResponseError, result if error.nil?
24
+
25
+ message = error.inner_ex_wrapper.nil? ? error.message : "#{error.message} --> #{error.inner_ex_wrapper&.message}"
26
+ raise K3cloud::ResponseError, message
27
+
28
28
  else
29
29
  begin
30
- json = JSON.parse(result)
31
- raise StandardError, json if result.include?(',"IsSuccess":false,')
32
-
33
- json
34
- rescue StandardError => e
35
- raise StandardError, "JSON parse error, response: [#{result}]", e
30
+ JSON.parse(result)
31
+ rescue JSON::ParserError
32
+ raise K3cloud::ResponseError, "JSON parse error, response: [#{result}]"
36
33
  end
37
34
  end
38
35
  end
@@ -41,11 +38,11 @@ module K3cloud
41
38
 
42
39
  def execute_json(service_name, parameters)
43
40
  url = @config.server_url
44
- if url.nil? || url.empty?
45
- url = "https://api.kingdee.com/galaxyapi/"
46
- else
47
- url = url.to_s.strip.chomp("/")
48
- end
41
+ url = if url.nil? || url.empty?
42
+ "https://api.kingdee.com/galaxyapi/"
43
+ else
44
+ url.to_s.strip.chomp("/")
45
+ end
49
46
  url = "#{url}/#{service_name}.common.kdsvc"
50
47
  K3cloud.logger.info("request_url: #{url}")
51
48
 
data/lib/k3cloud-sdk.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "k3cloud"
4
-
metadata CHANGED
@@ -1,20 +1,22 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k3cloud-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - zevinto
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2023-11-29 00:00:00.000000000 Z
11
+ date: 2024-07-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Ruby Gem for K3Cloud that uses cryptographic signature technology to
14
- avoid plaintext transmission of keys and enables automatic login.
13
+ description: Ruby Gem for K3cloud OpenApi that uses cryptographic signature technology
14
+ to avoid plaintext transmission of keys and enables automatic login.
15
15
  email:
16
16
  - zevinto@163.com
17
- executables: []
17
+ executables:
18
+ - console
19
+ - setup
18
20
  extensions: []
19
21
  extra_rdoc_files: []
20
22
  files:
@@ -34,6 +36,7 @@ files:
34
36
  - lib/k3cloud.rb
35
37
  - lib/k3cloud/configuration.rb
36
38
  - lib/k3cloud/errors/k3cloud_error.rb
39
+ - lib/k3cloud/errors/response_error.rb
37
40
  - lib/k3cloud/http.rb
38
41
  - lib/k3cloud/k3cloud_api.rb
39
42
  - lib/k3cloud/utils/base64_utils.rb