xdelivery 2.0.1 → 2.1.0

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: '09446a0eba629a611cbe3fc4b56f751fcb5cdd34f02c30e88cd7c941cbbf6645'
4
- data.tar.gz: cf34ac202d5d055b741e8db30fe3cf0b551a1ef1dd8e642e013f5c6075030d1c
3
+ metadata.gz: 92e95d5a3dc4d682bf321826b4386ef8b4852a17cae9a9801af04010ff89341b
4
+ data.tar.gz: 0ef58af566f28ef63f059b1d83b8ffb92d614d657906c4481650e51e1f8917d4
5
5
  SHA512:
6
- metadata.gz: cad357967a7b44da238f6084ba67cbd1cbc3b1ae21088b7ac7a3d2c2128cb0678b4fc01385a42fcd4d4b0c569b5df07856545c5a25cf610b99fd0c530af3a2b8
7
- data.tar.gz: 1ca96bc7f43b2a034666430dee8b47c78dacb4bb50eede1d225635645cc1dd42ce2c1e9f35ad4eac567d6fcf5d8724583d50b6b21eee4cc1a2199d7068f7bd11
6
+ metadata.gz: 9932c36d2d1ead111c920cbce76b07de96e32911e032744cfe146a3d6202b6b02942aed5e93f89767344eea44a68705cae397456ed38e1d54ada8c0d9ebdf6d7
7
+ data.tar.gz: 5971044b3f5277d2a9bce14d21588029777b313c2d59dfa29d30520a4ae237af89312a91c1f7d08df703c2c0ffbc8662e23dbf930d8c653c25a7ac4c127317cd
@@ -0,0 +1,120 @@
1
+ name: Publish gem
2
+
3
+ # master 上 gemspec 版本號尚未發佈到 rubygems.org 時,自動以 Trusted Publishing (OIDC) 發佈。
4
+ # 版本已存在則跳過;不使用任何儲存的 RubyGems API key。
5
+ on:
6
+ push:
7
+ branches:
8
+ - master
9
+ workflow_dispatch:
10
+
11
+ permissions:
12
+ contents: read
13
+
14
+ concurrency:
15
+ group: publish-gem-${{ github.repository }}
16
+ cancel-in-progress: false
17
+
18
+ env:
19
+ # 與 test.yml 矩陣中最新的 Ruby 3.4.11 一致(使用根目錄 Gemfile / Gemfile.lock)
20
+ RUBY_VERSION: '3.4.11'
21
+ GEM_NAME: xdelivery
22
+ GEMSPEC: xdelivery-ruby.gemspec
23
+
24
+ jobs:
25
+ check:
26
+ name: Check version on rubygems.org
27
+ runs-on: ubuntu-latest
28
+ outputs:
29
+ should_publish: ${{ steps.check.outputs.should_publish }}
30
+ gem_name: ${{ steps.spec.outputs.name }}
31
+ gem_version: ${{ steps.spec.outputs.version }}
32
+ steps:
33
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
34
+ with:
35
+ persist-credentials: false
36
+
37
+ - uses: ruby/setup-ruby@b1da4809b005e0178fe08a1d57317bffc00b7b4c # v1.332.0
38
+ with:
39
+ ruby-version: ${{ env.RUBY_VERSION }}
40
+
41
+ - name: Read gem name and version from gemspec
42
+ id: spec
43
+ run: |
44
+ ruby -e 'spec = Gem::Specification.load(ENV.fetch("GEMSPEC")) or abort("cannot load #{ENV["GEMSPEC"]}"); abort("gemspec name #{spec.name} != #{ENV["GEM_NAME"]}") unless spec.name == ENV["GEM_NAME"]; puts "name=#{spec.name}"; puts "version=#{spec.version}"' >> "$GITHUB_OUTPUT"
45
+ cat "$GITHUB_OUTPUT"
46
+
47
+ - name: Check whether this version already exists on rubygems.org
48
+ id: check
49
+ env:
50
+ GEM_NAME: ${{ steps.spec.outputs.name }}
51
+ GEM_VERSION: ${{ steps.spec.outputs.version }}
52
+ run: |
53
+ set -euo pipefail
54
+ status=$(curl -sS -o versions.json -w '%{http_code}' "https://rubygems.org/api/v1/versions/${GEM_NAME}.json")
55
+ if [ "$status" = "404" ]; then
56
+ echo "Gem ${GEM_NAME} not found on rubygems.org; will publish."
57
+ echo "should_publish=true" >> "$GITHUB_OUTPUT"
58
+ exit 0
59
+ fi
60
+ if [ "$status" != "200" ]; then
61
+ echo "::error::rubygems.org API returned HTTP ${status}"
62
+ exit 1
63
+ fi
64
+ if jq -e --arg v "$GEM_VERSION" 'any(.[]; .number == $v)' versions.json > /dev/null; then
65
+ echo "${GEM_NAME} ${GEM_VERSION} already on rubygems.org; skip publish."
66
+ echo "should_publish=false" >> "$GITHUB_OUTPUT"
67
+ else
68
+ echo "${GEM_NAME} ${GEM_VERSION} not on rubygems.org yet; will publish."
69
+ echo "should_publish=true" >> "$GITHUB_OUTPUT"
70
+ fi
71
+
72
+ test:
73
+ name: Test (Ruby 3.4)
74
+ needs: check
75
+ if: needs.check.outputs.should_publish == 'true'
76
+ runs-on: ubuntu-latest
77
+ steps:
78
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
79
+ with:
80
+ persist-credentials: false
81
+
82
+ - uses: ruby/setup-ruby@b1da4809b005e0178fe08a1d57317bffc00b7b4c # v1.332.0
83
+ with:
84
+ ruby-version: ${{ env.RUBY_VERSION }}
85
+ bundler-cache: true
86
+
87
+ - run: bundle exec rake t
88
+
89
+ publish:
90
+ name: Publish ${{ needs.check.outputs.gem_name }} ${{ needs.check.outputs.gem_version }}
91
+ needs: [check, test]
92
+ if: needs.check.outputs.should_publish == 'true' && github.ref == 'refs/heads/master'
93
+ runs-on: ubuntu-latest
94
+ environment: gem-publish
95
+ permissions:
96
+ id-token: write # Trusted Publishing (OIDC)
97
+ contents: write # rake release 推送 vX.Y.Z tag
98
+ steps:
99
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
100
+ with:
101
+ persist-credentials: false
102
+
103
+ - uses: ruby/setup-ruby@b1da4809b005e0178fe08a1d57317bffc00b7b4c # v1.332.0
104
+ with:
105
+ ruby-version: ${{ env.RUBY_VERSION }}
106
+ bundler-cache: true
107
+
108
+ # setup-ruby 的 bundler-cache 會把 BUNDLE_PATH 等設定寫進 .bundle/config,
109
+ # 若該檔被 git 追蹤,rake release 的 guard_clean 會判定工作目錄不乾淨。
110
+ # 目前此 repo 沒有追蹤任何 .bundle/config;這一步對「有追蹤才標記」做容錯處理,
111
+ # 日後若加入 gemfiles/.bundle/config 或 .bundle/config 也不會讓發佈失敗。
112
+ - name: Ignore CI-only bundler config change
113
+ run: |
114
+ git status --porcelain
115
+ git ls-files -z '*.bundle/config' | xargs -0 -r git update-index --assume-unchanged
116
+ git status --porcelain
117
+
118
+ # 透過 rubygems/configure-rubygems-credentials 取得短效 OIDC token,
119
+ # 再執行 bundle exec rake release(build、建立並推送 vX.Y.Z tag、push gem)
120
+ - uses: rubygems/release-gem@7f9650160c1a4e7989fdc9855807bdbd421d8b6b # v1.4.1
@@ -0,0 +1,23 @@
1
+ name: Tests
2
+
3
+ on:
4
+ push:
5
+ branches: [ master, main ]
6
+ pull_request:
7
+ branches: [ master, main ]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ ruby: ["3.1.7", "3.3.12", "3.4.11"]
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - uses: ruby/setup-ruby@v1
19
+ with:
20
+ ruby-version: ${{ matrix.ruby }}
21
+ bundler-cache: true
22
+ - name: Run tests
23
+ run: bundle exec rake t
data/CLAUDE.md ADDED
@@ -0,0 +1,9 @@
1
+ # CLAUDE.md
2
+
3
+ ## 發版規則(Ruby gem)
4
+
5
+ - 這個 gem(`xdelivery`,gemspec:`xdelivery.gemspec`)在 master 收到「新版本號」時,由 GitHub Actions(`.github/workflows/publish.yml`)自動發佈到 rubygems.org(Trusted Publishing,不使用 API key)。
6
+ - **每一個 PR 都必須跳版號**(改 `lib/xdelivery/version.rb`),除非這個 PR 只改文件、CI 或 CLAUDE.md 且明確不需要發版。沒跳版號的 PR 合進 master 後不會發佈。
7
+ - 跳版規則(Semantic Versioning):修 bug 跳 patch(x.y.Z);新增相容功能跳 minor(x.Y.0);不相容變更跳 major(X.0.0)。
8
+ - 版號只改在 PR 裡。AI 帳號只能開 branch 與 PR,不得合併到 master;只有真人帳號可以合併。合併就等於批准發佈。
9
+ - 不得為了讓測試通過而改變程式原本的行為。
data/Gemfile CHANGED
@@ -6,4 +6,7 @@ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
6
6
  gemspec
