bulutfon_sdk 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 610b26a347f122153a6acdf77a417006c5bf37ef
4
+ data.tar.gz: 21139f64c0523051983af4060097a3db56aa15d2
5
+ SHA512:
6
+ metadata.gz: 94b485248c99027342e3ce0961f1b926630632783dddce50d27693f522458bdd0ef617d0dcf8d3a971e038bc87c081c369cfc8a3fb879b842870af93c063aa5d
7
+ data.tar.gz: ef1d317c011859c251228c1e1d7ba9e18c9686b7984ee4710bdaf5edeb6e042b568d71ade207df844f363b7f8f86c51ce2af3a2fc1d27704020b74c41d2d647e
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *~
11
+ .*
12
+ pkg/*
13
+ doc/*
14
+ Gemfile.lock
15
+ *.gem
16
+ bin
17
+ docs/_build
18
+ .DS_Store
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in bulutfon_sdk.gemspec
4
+ gemspec
data/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2014-2015 Bulutfon
2
+
3
+ The MIT License (MIT)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,279 @@
1
+ # Bulutfon Ruby SDK
2
+
3
+ * [API Dokümantasyonu](https://github.com/bulutfon/documents/tree/master/API)
4
+ * [Örnek Kodlar](https://github.com/bulutfon/ruby-sdk/tree/master/examples)
5
+
6
+ ## Kullanım
7
+
8
+ ### Kurulum
9
+
10
+ Gemfile dosyanıza şu satırı ekleyiniz
11
+
12
+ ``` ruby
13
+ gem 'bulutfon_sdk'
14
+ ```
15
+
16
+ Bu satırı ekledikten sonra,
17
+
18
+ ``` bash
19
+ bundle install
20
+ ```
21
+ komutunu koşarak gerekli paketleri yükledikten sonra BulutfonSDK'yı kullanmaya başlayabilirsiniz.
22
+
23
+ ### Master Token ile
24
+
25
+ ```ruby
26
+ require 'bulutfon_sdk'
27
+
28
+ token = 'your_token'
29
+ bulutfon = BulutfonSDK::REST::Bulutfon.new(token)
30
+ ```
31
+
32
+ ## İşlevler
33
+
34
+ ### Kullanıcı bilgilerine erişme
35
+
36
+ SDK ile Kullanıcı bilgileriniz, panel bilgileriniz ve kalan kredinize erişebilirsiniz.
37
+ Bunun için
38
+
39
+ ``` ruby
40
+ puts bulutfon.details
41
+ ```
42
+
43
+ methodunu kullanabilirsiniz.
44
+
45
+ ### Telefon numaraları ve telefon numara detaylarına erişme
46
+
47
+ Bunun için;
48
+
49
+ ```ruby
50
+ # Santral listesine erişir
51
+ puts bulutfon.dids.all
52
+ # Id'si verilen santral detayını döndürür
53
+ puts bulutfon.dids.get(1)
54
+ ```
55
+
56
+ methodlarını kullanabilirsiniz.
57
+
58
+ ### Dahililere ve dahili detaylarına erişme, dahili oluşturma, güncelleme ve silme
59
+
60
+ Bunun için;
61
+
62
+ ```ruby
63
+ # Dahili listesine erişir
64
+ puts bulutfon.extensions.all
65
+ # Id'si verilen dahili detayını döndürür
66
+ puts bulutfon.extensions.get(1)
67
+ # Verilen parametrelere göre yeni dahili oluşturur.
68
+ params = {
69
+ full_name: 'Deneme',
70
+ email: 'deneme@deneme.com',
71
+ did: '905xxxxxxxxx',
72
+ number: 9999,
73
+ redirection_type: 'NONE',
74
+ destination_type: 'EXTENSION',
75
+ destination_number: '905xxxxxxxxx',
76
+ 'acl[]' => [ 'domestic', 'gsm', 'international']
77
+ }
78
+ puts bulutfon.extensions.create(params)
79
+ # Verilen parametrelere göre dahiliyi günceller
80
+ params = {
81
+ full_name: 'Deneme Deneme',
82
+ 'acl[]' => [ 'domestic', 'gsm']
83
+ }
84
+ puts bulutfon.extensions.update(1, params)
85
+ # Dahiliyi siler
86
+ puts bulutfon.extensions.delete(1)
87
+ ```
88
+
89
+ methodlarını kullanabilirsiniz.
90
+
91
+ ### Gruplara ve grup detaylarına erişme
92
+
93
+ Bunun için;
94
+
95
+ ```ruby
96
+ # Grup listesine erişir
97
+ puts bulutfon.groups.all
98
+ # Id'si verilen grup detayını döndürür
99
+ puts bulutfon.groups.get(1)
100
+ ```
101
+
102
+ methodlarını kullanabilirsiniz.
103
+
104
+ ### Arama kayıtlarına ve arama detaylarına erişme ve ses kayıtlarını indirme
105
+
106
+ Bunun için;
107
+
108
+ ```ruby
109
+ # Cdr listesine erişir
110
+ puts bulutfon.cdrs.all
111
+ # Cdr listesine sayfalama yaparak erişir
112
+ puts bulutfon.cdrs.all({page: 1, limit: 3})
113
+ # Uuid'si verilen cdr detayını döndürür
114
+ puts bulutfon.cdrs.get('uuid')
115
+ # Uuid'si verilen arama kaydinin detaylarini getir
116
+ puts bulutfon.call_records.get('uuid')
117
+ # Uuid'si verilen ses kaydını indir
118
+ save_path = "#{File.expand_path(File.dirname(__FILE__))}/save_uuid.ogg"
119
+ puts bulutfon.call_records.save('uuid', save_path)
120
+ ```
121
+
122
+ methodlarını kullanabilirsiniz.
123
+
124
+ ### Gelen fakslara erişme ve faks dosyasını indirme
125
+
126
+ Bunun için;
127
+
128
+ ```ruby
129
+ # Gelen faksları listeler
130
+ puts bulutfon.incoming_faxes.all
131
+ # Uuid'si verilen gelen faksın detayları
132
+ puts bulutfon.incoming_faxes.get('uuid')
133
+ # Uuid'si verilen gelen faksı indir
134
+ save_path = "#{File.expand_path(File.dirname(__FILE__))}/save_uuid.tiff"
135
+ puts bulutfon.incoming_faxes.save('uuid', save_path)
136
+ ```
137
+
138
+ methodlarını kullanabilirsiniz.
139
+
140
+ ### Giden fakslara erişme ve faks gönderme
141
+
142
+ Bunun için;
143
+
144
+ ```ruby
145
+ # Giden faksları listeler
146
+ puts bulutfon.outgoing_faxes.all
147
+ # Id'si verilen giden faks detayları
148
+ puts bulutfon.outgoing_faxes.get(1)
149
+ # Faks gönderme işlemi
150
+ file = "#{File.expand_path(File.dirname(__FILE__))}/pdf-sample.pdf"
151
+ params = {
152
+ title: 'Deneme',
153
+ receivers: '905xxxxxxxxx',
154
+ did: '905xxxxxxxxx',
155
+ attachment: file
156
+ }
157
+ puts bulutfon.outgoing_faxes.create(params)
158
+ ```
159
+
160
+ methodlarını kullanabilirsiniz.
161
+
162
+ ### Ses Dosyalarını listeleme ve indirme, oluşturma ve silme
163
+
164
+ Bunun için;
165
+
166
+ ```ruby
167
+ # Ses Dosyalarını listeler
168
+ puts bulutfon.announcements.all
169
+ # Id'si verilen ses dosyasının detayları
170
+ puts bulutfon.announcements.get(1)
171
+ # Ses dosyası oluşturma
172
+ file = "#{File.expand_path(File.dirname(__FILE__))}/test.wav"
173
+ params = {
174
+ name: 'Deneme',
175
+ announcement: file
176
+ }
177
+ puts bulutfon.announcements.create(params)
178
+ # Id'si verilen ses dosyasını indirme işlemi
179
+ save_path = "#{File.expand_path(File.dirname(__FILE__))}/save_test.wav"
180
+ puts bulutfon.announcements.save(1, save_path)
181
+ # Id'si verilen ses dosyasını silme
182
+ puts bulutfon.announcements.delete(1)
183
+ ```
184
+
185
+ methodlarını kullanabilirsiniz.
186
+
187
+ ### Otomatik Aramaları listeleme ve oluşturma
188
+
189
+ Bunun için;
190
+
191
+ ```ruby
192
+ puts bulutfon.automatic_calls.all # Otomatik aramaları listeler
193
+ puts bulutfon.automatic_calls.get(1) # Id'si verien otomatik arama detaylarını görüntüler
194
+ # Automatic call oluşturur ve oluşturmadan sonra receivers numaraları aranır
195
+ params = {
196
+ title: 'Automatic call after creation',
197
+ receivers: '905xxxxxxxxx',
198
+ did: '905xxxxxxxxx',
199
+ announcement_id: 1
200
+ }
201
+ puts bulutfon.automatic_calls.create(params)
202
+ # Zaman planlı automatic call oluşturulur ve oluşturmadan sonra receivers numaraları
203
+ # perşembe günü saat 10:15 ile 12:00 arasında aranır
204
+ params = {
205
+ title: 'Time planned call',
206
+ receivers: '905xxxxxxxxx',
207
+ did: '905xxxxxxxxx',
208
+ announcement_id: 1,
209
+ mon_active: false,
210
+ tue_active: false,
211
+ wed_active: false,
212
+ thu_active: true,
213
+ thu_start: '10:15',
214
+ thu_finish: '12:00',
215
+ fri_active: false,
216
+ sat_active: false,
217
+ sun_active: false,
218
+ hours_active: true
219
+ }
220
+ puts bulutfon.automatic_calls.create(params)
221
+ ```
222
+
223
+ methodlarını kullanabilirsiniz.
224
+
225
+ ### Sms Başlıklarını Listeleme
226
+
227
+ Bunun için;
228
+
229
+ ```ruby
230
+ # Panelden oluşturduğunuz sms başlıklarını listeler
231
+ puts bulutfon.message_titles.all
232
+ ```
233
+
234
+ methodlarını kullanabilirsiniz.
235
+
236
+ ### Mesajları Listeleme ve Mesaj Gönderme
237
+
238
+ Bunun için;
239
+
240
+ ```ruby
241
+ # Gönderilen mesajları listeler
242
+ puts bulutfon.messages.all
243
+ # Gönderilen mesajları sayfalama yaparak listeler
244
+ puts bulutfon.messages.all({page: 1, limit: 3 })
245
+ # Id'si verilen mesaj detaylarını döndürür
246
+ puts bulutfon.messages.get(1)
247
+ # Yeni mesaj gönderme işlemi
248
+ params = {
249
+ title: 'CONFIRMED_MESSAGE_TITLE',
250
+ content: 'Test Message',
251
+ receivers: '905xxxxxxxxx'
252
+ }
253
+ puts bulutfon.messages.create(params)
254
+ # Çoklu alıcılı mesaj gönderme işlemi
255
+ params_multiple = {
256
+ title: 'CONFIRMED_MESSAGE_TITLE',
257
+ content: 'Multiple Message',
258
+ receivers: '905xxxxxxxxx,905xxxxxxxxx'
259
+ }
260
+ puts bulutfon.messages.create(params_multiple)
261
+ # Zaman planlı mesaj gönderme işlemi
262
+ params = {
263
+ title: 'CONFIRMED_MESSAGE_TITLE',
264
+ content: 'Planned message example',
265
+ receivers: '905xxxxxxxxx',
266
+ is_future_sms: true,
267
+ send_date: '16/12/2015 10:00'
268
+ }
269
+ puts bulutfon.messages.create(params)
270
+ ```
271
+
272
+ methodlarını kullanabilirsiniz.
273
+
274
+ Örnek kullanımları görmek için ve erişebileceğiniz değişkenler için [örnek kodlarımızı](https://github.com/bulutfon/ruby-sdk/tree/master/examples) inceleyebilirsiniz.
275
+
276
+ ##Credits
277
+ * ruby_sdk is maintained by [Lab2023](http://lab2023.com/) & [Bulutfon](https://www.bulutfon.com/)
278
+ * Thank you to all the contributors!
279
+ * The names and logos for Bulutfon are trademarks of Bulutfon
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'bulutfon_sdk/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'bulutfon_sdk'
8
+ spec.version = BulutfonSDK::VERSION
9
+ spec.authors = ['Ismail Akbudak']
10
+ spec.email = ['ismail.akbudak@lab2023.com']
11
+
12
+ spec.summary = %q{Bulutfon Ruby SDK.}
13
+ spec.description = %q{Bulutfon API SDK for ruby & ruby on rails.}
14
+ spec.homepage = 'https://github.com/bulutfon/ruby-sdk'
15
+ spec.extra_rdoc_files = ['README.md', 'LICENSE.md']
16
+ spec.license = 'MIT'
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
+ spec.bindir = 'exe'
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
+ spec.require_paths = ['lib']
22
+
23
+ spec.add_runtime_dependency 'multi_json', '~> 1.11', '>= 1.11.0'
24
+ spec.add_dependency('mime-types', '~> 3.0')
25
+ spec.add_development_dependency 'bundler', '~> 1.10'
26
+ spec.add_development_dependency 'rake', '~> 10.0'
27
+ spec.add_development_dependency 'rspec', '~> 0'
28
+ end
data/conf/cacert.pem ADDED
File without changes
@@ -0,0 +1,216 @@
1
+ require 'bulutfon_sdk'
2
+
3
+ token = 'your_token'
4
+
5
+ # Account
6
+ # -------------------------------------------------------------
7
+ bulutfon = BulutfonSDK::REST::Bulutfon.new(token)
8
+ # Get account details
9
+ puts bulutfon.details
10
+ # BulutfonSDK::REST::Message object
11
+ puts bulutfon.messages
12
+ # BulutfonSDK::REST::MessageTitle object
13
+ puts bulutfon.message_titles
14
+ # BulutfonSDK::REST::Did object
15
+ puts bulutfon.dids
16
+ # BulutfonSDK::REST::Extension object
17
+ puts bulutfon.extensions
18
+ # BulutfonSDK::REST::Group object
19
+ puts bulutfon.groups
20
+ # BulutfonSDK::REST::Cdr object
21
+ puts bulutfon.cdrs
22
+ # BulutfonSDK::REST::CallRecord object
23
+ puts bulutfon.call_records
24
+ # BulutfonSDK::REST::IncomingFax object
25
+ puts bulutfon.incoming_faxes
26
+ # BulutfonSDK::REST::OutgoingFax object
27
+ puts bulutfon.outgoing_faxes
28
+ # BulutfonSDK::REST::Announcement object
29
+ puts bulutfon.announcements
30
+ # BulutfonSDK::REST::AutomaticCall object
31
+ puts bulutfon.automatic_calls
32
+
33
+ # Dids
34
+ # -------------------------------------------------------------
35
+ did = BulutfonSDK::REST::Did.new(token)
36
+ # Get dids
37
+ puts did.all
38
+ # Get did with id
39
+ puts did.get(1)
40
+
41
+ # Extensions
42
+ # -------------------------------------------------------------
43
+ extension = BulutfonSDK::REST::Extension.new(token)
44
+ # Get extensions
45
+ puts extension.all
46
+ # Get extension with id
47
+ puts extension.get(1)
48
+ # Create extension
49
+ params = {
50
+ full_name: 'Deneme',
51
+ email: 'deneme@deneme.com',
52
+ did: '905xxxxxxxxx',
53
+ number: 9999,
54
+ redirection_type: 'NONE',
55
+ destination_type: 'EXTENSION',
56
+ destination_number: '905xxxxxxxxx',
57
+ 'acl[]' => [ 'domestic', 'gsm', 'international']
58
+ }
59
+ puts extension.create(params)
60
+ # Update extension
61
+ params = {
62
+ full_name: 'Deneme Deneme',
63
+ 'acl[]' => [ 'domestic', 'gsm']
64
+ }
65
+ puts extension.update(1, params)
66
+ # Delete extension
67
+ puts extension.delete(1)
68
+
69
+ # Groups
70
+ # -------------------------------------------------------------
71
+ group = BulutfonSDK::REST::Group.new(token)
72
+ # Get groups
73
+ puts group.all
74
+ # Get group with id
75
+ puts group.get(1)
76
+
77
+ # Cdrs
78
+ # -------------------------------------------------------------
79
+ cdr = BulutfonSDK::REST::Cdr.new(token)
80
+ # Get cdrs
81
+ puts cdr.all
82
+ # Get cdrs with pagination
83
+ puts cdr.all({page: 1, limit: 1})
84
+ # Get cdr with uuid
85
+ puts cdr.get('uuid')
86
+
87
+ # Call Records
88
+ # -------------------------------------------------------------
89
+ call_record = BulutfonSDK::REST::CallRecord.new(token)
90
+ # Get call_record detail with uuid
91
+ puts call_record.get('uuid')
92
+ # Save call record to save_path with uuid
93
+ save_path = "#{File.expand_path(File.dirname(__FILE__))}/save_uuid.ogg"
94
+ puts call_record.save('uuid', save_path)
95
+
96
+ # Incoming Faxes
97
+ # -------------------------------------------------------------
98
+ incoming_fax = BulutfonSDK::REST::IncomingFax.new(token)
99
+ # Get incoming faxes
100
+ puts incoming_fax.all
101
+ # Get incoming fax with uuid
102
+ puts incoming_fax.get('uuid')
103
+ # Save incoming fax to save_path with uuid
104
+ save_path = "#{File.expand_path(File.dirname(__FILE__))}/save_uuid.tiff"
105
+ puts incoming_fax.save('uuid', save_path)
106
+
107
+ # Outgoing Faxes
108
+ # -------------------------------------------------------------
109
+ outgoing_fax = BulutfonSDK::REST::OutgoingFax.new(token)
110
+ # Get outgoing faxes
111
+ puts outgoing_fax.all
112
+ # Get outgoing fax with id
113
+ puts outgoing_fax.get(1)
114
+ # Create outgoing faxes
115
+ file = "#{File.expand_path(File.dirname(__FILE__))}/pdf-sample.pdf"
116
+ params = {
117
+ title: 'Deneme',
118
+ receivers: '905xxxxxxxxx',
119
+ did: '905xxxxxxxxx',
120
+ attachment: file
121
+ }
122
+ puts outgoing_fax.create(params)
123
+
124
+ # Announcements
125
+ # -------------------------------------------------------------
126
+ announcement = BulutfonSDK::REST::Announcement.new(token)
127
+ # Get announcements
128
+ puts announcement.all
129
+ # Get announcement with id
130
+ puts announcement.get(1)
131
+ # Create announcement
132
+ file = "#{File.expand_path(File.dirname(__FILE__))}/test.wav"
133
+ params = {
134
+ name: 'Deneme',
135
+ announcement: file
136
+ }
137
+ puts announcement.create(params)
138
+ # Save announcement file to save_path with id
139
+ save_path = "#{File.expand_path(File.dirname(__FILE__))}/save_test.wav"
140
+ puts announcement.save(1, save_path)
141
+ # Delete announcement with id
142
+ puts announcement.delete(1)
143
+
144
+ # Automatic Calls
145
+ # -------------------------------------------------------------
146
+ automatic_call = BulutfonSDK::REST::AutomaticCall.new(token)
147
+ # Get automatic calls
148
+ puts automatic_call.all
149
+ # Get automatic call with id
150
+ puts automatic_call.get(1)
151
+ # Create automatic call, after creation receivers will call
152
+ params = {
153
+ title: 'Automatic call after creation',
154
+ receivers: '905xxxxxxxxx',
155
+ did: '905xxxxxxxxx',
156
+ announcement_id: 1
157
+ }
158
+ puts automatic_call.create(params)
159
+ # Create time planned automatic call, in this params receivers will be calling on thursday between 10:15, 12:00
160
+ params = {
161
+ title: 'Time planned call',
162
+ receivers: '905xxxxxxxxx',
163
+ did: '905xxxxxxxxx',
164
+ announcement_id: 1,
165
+ mon_active: false,
166
+ tue_active: false,
167
+ wed_active: false,
168
+ thu_active: true,
169
+ thu_start: '10:15',
170
+ thu_finish: '12:00',
171
+ fri_active: false,
172
+ sat_active: false,
173
+ sun_active: false,
174
+ hours_active: true
175
+ }
176
+ puts automatic_call.create(params)
177
+
178
+ # Message Titles
179
+ # -------------------------------------------------------------
180
+ message_title = BulutfonSDK::REST::MessageTitle.new(token)
181
+ # Get message titles
182
+ puts message_title.all
183
+
184
+ # Messages
185
+ # -------------------------------------------------------------
186
+ message = BulutfonSDK::REST::Message.new(token)
187
+ # Get messages
188
+ puts message.all
189
+ # Get messages with pagination
190
+ puts message.all({page: 1, limit: 3 })
191
+ # Get message with id
192
+ puts message.get(1)
193
+ # Create message
194
+ params = {
195
+ title: 'CONFIRMED_MESSAGE_TITLE',
196
+ content: 'Test Message',
197
+ receivers: '905xxxxxxxxx'
198
+ }
199
+ puts message.create(params)
200
+ # Create message for multiple receiver
201
+ params_multiple = {
202
+ title: 'CONFIRMED_MESSAGE_TITLE',
203
+ content: 'Multiple Message',
204
+ receivers: '905xxxxxxxxx,905xxxxxxxxx'
205
+ }
206
+ puts message.create(params_multiple)
207
+ # Create time planned message
208
+ params = {
209
+ title: 'CONFIRMED_MESSAGE_TITLE',
210
+ content: 'Planned message example',
211
+ receivers: '905xxxxxxxxx',
212
+ is_future_sms: true,
213
+ send_date: '16/12/2015 10:00'
214
+ }
215
+ puts message.create(params)
216
+
Binary file
data/examples/test.wav ADDED
Binary file
@@ -0,0 +1,49 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class Announcement < BaseRequest
6
+
7
+ include BulutfonSDK::Util
8
+
9
+ def initialize(*args)
10
+ super(*args)
11
+ @resource = 'announcements'
12
+ end
13
+
14
+ def all( params = {} )
15
+ prepare_request( 'get', @resource,params)
16
+ end
17
+
18
+ def get( id )
19
+ uri = prepare_uri("#{@resource}/#{id}")
20
+ { download_path: uri.to_s }
21
+ end
22
+
23
+ def save( id, save_path)
24
+ save_file( 'get', "#{@resource}/#{id}", save_path)
25
+ end
26
+
27
+ def create(params)
28
+ prepare_atachment(params)
29
+ prepare_request( 'post', @resource, params)
30
+ end
31
+
32
+ def delete(id)
33
+ prepare_request( 'delete', "#{@resource}/#{id}")
34
+ end
35
+
36
+ private
37
+
38
+ def prepare_atachment(params)
39
+ file = params[:announcement]
40
+ basename = File.basename file
41
+ type = file_content_type file
42
+ content = File.read(file)
43
+ base_64_data = Base64.strict_encode64(content)
44
+ params[:announcement] = "data:#{type};name:#{basename};base64:#{base_64_data}"
45
+ end
46
+
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,26 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class AutomaticCall < BaseRequest
6
+
7
+ def initialize(*args)
8
+ super(*args)
9
+ @resource = 'automatic-calls'
10
+ end
11
+
12
+ def all( params = {} )
13
+ prepare_request( 'get', @resource, params)
14
+ end
15
+
16
+ def get( id )
17
+ prepare_request( 'get', "#{@resource}/#{id}")
18
+ end
19
+
20
+ def create(params)
21
+ prepare_request( 'post', @resource, params)
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,117 @@
1
+ module BulutfonSDK
2
+ module REST
3
+ class BaseRequest
4
+
5
+ HTTP_HEADERS = {
6
+ 'Accept' => 'application/json',
7
+ 'Accept-Charset' => 'utf-8',
8
+ 'User-Agent' => "bulutfon_sdk/#{BulutfonSDK::VERSION}" " (#{RUBY_ENGINE}/#{RUBY_PLATFORM}" " #{RUBY_VERSION}-p#{RUBY_PATCHLEVEL})"
9
+ }
10
+
11
+ def initialize(*args)
12
+ options = args.last.is_a?(Hash) ? args.pop : {}
13
+ @config = BulutfonSDK::Util::ClientConfig.new options
14
+ @token = args[0] || nil
15
+ raise ArgumentError, 'Auth token is required' if @token.nil?
16
+ set_up_connection
17
+ end
18
+
19
+ protected
20
+
21
+ ##
22
+ # Prepare URI object for file path
23
+ def prepare_uri(path, params = {})
24
+ request_path = "#{@config.host}/#{path}"
25
+ uri = URI.parse(request_path)
26
+ params[:access_token] = @token
27
+ uri.query = URI.encode_www_form(params)
28
+ uri
29
+ end
30
+
31
+ ##
32
+ # Prepare http request
33
+ def prepare_request(method, path, params = {})
34
+ request_path = "#{@config.host}/#{path}"
35
+ uri = URI.parse(request_path)
36
+ params[:access_token] = @token
37
+ uri.query = URI.encode_www_form(params) if ['get', 'delete'].include?(method)
38
+ method_class = Net::HTTP.const_get method.to_s.capitalize
39
+ request = method_class.new(uri.to_s, HTTP_HEADERS)
40
+ request.form_data = params if ['post', 'put'].include?(method)
41
+ connect_and_send(request)
42
+ end
43
+
44
+ ##
45
+ # Prepare http request for file saving
46
+ def save_file(method, path, save_path)
47
+ uri = prepare_uri(path)
48
+ method_class = Net::HTTP.const_get method.to_s.capitalize
49
+ request = method_class.new(uri.to_s, HTTP_HEADERS)
50
+ response = connect_and_send(request, is_file: true )
51
+ begin
52
+ file = File.open(save_path, 'w')
53
+ file.write(response)
54
+ rescue => error
55
+ raise BulutfonSDK::REST::SDKError.new error
56
+ ensure
57
+ file.close unless file.nil?
58
+ end
59
+ { file: file, save_path: save_path }
60
+ end
61
+
62
+ ##
63
+ # Set up and cache a Net::HTTP object to use when making requests.
64
+ def set_up_connection # :doc:
65
+ uri = URI.parse(@config.host)
66
+ @http = Net::HTTP.new(uri.host, uri.port, p_user = @config.proxy_user, p_pass = @config.proxy_pass)
67
+ @http.use_ssl = true
68
+ @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
69
+ @http.use_ssl = @config.use_ssl
70
+ if @config.ssl_verify_peer
71
+ @http.verify_mode = OpenSSL::SSL::VERIFY_PEER
72
+ @http.ca_file = @config.ssl_ca_file
73
+ else
74
+ @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
75
+ end
76
+ @http.open_timeout = @config.timeout
77
+ @http.read_timeout = @config.timeout
78
+ end
79
+
80
+ ##
81
+ # Send an HTTP request using the cached <tt>@http</tt> object and
82
+ # return the JSON response body parsed into a hash. Also save the raw
83
+ # Net::HTTP::Request and Net::HTTP::Response objects as
84
+ # <tt>@last_request</tt> and <tt>@last_response</tt> to allow for
85
+ # inspection later.
86
+ def connect_and_send(request, is_file = false ) # :doc:
87
+ @last_request = request
88
+ retries_left = @config.retry_limit
89
+ begin
90
+ response = @http.request request
91
+ @last_response = response
92
+ if response.kind_of? Net::HTTPServerError
93
+ raise BulutfonSDK::REST::ServerError
94
+ end
95
+ rescue
96
+ raise if request.class == Net::HTTP::Post
97
+ if retries_left > 0 then retries_left -= 1; retry else raise end
98
+ end
99
+ if response.body and !response.body.empty?
100
+ if is_file
101
+ object = response.body
102
+ else
103
+ object = MultiJson.load response.body
104
+ end
105
+ elsif response.kind_of? Net::HTTPBadRequest
106
+ object = { message: 'Bad request', code: 400 }
107
+ end
108
+
109
+ if response.kind_of? Net::HTTPClientError
110
+ raise BulutfonSDK::REST::RequestError.new object['error'], object['code']
111
+ end
112
+ object
113
+ end
114
+
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,61 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class Bulutfon < BaseRequest
6
+
7
+ def initialize(*args)
8
+ super(*args)
9
+ end
10
+
11
+ def details
12
+ prepare_request( 'get', 'me')
13
+ end
14
+
15
+ def messages
16
+ BulutfonSDK::REST::Message.new(@token)
17
+ end
18
+
19
+ def message_titles
20
+ BulutfonSDK::REST::MessageTitle.new(@token)
21
+ end
22
+
23
+ def extensions
24
+ BulutfonSDK::REST::Extension.new(@token)
25
+ end
26
+
27
+ def dids
28
+ BulutfonSDK::REST::Did.new(@token)
29
+ end
30
+
31
+ def groups
32
+ BulutfonSDK::REST::Group.new(@token)
33
+ end
34
+
35
+ def cdrs
36
+ BulutfonSDK::REST::Cdr.new(@token)
37
+ end
38
+
39
+ def call_records
40
+ BulutfonSDK::REST::CallRecord.new(@token)
41
+ end
42
+
43
+ def incoming_faxes
44
+ BulutfonSDK::REST::IncomingFax.new(@token)
45
+ end
46
+
47
+ def outgoing_faxes
48
+ BulutfonSDK::REST::OutgoingFax.new(@token)
49
+ end
50
+
51
+ def announcements
52
+ BulutfonSDK::REST::Announcement.new(@token)
53
+ end
54
+
55
+ def automatic_calls
56
+ BulutfonSDK::REST::AutomaticCall.new(@token)
57
+ end
58
+
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,23 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class CallRecord < BaseRequest
6
+
7
+ def initialize(*args)
8
+ super(*args)
9
+ @resource = 'call-records'
10
+ end
11
+
12
+ def get( uuid )
13
+ uri = prepare_uri("#{@resource}/#{uuid}")
14
+ { download_path: uri.to_s }
15
+ end
16
+
17
+ def save( uuid, save_path)
18
+ save_file( 'get', "#{@resource}/#{uuid}", save_path)
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class Cdr < BaseRequest
6
+
7
+ def initialize(*args)
8
+ super(*args)
9
+ @resource = 'cdrs'
10
+ end
11
+
12
+ def all( params = {} )
13
+ prepare_request( 'get', @resource,params)
14
+ end
15
+
16
+ def get( uuid )
17
+ prepare_request( 'get', "#{@resource}/#{uuid}")
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class Did < BaseRequest
6
+
7
+ def initialize(*args)
8
+ super(*args)
9
+ @resource = 'dids'
10
+ end
11
+
12
+ def all( params = {} )
13
+ prepare_request( 'get', @resource,params)
14
+ end
15
+
16
+ def get( id )
17
+ prepare_request( 'get', "#{@resource}/#{id}")
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,24 @@
1
+ module BulutfonSDK
2
+ module REST
3
+ class ServerError < StandardError; end
4
+
5
+ class RequestError < StandardError
6
+ attr_reader :code
7
+
8
+ def initialize(message, code=nil)
9
+ super message
10
+ @code = code
11
+ end
12
+ end
13
+
14
+ class SDKError < StandardError
15
+ attr_reader :code
16
+
17
+ def initialize(message, code=nil)
18
+ super message
19
+ @code = code
20
+ end
21
+ end
22
+
23
+ end
24
+ end
@@ -0,0 +1,33 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class Extension < BaseRequest
6
+
7
+ def initialize(*args)
8
+ super(*args)
9
+ @resource = 'extensions'
10
+ end
11
+
12
+ def all( params = {} )
13
+ prepare_request( 'get', @resource,params)
14
+ end
15
+
16
+ def get( id )
17
+ prepare_request( 'get', "#{@resource}/#{id}")
18
+ end
19
+
20
+ def create(params)
21
+ prepare_request( 'post', @resource, params)
22
+ end
23
+
24
+ def update(id, params)
25
+ prepare_request( 'put', "#{@resource}/#{id}", params)
26
+ end
27
+
28
+ def delete(id)
29
+ prepare_request( 'delete', "#{@resource}/#{id}")
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,22 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class Group < BaseRequest
6
+
7
+ def initialize(*args)
8
+ super(*args)
9
+ @resource = 'groups'
10
+ end
11
+
12
+ def all( params = {} )
13
+ prepare_request( 'get', @resource,params)
14
+ end
15
+
16
+ def get( id )
17
+ prepare_request( 'get', "#{@resource}/#{id}")
18
+ end
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class IncomingFax < BaseRequest
6
+
7
+ def initialize(*args)
8
+ super(*args)
9
+ @resource = 'incoming-faxes'
10
+ end
11
+
12
+ def all( params = {} )
13
+ prepare_request( 'get', @resource, params)
14
+ end
15
+
16
+ def get( uuid )
17
+ uri = prepare_uri("#{@resource}/#{uuid}")
18
+ { download_path: uri.to_s }
19
+ end
20
+
21
+ def save( uuid, save_path)
22
+ save_file( 'get', "#{@resource}/#{uuid}", save_path)
23
+ end
24
+
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class Message < BaseRequest
6
+
7
+ def initialize(*args)
8
+ super(*args)
9
+ @resource = 'messages'
10
+ end
11
+
12
+ def all( params = {} )
13
+ prepare_request( 'get', @resource,params)
14
+ end
15
+
16
+ def get( id )
17
+ prepare_request( 'get', "#{@resource}/#{id}")
18
+ end
19
+
20
+ def create(params)
21
+ prepare_request( 'post', @resource, params)
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,18 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class MessageTitle < BaseRequest
6
+
7
+ def initialize(*args)
8
+ super(*args)
9
+ @resource = 'message-titles'
10
+ end
11
+
12
+ def all( params = {} )
13
+ prepare_request( 'get', @resource,params)
14
+ end
15
+
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,40 @@
1
+ require 'bulutfon_sdk/rest/base_request'
2
+
3
+ module BulutfonSDK
4
+ module REST
5
+ class OutgoingFax < BaseRequest
6
+
7
+ include BulutfonSDK::Util
8
+
9
+ def initialize(*args)
10
+ super(*args)
11
+ @resource = 'outgoing-faxes'
12
+ end
13
+
14
+ def all( params = {} )
15
+ prepare_request( 'get', @resource, params)
16
+ end
17
+
18
+ def get( id )
19
+ prepare_request( 'get', "#{@resource}/#{id}")
20
+ end
21
+
22
+ def create(params)
23
+ prepare_atachment(params)
24
+ prepare_request( 'post', @resource, params)
25
+ end
26
+
27
+ private
28
+
29
+ def prepare_atachment(params)
30
+ file = params[:attachment]
31
+ basename = File.basename file
32
+ type = file_content_type file
33
+ content = File.read(file)
34
+ base_64_data = Base64.strict_encode64(content)
35
+ params[:attachment] = "data:#{type};name:#{basename};base64:#{base_64_data}"
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,29 @@
1
+ module BulutfonSDK
2
+ module Util
3
+ class ClientConfig
4
+ DEFAULTS = {
5
+ host: 'https://api.bulutfon.com',
6
+ port: 80,
7
+ use_ssl: true,
8
+ ssl_verify_peer: false,
9
+ ssl_ca_file: File.dirname(__FILE__) + '/../../../conf/cacert.pem',
10
+ timeout: 30,
11
+ proxy_addr: nil,
12
+ proxy_port: nil,
13
+ proxy_user: nil,
14
+ proxy_pass: nil,
15
+ retry_limit: 2
16
+ }
17
+
18
+ DEFAULTS.each_key do |attribute|
19
+ attr_accessor attribute
20
+ end
21
+
22
+ def initialize(opts={})
23
+ DEFAULTS.each do |attribute, value|
24
+ send("#{attribute}=".to_sym, opts.fetch(attribute, value))
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,18 @@
1
+ module BulutfonSDK
2
+ module Util
3
+ def file_content_type(path)
4
+ if File.exist? path
5
+ stdin,stdout,stderr = Open3.popen3(%{file --mime -b #{path}})
6
+
7
+ file_err = stderr.gets
8
+ file_out = stdout.gets
9
+
10
+ raise BulutfonSDK::REST::SDKError.new "The 'file' command line binary was not found." if file_err
11
+
12
+ return file_out.split(';')[0].strip if file_err.nil? && (!file_out.nil? && !file_out.empty?)
13
+ end
14
+
15
+ raise BulutfonSDK::REST::SDKError.new 'File content type not found'
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,3 @@
1
+ module BulutfonSDK
2
+ VERSION = '1.1.0'
3
+ end
@@ -0,0 +1,29 @@
1
+ require 'net/http'
2
+ require 'net/https'
3
+ require 'multi_json'
4
+ require 'cgi'
5
+ require 'openssl'
6
+ require 'open3'
7
+ require 'mime/types'
8
+ require 'base64'
9
+
10
+ require 'bulutfon_sdk/version' unless defined?(BulutfonSDK::VERSION)
11
+ require 'bulutfon_sdk/util'
12
+ require 'bulutfon_sdk/rest/bulutfon'
13
+ require 'bulutfon_sdk/rest/message'
14
+ require 'bulutfon_sdk/rest/did'
15
+ require 'bulutfon_sdk/rest/group'
16
+ require 'bulutfon_sdk/rest/cdr'
17
+ require 'bulutfon_sdk/rest/announcement'
18
+ require 'bulutfon_sdk/rest/automatic_call'
19
+ require 'bulutfon_sdk/rest/call_record'
20
+ require 'bulutfon_sdk/rest/incoming_fax'
21
+ require 'bulutfon_sdk/rest/outgoing_fax'
22
+ require 'bulutfon_sdk/rest/extension'
23
+ require 'bulutfon_sdk/rest/message_title'
24
+ require 'bulutfon_sdk/util/client_config'
25
+ require 'bulutfon_sdk/rest/errors'
26
+
27
+ module BulutfonSDK
28
+ # Your code goes here...
29
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bulutfon_sdk
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Ismail Akbudak
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-12-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: multi_json
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.11.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.11'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.11.0
33
+ - !ruby/object:Gem::Dependency
34
+ name: mime-types
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '1.10'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '1.10'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rake
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '10.0'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '10.0'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rspec
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ description: Bulutfon API SDK for ruby & ruby on rails.
90
+ email:
91
+ - ismail.akbudak@lab2023.com
92
+ executables: []
93
+ extensions: []
94
+ extra_rdoc_files:
95
+ - README.md
96
+ - LICENSE.md
97
+ files:
98
+ - ".gitignore"
99
+ - Gemfile
100
+ - LICENSE.md
101
+ - README.md
102
+ - Rakefile
103
+ - bulutfon_sdk.gemspec
104
+ - conf/cacert.pem
105
+ - examples/examples.rb
106
+ - examples/pdf-sample.pdf
107
+ - examples/test.wav
108
+ - lib/bulutfon_sdk.rb
109
+ - lib/bulutfon_sdk/rest/announcement.rb
110
+ - lib/bulutfon_sdk/rest/automatic_call.rb
111
+ - lib/bulutfon_sdk/rest/base_request.rb
112
+ - lib/bulutfon_sdk/rest/bulutfon.rb
113
+ - lib/bulutfon_sdk/rest/call_record.rb
114
+ - lib/bulutfon_sdk/rest/cdr.rb
115
+ - lib/bulutfon_sdk/rest/did.rb
116
+ - lib/bulutfon_sdk/rest/errors.rb
117
+ - lib/bulutfon_sdk/rest/extension.rb
118
+ - lib/bulutfon_sdk/rest/group.rb
119
+ - lib/bulutfon_sdk/rest/incoming_fax.rb
120
+ - lib/bulutfon_sdk/rest/message.rb
121
+ - lib/bulutfon_sdk/rest/message_title.rb
122
+ - lib/bulutfon_sdk/rest/outgoing_fax.rb
123
+ - lib/bulutfon_sdk/util.rb
124
+ - lib/bulutfon_sdk/util/client_config.rb
125
+ - lib/bulutfon_sdk/version.rb
126
+ homepage: https://github.com/bulutfon/ruby-sdk
127
+ licenses:
128
+ - MIT
129
+ metadata: {}
130
+ post_install_message:
131
+ rdoc_options: []
132
+ require_paths:
133
+ - lib
134
+ required_ruby_version: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ version: '0'
144
+ requirements: []
145
+ rubyforge_project:
146
+ rubygems_version: 2.4.5.1
147
+ signing_key:
148
+ specification_version: 4
149
+ summary: Bulutfon Ruby SDK.
150
+ test_files: []