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 +5 -5
- data/README.md +99 -14
- data/Rakefile +2 -2
- data/bin/console +4 -4
- data/lib/twsms2/exception.rb +1 -0
- data/lib/twsms2/formatter.rb +62 -16
- data/lib/twsms2/network.rb +5 -0
- data/lib/twsms2/version.rb +1 -1
- data/lib/twsms2.rb +14 -4
- data/twsms2.gemspec +5 -6
- metadata +21 -17
- data/.travis.yml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: ed7351473d76e0ad230808dc4ac38abb5609887a79efef9b40a3d6a6e4587019
|
4
|
+
data.tar.gz: 36a0052de311fde0274c540b08b6a91cdb56127b80e02112dc9245387350025d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b595982bb5db4ba708c67a59b893901ad831d35d7310fdd2b7fe44b5563128deffb68294592f79e5a745a58dfcc97df5307830e408b83b9f0dfc533afee5bedf
|
7
|
+
data.tar.gz: 6374876b1a82e0804ecb16850ffcbea004b7a25f93dac4614714e3cda311f89112129a5a060a3ba15388d86b32cfeb3b382fa7806066ab3f58aa90f996041901
|
data/README.md
CHANGED
@@ -1,7 +1,8 @@
|
|
1
|
-
Twsms2 (
|
1
|
+
Twsms2 ( 台灣簡訊 TwSMS API Ruby 版套件 )
|
2
2
|
=================================================
|
3
3
|
|
4
|
-
[](https://badge.fury.io/rb/twsms2)
|
4
|
+
[](https://badge.fury.io/rb/twsms2)
|
5
|
+
[](https://codeclimate.com/github/guanting112/twsms2)
|
5
6
|
|
6
7
|

|
7
8
|
|
@@ -20,7 +21,7 @@ Ruby 2 以上的版本,也可在 Ruby On Rails 專案引入
|
|
20
21
|
請在您的 Ruby 或 Rails 專案裡的 Gemfile 加入以下指令
|
21
22
|
|
22
23
|
```ruby
|
23
|
-
gem 'twsms2', '
|
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
|
-
|
40
|
+
基本執行範例如下,但要使用前,需要先[註冊台灣簡訊的會員][twsms_signup],否則無法存取相關服務
|
40
41
|
|
41
42
|
```ruby
|
42
43
|
require 'twsms2'
|
43
44
|
|
44
|
-
#
|
45
|
-
sms_client = Twsms2::Client.new(username: '會員帳號', password: '會員密碼'
|
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
data/bin/console
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
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
|
10
|
+
# require 'pry'
|
11
11
|
# Pry.start
|
12
12
|
|
13
|
-
require
|
13
|
+
require 'irb'
|
14
14
|
IRB.start
|
data/lib/twsms2/exception.rb
CHANGED
data/lib/twsms2/formatter.rb
CHANGED
@@ -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
|
-
|
28
|
-
|
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] =
|
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
|
-
|
51
|
-
|
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] =
|
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
|
data/lib/twsms2/network.rb
CHANGED
@@ -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)
|
data/lib/twsms2/version.rb
CHANGED
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, '/
|
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, '/
|
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{
|
14
|
-
spec.description = %q{
|
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 = '
|
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", "
|
32
|
-
spec.add_development_dependency "rake", "
|
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.
|
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:
|
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:
|
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:
|
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:
|
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
|
-
|
97
|
-
|
98
|
-
signing_key:
|
101
|
+
rubygems_version: 3.2.15
|
102
|
+
signing_key:
|
99
103
|
specification_version: 4
|
100
|
-
summary:
|
104
|
+
summary: 2021 新版 台灣簡訊 TwSMS API ( 純 Ruby / Rails 專案適用 )
|
101
105
|
test_files: []
|