7
7
 
8
8
  gem 'rest-client'
9
- gem 'webmock'
9
+ gem 'webmock'
10
+
11
+ # public_suffix 7.x needs Ruby >= 3.2; keep 3.1 CI green
12
+ gem 'public_suffix', '>= 2.0.2', '< 7'
data/Gemfile.lock CHANGED
@@ -1,53 +1,59 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- xdelivery (2.0.0)
5
- rest-client
4
+ xdelivery (2.1.0)
5
+ ostruct
6
+ rest-client (>= 2.0)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
- addressable (2.5.2)
11
- public_suffix (>= 2.0.2, < 4.0)
12
- crack (0.4.3)
13
- safe_yaml (~> 1.0.0)
14
- domain_name (0.5.20180417)
15
- unf (>= 0.0.5, < 1.0.0)
16
- hashdiff (0.3.7)
17
- http-cookie (1.0.3)
11
+ addressable (2.9.0)
12
+ public_suffix (>= 2.0.2, < 8.0)
13
+ bigdecimal (4.1.3)
14
+ crack (1.0.1)
15
+ bigdecimal
16
+ rexml
17
+ domain_name (0.6.20260907)
18
+ hashdiff (1.2.1)
19
+ http-accept (1.7.0)
20
+ http-cookie (1.1.6)
18
21
  domain_name (~> 0.5)
