kotsms2 0.5.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 +7 -0
- data/.gitignore +9 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/LICENSE +20 -0
- data/README.md +174 -0
- data/Rakefile +9 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/kotsms2.gemspec +35 -0
- data/lib/kotsms2/exception.rb +5 -0
- data/lib/kotsms2/formatter.rb +75 -0
- data/lib/kotsms2/network.rb +43 -0
- data/lib/kotsms2/version.rb +3 -0
- data/lib/kotsms2.rb +46 -0
- metadata +101 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: caba16f48eabc4f0d3067cd20b8f8ba4c67d00f1
|
4
|
+
data.tar.gz: adb7317fe123b5a1ed90f5062e7940002bcaf703
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f743ae865b95c28a08e9ad53f753701d5ce9b92c8e243d3a02facffcbdaba43fcd2e7ad2f690aef41699d7d417e11ddcbdeca7bb160cde71f8039f692ba13573
|
7
|
+
data.tar.gz: d3737900c4ba72f004ac765e4bf0f85b083d6f3507c1239e54f3acbcd4585276e844e837eb92241b5961dbabda61678b7daa15580337c874bee5b74760bc7f46
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2016 Guanting Chen
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
Kotsms2 ( 2016 新版 簡訊王 KotSMS API Ruby 版套件 )
|
2
|
+
=================================================
|
3
|
+
|
4
|
+
[](https://badge.fury.io/rb/kotsms2) [](https://travis-ci.org/guanting112/kotsms2)
|
5
|
+
|
6
|
+

|
7
|
+
|
8
|
+
此為針對 [簡訊王][kotsms_homepage] KotSMS API 開發的專屬套件
|
9
|
+
|
10
|
+
您可以透過該套件來實作簡訊王的一般、預約簡訊發送 與 簡訊餘額查詢 的程式
|
11
|
+
|
12
|
+
適用於
|
13
|
+
--------
|
14
|
+
|
15
|
+
Ruby 2 以上的版本,也可在 Ruby On Rails 專案引入
|
16
|
+
|
17
|
+
安裝方式
|
18
|
+
--------
|
19
|
+
|
20
|
+
請在您的 Ruby 或 Rails 專案裡的 Gemfile 加入以下指令
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
gem 'kotsms2', '~> 1.0.0'
|
24
|
+
```
|
25
|
+
|
26
|
+
然後執行 bundle install 更新套件組
|
27
|
+
|
28
|
+
$ bundle
|
29
|
+
|
30
|
+
或也可以直接將 kotsms2 裝在系統上
|
31
|
+
|
32
|
+
$ gem install kotsms2
|
33
|
+
|
34
|
+
使用方式
|
35
|
+
--------
|
36
|
+
|
37
|
+
本 API 套件,提供幾組以下方法來方便您開發簡訊相關服務
|
38
|
+
|
39
|
+
但要使用前,需要先[註冊簡訊王的會員][kotsms_signup],否則您的程式無法存取簡訊王的 API 管道
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
require 'kotsms2'
|
43
|
+
|
44
|
+
# Kotsms2 是走 https 的方式進行系統操作
|
45
|
+
sms_client = Kotsms2::Client.new(username: '會員帳號', password: '會員密碼', agent: "Mozilla/5.0 (可自訂 user-agent)")
|
46
|
+
```
|
47
|
+
|
48
|
+
使用範例
|
49
|
+
--------
|
50
|
+
|
51
|
+
### 系統檢查
|
52
|
+
|
53
|
+
檢查帳號是否有效、是否可以發送簡訊,有效為 true、無效則為 false
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
sms_client.account_is_available
|
57
|
+
```
|
58
|
+
|
59
|
+
----
|
60
|
+
|
61
|
+
### 發送簡訊
|
62
|
+
|
63
|
+
#### 一般使用
|
64
|
+
|
65
|
+
手機號碼格式 0911222333 ( 台灣手機 )、886911222333 ( 國碼 + 手機號碼 )
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
# 備註:簡訊王的內容需要為 Big 5 編碼,本套件將會自動進行轉換,若有遇到無法轉換的,會將會替換成「?」號
|
69
|
+
sms_client.send_message to: '手機號碼', content: "簡訊內容.."
|
70
|
+
```
|
71
|
+
|
72
|
+
#### 預約發送
|
73
|
+
|
74
|
+
若要使用預約發送,可以指定 at 參數給 send_message 方法
|
75
|
+
|
76
|
+
同時程式會自動轉換時區 至 簡訊王 適用的時區 ( +08:00 )
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
# 純 Ruby 請用加秒數的方式
|
80
|
+
sms_client.send_message to: '手機號碼', content: "預約簡訊測試: #{Time.now}", at: Time.now + 120
|
81
|
+
|
82
|
+
# 在 Ruby On Rails 專案則可以用 Rails 專用的方法
|
83
|
+
sms_client.send_message to: '手機號碼', content: "預約簡訊測試: #{Time.now}", at: Time.now + 2.days
|
84
|
+
```
|
85
|
+
|
86
|
+
#### 切換 大量發送 專用線路
|
87
|
+
|
88
|
+
根據簡訊王文件說明,若要進行上千、萬數以上的大量發送,建議使用專用線路
|
89
|
+
|
90
|
+
因此,本程式有提供一個 heavy_loading 參數,讓您切換至大量發送專用線路
|
91
|
+
|
92
|
+
```ruby
|
93
|
+
sms_client.send_message to: '手機號碼', content: "簡訊內容..", heavy_loading: true
|
94
|
+
```
|
95
|
+
|
96
|
+
當您指定了該參數後,將會使用另外的線路進行發送
|
97
|
+
|
98
|
+
但請根據實際發送需求進行使用,小量發送可以不用加入 heavy_loading 參數
|
99
|
+
|
100
|
+
因為簡訊王的大量發送專用線路,屬於另一種處理方式,小量發送並不會比較即時
|
101
|
+
|
102
|
+
### 發送簡訊 的 回傳結果
|
103
|
+
|
104
|
+
#### 發送成功
|
105
|
+
|
106
|
+
當你執行完成後,send_message 方法會回傳一組 hash 型態的結果
|
107
|
+
|
108
|
+
只要 access_success 的值為 true 就一定代表發送成功
|
109
|
+
|
110
|
+
系統會另外回傳一組 message_id 用來讓你追蹤簡訊
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
{:access_success=>true, :message_id=>"123456789", :error=>nil}
|
114
|
+
```
|
115
|
+
|
116
|
+
#### 發生錯誤時
|
117
|
+
|
118
|
+
若 access_success 為 false 則表示過程有出現錯誤
|
119
|
+
|
120
|
+
以下範例為帳號密碼的錯誤,error 參數則是簡訊王的 error code
|
121
|
+
|
122
|
+
error code 的部分,請以 簡訊王 API 文件的定義為主,本套件不處理相關結果
|
123
|
+
|
124
|
+
```ruby
|
125
|
+
{:access_success=>false, :message_id=>nil, :error=>"KOTSMS:-2"}
|
126
|
+
```
|
127
|
+
|
128
|
+
----
|
129
|
+
|
130
|
+
### 查詢簡訊餘額
|
131
|
+
|
132
|
+
若你需要查詢您會員帳號的簡訊餘額,可以用以下指令處理
|
133
|
+
|
134
|
+
```ruby
|
135
|
+
sms_client.get_balance
|
136
|
+
```
|
137
|
+
|
138
|
+
### 查詢簡訊餘額 的 回傳結果
|
139
|
+
|
140
|
+
#### 得到簡訊餘額
|
141
|
+
|
142
|
+
當你執行完成後,get_balance 方法會回傳一組 hash 型態的結果
|
143
|
+
|
144
|
+
只要 access_success 的值為 true 就一定代表系統有成功取得資料
|
145
|
+
|
146
|
+
message_quota 則是簡訊餘額,代表你還剩幾封可以用,若為 0 就代表都沒有
|
147
|
+
|
148
|
+
```ruby
|
149
|
+
# 備註:簡訊商若發送過程中出現意外狀況,會晚點將簡訊額度補回您的會員帳號
|
150
|
+
{:access_success=>true, :message_quota=>10, :error=>nil}
|
151
|
+
```
|
152
|
+
|
153
|
+
#### 發生錯誤
|
154
|
+
|
155
|
+
若 access_success 為 false 則表示過程有出現錯誤,同時 message_quota 會為 0
|
156
|
+
|
157
|
+
```ruby
|
158
|
+
{:access_success=>false, :message_quota=>0, :error=>"KOTSMS:-2"}
|
159
|
+
```
|
160
|
+
|
161
|
+
|
162
|
+
LICENSE
|
163
|
+
--------
|
164
|
+
|
165
|
+
本專案原始碼採 MIT LICENSE 授權 ( 詳見 LICENSE 檔案 )
|
166
|
+
|
167
|
+
連結分享
|
168
|
+
--------
|
169
|
+
|
170
|
+
[註冊簡訊王的會員][kotsms_signup]、[簡訊王官網][kotsms_homepage]、[API 技術支援][kotsms_tech]
|
171
|
+
|
172
|
+
[kotsms_signup]: https://kotsms.com.tw/index.php?selectpage=MembersReg&step=viewrules
|
173
|
+
[kotsms_homepage]: https://www.kotsms.com.tw
|
174
|
+
[kotsms_tech]: https://kotsms.com.tw/index.php?selectpage=pagenews&kind=4
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "kotsms2"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
data/kotsms2.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'kotsms2/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "kotsms2"
|
8
|
+
spec.version = Kotsms2::VERSION
|
9
|
+
spec.authors = ["Guanting Chen"]
|
10
|
+
spec.email = ["cgt886@gmail.com"]
|
11
|
+
spec.license = "MIT"
|
12
|
+
spec.platform = Gem::Platform::RUBY
|
13
|
+
spec.summary = %q{2016 新版 簡訊王 KotSMS API ( 純 Ruby / Rails 專案適用 )}
|
14
|
+
spec.description = %q{2016 新版 簡訊王 KotSMS API ( 純 Ruby / Rails 專案適用 )}
|
15
|
+
spec.homepage = "https://github.com/guanting112/kotsms2"
|
16
|
+
spec.required_ruby_version = '~> 2'
|
17
|
+
|
18
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
19
|
+
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
20
|
+
if spec.respond_to?(:metadata)
|
21
|
+
spec.metadata['allowed_push_host'] = "https://rubygems.org"
|
22
|
+
else
|
23
|
+
raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
24
|
+
end
|
25
|
+
|
26
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
27
|
+
spec.bindir = "exe"
|
28
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
29
|
+
spec.require_paths = ["lib"]
|
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'
|
34
|
+
spec.add_development_dependency 'minitest', '~> 5.0'
|
35
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module Kotsms2
|
2
|
+
module Formatter
|
3
|
+
def to_big5(old_string)
|
4
|
+
new_string = old_string.encode("BIG5", :invalid => :replace, :undef => :replace, :replace => "?")
|
5
|
+
end
|
6
|
+
|
7
|
+
def to_utf8(old_string)
|
8
|
+
new_string = old_string.encode("UTF-8", :invalid => :replace, :undef => :replace, :replace => "?")
|
9
|
+
end
|
10
|
+
|
11
|
+
def match_string(rule, string)
|
12
|
+
match_data = rule.match(string)
|
13
|
+
match_data.nil? ? nil : match_data[1]
|
14
|
+
end
|
15
|
+
|
16
|
+
def format_time_string(time)
|
17
|
+
return nil if time.nil?
|
18
|
+
new_time = to_asia_taipei_timezone(time)
|
19
|
+
new_time.strftime('%Y/%m/%d %H:%M:%S')
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_asia_taipei_timezone(time)
|
23
|
+
utc_time = time.utc? ? time.dup : time.dup.utc
|
24
|
+
asia_taipei_time = utc_time.getlocal('+08:00')
|
25
|
+
asia_taipei_time
|
26
|
+
end
|
27
|
+
|
28
|
+
def format_send_message_info(original_info)
|
29
|
+
new_info = {
|
30
|
+
access_success: false,
|
31
|
+
message_id: nil,
|
32
|
+
error: nil
|
33
|
+
}
|
34
|
+
|
35
|
+
code_text = match_string(/^kmsgid=(?<code>-?\d+)$/, original_info)
|
36
|
+
code_number = code_text.to_i
|
37
|
+
|
38
|
+
new_info[:access_success] = !code_text.nil? && code_number > -1
|
39
|
+
|
40
|
+
if new_info[:access_success]
|
41
|
+
new_info[:message_id] = code_number.to_s
|
42
|
+
else
|
43
|
+
new_info[:error] = "KOTSMS:CODE_NOT_FOUND"
|
44
|
+
new_info[:error] = "KOTSMS:#{code_text}" unless code_text.nil?
|
45
|
+
new_info[:error].upcase!
|
46
|
+
end
|
47
|
+
|
48
|
+
new_info
|
49
|
+
end
|
50
|
+
|
51
|
+
def format_balance_info(original_info)
|
52
|
+
new_info = {
|
53
|
+
access_success: false,
|
54
|
+
message_quota: 0,
|
55
|
+
error: nil
|
56
|
+
}
|
57
|
+
|
58
|
+
code_text = match_string(/^(?<code>-?\d+)$/, original_info)
|
59
|
+
code_number = code_text.to_i
|
60
|
+
|
61
|
+
new_info[:access_success] = !code_text.nil? && code_number > -1
|
62
|
+
|
63
|
+
if new_info[:access_success]
|
64
|
+
new_info[:message_quota] = code_number
|
65
|
+
else
|
66
|
+
new_info[:error] = "KOTSMS:CODE_NOT_FOUND"
|
67
|
+
new_info[:error] = "KOTSMS:#{code_text}" unless code_text.nil?
|
68
|
+
new_info[:error].upcase!
|
69
|
+
end
|
70
|
+
|
71
|
+
new_info
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'cgi'
|
3
|
+
|
4
|
+
module Kotsms2
|
5
|
+
module Network
|
6
|
+
def get(host, request_uri, params = {})
|
7
|
+
uri = URI('https://' + host + request_uri)
|
8
|
+
uri.query = query_string(params.merge(username: @username, password: @password))
|
9
|
+
|
10
|
+
message = Net::HTTP::Get.new(uri.request_uri)
|
11
|
+
message['User-Agent'] = @user_agent
|
12
|
+
|
13
|
+
parse(request(uri, message), host)
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse(http_response, host)
|
17
|
+
case http_response
|
18
|
+
when Net::HTTPSuccess
|
19
|
+
http_response.body
|
20
|
+
when Net::HTTPClientError
|
21
|
+
raise ClientError, "#{http_response.code} response from #{host}"
|
22
|
+
when Net::HTTPServerError
|
23
|
+
raise ServerError, "#{http_response.code} response from #{host}"
|
24
|
+
else
|
25
|
+
raise Error, "#{http_response.code} response from #{host}"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def request(uri, message)
|
30
|
+
http = Net::HTTP.new(uri.host, Net::HTTP.https_default_port)
|
31
|
+
http.use_ssl = true
|
32
|
+
http.request(message)
|
33
|
+
end
|
34
|
+
|
35
|
+
def query_string(params)
|
36
|
+
params.flat_map { |k, vs| Array(vs).map { |v| "#{escape(k)}=#{escape(v)}" } }.join('&')
|
37
|
+
end
|
38
|
+
|
39
|
+
def escape(component)
|
40
|
+
CGI.escape(component.to_s)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/kotsms2.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'kotsms2/version'
|
2
|
+
require 'kotsms2/network'
|
3
|
+
require 'kotsms2/exception'
|
4
|
+
require 'kotsms2/formatter'
|
5
|
+
|
6
|
+
module Kotsms2
|
7
|
+
class Client
|
8
|
+
include Kotsms2::Network
|
9
|
+
include Kotsms2::Formatter
|
10
|
+
|
11
|
+
def initialize(options={})
|
12
|
+
@user_agent = options.fetch(:agent) { "kotsms2/#{VERSION}" }
|
13
|
+
@api_host = options.fetch(:host) { 'api.kotsms.com.tw' }
|
14
|
+
@username = options.fetch(:username) { ENV.fetch('KOTSMS_USERNAME') }
|
15
|
+
@password = options.fetch(:password) { ENV.fetch('KOTSMS_PASSWORD') }
|
16
|
+
end
|
17
|
+
|
18
|
+
def account_is_available
|
19
|
+
balance_info = get_balance
|
20
|
+
|
21
|
+
ok = balance_info[:message_quota] > 0 && balance_info[:access_success]
|
22
|
+
end
|
23
|
+
|
24
|
+
def send_message(options={})
|
25
|
+
options[:to] ||= nil
|
26
|
+
options[:heavy_loading] ||= false
|
27
|
+
|
28
|
+
options[:content] = options[:content].to_s
|
29
|
+
options[:at] = format_time_string(options[:at])
|
30
|
+
options[:at] = 0 if options[:at].nil? # 據 Kotsms 文件指出,如果要更即時,可以指定為 0,比不給參數還快
|
31
|
+
|
32
|
+
api_path = '/kotsmsapi-1.php'
|
33
|
+
api_path = '/kotsmsapi-2.php' if options[:heavy_loading]
|
34
|
+
|
35
|
+
response = get(@api_host, api_path, dstaddr: options[:to], smbody: to_big5(options[:content]), dlvtime: options[:at])
|
36
|
+
|
37
|
+
format_send_message_info(response)
|
38
|
+
end
|
39
|
+
|
40
|
+
def get_balance
|
41
|
+
response = get(@api_host, '/memberpoint.php')
|
42
|
+
|
43
|
+
format_balance_info(response)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kotsms2
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Guanting Chen
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-09-03 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.7'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '5.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '5.0'
|
55
|
+
description: 2016 新版 簡訊王 KotSMS API ( 純 Ruby / Rails 專案適用 )
|
56
|
+
email:
|
57
|
+
- cgt886@gmail.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
63
|
+
- ".travis.yml"
|
64
|
+
- Gemfile
|
65
|
+
- LICENSE
|
66
|
+
- README.md
|
67
|
+
- Rakefile
|
68
|
+
- bin/console
|
69
|
+
- bin/setup
|
70
|
+
- kotsms2.gemspec
|
71
|
+
- lib/kotsms2.rb
|
72
|
+
- lib/kotsms2/exception.rb
|
73
|
+
- lib/kotsms2/formatter.rb
|
74
|
+
- lib/kotsms2/network.rb
|
75
|
+
- lib/kotsms2/version.rb
|
76
|
+
homepage: https://github.com/guanting112/kotsms2
|
77
|
+
licenses:
|
78
|
+
- MIT
|
79
|
+
metadata:
|
80
|
+
allowed_push_host: https://rubygems.org
|
81
|
+
post_install_message:
|
82
|
+
rdoc_options: []
|
83
|
+
require_paths:
|
84
|
+
- lib
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2'
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - ">="
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
requirements: []
|
96
|
+
rubyforge_project:
|
97
|
+
rubygems_version: 2.6.4
|
98
|
+
signing_key:
|
99
|
+
specification_version: 4
|
100
|
+
summary: 2016 新版 簡訊王 KotSMS API ( 純 Ruby / Rails 專案適用 )
|
101
|
+
test_files: []
|