twsms2 1.1.0 → 1.3.0

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
- SHA1:
3
- metadata.gz: 548eb03c93dd04ba44a85593a17e14a6d77c85da
4
- data.tar.gz: 0eb4402e4e51a566c8476b88d84a43a9c5b40993
2
+ SHA256:
3
+ metadata.gz: ed7351473d76e0ad230808dc4ac38abb5609887a79efef9b40a3d6a6e4587019
4
+ data.tar.gz: 36a0052de311fde0274c540b08b6a91cdb56127b80e02112dc9245387350025d
5
5
  SHA512:
6
- metadata.gz: 38bd3975a7334dddb430b45269e3f6204ebfd4b6407fe669486b13927c467585342f125be252f41886dae0f06e036d0745d7acfedc03ca03d6a323b682583bd6
7
- data.tar.gz: f9b5043d50a38004a9d8f8948202dc7054f0b0e8c12a8477d45fae48c94e954c09b1a2660c356a0e16250cac265db0da19939fd829be5327b5afcf9d12befb6c
6
+ metadata.gz: b595982bb5db4ba708c67a59b893901ad831d35d7310fdd2b7fe44b5563128deffb68294592f79e5a745a58dfcc97df5307830e408b83b9f0dfc533afee5bedf
7
+ data.tar.gz: 6374876b1a82e0804ecb16850ffcbea004b7a25f93dac4614714e3cda311f89112129a5a060a3ba15388d86b32cfeb3b382fa7806066ab3f58aa90f996041901
data/README.md CHANGED
@@ -1,7 +1,8 @@
1
- Twsms2 ( 2016 新版 台灣簡訊 TwSMS API Ruby 版套件 )
1
+ Twsms2 ( 台灣簡訊 TwSMS API Ruby 版套件 )
2
2
  =================================================
3
3
 