19
- mime-types (3.2.2)
20
- mime-types-data (~> 3.2015)
21
- mime-types-data (3.2018.0812)
22
- minitest (5.11.3)
22
+ logger (1.7.0)
23
+ mime-types (3.7.0)
24
+ logger
25
+ mime-types-data (~> 3.2025, >= 3.2025.0507)
26
+ mime-types-data (3.2026.0922)
27
+ minitest (5.27.0)
23
28
  minitest-stub-const (0.6)
24
29
  netrc (0.11.0)
25
- public_suffix (3.0.3)
26
- rake (10.5.0)
27
- rest-client (2.0.2)
30
+ ostruct (0.6.3)
31
+ public_suffix (6.0.2)
32
+ rake (13.4.2)
33
+ rest-client (2.1.0)
34
+ http-accept (>= 1.7.0, < 2.0)
28
35
  http-cookie (>= 1.0.2, < 2.0)
29
36
  mime-types (>= 1.16, < 4.0)
30
37
  netrc (~> 0.8)
31
- safe_yaml (1.0.4)
32
- unf (0.1.4)
33
- unf_ext
34
- unf_ext (0.0.7.5)
35
- webmock (3.4.2)
36
- addressable (>= 2.3.6)
38
+ rexml (3.4.4)
39
+ webmock (3.26.4)
40
+ addressable (>= 2.8.0)
37
41
  crack (>= 0.3.2)
38
- hashdiff
42
+ hashdiff (>= 0.4.0, < 2.0.0)
39
43
 
40
44
  PLATFORMS
41
45
  ruby
46
+ x86_64-linux
42
47
 
43
48
  DEPENDENCIES
44
- bundler (~> 2.3.14)
49
+ bundler (>= 2.3)
45
50
  minitest (~> 5.0)
46
51
  minitest-stub-const
47
- rake (~> 10.0)
52
+ public_suffix (>= 2.0.2, < 7)
53
+ rake (>= 10.0)
48
54
  rest-client
49
55
  webmock
50
56
  xdelivery!
51
57
 
52
58
  BUNDLED WITH
53
- 2.3.14
59
+ 2.5.23
data/Rakefile CHANGED
@@ -7,4 +7,4 @@ Rake::TestTask.new(:t) do |t|
7
7
  t.test_files = FileList["spec/**/*_spec.rb"]
8
8
  end
9
9
 
10
- task :default => :test
10
+ task :default => :t
@@ -24,20 +24,31 @@ module Xdelivery
24
24
 
25
25
  protected
26
26
 
27
+ # NOTICE: rescue 的順序不可以對調。
28
+ # RestClient 的 timeout 例外是 ExceptionWithResponse 的子孫(經由 408 RequestTimeout),
29
+ # 但它的 response 是 nil。若被下面那條接住並回傳 e.response,呼叫端會拿到 nil,
30
+ # 接著在 Response::Base 裡 nil.code 噴 NoMethodError —— 完全看不出原因是逾時。
31
+ # 逾時要原樣往外拋,讓呼叫端自己決定怎麼處理
27
32
  def patch(path)
