e_pochta 0.3.1 → 0.5.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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZTFkOGU0ODVlZTk5MmU4NGU3ZjkzOTViZmE5M2NiZDUyZDFkMjc5Zg==
4
+ NWQ2MmE2Y2IyMGM2YjI0ZjE2NmY1ZTk4OWU4MzlhY2M1N2I0NzQwNg==
5
5
  data.tar.gz: !binary |-
6
- ZGQwMGVhYzUxYjFkZjg1ZTIzMDY3OWY5NmZkNGQ0OGQ1NmFmYjkzOA==
6
+ NWUxMmI5YWQ1NGE4N2MyNmZhM2NiY2U3OTZlMWMyMWQ4NDU4YTE3Yw==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- NzFhZTM1ZTRjN2EzN2QzMzM5MzhmMjNjYThkNzliMzcxOWY2YjljODc2Njlm
10
- ZDNmMDBkNDcxYzJlODIwNjk5ZjcxOTRhODE2OTFkMDEyYzg1ODlhZGJkNjdk
11
- Yzc0NmViY2I3NWI1MzljZGZkMzZjZWY4MTZlMjhmMmMxOWJmNDM=
9
+ OTI4ZDA0Mjk0MzYwOTlmMTgyY2RlZDU1MGVhMzNkMTMxZmE0NmNiODQxMjRh
10
+ MDc5ZmYwM2MzNDM5MGYwYjZmZDM5MDYzZTIzODJjMWQyZTNmNTYxMTRhNmQ4
11
+ NjRjNjcxMzliNDdmNDNlOTVjMTA2MmQwZmM0ZDQ5ODI4YzVmY2Q=
12
12
  data.tar.gz: !binary |-
