twsms2 1.1.0 → 1.3.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
- 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