28
33
  RestClient::Request.execute(method: :patch, url: uri(path).to_s, payload: patch_data, open_timeout: open_timeout, read_timeout: read_timeout)
34
+ rescue RestClient::Exceptions::Timeout
35
+ raise
29
36
  rescue RestClient::ExceptionWithResponse => e
30
37
  e.response
31
38
  end
32
39
 
33
40
  def post(path)
34
41
  RestClient::Request.execute(method: :post, url: uri(path).to_s, payload: post_data, open_timeout: open_timeout, read_timeout: read_timeout)
42
+ rescue RestClient::Exceptions::Timeout
43
+ raise
35
44
  rescue RestClient::ExceptionWithResponse => e
36
45
  e.response
37
46
  end
38
47
 
39
48
  def get(path)
40
49
  RestClient::Request.execute(method: :get, url: uri(path).to_s, open_timeout: open_timeout, read_timeout: read_timeout)
50
+ rescue RestClient::Exceptions::Timeout
51
+ raise
41
52
  rescue RestClient::ExceptionWithResponse => e
42
53
  e.response
43
54
  end
@@ -65,6 +76,16 @@ module Xdelivery
65
76
  {}
66
77
  end
67
78
 
79
+ # 空字串/只有空白(例如表單沒填的欄位)跟 nil 一樣視為「不掛既有紀錄」,
80
+ # 送出去只會讓對方拿到一個無效的 id。有值的字串則去掉前後空白才送,
81
+ # 不然貼上來的 " 5566 " 會被序列化成 import[history_id]=+5566+
82
+ def history_id_payload(history_id)
83
+ id = history_id.respond_to?(:strip) ? history_id.strip : history_id
84
+ return {} if id.to_s.empty?
85
+
86
+ { history_id: id }
87
+ end
88
+
68
89
  private
69
90
 
70
91
  def uri(path)
@@ -3,7 +3,8 @@ module Xdelivery
3
3
  class Orders < Base
4
4
  include Enumerable
5
5
 
6
- attr_accessor :orders
6
+ # history_id: 掛進火箭快遞既有匯入紀錄的 id,nil 則由對方新建一筆
7
+ attr_accessor :orders, :history_id
7
8
 
