bluevia 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.
- data/LICENSE.LGPLv3 +165 -0
- data/License_Bluevia.txt +22 -0
- data/README +172 -0
- data/lib/bluevia.rb +13 -0
- data/lib/bluevia/ad_response.rb +35 -0
- data/lib/bluevia/advertising.rb +108 -0
- data/lib/bluevia/base_client.rb +401 -0
- data/lib/bluevia/bluevia_client.rb +119 -0
- data/lib/bluevia/bluevia_logger.rb +30 -0
- data/lib/bluevia/directory.rb +81 -0
- data/lib/bluevia/errors.rb +13 -0
- data/lib/bluevia/errors/client_error.rb +6 -0
- data/lib/bluevia/errors/not_found_error.rb +5 -0
- data/lib/bluevia/errors/server_error.rb +6 -0
- data/lib/bluevia/ext/hash.rb +64 -0
- data/lib/bluevia/messaging.rb +96 -0
- data/lib/bluevia/oauth.rb +117 -0
- data/lib/bluevia/response.rb +48 -0
- data/lib/bluevia/schemas.rb +10 -0
- data/lib/bluevia/schemas/common_types.rb +166 -0
- data/lib/bluevia/schemas/directory_types.rb +491 -0
- data/lib/bluevia/schemas/sms_types.rb +256 -0
- data/lib/bluevia/sms.rb +91 -0
- data/lib/bluevia/utils.rb +110 -0
- data/lib/multipartable.rb +15 -0
- data/test/test_advertising.rb +67 -0
- data/test/test_config.rb +77 -0
- data/test/test_directory.rb +124 -0
- data/test/test_oauth.rb +72 -0
- data/test/test_sms.rb +112 -0
- data/test/test_sms_mo.rb +78 -0
- metadata +137 -0
@@ -0,0 +1,256 @@
|
|
1
|
+
require 'xsd/qname'
|
2
|
+
|
3
|
+
module Schemas; module Sms_types
|
4
|
+
|
5
|
+
|
6
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/sms/v1/}SMSTextType
|
7
|
+
# address - Schemas::Sms_types::UserIdType
|
8
|
+
# message - SOAP::SOAPString
|
9
|
+
# receiptRequest - Schemas::Sms_types::SimpleReferenceType
|
10
|
+
# originAddress - Schemas::Sms_types::UserIdType
|
11
|
+
# encode - SOAP::SOAPString
|
12
|
+
# sourceport - SOAP::SOAPInt
|
13
|
+
# destinationport - SOAP::SOAPInt
|
14
|
+
# esm_class - SOAP::SOAPInt
|
15
|
+
# data_coding - SOAP::SOAPInt
|
16
|
+
class SMSTextType
|
17
|
+
attr_accessor :address
|
18
|
+
attr_accessor :message
|
19
|
+
attr_accessor :receiptRequest
|
20
|
+
attr_accessor :originAddress
|
21
|
+
attr_accessor :encode
|
22
|
+
attr_accessor :sourceport
|
23
|
+
attr_accessor :destinationport
|
24
|
+
attr_accessor :esm_class
|
25
|
+
attr_accessor :data_coding
|
26
|
+
|
27
|
+
def initialize(address = [], message = nil, receiptRequest = nil, originAddress = nil, encode = nil, sourceport = nil, destinationport = nil, esm_class = nil, data_coding = nil)
|
28
|
+
@address = address
|
29
|
+
@message = message
|
30
|
+
@receiptRequest = receiptRequest
|
31
|
+
@originAddress = originAddress
|
32
|
+
@encode = encode
|
33
|
+
@sourceport = sourceport
|
34
|
+
@destinationport = destinationport
|
35
|
+
@esm_class = esm_class
|
36
|
+
@data_coding = data_coding
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/sms/v1/}SMSDeliveryStatusType
|
41
|
+
class SMSDeliveryStatusType < ::Array
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/sms/v1/}ReceivedSMSType
|
46
|
+
class ReceivedSMSType < ::Array
|
47
|
+
end
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/sms/v1/}DeliveryInformationType
|
52
|
+
# address - Schemas::Sms_types::UserIdType
|
53
|
+
# deliveryStatus - (any)
|
54
|
+
# description - SOAP::SOAPString
|
55
|
+
class DeliveryInformationType
|
56
|
+
attr_accessor :address
|
57
|
+
attr_accessor :deliveryStatus
|
58
|
+
attr_accessor :description
|
59
|
+
|
60
|
+
def initialize(address = nil, deliveryStatus = nil, description = nil)
|
61
|
+
@address = address
|
62
|
+
@deliveryStatus = deliveryStatus
|
63
|
+
@description = description
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/sms/v1/}SMSMessageType
|
68
|
+
# message - SOAP::SOAPString
|
69
|
+
# originAddress - Schemas::Sms_types::UserIdType
|
70
|
+
# destinationAddress - Schemas::Sms_types::UserIdType
|
71
|
+
# dateTime - SOAP::SOAPDateTime
|
72
|
+
class SMSMessageType
|
73
|
+
attr_accessor :message
|
74
|
+
attr_accessor :originAddress
|
75
|
+
attr_accessor :destinationAddress
|
76
|
+
attr_accessor :dateTime
|
77
|
+
|
78
|
+
def initialize(message = nil, originAddress = nil, destinationAddress = nil, dateTime = nil)
|
79
|
+
@message = message
|
80
|
+
@originAddress = originAddress
|
81
|
+
@destinationAddress = destinationAddress
|
82
|
+
@dateTime = dateTime
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/common/v1}AddressType
|
87
|
+
# street - SOAP::SOAPString
|
88
|
+
# streetNumber - SOAP::SOAPUnsignedInt
|
89
|
+
# locality - SOAP::SOAPString
|
90
|
+
# region - SOAP::SOAPString
|
91
|
+
# postalCode - SOAP::SOAPUnsignedInt
|
92
|
+
# country - SOAP::SOAPString
|
93
|
+
# ext - SOAP::SOAPString
|
94
|
+
class AddressType
|
95
|
+
attr_accessor :street
|
96
|
+
attr_accessor :streetNumber
|
97
|
+
attr_accessor :locality
|
98
|
+
attr_accessor :region
|
99
|
+
attr_accessor :postalCode
|
100
|
+
attr_accessor :country
|
101
|
+
attr_accessor :ext
|
102
|
+
|
103
|
+
def initialize(street = nil, streetNumber = nil, locality = nil, region = nil, postalCode = nil, country = nil, ext = nil)
|
104
|
+
@street = street
|
105
|
+
@streetNumber = streetNumber
|
106
|
+
@locality = locality
|
107
|
+
@region = region
|
108
|
+
@postalCode = postalCode
|
109
|
+
@country = country
|
110
|
+
@ext = ext
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/common/v1}UserIdType
|
115
|
+
# phoneNumber - (any)
|
116
|
+
# anyUri - SOAP::SOAPAnyURI
|
117
|
+
# ipAddress - Schemas::Sms_types::IpAddressType
|
118
|
+
# m_alias - (any)
|
119
|
+
# otherId - Schemas::Sms_types::OtherIdType
|
120
|
+
class UserIdType
|
121
|
+
attr_accessor :phoneNumber
|
122
|
+
attr_accessor :anyUri
|
123
|
+
attr_accessor :ipAddress
|
124
|
+
attr_accessor :otherId
|
125
|
+
|
126
|
+
def m_alias
|
127
|
+
@v_alias
|
128
|
+
end
|
129
|
+
|
130
|
+
def m_alias=(value)
|
131
|
+
@v_alias = value
|
132
|
+
end
|
133
|
+
|
134
|
+
def initialize(phoneNumber = nil, anyUri = nil, ipAddress = nil, v_alias = nil, otherId = nil)
|
135
|
+
@phoneNumber = phoneNumber
|
136
|
+
@anyUri = anyUri
|
137
|
+
@ipAddress = ipAddress
|
138
|
+
@v_alias = v_alias
|
139
|
+
@otherId = otherId
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
143
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/common/v1}IpAddressType
|
144
|
+
# ipv4 - (any)
|
145
|
+
# ipv6 - (any)
|
146
|
+
class IpAddressType
|
147
|
+
attr_accessor :ipv4
|
148
|
+
attr_accessor :ipv6
|
149
|
+
|
150
|
+
def initialize(ipv4 = nil, ipv6 = nil)
|
151
|
+
@ipv4 = ipv4
|
152
|
+
@ipv6 = ipv6
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/common/v1}OtherIdType
|
157
|
+
# type - SOAP::SOAPString
|
158
|
+
# value - SOAP::SOAPString
|
159
|
+
class OtherIdType
|
160
|
+
attr_accessor :type
|
161
|
+
attr_accessor :value
|
162
|
+
|
163
|
+
def initialize(type = nil, value = nil)
|
164
|
+
@type = type
|
165
|
+
@value = value
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/common/v1}ClientExceptionType
|
170
|
+
# exceptionCategory - SOAP::SOAPString
|
171
|
+
# exceptionId - SOAP::SOAPInt
|
172
|
+
# text - SOAP::SOAPString
|
173
|
+
# variables - SOAP::SOAPString
|
174
|
+
class ClientExceptionType
|
175
|
+
attr_accessor :exceptionCategory
|
176
|
+
attr_accessor :exceptionId
|
177
|
+
attr_accessor :text
|
178
|
+
attr_accessor :variables
|
179
|
+
|
180
|
+
def initialize(exceptionCategory = nil, exceptionId = nil, text = nil, variables = [])
|
181
|
+
@exceptionCategory = exceptionCategory
|
182
|
+
@exceptionId = exceptionId
|
183
|
+
@text = text
|
184
|
+
@variables = variables
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/common/v1}ServerExceptionType
|
189
|
+
# exceptionCategory - SOAP::SOAPString
|
190
|
+
# exceptionId - SOAP::SOAPInt
|
191
|
+
# text - SOAP::SOAPString
|
192
|
+
# variables - SOAP::SOAPString
|
193
|
+
class ServerExceptionType
|
194
|
+
attr_accessor :exceptionCategory
|
195
|
+
attr_accessor :exceptionId
|
196
|
+
attr_accessor :text
|
197
|
+
attr_accessor :variables
|
198
|
+
|
199
|
+
def initialize(exceptionCategory = nil, exceptionId = nil, text = nil, variables = [])
|
200
|
+
@exceptionCategory = exceptionCategory
|
201
|
+
@exceptionId = exceptionId
|
202
|
+
@text = text
|
203
|
+
@variables = variables
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/common/v1}SimpleReferenceType
|
208
|
+
# endpoint - SOAP::SOAPAnyURI
|
209
|
+
# correlator - SOAP::SOAPString
|
210
|
+
class SimpleReferenceType
|
211
|
+
attr_accessor :endpoint
|
212
|
+
attr_accessor :correlator
|
213
|
+
|
214
|
+
def initialize(endpoint = nil, correlator = nil)
|
215
|
+
@endpoint = endpoint
|
216
|
+
@correlator = correlator
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/common/v1}ExtensionType
|
221
|
+
class ExtensionType
|
222
|
+
attr_reader :__xmlele_any
|
223
|
+
|
224
|
+
def set_any(elements)
|
225
|
+
@__xmlele_any = elements
|
226
|
+
end
|
227
|
+
|
228
|
+
def initialize
|
229
|
+
@__xmlele_any = nil
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/sms/v1/}DeliveryStatusType
|
234
|
+
class DeliveryStatusType < ::String
|
235
|
+
DeliveredToNetwork = DeliveryStatusType.new("DeliveredToNetwork")
|
236
|
+
DeliveredToTerminal = DeliveryStatusType.new("DeliveredToTerminal")
|
237
|
+
DeliveryImpossible = DeliveryStatusType.new("DeliveryImpossible")
|
238
|
+
DeliveryNotificationNotSupported = DeliveryStatusType.new("DeliveryNotificationNotSupported")
|
239
|
+
DeliveryUncertain = DeliveryStatusType.new("DeliveryUncertain")
|
240
|
+
MessageWaiting = DeliveryStatusType.new("MessageWaiting")
|
241
|
+
end
|
242
|
+
|
243
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/common/v1}FlagType
|
244
|
+
class FlagType < ::String
|
245
|
+
No = FlagType.new("no")
|
246
|
+
Yes = FlagType.new("yes")
|
247
|
+
end
|
248
|
+
|
249
|
+
# {http://www.telefonica.com/schemas/UNICA/REST/common/v1}GenderType
|
250
|
+
class GenderType < ::String
|
251
|
+
Female = GenderType.new("female")
|
252
|
+
Male = GenderType.new("male")
|
253
|
+
end
|
254
|
+
|
255
|
+
|
256
|
+
end; end
|
data/lib/bluevia/sms.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
#
|
2
|
+
# BlueVia is a global iniciative of Telefonica delivered by Movistar and O2.
|
3
|
+
# Please, check out www.bluevia.com and if you need more information
|
4
|
+
# contact us at mailto:support@bluevia.com
|
5
|
+
|
6
|
+
require 'bluevia/messaging'
|
7
|
+
require 'bluevia/schemas/sms_types'
|
8
|
+
|
9
|
+
module Bluevia
|
10
|
+
#
|
11
|
+
# This class is in charge of access Bluevia SMS API
|
12
|
+
#
|
13
|
+
|
14
|
+
class Sms < BaseClient
|
15
|
+
include Messaging
|
16
|
+
|
17
|
+
include Schemas::Sms_types
|
18
|
+
|
19
|
+
# Basepath for SMS API
|
20
|
+
BASEPATH_API = "/SMS"
|
21
|
+
|
22
|
+
def initialize(params = nil)
|
23
|
+
super(params)
|
24
|
+
#super.extend(Schemas::Sms_types)
|
25
|
+
end
|
26
|
+
|
27
|
+
#
|
28
|
+
# This method sends a SMS to a list of destination numbers.
|
29
|
+
# [*dest_number*] array, fixnum or string with the destination numbers
|
30
|
+
# [*origin*] originator number the SMS will be send in name of. Should be a
|
31
|
+
# valid access_token.
|
32
|
+
# [*text*] short message text
|
33
|
+
# returns the location where the delivery status can be checked
|
34
|
+
#
|
35
|
+
def send_sms (dest_number, origin, text)
|
36
|
+
Utils.check_attribute dest_number, "Destination number cannot be null"
|
37
|
+
Utils.check_attribute text, "SMS text cannot be null"
|
38
|
+
Utils.check_attribute origin, "Origin number cannot be null"
|
39
|
+
|
40
|
+
# Set destination array
|
41
|
+
@dest_phones = Array.new
|
42
|
+
if (dest_number.instance_of?(Array))
|
43
|
+
dest_number.each { |i|
|
44
|
+
@dest_phones << UserIdType.new(i, nil, nil, nil, nil)
|
45
|
+
}
|
46
|
+
else
|
47
|
+
@dest_phones << UserIdType.new(dest_number, nil, nil, nil, nil)
|
48
|
+
end
|
49
|
+
|
50
|
+
@orig = UserIdType.new(nil, nil, nil, origin, nil)
|
51
|
+
|
52
|
+
# Create Message and convert to JSON
|
53
|
+
@msg = SMSTextType.new(@dest_phones, text, nil, @orig, nil, nil, nil, nil, nil)
|
54
|
+
message = Utils.object_to_json(@msg)
|
55
|
+
|
56
|
+
logger.debug "SMS Send this message:"
|
57
|
+
logger.debug message << "\n"
|
58
|
+
|
59
|
+
POST("#{get_basepath}/outbound/requests", message.to_s, nil, nil, "location")
|
60
|
+
end
|
61
|
+
|
62
|
+
#
|
63
|
+
# This method is used to retrieve MO messages that belongs to a specific registration ID
|
64
|
+
# [*registration_id*] MO Registration Identifier Mandatory
|
65
|
+
# returns a collection of messages
|
66
|
+
#
|
67
|
+
def get_received_sms(registration_id)
|
68
|
+
response = get_received_message(registration_id)
|
69
|
+
key = "receivedSMS"
|
70
|
+
|
71
|
+
# Fetch ["receivedSMS"]["receivedSMS"]
|
72
|
+
unless response.nil?
|
73
|
+
if response.respond_to?(:has_key?) && response.has_key?(key)
|
74
|
+
response = response[key]
|
75
|
+
if response.respond_to?(:has_key?) && response.has_key?(key)
|
76
|
+
return response[key]
|
77
|
+
else
|
78
|
+
return Hash.new
|
79
|
+
end
|
80
|
+
else
|
81
|
+
return Hash.new
|
82
|
+
end
|
83
|
+
else
|
84
|
+
return Hash.new
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,110 @@
|
|
1
|
+
#
|
2
|
+
# BlueVia is a global iniciative of Telefonica delivered by Movistar and O2.
|
3
|
+
# Please, check out www.bluevia.com and if you need more information
|
4
|
+
# contact us at mailto:support@bluevia.com
|
5
|
+
|
6
|
+
require 'net/http'
|
7
|
+
require 'multipartable'
|
8
|
+
require 'bluevia/errors/client_error'
|
9
|
+
|
10
|
+
module Bluevia
|
11
|
+
#
|
12
|
+
# Helper to enable internal features
|
13
|
+
#
|
14
|
+
|
15
|
+
module Utils
|
16
|
+
|
17
|
+
class Multipart < Net::HTTP::Post
|
18
|
+
include Multipartable
|
19
|
+
|
20
|
+
def set_content_type(type, params = {})
|
21
|
+
|
22
|
+
end
|
23
|
+
|
24
|
+
def content_length=(len)
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def Utils.get_file_mime_type(file)
|
30
|
+
unless file.nil?
|
31
|
+
Magic.guess_file_mime_type(file)
|
32
|
+
else
|
33
|
+
nil
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# Helper to parse an objet to an equivalent JSON format
|
39
|
+
# used to serialize body data
|
40
|
+
#
|
41
|
+
def Utils.object_to_json(object)
|
42
|
+
name = object.class.to_s
|
43
|
+
name = name[name.rindex(":")+1..name.size].sub(/Type$/,"").sub(/^SMS/, "sms")
|
44
|
+
name = name[0..0].to_s.downcase << name[1..name.size]
|
45
|
+
result = Hash.new
|
46
|
+
result[name] = _object_to_json(object)
|
47
|
+
return result.to_json
|
48
|
+
|
49
|
+
#return _object_to_json(object).to_json
|
50
|
+
end
|
51
|
+
|
52
|
+
#
|
53
|
+
# Check if an attribute is not null
|
54
|
+
# Raise an exception in case of param.nil?
|
55
|
+
#
|
56
|
+
def Utils.check_attribute(attribute, message)
|
57
|
+
if attribute.nil?
|
58
|
+
raise ClientError, message
|
59
|
+
elsif attribute.instance_of?(String)
|
60
|
+
if attribute.empty?
|
61
|
+
raise ClientError, message
|
62
|
+
end
|
63
|
+
else
|
64
|
+
if attribute.respond_to?(:size)
|
65
|
+
if attribute.size == 0
|
66
|
+
raise ClientError, message
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
|
73
|
+
private
|
74
|
+
|
75
|
+
def Utils._object_to_json(object)
|
76
|
+
result = Hash.new
|
77
|
+
#result_aux = []
|
78
|
+
object.instance_variables.each do |column|
|
79
|
+
aux = object.instance_variable_get(column)
|
80
|
+
unless aux.nil?
|
81
|
+
if aux.instance_of?(String) or aux.kind_of?(String)
|
82
|
+
# It's required to erase any '_' character because
|
83
|
+
# soap4r has included it (not idea about the reason)
|
84
|
+
result[get_column_value(column)] = aux.to_s
|
85
|
+
else
|
86
|
+
if aux.instance_of?(Array)
|
87
|
+
result_aux = Array.new
|
88
|
+
aux.each do |elem|
|
89
|
+
result_aux << _object_to_json(elem)
|
90
|
+
end
|
91
|
+
else
|
92
|
+
result_aux = _object_to_json(aux)
|
93
|
+
end
|
94
|
+
result[get_column_value(column)] = result_aux
|
95
|
+
#result_aux =[]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
return result
|
100
|
+
end
|
101
|
+
|
102
|
+
def Utils.get_column_value(column)
|
103
|
+
column = column.to_s.sub(/@/,'')
|
104
|
+
unless column.index('_').nil?
|
105
|
+
column = column.split('_')[1]
|
106
|
+
end
|
107
|
+
column
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|