4
- [![Gem Version](https://badge.fury.io/rb/twsms2.svg)](https://badge.fury.io/rb/twsms2) [![Build Status](https://travis-ci.org/guanting112/twsms2.svg?branch=master)](https://travis-ci.org/guanting112/twsms2)
4
+ [![Gem Version](https://badge.fury.io/rb/twsms2.svg)](https://badge.fury.io/rb/twsms2)
5
+ [![Code Climate](https://codeclimate.com/github/guanting112/twsms2/badges/gpa.svg)](https://codeclimate.com/github/guanting112/twsms2)
5
6
 
6
7
  ![twsms](http://i.imgur.com/KVuaBIm.png)
7
8
 
@@ -20,7 +21,7 @@ Ruby 2 以上的版本,也可在 Ruby On Rails 專案引入
20
21
  請在您的 Ruby 或 Rails 專案裡的 Gemfile 加入以下指令
21
22
 
22
23
  ```ruby
23
- gem 'twsms2', '~> 1.1.0'
24
+ gem 'twsms2', '=> 1.3.0'
24
25
  ```
25
26
 
26
27
  然後執行 bundle install 更新套件組
@@ -36,13 +37,24 @@ gem 'twsms2', '~> 1.1.0'
36
37
 
37
38
  本 API 套件,提供幾組以下方法來方便您開發簡訊相關服務
38
39
 
39
- 但要使用前,需要先[註冊台灣簡訊的會員][twsms_signup],否則您的程式無法存取台灣簡訊的 API 管道
40
+ 基本執行範例如下,但要使用前,需要先[註冊台灣簡訊的會員][twsms_signup],否則無法存取相關服務
40
41
 
41
42
  ```ruby
42
43
  require 'twsms2'
43
44
 
44
- # Twsms2 是走 https 的方式進行系統操作
45
- sms_client = Twsms2::Client.new(username: '會員帳號', password: '會員密碼', agent: "Mozilla/5.0 (可自訂 user-agent)")
45
+ # 程式將會以 SSL 的方式,走 https 連線到簡訊商的系統
46
+ sms_client = Twsms2::Client.new(username: '會員帳號', password: '會員密碼')
47
+ ```
48
+
49
+ 也可以加入 agent ( user-agent ) 跟 timeout ( 逾時時間/秒 ) 參數 至 client 物件
50
+
51
+ ```ruby
52
+ sms_client = Twsms2::Client.new(
53
+ username: '會員帳號',
54
+ password: '會員密碼',
55
+ agent: "Mozilla/5.0 ( Hello World )",
56
+ timeout: 10
57
+ )
46
58
  ```
47
59
 
48
60
  使用範例
@@ -56,8 +68,6 @@ sms_client = Twsms2::Client.new(username: '會員帳號', password: '會員密
56
68
  sms_client.account_is_available
57
69
  ```
58
70
 
59
- ----
60
-
61
71
  ### 發送簡訊
62
72
 
63
73
  #### 一般使用
@@ -86,7 +96,7 @@ sms_client.send_message to: '手機號碼', content: "預約簡訊測試: #{Time
86
96
 
87
97
  #### 強制直接顯示簡訊內容
88
98
 
89
- 可以加入 popup 參數,讓簡訊在收訊人的手機裝置直接顯示在上面 ( 可能不會被手機儲存 )
99
+ 可以加入 popup 參數,讓簡訊在收訊人的手機上直接顯示,但有可能不會被手機儲存
90
100
 
91
101
  ```ruby
92
102
  sms_client.send_message to: '手機號碼', content: "簡訊內容..", popup: true
@@ -94,9 +104,9 @@ sms_client.send_message to: '手機號碼', content: "簡訊內容..", popup: tr
94
104
 
95
105
  #### 關閉長簡訊支援
96
106
 
97
- 一般發送簡訊時,預設為長簡訊發送
107
+ 一般發送簡訊時,程式預設支援長簡訊發送
98
108
 
99
- 因此,若超 SMS 短信字元長度,將會以第二封起開始計算
109
+ 因此,若超 SMS 簡訊字元長度,將會以第二封起開始計算
100
110
 
101
111
  加入 long 參數,若指定為 false 則不會使用長簡訊格式
102
112
 
@@ -104,6 +114,8 @@ sms_client.send_message to: '手機號碼', content: "簡訊內容..", popup: tr
104
114
  sms_client.send_message to: '手機號碼', content: "簡訊內容..", long: false
105
115
  ```
106
116
 
117
+ 詳細規則請以 台灣簡訊 公告為主
118
+
107
119
  ### 發送簡訊 的 回傳結果
108
120
 
109
121
  #### 發送成功
@@ -132,7 +144,7 @@ error code 的部分,請以 台灣簡訊 API 文件的定義為主,本套件
132
144
 
133
145
  ----
134
146
 
135
- ### 查詢簡訊餘額
147
+ ### 查詢目前帳號所持有的簡訊餘額
136
148
 
137
149
  若你需要查詢您會員帳號的簡訊餘額,可以用以下指令處理
138
150
 
@@ -140,7 +152,7 @@ error code 的部分,請以 台灣簡訊 API 文件的定義為主,本套件
140
152
  sms_client.get_balance
141
153
  ```
142
154
 
143
- ### 查詢簡訊餘額 的 回傳結果
155
+ ### 查詢目前帳號所持有的簡訊餘額 的 回傳結果
144
156
 
145
157
  #### 得到簡訊餘額
146
158
 
@@ -155,7 +167,7 @@ message_quota 則是簡訊餘額,代表你還剩幾封可以用,若為 0 就
155
167
  {:access_success=>true, :message_quota=>77, :error=>nil}
156
168
  ```
157
169
 
158
- #### 發生錯誤
170
+ #### 發生錯誤時
159
171
 
160
172
  若 access_success 為 false 則表示過程有出現錯誤,同時 message_quota 會為 0
161
173
 
@@ -163,6 +175,78 @@ message_quota 則是簡訊餘額,代表你還剩幾封可以用,若為 0 就
163
175
  {:access_success=>false, :message_quota=>0, :error=>"TWSMS:00010"}
164
176
  ```
165
177
 
178
+ ### 查詢特定的簡訊發送狀態
179
+
180
+ 若你需要查詢特定的簡訊發送狀態,您可以指定 手機號碼 跟 message id 向簡訊商查詢該封簡訊最後是否已發送成功
181
+
182
+ ```ruby
183
+ sms_client.get_message_status(message_id: '在 send_message 得到的 message_id', phone_number: '手機號碼')
184
+ ```
185
+
186
+ ### 查詢特定的簡訊發送狀態 的 回傳結果
187
+
188
+ #### 得到發送狀況
189
+
190
+ 當你執行完成後,get_message_status 方法會回傳一組 hash 型態的結果
191
+
192
+ 只要 access_success 的值為 true 就一定代表系統有成功取得資料
193
+
194
+ is_delivered 代表是否已寄到用戶手機,true 為是、false 為有發生 delivered 以外的狀況
195
+
196
+ message_status 代表訊息狀態,可以知道是否已抵達 或是 發生通信上的錯誤 等等的相關資訊
197
+
198
+ ```ruby
199
+ {:access_success=>true, :is_delivered=>true, :message_status=>"delivered", :error=>nil}
200
+ ```
201
+
202
+ #### get_message_status 裡的 message_status 涵義
203
+
204
+ ```ruby
205
+ 'delivered' # 簡訊已抵達
206
+ 'expired' # 簡訊寄送超過有效時間
207
+ 'deleted' # 已被刪除
208
+ 'undelivered' # 無法送達
209
+ 'transmitting' # 傳輸中,正在接收
210
+ 'unknown' # 未知錯誤,可能無效
211
+ 'rejected' # 被拒絕
212
+ 'incorrect_sms_system_syntax' # 簡訊商編碼錯誤
213
+ 'incorrect_phone_number' # 不正確的電話號碼
214
+ 'incorrect_content' # 不正確的內容
215
+ 'sms_system_other_error' # 簡訊商系統錯誤
216
+ 'illegal_content' # 不合法的簡訊內容
217
+ 'status_undefined' # 核心 API 無法得知狀況
218
+ ```
219
+
220
+ #### 發生錯誤時
221
+
222
+ 若 access_success 為 false 則表示過程有出現錯誤,同時 is_delivered 會為 false,message_status 也會是 nil
223
+
224
+ ```ruby
225
+ {:access_success=>false, :is_delivered=>false, :message_status=>nil, :error=>"TWSMS:00010"})
226
+ ```
227
+
228
+ ----
229
+
230
+ 例外狀況的處理
231
+ --------
232
+
233
+ 在某些情況下,程式會擲出一些例外給 ruby 去處理,你可以先用 Twsms2 自帶的 Error 來先做 rescue
234
+
235
+ ```ruby
236
+
237
+ begin
238
+ sms_client.account_is_available
239
+ rescue Twsms2::ClientError
240
+ 'Client 物件有內部錯誤'
241
+ rescue Twsms2::ServerError => error
242
+ "伺服器端有一些無法處理的狀況 #{error.message}"
243
+ rescue Twsms2::ClientTimeoutError
244
+ "發生 Timeout 囉"
245
+ rescue Twsms2::Error => error
246
+ "發生非預期的錯誤 #{error.message}"
247
+ end
248
+
249
+ ```
166
250
 
167
251
  LICENSE
168
252
  --------
@@ -176,3 +260,4 @@ LICENSE
176
260
 
177
261
  [twsms_signup]: https://www.twsms.com/accjoin.php
178
262
  [twsms_homepage]: https://www.twsms.com/
263
+
data/Rakefile CHANGED
@@ -1,5 +1,5 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
3
 
4
4
  task :default => :spec
5
5
 
data/bin/console CHANGED
@@ -1,14 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "twsms2"
3
+ require 'bundler/setup'
4
+ require 'twsms2'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
8
8
 
9
9
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
10
+ # require 'pry'
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start
@@ -2,4 +2,5 @@ module Twsms2
2
2
  class Error < StandardError; end
3
3
  class ClientError < Error; end
4
4
  class ServerError < Error; end
5
+ class ClientTimeoutError < Error; end
5
6
  end
@@ -1,9 +1,7 @@
1
+ require 'json'
2
+
1
3
  module Twsms2
2
4
  module Formatter
3
- def match_string(rule, string)
4
- match_data = rule.match(string)
5
- match_data.nil? ? nil : match_data[1]
6
- end
7
5
 
8
6
  def format_time_string(time)
9
7
  return nil if time.nil?
@@ -17,6 +15,53 @@ module Twsms2
17
15
  asia_taipei_time
18
16
  end
19
17
 
18
+ def message_status_sanitize(original_text)
19
+ new_text = case original_text
20
+ when 'DELIVRD' then 'delivered'
21
+ when 'EXPIRED' then 'expired'
22
+ when 'DELETED' then 'deleted'
23
+ when 'UNDELIV' then 'undelivered'
24
+ when 'ACCEPTD' then 'transmitting'
25
+ when 'UNKNOWN' then 'unknown'
26
+ when 'REJECTD' then 'rejected'
27
+ when 'SYNTAXE' then 'incorrect_sms_system_syntax'
28
+ when 'MOBERROR' then 'incorrect_phone_number'
29
+ when 'MSGERROR' then 'incorrect_content'
30
+ when 'OTHERROR' then 'sms_system_other_error'
31
+ when 'REJERROR' then 'illegal_content'
32
+ when 'REJMOBIL' then 'device_rejected'
33
+ else 'status_undefined'
34
+ end
35
+
36
+ new_text
37
+ end
38
+
39
+ def format_message_status(original_info)
40
+ new_info = {
41
+ access_success: false,
42
+ is_delivered: false,
43
+ message_status: nil,
44
+ error: nil
45
+ }
46
+
47
+ json_info = JSON.parse(original_info)
48
+
49
+ code_text = json_info['code']
50
+ status_text = json_info['statustext']
51
+
52
+ new_info[:access_success] =
53
+ !code_text.nil? && !status_text.nil? && code_text == '00000'
54
+
55
+ if new_info[:access_success]
56
+ new_info[:message_status] = message_status_sanitize(status_text)
57
+ new_info[:is_delivered] = new_info[:message_status] == 'delivered'
58
+ else
59
+ new_info[:error] = code_text.nil? ? "TWSMS:CODE_NOT_FOUND" : "TWSMS:#{code_text}".upcase
60
+ end
61
+
62
+ new_info
63
+ end
64
+
20
65
  def format_send_message_info(original_info)
21
66
  new_info = {
22
67
  access_success: false,
@@ -24,17 +69,18 @@ module Twsms2
24
69
  error: nil
25
70
  }
26
71
 
27
- code_text = match_string(/<code>(?<code>\w+)<\/code>/, original_info)
28
- message_id_text = match_string(/<msgid>(?<message_id>\d+)<\/msgid>/, original_info)
72
+ json_info = JSON.parse(original_info)
73
+
74
+ code_text = json_info['code']
75
+ message_id_text = json_info['msgid']
29
76
 
30
- new_info[:access_success] = !code_text.nil? && !message_id_text.nil? && code_text == '00000'
77
+ new_info[:access_success] =
78
+ !code_text.nil? && !message_id_text.nil? && code_text == '00000'
31
79
 
32
80
  if new_info[:access_success]
33
81
  new_info[:message_id] = message_id_text
34
82
  else
35
- new_info[:error] = "TWSMS:CODE_NOT_FOUND"
36
- new_info[:error] = "TWSMS:#{code_text}" unless code_text.nil?
37
- new_info[:error].upcase!
83
+ new_info[:error] = code_text.nil? ? "TWSMS:CODE_NOT_FOUND" : "TWSMS:#{code_text}".upcase
38
84
  end
39
85
 
40
86
  new_info
@@ -47,17 +93,17 @@ module Twsms2
47
93
  error: nil
48
94
  }
49
95
 
50
- code_text = match_string(/<code>(?<code>\w+)<\/code>/, original_info)
51
- point_text = match_string(/<point>(?<point>\d+)<\/point>/, original_info)
96
+ json_info = JSON.parse(original_info)
97
+ code_text = json_info['code']
98
+ point_text = json_info['point']
52
99
 
53
- new_info[:access_success] = !code_text.nil? && !point_text.nil? && code_text == '00000'
100
+ new_info[:access_success] =
101
+ !code_text.nil? && !point_text.nil? && code_text == '00000'
54
102
 
55
103
  if new_info[:access_success]
56
104
  new_info[:message_quota] = point_text.to_i
57
105
  else
58
- new_info[:error] = "TWSMS:CODE_NOT_FOUND"
59
- new_info[:error] = "TWSMS:#{code_text}" unless code_text.nil?
60
- new_info[:error].upcase!
106
+ new_info[:error] = code_text.nil? ? "TWSMS:CODE_NOT_FOUND" : "TWSMS:#{code_text}".upcase
61
107
  end
62
108
 
63
109
  new_info
@@ -21,6 +21,8 @@ module Twsms2
21
21
  raise ClientError, "#{http_response.code} response from #{host}"
22
22
  when Net::HTTPServerError
23
23
  raise ServerError, "#{http_response.code} response from #{host}"
24
+ when 'READ_TIMEOUT'
25
+ raise ClientTimeoutError, "Read Timeout from #{host}"
24
26
  else
25
27
  raise Error, "#{http_response.code} response from #{host}"
26
28
  end
@@ -28,8 +30,11 @@ module Twsms2
28
30
 
29
31
  def request(uri, message)
30
32
  http = Net::HTTP.new(uri.host, Net::HTTP.https_default_port)
33
+ http.read_timeout = @timeout
31
34
  http.use_ssl = true
32
35
  http.request(message)
36
+ rescue Net::ReadTimeout
37
+ 'READ_TIMEOUT'
33
38
  end
34
39
 
35
40
  def query_string(params)
@@ -1,3 +1,3 @@
1
1
  module Twsms2
2
- VERSION = "1.1.0"
2
+ VERSION = "1.3.0"
3
3
  end
data/lib/twsms2.rb CHANGED
@@ -13,12 +13,12 @@ module Twsms2
13
13
  @api_host = options.fetch(:host) { 'api.twsms.com' }
14
14
  @username = options.fetch(:username) { ENV.fetch('TWSMS_USERNAME') }
15
15
  @password = options.fetch(:password) { ENV.fetch('TWSMS_PASSWORD') }
16
+ @timeout = options.fetch(:timeout) { 10 }
16
17
  end
17
18
 
18
19
  def account_is_available
19
20
  balance_info = get_balance
20
-
21
- ok = balance_info[:message_quota] > 0 && balance_info[:access_success]
21
+ balance_info[:message_quota] > 0 && balance_info[:access_success]
22
22
  end
23
23
 
24
24
  def send_message(options={})
@@ -28,15 +28,25 @@ module Twsms2
28
28
  options[:long] = options[:long] || options[:long].nil? ? :Y : :N
29
29
  options[:popup] = options[:popup] ? :Y : :N
30
30
 
31
- response = get(@api_host, '/smsSend.php', popup: options[:popup], mo: :N, longsms: options[:long], mobile: options[:to], message: options[:content], drurl: '', sendtime: options[:at])
31
+ response = get(@api_host, '/json/sms_send.php', popup: options[:popup], mo: :N, longsms: options[:long], mobile: options[:to], message: options[:content], drurl: '', sendtime: options[:at])
32
32
 
33
33
  format_send_message_info(response)
34
34
  end
35
35
 
36
36
  def get_balance
37
- response = get(@api_host, '/smsQuery.php', deltime: :N, checkpoint: :Y, mobile: '', msgid: '')
37
+ response = get(@api_host, '/json/sms_query.php', deltime: :N, checkpoint: :Y, mobile: '', msgid: '')
38
38
 
39
39
  format_balance_info(response)
40
40
  end
41
+
42
+ def get_message_status(options={})
43
+ options[:message_id] ||= nil
44
+ options[:phone_number] ||= nil
45
+
46
+ response = get(@api_host, '/json/sms_query.php', mobile: options[:phone_number], msgid: options[:message_id])
47
+
48
+ format_message_status(response)
49
+ end
50
+
41
51
  end
42
52
  end
data/twsms2.gemspec CHANGED
@@ -10,10 +10,10 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["cgt886@gmail.com"]
11
11
  spec.license = "MIT"
12
12
  spec.platform = Gem::Platform::RUBY
13
- spec.summary = %q{2016 新版 台灣簡訊 TwSMS API ( 純 Ruby / Rails 專案適用 )}
14
- spec.description = %q{2016 新版 台灣簡訊 TwSMS API ( 純 Ruby / Rails 專案適用 )}
13
+ spec.summary = %q{2021 新版 台灣簡訊 TwSMS API ( 純 Ruby / Rails 專案適用 )}
14
+ spec.description = %q{2021 新版 台灣簡訊 TwSMS API ( 純 Ruby / Rails 專案適用 )}
15
15
  spec.homepage = "https://github.com/guanting112/twsms2"
16
- spec.required_ruby_version = '~> 2'
16
+ spec.required_ruby_version = '>= 2'
17
17
 
18
18
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
19
19
  # to allow pushing to a single host or delete this section to allow pushing to any host.
@@ -28,8 +28,7 @@ Gem::Specification.new do |spec|
28
28
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
29
29
  spec.require_paths = ["lib"]
30
30
 
31
- spec.add_development_dependency "bundler", "~> 1.7"
32
- spec.add_development_dependency "rake", "~> 10.0"
33
- # spec.add_development_dependency 'webmock', '~> 1.18'
31
+ spec.add_development_dependency "bundler", "<3.0", ">=1.7"
32
+ spec.add_development_dependency "rake", ">= 12.3.3"
34
33
  spec.add_development_dependency 'minitest', '~> 5.0'
35
34
  end
metadata CHANGED
@@ -1,43 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twsms2
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guanting Chen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-03 00:00:00.000000000 Z
11
+ date: 2021-11-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - "<"
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ - - ">="
18
21
  - !ruby/object:Gem::Version
19
22
  version: '1.7'
20
23
  type: :development
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - "~>"
27
+ - - "<"
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - - ">="
25
31
  - !ruby/object:Gem::Version
26
32
  version: '1.7'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: rake
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - "~>"
37
+ - - ">="
32
38
  - !ruby/object:Gem::Version
33
- version: '10.0'
39
+ version: 12.3.3
34
40
  type: :development
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - "~>"
44
+ - - ">="
39
45
  - !ruby/object:Gem::Version
40
- version: '10.0'
46
+ version: 12.3.3
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: minitest
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -52,7 +58,7 @@ dependencies:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
60
  version: '5.0'
55
- description: 2016 新版 台灣簡訊 TwSMS API ( 純 Ruby / Rails 專案適用 )
61
+ description: 2021 新版 台灣簡訊 TwSMS API ( 純 Ruby / Rails 專案適用 )
56
62
  email:
57
63
  - cgt886@gmail.com
58
64
  executables: []
@@ -60,7 +66,6 @@ extensions: []
60
66
  extra_rdoc_files: []
61
67
  files:
62
68
  - ".gitignore"
63
- - ".travis.yml"
64
69
  - Gemfile
65
70
  - LICENSE
66
71
  - README.md
@@ -78,13 +83,13 @@ licenses:
78
83
  - MIT
79
84
  metadata:
80
85
  allowed_push_host: https://rubygems.org
81
- post_install_message:
86
+ post_install_message:
82
87
  rdoc_options: []
83
88
  require_paths:
84
89
  - lib
85
90
  required_ruby_version: !ruby/object:Gem::Requirement
86
91
  requirements:
87
- - - "~>"
92
+ - - ">="
88
93
  - !ruby/object:Gem::Version
89
94
  version: '2'
90
95
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -93,9 +98,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
98
  - !ruby/object:Gem::Version
94
99
  version: '0'
95
100
  requirements: []
96
- rubyforge_project:
97
- rubygems_version: 2.6.4
98
- signing_key:
101
+ rubygems_version: 3.2.15
102
+ signing_key:
99
103
  specification_version: 4
100
- summary: 2016 新版 台灣簡訊 TwSMS API ( 純 Ruby / Rails 專案適用 )
104
+ summary: 2021 新版 台灣簡訊 TwSMS API ( 純 Ruby / Rails 專案適用 )
101
105
  test_files: []
data/.travis.yml DELETED
@@ -1,6 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.0
4
- - 2.1
5
- - 2.2
6
- - 2.3.1