8
9
  COLUMNS = [
9
10
  :order_id, :provider, :recipient, :mobile, :email, :store_id, :store_name, :address,
@@ -46,7 +47,7 @@ module Xdelivery
46
47
  protected
47
48
 
48
49
  def post_data
49
- { import: { orders: orders } }
50
+ { import: { orders: orders }.merge(history_id_payload(history_id)) }
50
51
  end
51
52
  end
52
53
  end
@@ -16,6 +16,12 @@ module Xdelivery
16
16
  def orders
17
17
  data['orders'].map { |order| Order.new(order) }
18
18
  end
19
+
20
+ # 這批訂單被掛在哪一筆匯入紀錄底下。
21
+ # 失敗的回應不會帶(沒有任何訂單寫入),此時是 nil
22
+ def history_id
23
+ data['history_id']
24
+ end
19
25
  end
20
26
  end
21
27
  end
@@ -3,7 +3,8 @@ module Xdelivery
3
3
  class Sales < Base
4
4
  include Enumerable
5
5
 
6
- attr_accessor :sales
6
+ # history_id: 掛進火箭快遞既有匯入紀錄的 id,nil 則由對方新建一筆
7
+ attr_accessor :sales, :history_id
7
8
 
8
9
  COLUMNS = [
9
10
  :order_id, :recipient, :mobile, :email, :address,
@@ -46,7 +47,7 @@ module Xdelivery
46
47
  protected
47
48
 
48
49
  def post_data
49
- { import: { orders: sales } }
50
+ { import: { orders: sales }.merge(history_id_payload(history_id)) }
50
51
  end
51
52
  end
52
53
  end
@@ -8,14 +8,18 @@ module Xdelivery
8
8
  self.access_key = access_key
9
9
  end
10
10
 
11
- def create_orders!
11
+ # history_id 帶值時,這批訂單會掛進火箭快遞既有的匯入紀錄,
12
+ # 讓多次呼叫在對方後台合併成同一筆 history
13
+ def create_orders!(history_id: nil)
12
14
  api = API::Orders.new(merchant_no, access_key)
15
+ api.history_id = history_id
13
16
  yield(api)
14
17
  api.create!
15
18
  end
16
19
 
17
- def create_sales!
20
+ def create_sales!(history_id: nil)
18
21
  api = API::Sales.new(merchant_no, access_key)
22
+ api.history_id = history_id
19
23
  yield(api)
20
24
  api.create!
21
25
  end
@@ -1,3 +1,3 @@
1
1
  module Xdelivery
2
- VERSION = "2.0.1"
2
+ VERSION = "2.1.0"
3
3
  end
data/lib/xdelivery.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'ostruct'
2
3
  require 'rest-client'
3
4
  require "xdelivery/version"
4
5
  require "xdelivery/callback"
@@ -24,7 +25,7 @@ module Xdelivery
24
25
 
25
26
  @@env = :production
26
27
 
27
- def self.env(env)
28
+ def self.env
28
29
  @@env
29
30
  end
30
31
 
@@ -14,6 +14,8 @@ Gem::Specification.new do |spec|
14
14
  spec.homepage = "https://github.com/superlanding/xdelivery-ruby"
15
15
  spec.license = "MIT"
16
16
 
17
+ spec.required_ruby_version = ">= 2.7"
18
+
17
19
  # Specify which files should be added to the gem when it is released.
18
20
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
21
  spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
@@ -23,10 +25,13 @@ Gem::Specification.new do |spec|
23
25
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
24
26
  spec.require_paths = ["lib"]
25
27
 
26
- spec.add_development_dependency "bundler", "~> 2.3.14"
27
- spec.add_development_dependency "rake", "~> 10.0"
28
+ spec.add_development_dependency "bundler", ">= 2.3"
29
+ spec.add_development_dependency "rake", ">= 10.0"
28
30
  spec.add_development_dependency "minitest", "~> 5.0"
29
31
  spec.add_development_dependency "minitest-stub-const"
30
32
 
31
- spec.add_dependency "rest-client"
33
+ # lib/xdelivery/api/base.rb 用到 RestClient::Exceptions::Timeout,2.0 才有這個常數
34
+ spec.add_dependency "rest-client", ">= 2.0"
35
+ # OpenStruct extracted from default gems (needed on Ruby 3.3+/3.4)
36
+ spec.add_dependency "ostruct"
32
37
  end
metadata CHANGED
@@ -1,41 +1,40 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xdelivery
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - eddie
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2022-08-04 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - "~>"
16
+ - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: 2.3.14
18
+ version: '2.3'
20
19
  type: :development
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
- - - "~>"
23
+ - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: 2.3.14
25
+ version: '2.3'
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: rake
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
- - - "~>"
30
+ - - ">="
32
31
  - !ruby/object:Gem::Version
33
32
  version: '10.0'
34
33
  type: :development
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
- - - "~>"
37
+ - - ">="
39
38
  - !ruby/object:Gem::Version
40
39
  version: '10.0'
41
40
  - !ruby/object:Gem::Dependency
@@ -68,6 +67,20 @@ dependencies:
68
67
  version: '0'
69
68
  - !ruby/object:Gem::Dependency
70
69
  name: rest-client
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '2.0'
75
+ type: :runtime
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '2.0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: ostruct
71
84
  requirement: !ruby/object:Gem::Requirement
72
85
  requirements:
73
86
  - - ">="
@@ -87,8 +100,11 @@ executables: []
87
100
  extensions: []
88
101
  extra_rdoc_files: []
89
102
  files:
103
+ - ".github/workflows/publish.yml"
104
+ - ".github/workflows/test.yml"
90
105
  - ".gitignore"
91
106
  - ".travis.yml"
107
+ - CLAUDE.md
92
108
  - Gemfile
93
109
  - Gemfile.lock
94
110
  - LICENSE.txt
@@ -117,7 +133,6 @@ homepage: https://github.com/superlanding/xdelivery-ruby
117
133
  licenses:
118
134
  - MIT
119
135
  metadata: {}
120
- post_install_message:
121
136
  rdoc_options: []
122
137
  require_paths:
123
138
  - lib
@@ -125,15 +140,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
140
  requirements:
126
141
  - - ">="
127
142
  - !ruby/object:Gem::Version
128
- version: '0'
143
+ version: '2.7'
129
144
  required_rubygems_version: !ruby/object:Gem::Requirement
130
145
  requirements:
131
146
  - - ">="
132
147
  - !ruby/object:Gem::Version
133
148
  version: '0'
134
149
  requirements: []
135
- rubygems_version: 3.1.6
136
- signing_key:
150
+ rubygems_version: 3.6.9
137
151
  specification_version: 4
138
152
  summary: 火箭快遞 API 串接
139
153
  test_files: []