13
- NGRmMDQ1YjEwMjM4NmI5MDNjOGIzMDY0ZmU0YWRkN2E4ODY4MGJkYjVmNmFj
14
- ZmQ5ZDcwYmIyMTRmMDU0MzUxNTliNjgyZDc2YTY5YWQzNjM0ODAwYzZlNjZk
15
- YjczYTg3ZjY2NWJjOTk0YzU3ODYzNjk1NDVkNjk0ZTBhNDVkMmY=
13
+ Njk2YTlmMjM0MmNlNWQ4YWJiOGI2ODdhNzVlYjc1Y2IwNmNhYzBkYzMwOTU1
14
+ NzZmOTkyZjU1NDk3MjM4MWY5NjAwOTIzYmNjM2MxNzMxNmE3ZDQ1OTkwYTY2
15
+ NzJjNjliZmM4Nzc1YmRlMmVjNjFmY2IwMzYzOGIxZmFlODFhMTE=
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ #e_pochta
2
+ This is an API wrapper for online SMS and Email service [E-pochta](http://www.epochta.ru/) and it's API v3.0.
3
+ You can read about this API [here (russian)] (http://www.epochta.ru/products/sms/v3.php)
4
+
5
+ ##Usage
6
+
7
+ ```ruby
8
+ # provide your user keys
9
+ epochta = EPochtaService::EPochtaSMS.new(:private_key => 'your_private_key', :public_key => 'your_public_key')
10
+ # send sms
11
+ result = epochta.send_sms({
12
+ # read the api to provide correct arguments
13
+ 'sender' => 'Name',
14
+ 'text' => 'Hello World!',
15
+ 'phone' => '71234567890',
16
+ 'datetime' => '',
17
+ 'sms_lifetime' => 0
18
+ })
19
+
20
+ puts result # sms_id on epochta server
21
+ ```
22
+
23
+ ##Email
24
+ From version 0.5.0 gem has new class for EPochta email campaigns.
25
+ ```ruby
26
+ # provide your user keys
27
+ epochta = EPochtaService::EPochtaEmail.new(:private_key => 'your_private_key', :public_key => 'your_public_key')
28
+ # create email campaign
29
+ campaign = epochta.createCampaign({
30
+ # read the api to provide correct arguments
31
+ 'name' => 'test campaign',
32
+ 'sender_name' => 'Vasya',
33
+ 'sender_email' => 'example@yandex.ru',
34
+ 'subject' => 'test email',
35
+ 'body' => Base64.encode64("<h2>test</h2> <p>my mail</p>"),
36
+ 'list_id' => @addr_book_id
37
+ })
38
+
39
+ puts campaign['id'] # created campaign id on epochta server
40
+ ```
41
+
42
+ You can also install it as a gem.
43
+
44
+ ```
45
+ gem install e_pochta
46
+ ```
data/lib/e_pochta.rb CHANGED
@@ -1,177 +1,11 @@
1
1
  require 'net/http'
2
2
  require 'digest/md5'
3
3
  require 'json'
4
+ require 'base64'
4
5
 
5
- class EPochta
6
- attr_accessor :public_key, :private_key, :parameters
7
- URL = 'http://atompark.com/api/sms/3.0/'
8
- # options hash: public_key, private_key
9
- def initialize(options)
10
- if options.is_a? Hash
11
- self.public_key = options[:public_key]
12
- self.private_key = options[:private_key]
13
- else
14
- raise ArgumentError, "expected Hash argument, got #{options.class}"
15
- end
16
- end
6
+ require 'e_pochta_base'
7
+ require 'e_pochta_sms'
8
+ require 'e_pochta_email'
17
9
 
18
- def calculate_md5(params)
19
- result = ''
20
- params['key'] = self.public_key
21
- #stringify_keys
22
- stringified_params = {}
23
- params.each {|key, value| stringified_params[key.to_s] = value.to_s}
24
- #sort & concatenate all values
25
- stringified_params.sort.each { |value| result = result + value[1] }
26
- result = result + self.private_key
27
- Digest::MD5.hexdigest( result )
28
- end
10
+ include EPochtaService
29
11
 
30
- def form_request(params, action)
31
- params['sum'] = calculate_md5 params
32
- self.parameters = params.each {|k,v| v = URI.escape v.to_s }
33
-
34
- url = URI("#{EPochta::URL}#{action}")
35
- url.query = URI.encode_www_form params
36
- url
37
- end
38
-
39
- def exec_command(params, action)
40
- uri = form_request(params, action)
41
- result = Net::HTTP.post_form(uri, self.parameters)
42
- end
43
-
44
- def create_address_book(params)
45
- params['action'] = 'addAddressbook'
46
- params['version'] = '3.0'
47
- result = exec_command(params, 'addAddressbook')
48
- result = JSON.parse(result.body)
49
-
50
- if result.has_key? 'error'
51
- false
52
- else
53
- result['result']['addressbook_id']
54
- end
55
- end
56
-
57
- def get_balance()
58
- params = {}
59
- params['action'] = 'getUserBalance'
60
- params['version'] = '3.0'
61
- params['currency'] = 'RUB'
62
- result = exec_command(params, 'getUserBalance')
63
- result = JSON.parse(result.body)
64
-
65
- if result.has_key? 'error'
66
- false
67
- else
68
- result['result']['balance_currency']
69
- end
70
- end
71
-
72
- def delete_address_book(params)
73
- params['action'] = 'delAddressbook'
74
- params['version'] = '3.0'
75
- result = exec_command(params, 'delAddressbook')
76
- result = JSON.parse(result.body)
77
- if result.has_key? 'error'
78
- false
79
- else
80
- true
81
- end
82
- end
83
-
84
- def add_phones(params)
85
- params['action'] = 'addPhoneToAddressBook'
86
- params['version'] = '3.0'
87
- result = exec_command(params, 'addPhoneToAddressBook')
88
- result = JSON.parse(result.body)
89
- if result.has_key? 'error'
90
- false
91
- else
92
- true
93
- end
94
- end
95
-
96
- def send_sms(params)
97
- params['action'] = 'sendSMS'
98
- params['version'] = '3.0'
99
- result = exec_command(params, 'sendSMS')
100
- result = JSON.parse(result.body)
101
-
102
- if result.has_key? 'error'
103
- false
104
- else
105
- result['result']['id']
106
- end
107
- end
108
-
109
- def create_campaign(params)
110
- params['action'] = 'createCampaign'
111
- params['version'] = '3.0'
112
- result = exec_command(params, 'createCampaign')
113
- result = JSON.parse(result.body)
114
-
115
- if result.has_key? 'error'
116
- false
117
- else
118
- result['result']['id']
119
- end
120
- end
121
-
122
- def get_campaign_status(params)
123
- params['action'] = 'getCampaignInfo'
124
- params['version'] = '3.0'
125
- result = exec_command(params, 'getCampaignInfo')
126
- result = JSON.parse(result.body)
127
-
128
- if result.has_key? 'error'
129
- false
130
- else
131
- result['result']['status_text'] = get_status_text(result['result']['status'].to_i)
132
- result['result']
133
- end
134
- end
135
-
136
- def campaign_delivery_statuses(params)
137
- params['action'] = 'getCampaignDeliveryStats'
138
- params['version'] = '3.0'
139
- response = exec_command(params, 'getCampaignDeliveryStats')
140
- response = JSON.parse(response.body)
141
-
142
- if response.has_key? 'error'
143
- false
144
- else
145
- # makes "phone->status" structure from returned response
146
- format_delivery_status_hash(response['result'])
147
- end
148
-
149
- end
150
-
151
- private
152
- # helpers
153
- def get_status_text(code)
154
- status_text = case code
155
- when 0 then 'pending'
156
- when 1 then 'not_enought_money'
157
- when 2 then 'in_process'
158
- when 3 then 'done'
159
- when 4 then 'wrong_numbers'
160
- when 5 then 'partialy_done'
161
- when 6 then 'spam'
162
- when 7 then 'wrong_sender_name'
163
- when 8 then 'paused'
164
- when 9 then 'planned'
165
- when 10 then 'on_moderation'
166
- end
167
- end
168
-
169
- def format_delivery_status_hash(response)
170
- result = {}
171
- response['phone'].each_with_index do |client, index|
172
- result[client] = response['status'][index]
173
- end
174
- result
175
- end
176
-
177
- end
@@ -0,0 +1,63 @@
1
+ module EPochtaService
2
+
3
+ class EPochtaBase
4
+ attr_accessor :public_key, :private_key, :parameters
5
+
6
+ # options hash: public_key, private_key
7
+ def initialize(options)
8
+ if options.is_a? Hash
9
+ self.public_key = options[:public_key]
10
+ self.private_key = options[:private_key]
11
+ else
12
+ raise ArgumentError, "expected Hash argument, got #{options.class}"
13
+ end
14
+ end
15
+
16
+ def calculate_md5(params)
17
+ result = ''
18
+ params['key'] = self.public_key
19
+ #stringify_keys
20
+ stringified_params = {}
21
+ params.each do |key, value|
22
+ # This is hack for correct md5 summ calculating
23
+ # when we have array value in param, we must concatenate with 'Array' string
24
+ # instead of value of this array =\
25
+ # because of PHP origin of EPochta engine:
26
+
27
+ # this is PHP example of control summ calculating, which is correct
28
+
29
+ # ksort($arrayRequest);
30
+ # $sum = '';
31
+ # foreach ($arrayRequest as $v)
32
+ # $sum .= $v; // if $v is Array then it evaluates to 'Array' string value
33
+
34
+ if value.is_a?(Array)
35
+ stringified_params[key.to_s] = 'Array'
36
+ next
37
+ end
38
+ # =========
39
+ stringified_params[key.to_s] = value.to_s
40
+ end
41
+
42
+ #sort & concatenate all values
43
+ stringified_params.sort.each {|value| result = result + value[1] }
44
+ result = result + self.private_key
45
+ Digest::MD5.hexdigest( result )
46
+ end
47
+
48
+ def form_request(params)
49
+ params['version'] = '3.0'
50
+ params['sum'] = calculate_md5 params
51
+ self.parameters = params.each {|k,v| v = URI.escape v.to_s }
52
+
53
+ url = URI("#{self.class::URL}#{params['action']}")
54
+ url.query = URI.encode_www_form params
55
+ url
56
+ end
57
+
58
+ def exec_command(params)
59
+ uri = form_request(params)
60
+ result = Net::HTTP.post_form(uri, self.parameters)
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,23 @@
1
+ module EPochtaService
2
+ class EPochtaEmail < EPochtaBase
3
+ URL = 'http://atompark.com/api/email/3.0/'
4
+
5
+ [
6
+ :addAddressbook, :delAddressbook, :addAddresses,
7
+ :getAddressbook, :activateEmails, :createCampaign,
8
+ :delEmail, :getUserBalance, :getCampaignStats
9
+ ].each do |method|
10
+ define_method(method) do |params|
11
+ params['action'] = method.to_s
12
+ result = exec_command(params)
13
+ result = JSON.parse(result.body)
14
+
15
+ if result.has_key? 'error'
16
+ false
17
+ else
18
+ result['result'] || result
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,134 @@
1
+ module EPochtaService
2
+ class EPochtaSMS < EPochtaBase
3
+ URL = 'http://atompark.com/api/sms/3.0/'
4
+
5
+ def create_address_book(params)
6
+ params['action'] = 'addAddressbook'
7
+
8
+ result = exec_command(params)
9
+ result = JSON.parse(result.body)
10
+
11
+ if result.has_key? 'error'
12
+ false
13
+ else
14
+ result['result']['addressbook_id']
15
+ end
16
+ end
17
+
18
+ def get_balance()
19
+ params = {}
20
+ params['action'] = 'getUserBalance'
21
+ params['currency'] = 'RUB'
22
+ result = exec_command(params)
23
+ result = JSON.parse(result.body)
24
+
25
+ if result.has_key? 'error'
26
+ false
27
+ else
28
+ result['result']['balance_currency']
29
+ end
30
+ end
31
+
32
+ def delete_address_book(params)
33
+ params['action'] = 'delAddressbook'
34
+ result = exec_command(params)
35
+ result = JSON.parse(result.body)
36
+ if result.has_key? 'error'
37
+ false
38
+ else
39
+ true
40
+ end
41
+ end
42
+
43
+ def add_phones(params)
44
+ params['action'] = 'addPhoneToAddressBook'
45
+ result = exec_command(params)
46
+ result = JSON.parse(result.body)
47
+ if result.has_key? 'error'
48
+ false
49
+ else
50
+ true
51
+ end
52
+ end
53
+
54
+ def send_sms(params)
55
+ params['action'] = 'sendSMS'
56
+ result = exec_command(params)
57
+ result = JSON.parse(result.body)
58
+
59
+ if result.has_key? 'error'
60
+ false
61
+ else
62
+ result['result']['id']
63
+ end
64
+ end
65
+
66
+ def create_campaign(params)
67
+ params['action'] = 'createCampaign'
68
+ result = exec_command(params)
69
+ result = JSON.parse(result.body)
70
+
71
+ if result.has_key? 'error'
72
+ false
73
+ else
74
+ result['result']['id']
75
+ end
76
+ end
77
+
78
+ # params = {'id' => 12345} campaign_id
79
+ def get_campaign_status(params)
80
+ params['action'] = 'getCampaignInfo'
81
+ result = exec_command(params)
82
+ result = JSON.parse(result.body)
83
+
84
+ if result.has_key? 'error'
85
+ false
86
+ else
87
+ result['result']['status_text'] = get_status_text(result['result']['status'].to_i)
88
+ result['result']
89
+ end
90
+ end
91
+
92
+ # params = {'id' => 12345} campaign_id
93
+ def campaign_delivery_statuses(params)
94
+ params['action'] = 'getCampaignDeliveryStats'
95
+
96
+ response = exec_command(params)
97
+ response = JSON.parse(response.body)
98
+
99
+ if response.has_key? 'error'
100
+ false
101
+ else
102
+ # makes "phone->status" structure from returned response
103
+ format_delivery_status_hash(response['result'])
104
+ end
105
+
106
+ end
107
+
108
+ private
109
+ # helpers
110
+ def get_status_text(code)
111
+ status_text = case code
112
+ when 0 then 'epochta_pending'
113
+ when 1 then 'not_enought_money'
114
+ when 2 then 'in_process'
115
+ when 3 then 'done'
116
+ when 4 then 'wrong_numbers'
117
+ when 5 then 'partialy_done'
118
+ when 6 then 'spam'
119
+ when 7 then 'wrong_sender_name'
120
+ when 8 then 'paused'
121
+ when 9 then 'planned'
122
+ when 10 then 'on_moderation'
123
+ end
124
+ end
125
+
126
+ def format_delivery_status_hash(response)
127
+ result = {}
128
+ response['phone'].each_with_index do |client, index|
129
+ result[client] = {status: response['status'][index], delivery_date: response['donedate'][index] }
130
+ end
131
+ result
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,146 @@
1
+ # coding: utf-8
2
+ require 'e_pochta'
3
+ require 'rspec'
4
+
5
+ describe EPochtaSMS do
6
+
7
+ subject { EPochtaSMS.new(:public_key => '42e461a8affce1cff775b3a603941e8e', :private_key => '89bbb6dab9bed6758aaf137560440e9f') }
8
+
9
+ it 'must have constant api url' do
10
+ EPochtaSMS::URL.should_not be_nil
11
+ end
12
+
13
+ context 'on creation' do
14
+ it 'should have public and private api key ' do
15
+ [subject.public_key, subject.private_key].each {|val| val.should_not be_nil}
16
+ end
17
+
18
+ it 'should take options hash ' do
19
+ expect { EPochtaSMS.new([1,2,3]) }.to raise_error(ArgumentError)
20
+ end
21
+ end
22
+
23
+ describe '.calculate_md5' do
24
+ it 'should return a string' do
25
+ params = {b: '123', a: 1, c: 256}
26
+ result = subject.calculate_md5 params
27
+ expect(result.class).to eq(String)
28
+ end
29
+
30
+ it 'should return md5 string (32 chars), generated from argument' do
31
+ params = {b: '123', a: 1, c: 256}
32
+ result = subject.calculate_md5 params
33
+ result.length.should == 32
34
+ end
35
+ end
36
+
37
+ describe '.exec_command' do
38
+
39
+ context 'responce value' do
40
+ before(:each) do
41
+ @addr_book_request = {'action' => 'addAddressbook', 'name' => "test adress book #{Random.rand 1000}", 'description' => 'test book'}
42
+ @request_result = subject.exec_command(@addr_book_request)
43
+ end
44
+
45
+ it 'should have 200 status: OK' do
46
+ expect(@request_result.class).to eq(Net::HTTPOK)
47
+ end
48
+ end
49
+ end
50
+
51
+ describe '.form_request' do
52
+ context 'return value' do
53
+ before(:each) do
54
+ @addr_book_request = {'action' => 'addAddressbook', 'name' => "test adress book #{Random.rand 1000}", 'description' => 'test book'}
55
+ @query_string = subject.form_request(@addr_book_request)
56
+ end
57
+
58
+ it 'should be a URI object' do
59
+ @query_string.class.should be URI::HTTP
60
+ end
61
+
62
+ it 'should not be empty' do
63
+ @query_string.to_s.should_not == ''
64
+ end
65
+
66
+ it 'must contain "sum" key' do
67
+ @query_string.to_s.should =~ /sum/
68
+ end
69
+
70
+ it 'must contain "key" key' do
71
+ @query_string.to_s.should =~ /key/
72
+ end
73
+ end
74
+ end
75
+
76
+ describe '.create_address_book' do
77
+ before(:each) do
78
+ @good_params = {'name' => "test adress book", 'description' => 'test book'}
79
+ end
80
+
81
+ context 'return value' do
82
+ it 'should be ID of created address book' do
83
+ id = subject.create_address_book(@good_params)
84
+ expect(id.class).to eq(Fixnum)
85
+ end
86
+
87
+ it 'should not be false' do
88
+ id = subject.create_address_book(@good_params)
89
+ expect(id).not_to eq(false)
90
+ end
91
+ end
92
+ end
93
+
94
+ describe '.delete_address_book' do
95
+ before(:each) do
96
+ address_book_id = subject.create_address_book({'name' => "test delete book"})
97
+ @good_params = { 'idAddressBook' => address_book_id }
98
+ @bad_params = { 'idAddressBook' => 123454568 }
99
+ end
100
+
101
+ context 'return value' do
102
+ it 'should be true' do
103
+ subject.delete_address_book(@good_params).should be(true)
104
+ end
105
+ it 'should be false with bad params' do
106
+ subject.delete_address_book(@bad_params).should be(false)
107
+ end
108
+ end
109
+ end
110
+
111
+ describe '.add_phones' do
112
+ before do
113
+ @address_book_id = subject.create_address_book({'name' => "with users"})
114
+ end
115
+
116
+ context 'return value' do
117
+ before do
118
+ @good_params = {
119
+ 'idAddressBook' => @address_book_id,
120
+ 'data' => [["89085085077", "Тимур Русланович"], ['89518408051', 'Кристина'] ].to_json }
121
+ @bad_params = {
122
+ 'idAddressBook' => 1251255,
123
+ 'data' => [["89085085077", "Тимур Русланович"], ['89518408051', 'Кристина'] ].to_json }
124
+ end
125
+
126
+ it 'should be true' do
127
+ subject.add_phones(@good_params).should be(true)
128
+ end
129
+
130
+ it 'should be false with bad params' do
131
+ subject.add_phones(@bad_params).should be(false)
132
+ end
133
+ end
134
+ end
135
+
136
+ describe '.get_balance' do
137
+ context 'return value' do
138
+ it 'should be a number, which represent current account balance' do
139
+ balance = subject.get_balance()
140
+ puts balance
141
+ expect(balance.class).to be(Float)
142
+ end
143
+ end
144
+ end
145
+
146
+ end
@@ -0,0 +1,88 @@
1
+ # coding: utf-8
2
+ require 'e_pochta'
3
+ require 'rspec'
4
+
5
+
6
+ describe EPochtaEmail do
7
+
8
+ subject { EPochtaEmail.new(:public_key => 'd6029849011e7f86a97792d6e46be1a6', :private_key => '8e564896226d0e02d077cd1f671d6180') }
9
+
10
+ describe 'Address book method' do
11
+ before(:all) do
12
+ @addr_book_id = subject.addAddressbook({'name' => "My adress book #{Random.rand 1000}"})['addressbook_id']
13
+ end
14
+
15
+ context 'addAddressbook' do
16
+ it 'return value shoud be an ID of sended message' do
17
+ @addr_book_id.class.should be(Fixnum)
18
+ end
19
+ end
20
+
21
+ context 'addAddresses' do
22
+ it 'return value should be 1' do
23
+ subject.addAddresses('id_list' => @addr_book_id, 'email[]' => ['zxc@zxc.ru', 'asd@asd.ru']).should be_equal(1)
24
+ end
25
+ end
26
+
27
+ context 'getAddressbook' do
28
+ it 'return value should contain id number' do
29
+ subject.getAddressbook('id' => @addr_book_id)['id'].should be_equal(@addr_book_id)
30
+ end
31
+ end
32
+
33
+ # context 'activateEmails' do
34
+ # it 'return value should contain count of numbers, set for activation' do
35
+ # sleep(5)
36
+ # subject.activateEmails('id' => @addr_book_id, 'description' => 'sdaad').has_key?('activation_request_qty').should be true
37
+ # end
38
+ # end
39
+
40
+ context 'delEmail' do
41
+ it 'return value should be 1' do
42
+ subject.delEmail('id' => @addr_book_id, 'email' => 'zxc@zxc.ru').should be_equal(1)
43
+ end
44
+ end
45
+
46
+ after(:all) do
47
+ subject.delAddressbook :id => @addr_book_id
48
+ end
49
+ end
50
+
51
+ describe 'Campaign method' do
52
+ before(:all) do
53
+ @addr_book_id = subject.addAddressbook({'name' => "My adress book #{Random.rand 1000}"})['addressbook_id']
54
+ subject.addAddresses('id_list' => @addr_book_id, 'email[]' => ['timurt1988@gmail.com', 'noodledoomer@rambler.ru'])
55
+ sleep(6)
56
+ subject.activateEmails('id' => @addr_book_id, 'description' => 'Моя почта для теста')
57
+ sleep(6)
58
+ end
59
+
60
+ context 'createCampaign' do
61
+ it 'return value should contain id of created campaign' do
62
+
63
+ campaign = subject.createCampaign({
64
+ 'name' => 'test campaign',
65
+ 'sender_name' => 'Тимур',
66
+ 'sender_email' => 'rouge1988@yandex.ru',
67
+ 'subject' => 'test email',
68
+ 'body' => Base64.encode64("<h2>test</h2> <p>my mail</p>"),
69
+ 'list_id' => @addr_book_id
70
+ })
71
+ campaign['id'].class.should be(Fixnum)
72
+ end
73
+ end
74
+
75
+ context 'getCampaignStats' do
76
+ it 'return value should have key "statistics"' do
77
+ subject.getCampaignStats('id' => 20320).has_key?('statistics').should be true
78
+ end
79
+ end
80
+ end
81
+
82
+ describe 'getUserBalance method' do
83
+ it 'should return balance_currency value' do
84
+ subject.getUserBalance({'currency' => 'RUB'}).has_key?('balance_currency').should be true
85
+ end
86
+ end
87
+
88
+ end
@@ -0,0 +1,59 @@
1
+ # coding: utf-8
2
+ require 'e_pochta'
3
+ require 'rspec'
4
+
5
+
6
+ describe EPochtaSMS do
7
+
8
+ subject { EPochtaSMS.new(:public_key => '42e461a8affce1cff775b3a603941e8e', :private_key => '89bbb6dab9bed6758aaf137560440e9f') }
9
+
10
+ describe '.send_sms' do
11
+ before do
12
+ @good_params = {
13
+ 'sender' => 'Dealer',
14
+ 'text' => 'Hello Вова!',
15
+ 'phone' => '79085085077',
16
+ 'datetime' => '',
17
+ 'sms_lifetime' => 0
18
+ }
19
+ @bad_params = {}
20
+ end
21
+
22
+ context 'return value' do
23
+ it 'shoud be an ID of sended message' do
24
+ subject.send_sms(@good_params).class.should be(Fixnum)
25
+ end
26
+
27
+ it 'should be false with bad params' do
28
+ subject.send_sms(@bad_params).should be(false)
29
+ end
30
+ end
31
+ end
32
+
33
+ describe '.create_campaign' do
34
+ before do
35
+ @address_book_id = subject.create_address_book('name' => "campaign 2 test", 'description' => 'for campaign')
36
+ subject.add_phones({
37
+ 'idAddressBook' => @address_book_id,
38
+ 'data' => [["79085085077", "Юрий Владимирович"], ['79518408051', 'Вова'] ].to_json
39
+ })
40
+
41
+ @good_params = {
42
+ 'sender' => '12345',
43
+ 'list_id' => @address_book_id,
44
+ 'text' => '%1%, представляем Вам CRM Dealerpoint!',
45
+ 'datetime' => '',
46
+ 'batch' => 0,
47
+ 'batchinterval' => 0,
48
+ 'sms_lifetime' => 0,
49
+ 'controlphone' => ''
50
+ }
51
+ end
52
+ context 'return value' do
53
+ it 'should be an ID of created sms Campaign' do
54
+ subject.create_campaign(@good_params).class.should be (Fixnum)
55
+ end
56
+ end
57
+ end
58
+
59
+ end
metadata CHANGED
@@ -1,23 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: e_pochta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Tikijian
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-13 00:00:00.000000000 Z
11
+ date: 2013-06-01 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Class for interaction with E-Pochta API v.3.0 - an online sms-service
14
- http://www.epochta.ru/
13
+ description: Ruby gem for EPochta API 3.0 - an email and sms service www.epochta.ru
15
14
  email: timurt1988@gmail.com
16
15
  executables: []
17
16
  extensions: []
18
17
  extra_rdoc_files: []
19
18
  files:
19
+ - lib/e_pochta_email.rb
20
+ - lib/e_pochta_base.rb
21
+ - lib/e_pochta_sms.rb
20
22
  - lib/e_pochta.rb
23
+ - test/email_methods_spec.rb
24
+ - test/e_pochta_spec.rb
25
+ - test/sms_methods_spec.rb
26
+ - README.md
21
27
  homepage: http://rubygems.org/gems/e_pochta
22
28
  licenses: []
23
29
  metadata: {}
@@ -40,5 +46,5 @@ rubyforge_project:
40
46
  rubygems_version: 2.0.3
41
47
  signing_key:
42
48
  specification_version: 4
43
- summary: Class for interaction with E-Pochta API v.3.0
49
+ summary: Ruby gem for EPochta API 3.0
44
50
  test_files: []