octopush-ruby 0.0.1
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 +2 -0
- data/Gemfile +3 -0
- data/Makefile +7 -0
- data/README.mkd +74 -0
- data/lib/octopush-ruby.rb +14 -0
- data/lib/octopush-ruby/client.rb +154 -0
- data/lib/octopush-ruby/configuration.rb +5 -0
- data/lib/octopush-ruby/constants.rb +106 -0
- data/lib/octopush-ruby/sms.rb +21 -0
- data/octopush-ruby.gemspec +15 -0
- data/test/helper.rb +2 -0
- data/test/octopush_test.rb +22 -0
- metadata +84 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 79587279ddd4490aa739dec956b749a592deed5b
|
4
|
+
data.tar.gz: 45b2941fa22fbb20bc53e6d62a2d304f21a9159f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ec1590872b28b5c517ae56e173ee326c022c680c63288412f5c521dd19841be8f15494c84cdabc363388dbae43565595d3813de9115a13b0f338bb66e2d4e019
|
7
|
+
data.tar.gz: 364bdb07e2a0cf77f2f0cd1aeab69bd9b1be913edd4cfbcfd3ddebcc7bb756cae953fd19741375303b69295c89ae790021d27905ba965e87f81fed2018a80027
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Makefile
ADDED
data/README.mkd
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# octopush-ruby
|
2
|
+
|
3
|
+
A ruby library for use [Octopush API](http://www.octopush.com/en/sms-api).
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
You can install via
|
8
|
+
```bash
|
9
|
+
gem install octopush-ruby
|
10
|
+
```
|
11
|
+
or if you are using bundler, by adding to your Gemfile
|
12
|
+
```ruby
|
13
|
+
gem 'octopush-ruby'
|
14
|
+
```
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
### Setup user
|
19
|
+
|
20
|
+
First you need to setup an user login and api key to use with octopush.
|
21
|
+
You can register at [octopush.com](http://www.octopush.com/en/registration) to get one
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
require 'octopush-ruby'
|
25
|
+
|
26
|
+
# setup your own credentials
|
27
|
+
Octopush.configure do |config|
|
28
|
+
config.user_login = 'your_user_login'
|
29
|
+
config.api_key = 'your_api_key'
|
30
|
+
end
|
31
|
+
|
32
|
+
# then you can initiate a new client to use
|
33
|
+
|
34
|
+
client = Octopush::Client.new
|
35
|
+
```
|
36
|
+
|
37
|
+
### Send SMS
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
# first needs to create a sms instance
|
41
|
+
sms = Octopush::SMS.new
|
42
|
+
|
43
|
+
# set your desired attributes
|
44
|
+
sms.sms_text = 'some text'
|
45
|
+
sms.sms_recipients = '+33600000000'
|
46
|
+
sms.sms_type = 'FR'
|
47
|
+
|
48
|
+
# then just send the sms with the client you created before
|
49
|
+
client.send_sms(sms)
|
50
|
+
```
|
51
|
+
|
52
|
+
### Check Balance
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
client.get_balance
|
56
|
+
```
|
57
|
+
|
58
|
+
### Update user options
|
59
|
+
|
60
|
+
```ruby
|
61
|
+
client.edit_options({answer_email: 'some@email.com', sms_alert_type: 'FR'})
|
62
|
+
```
|
63
|
+
|
64
|
+
### Create sub account
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
client.create_sub_account('Name', 'LastName', 'Raison', '234', 'FR')
|
68
|
+
```
|
69
|
+
|
70
|
+
### Credit sub account
|
71
|
+
|
72
|
+
```ruby
|
73
|
+
client.credit_sub_account('sub_account@email.com', '500', 'FR')
|
74
|
+
```
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'octopush-ruby/configuration'
|
2
|
+
require 'octopush-ruby/constants'
|
3
|
+
require 'octopush-ruby/client'
|
4
|
+
|
5
|
+
module Octopush
|
6
|
+
class << self
|
7
|
+
attr_accessor :configuration
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.configure
|
11
|
+
self.configuration ||= Configuration.new
|
12
|
+
yield(configuration)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'nori'
|
3
|
+
require 'digest/sha1'
|
4
|
+
require 'octopush-ruby/sms'
|
5
|
+
|
6
|
+
module Octopush
|
7
|
+
class Client
|
8
|
+
def initialize
|
9
|
+
raise "Should set user configuration before use" if Octopush.configuration.nil?
|
10
|
+
|
11
|
+
@constants = Octopush::Constants
|
12
|
+
@domain = @constants::DOMAIN
|
13
|
+
end
|
14
|
+
|
15
|
+
# update user options
|
16
|
+
# args should be a hash with the options that you want to update
|
17
|
+
# could be answer_email, sms_alert_bound, sms_alert_type
|
18
|
+
# @example
|
19
|
+
# {answer_email: 'an_email@domain.com'}
|
20
|
+
def edit_options *args
|
21
|
+
path = @constants::PATH_EDIT_OPTIONS
|
22
|
+
data = user_hash.merge args[0]
|
23
|
+
res = request @domain, path, data
|
24
|
+
end
|
25
|
+
|
26
|
+
# returns current user's balance
|
27
|
+
# return a hash in the form: {balance_type => balance}
|
28
|
+
def get_balance
|
29
|
+
path = @constants::PATH_BALANCE
|
30
|
+
data = user_hash
|
31
|
+
response = request @domain, path, data
|
32
|
+
|
33
|
+
h = {}
|
34
|
+
response["balance"].each do |balance|
|
35
|
+
h = h.merge(balance.attributes["type"] => balance)
|
36
|
+
end
|
37
|
+
|
38
|
+
h
|
39
|
+
end
|
40
|
+
|
41
|
+
# send a sms
|
42
|
+
# sms - a Octopush::SMS instance
|
43
|
+
# sending_date - a date to send sms, required if sms_mode is DIFFERE,
|
44
|
+
# check Octopush::Constants::SMS_MODES for modes allowed
|
45
|
+
# request_keys - Lists the key fields of the application you want to add
|
46
|
+
# in the sha1 hash. Check Octopush::Constants::REQUEST_KEYS
|
47
|
+
def send_sms sms, sending_date=nil, request_keys=nil
|
48
|
+
raise 'require a sms object' if sms.class != Octopush::SMS
|
49
|
+
|
50
|
+
path = @constants::PATH_SMS
|
51
|
+
data = user_hash.merge(sms.variables_hash)
|
52
|
+
|
53
|
+
if data[:sms_mode] == @constants::SMS_MODES['DIFFERE']
|
54
|
+
raise 'Need specify sending_date for DIFFERE mode' if sending_date.nil?
|
55
|
+
data = data.merge(sending_date: sending_date)
|
56
|
+
end
|
57
|
+
|
58
|
+
if !request_keys.nil?
|
59
|
+
sha1 = get_request_sha1_string(request_keys)
|
60
|
+
data = data.merge(request_keys: request_keys, request_sha1: sha1)
|
61
|
+
end
|
62
|
+
|
63
|
+
res = request @domain, path, data
|
64
|
+
end
|
65
|
+
|
66
|
+
# create sub account
|
67
|
+
# first_name
|
68
|
+
# last_name
|
69
|
+
# raison_sociable
|
70
|
+
# alert_bound
|
71
|
+
# alert_sms_type - check Octopush::Constants::SMS_TYPES
|
72
|
+
def create_sub_account first_name, last_name, raison_sociable, alert_bound,
|
73
|
+
alert_sms_type
|
74
|
+
path = @constants::PATH_SUB_ACCOUNT
|
75
|
+
data = user_hash.merge( first_name: first_name,
|
76
|
+
last_name: last_name,
|
77
|
+
raison_sociable: raison_sociable,
|
78
|
+
alert_bound: alert_bound,
|
79
|
+
alert_sms_type: alert_sms_type
|
80
|
+
)
|
81
|
+
res = request @domain, path, data
|
82
|
+
end
|
83
|
+
|
84
|
+
# credit sub account
|
85
|
+
# sub_account - sub account email
|
86
|
+
# sms_amount - number of credits
|
87
|
+
# sms_type - a sms type, check Octopush::Constants::SMS_TYPES
|
88
|
+
def credit_sub_account sub_account_email, sms_amount, sms_type
|
89
|
+
path = @constants::PATH_CREDIT_SUB_ACCOUNT_TOKEN
|
90
|
+
data = user_hash.merge(sub_account_email: sub_account_email)
|
91
|
+
res = request @domain, path, data
|
92
|
+
token_res = parse_response res.body
|
93
|
+
|
94
|
+
token = token_res['token']
|
95
|
+
path = @constants::PATH_CREDIT_SUB_ACCOUNT
|
96
|
+
if sms_type != 'FR' and sms_type != 'XXX'
|
97
|
+
sms_type = 'FR'
|
98
|
+
end
|
99
|
+
|
100
|
+
data = data.merge(sms_number: sms_amount,
|
101
|
+
sms_type: sms_type,
|
102
|
+
token: token)
|
103
|
+
|
104
|
+
res = request @domain, path, data
|
105
|
+
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
def user_hash
|
110
|
+
{
|
111
|
+
user_login: Octopush.configuration.user_login,
|
112
|
+
api_key: Octopush.configuration.api_key
|
113
|
+
}
|
114
|
+
end
|
115
|
+
|
116
|
+
def request domain, path, data, ssl=false
|
117
|
+
prefix = ssl ? 'https://' : 'http://'
|
118
|
+
url = prefix + domain + path
|
119
|
+
uri = URI url
|
120
|
+
req = Net::HTTP::Post.new uri.path
|
121
|
+
req.set_form_data data
|
122
|
+
res = Net::HTTP.start(uri.host, uri.port) do |http|
|
123
|
+
http.request(req)
|
124
|
+
end
|
125
|
+
parse_response res.body
|
126
|
+
end
|
127
|
+
|
128
|
+
# octopush api returns a xml after each request.
|
129
|
+
# We parse the xml to hash for more easy use
|
130
|
+
def parse_response response
|
131
|
+
parser = Nori.new
|
132
|
+
res_hash = parser.parse response
|
133
|
+
code = res_hash["octopush"]["error_code"]
|
134
|
+
if code != "000"
|
135
|
+
raise Octopush::Constants::ERRORS[code]
|
136
|
+
else
|
137
|
+
res_hash["octopush"]
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
# get a sha1 string in base to request_keys
|
142
|
+
def get_request_sha1_string request_keys, data
|
143
|
+
char_to_field = @constants::REQUEST_KEYS
|
144
|
+
request_string = ''
|
145
|
+
request_keys.split('').each do |key|
|
146
|
+
if !char_to_field[key].nil? and !data[char_to_field[key].to_sym].nil?
|
147
|
+
request_string += data[char_to_field[key].to_sym]
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
Digest::SHA1.hexdigest request_string
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
module Octopush
|
2
|
+
class Constants
|
3
|
+
VERSION = '1.0.0'
|
4
|
+
DOMAIN = 'www.octopush-dm.com'
|
5
|
+
PORT = 80;
|
6
|
+
API_PATH = '/api'
|
7
|
+
API_SUB_PATH = '/api_sub'
|
8
|
+
PATH_SMS = API_PATH + '/sms'
|
9
|
+
PATH_BALANCE = API_PATH + '/balance'
|
10
|
+
PATH_SUB_ACCOUNT = API_SUB_PATH + '/add_sub_account'
|
11
|
+
PATH_CREDIT_SUB_ACCOUNT_TOKEN = API_SUB_PATH + '/credit_sub_account_get_session'
|
12
|
+
PATH_CREDIT_SUB_ACCOUNT = API_SUB_PATH + '/credit_sub_account'
|
13
|
+
PATH_OSTP = API_PATH + '/open_single_temp_session'
|
14
|
+
PATH_EDIT_OPTIONS = API_PATH + '/edit_options'
|
15
|
+
PATH_GET_USER_INFO = API_SUB_PATH + '/get_user_info'
|
16
|
+
SMS_TYPES = {
|
17
|
+
'SMS_STANDARD' => 'XXX',
|
18
|
+
'SMS_WORLD' => 'WWW',
|
19
|
+
'SMS_PREMIUM' => 'FR'
|
20
|
+
}
|
21
|
+
SMS_MODES = {
|
22
|
+
'INSTANTANE' => 1,
|
23
|
+
'DIFFERE' => 2
|
24
|
+
}
|
25
|
+
REQUEST_MODES = {
|
26
|
+
'SIMULATION' => 'simu',
|
27
|
+
'REEL' => 'real'
|
28
|
+
}
|
29
|
+
ERRORS = {
|
30
|
+
'100'=> 'POST request missing.',
|
31
|
+
'101'=> 'Incorrect login details.',
|
32
|
+
'102'=> 'Your SMS exceeds 160 characters',
|
33
|
+
'103'=> 'Your message has no recipients',
|
34
|
+
'104'=> 'You have run out of credit.',
|
35
|
+
'105'=> 'You don\'t have enough credit on your balance, but your last order is waiting for being validated',
|
36
|
+
'106'=> 'You have entered the Sender incorrectly. 3 to 11 characters, chosen from 0 to 9, a to z, A to Z. No accent, space or punctuation.',
|
37
|
+
'107'=> 'The text of your message is missing.',
|
38
|
+
'108'=> 'You have not entered your login details.',
|
39
|
+
'109'=> 'You have not entered your password.',
|
40
|
+
'110'=> 'You have not entered the list of recipient.',
|
41
|
+
'111'=> 'You have not chosen a way to enter your recipients.',
|
42
|
+
'112'=> 'You have not defined the quality of your message.',
|
43
|
+
'113'=> 'Your account is not validated. Log in Octopush and go to the "User interface" section.',
|
44
|
+
'114'=> 'You are under investigation for the fraudulent use of our services.',
|
45
|
+
'115'=> 'The recipient number is different from the number of one of the parameters that you have related it to.',
|
46
|
+
'116'=> 'The mailing option only works by using a contact list.',
|
47
|
+
'117'=> 'Your recipient list contains no correct numbers. Have you formatted your numbers by including the international dialling code? Contact us if you have any problems.',
|
48
|
+
'118'=> 'You must tick one of the two boxes to indicate if you do not wish to send test SMS or if you have correctly received and validated it.',
|
49
|
+
'119'=> 'You cannot send SMS with more than 160 characters for this type of SMS',
|
50
|
+
'120'=> 'A SMS with the same request_id has already been sent.',
|
51
|
+
'121'=> 'In Premium SMS, the mention "STOP au XXXXX" is mandatory and must belong to your text (respect the case).',
|
52
|
+
'122'=> 'In Standard SMS, the mention "no PUB=STOP" is mandatory and must belong to your text (respect the case).',
|
53
|
+
'123'=> 'The field request_sha1 is missing.',
|
54
|
+
'124'=> 'The field request_sha1 does not match. The data is wrong, or the query string contains an error or the frame contains an error : the request is rejected.',
|
55
|
+
'125'=> 'An undefined error has occurred. Please contact support.',
|
56
|
+
'126'=> 'An SMS campaign is already waiting for approval to send. You must validate or cancel it in order to start another.',
|
57
|
+
'127'=> 'An SMS campaign is already being processed. You must wait for processing to be completed in order to start another.',
|
58
|
+
'128'=> 'Too many attempts have been made. You need to start a new campaign.',
|
59
|
+
'129'=> 'Campaign is being built.',
|
60
|
+
'130'=> 'Campagne has not been set as finished.',
|
61
|
+
'131'=> 'Campaign not found.',
|
62
|
+
'132'=> 'Campaign sent.',
|
63
|
+
'133'=> 'The user_batch_id has already been used',
|
64
|
+
'150'=> 'No country was found for this prefix.',
|
65
|
+
'151'=> 'The recipient country is not part of the countries serviced by Octopush.',
|
66
|
+
'152'=> 'You cannot send low cost SMS to this country. Choose Premium SMS',
|
67
|
+
'153'=> 'The route is congested. This type of SMS cannot be dispatched immediately. If your order is urgent, please use another type of SMS.',
|
68
|
+
'201'=> 'This option is only available on request. Do not hesitate to request access if you need it.',
|
69
|
+
'202'=> 'The email account you wish to credit is incorrect.',
|
70
|
+
'203'=> 'You already have tokens in use. You can only have one session open at a time.',
|
71
|
+
'204'=> 'You specified a wrong token.',
|
72
|
+
'205'=> 'The number of text messages you want to transfer is too low.',
|
73
|
+
'206'=> 'You may not run campaigns during a credit transfer.',
|
74
|
+
'207'=> 'You do not have access to this feature.',
|
75
|
+
'208'=> 'Wrong type of SMS.',
|
76
|
+
'209'=> 'You are not allowed to send SMS messages to this user.',
|
77
|
+
'210'=> 'This email is not specified in any of your sub accounts or affiliate users.',
|
78
|
+
'300'=> 'You are not authorized to manage your lists by API.',
|
79
|
+
'301'=> 'You have reached the maximum number of lists.',
|
80
|
+
'302'=> 'A list with the same name already exists.',
|
81
|
+
'303'=> 'The specified list does not exist.',
|
82
|
+
'304'=> 'The list is already full.',
|
83
|
+
'305'=> 'There are too many contacts in the query.',
|
84
|
+
'306'=> 'The requested action is unknown.',
|
85
|
+
'308'=> 'Error of file.',
|
86
|
+
'500'=> 'Impossible to process the requested action',
|
87
|
+
'501'=> 'Connection error. Please contact our customer support'
|
88
|
+
}
|
89
|
+
REQUEST_KEYS = {
|
90
|
+
'T' => 'sms_text',
|
91
|
+
'R' => 'sms_recipients',
|
92
|
+
'M' => 'sms_mode',
|
93
|
+
'Y' => 'sms_type',
|
94
|
+
'S' => 'sms_sender',
|
95
|
+
'D' => 'sms_date',
|
96
|
+
'a' => 'recipients_first_names',
|
97
|
+
'b' => 'recipients_last_names',
|
98
|
+
'c' => 'sms_fields_1',
|
99
|
+
'd' => 'sms_fields_2',
|
100
|
+
'e' => 'sms_fields_3',
|
101
|
+
'W' => 'with_replies',
|
102
|
+
'N' => 'transactional',
|
103
|
+
'Q' => 'request_id'
|
104
|
+
}
|
105
|
+
end
|
106
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Octopush
|
2
|
+
class SMS
|
3
|
+
attr_accessor :sms_text, :sms_recipients, :recipients_first_names,
|
4
|
+
:recipients_last_names, :sms_fields1, :sms_fields2,
|
5
|
+
:sms_fields3, :sms_mode, :sms_type, :sms_sender,
|
6
|
+
:request_mode, :request_id, :with_replies, :transactional,
|
7
|
+
:msisdn_sender
|
8
|
+
|
9
|
+
def variables_hash
|
10
|
+
hash = {}
|
11
|
+
self.instance_variables.each do |variable|
|
12
|
+
var = variable.to_s.sub('@', '')
|
13
|
+
key = var.to_sym
|
14
|
+
value = self.send(var)
|
15
|
+
hash = hash.merge(key => value)
|
16
|
+
end
|
17
|
+
|
18
|
+
hash
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "octopush-ruby"
|
3
|
+
s.version = "0.0.1"
|
4
|
+
s.summary = "A ruby library for use Octopush API"
|
5
|
+
s.description = s.summary
|
6
|
+
s.authors = ["César Carruitero"]
|
7
|
+
s.email = ["cesar@mozilla.pe"]
|
8
|
+
s.homepage = "https://github.com/ccarruitero/octopush-ruby"
|
9
|
+
s.license = "MIT"
|
10
|
+
|
11
|
+
s.files = `git ls-files`.split("\n")
|
12
|
+
|
13
|
+
s.add_runtime_dependency "nori"
|
14
|
+
s.add_development_dependency "cutest"
|
15
|
+
end
|
data/test/helper.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
include Octopush
|
3
|
+
|
4
|
+
scope do
|
5
|
+
setup do
|
6
|
+
Octopush.configure do |c|
|
7
|
+
c.user_login = 'mymail@example.com'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
test "sha1 string" do
|
12
|
+
data = {sms_text: 'fasgsagasg'}
|
13
|
+
cli = Octopush::Client.new
|
14
|
+
sha1 = cli.send(:get_request_sha1_string, 'T', data)
|
15
|
+
assert_equal "4ba873f39c4ca45c67ab281e75ca23779d72bf2a", sha1
|
16
|
+
|
17
|
+
data = {sms_text: 'fasgsagasg', sms_recipients: '+51948372820'}
|
18
|
+
cli = Octopush::Client.new
|
19
|
+
sha1 = cli.send(:get_request_sha1_string, 'TR', data)
|
20
|
+
assert_equal "53dfcf057931579e382e76a96f79e32d3d01c014", sha1
|
21
|
+
end
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: octopush-ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- César Carruitero
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nori
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: cutest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description: A ruby library for use Octopush API
|
42
|
+
email:
|
43
|
+
- cesar@mozilla.pe
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- ".gitignore"
|
49
|
+
- Gemfile
|
50
|
+
- Makefile
|
51
|
+
- README.mkd
|
52
|
+
- lib/octopush-ruby.rb
|
53
|
+
- lib/octopush-ruby/client.rb
|
54
|
+
- lib/octopush-ruby/configuration.rb
|
55
|
+
- lib/octopush-ruby/constants.rb
|
56
|
+
- lib/octopush-ruby/sms.rb
|
57
|
+
- octopush-ruby.gemspec
|
58
|
+
- test/helper.rb
|
59
|
+
- test/octopush_test.rb
|
60
|
+
homepage: https://github.com/ccarruitero/octopush-ruby
|
61
|
+
licenses:
|
62
|
+
- MIT
|
63
|
+
metadata: {}
|
64
|
+
post_install_message:
|
65
|
+
rdoc_options: []
|
66
|
+
require_paths:
|
67
|
+
- lib
|
68
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0'
|
73
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
requirements: []
|
79
|
+
rubyforge_project:
|
80
|
+
rubygems_version: 2.5.1
|
81
|
+
signing_key:
|
82
|
+
specification_version: 4
|
83
|
+
summary: A ruby library for use Octopush API
|
84
|
+
test_files: []
|