bulutfon_sdk 1.1.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 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: []