mblox 0.2.9 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/lib/mblox/from_xml.rb +3 -7
- data/lib/mblox/sms_receipt.rb +25 -14
- data/lib/mblox/sms_response.rb +13 -8
- data/lib/mblox/version.rb +1 -1
- data/mblox.gemspec +1 -0
- data/spec/sms_receipt_spec.rb +4 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
NDhiNjUwZDE4N2YyOTU3MGI3NWQ2MjBmYmUxODYzOTAzZjdjOGNjMA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MDc4NzYxYWE4MjhkZGJiNDE5OTZiNGUyODBhODNhMWZkZDZlOGQ4NA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OGNhNjBjYjI0NWUxMGJmZGU3ODQxZTIyMDNiNjIwNjk1NzNkNDdkNzQ3Zjc3
|
10
|
+
OTc1NWI5MDk3ZjU0OTAzZTE4YTE0YjY4YTAwZjEzOTM1YjJjZDllNWUyMDEz
|
11
|
+
NmUxMzQ2YjJmZWVhZjgyZTVlODA4YmNkMjZjY2U3ZjZiYmVjN2I=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MTNiMThhMDMzZTRkZTJlZmIyNGQ0OWVjMzIxNTNkYzJiN2Y4YWY5NzdmYTdm
|
14
|
+
MmIxNjE5NDI3NDZkYWY3MTlmMmUzODAwYzgwYzg4NTAwNTY5ZWNiNTBmODU1
|
15
|
+
ZTJhYTRjNWRiOTkzZTk1ZWY0MTFiZTFmMWIwYjRhMGE0OGMzY2U=
|
data/lib/mblox/from_xml.rb
CHANGED
@@ -1,15 +1,11 @@
|
|
1
|
-
require '
|
2
|
-
require 'active_model/serializers/xml.rb'
|
1
|
+
require 'nokogiri'
|
3
2
|
|
4
3
|
module Mblox
|
5
4
|
class MissingExpectedXmlContentError < StandardError; end
|
6
|
-
|
7
5
|
class << self
|
8
6
|
def from_xml(xml)
|
9
|
-
|
10
|
-
|
11
|
-
rescue REXML::ParseException
|
12
|
-
raise MissingExpectedXmlContentError, "'#{xml}' is not parseable as XML"
|
7
|
+
Nokogiri::XML(xml) { |config| config.nonet }.tap do |_|
|
8
|
+
raise MissingExpectedXmlContentError, "'#{xml}' is not parseable as XML" unless _.errors.empty?
|
13
9
|
end
|
14
10
|
end
|
15
11
|
end
|
data/lib/mblox/sms_receipt.rb
CHANGED
@@ -2,38 +2,49 @@ require 'mblox/from_xml'
|
|
2
2
|
|
3
3
|
module Mblox
|
4
4
|
class SmsReceipt
|
5
|
-
attr_reader :batch_id, :subscriber_number, :timestamp, :msg_reference, :status, :reason
|
5
|
+
attr_reader :batch_id, :subscriber_number, :timestamp, :msg_reference, :status, :reason, :operator
|
6
6
|
def initialize(xml)
|
7
|
-
data = Mblox.from_xml(xml)
|
7
|
+
data = Mblox.from_xml(xml).xpath '//NotificationService'
|
8
8
|
raise MissingExpectedXmlContentError, "Xml should have contained a 'NotificationService' node, but was #{xml}" if data.blank?
|
9
9
|
|
10
|
-
data = data
|
10
|
+
data = data.xpath '//NotificationList'
|
11
11
|
raise MissingExpectedXmlContentError, "Xml should have contained a 'NotificationService' -> 'NotificationList' node, but was #{xml}" if data.blank?
|
12
12
|
|
13
|
-
data = data
|
13
|
+
data = data.xpath '//Notification'
|
14
14
|
raise MissingExpectedXmlContentError, "Xml should have contained a 'NotificationService' -> 'NotificationList' -> 'Notification' node, but was #{xml}" if data.blank?
|
15
|
+
@batch_id = data.attribute('BatchID').value.to_i
|
15
16
|
|
16
|
-
|
17
|
-
|
18
|
-
data = data['Subscriber']
|
17
|
+
data = data.xpath '//Subscriber'
|
19
18
|
raise MissingExpectedXmlContentError, "Xml should have contained a 'NotificationService' -> 'NotificationList' -> 'Notification' -> 'Subscriber' node, but was #{xml}" if data.blank?
|
20
19
|
|
21
|
-
@subscriber_number = data
|
20
|
+
@subscriber_number = value_at(:SubscriberNumber, data)
|
22
21
|
@subscriber_number = @subscriber_number[1..-1] if '1' == @subscriber_number[0]
|
23
22
|
|
24
|
-
|
23
|
+
timestamp = value_at(:TimeStamp, data)
|
24
|
+
unless timestamp.blank?
|
25
25
|
@timestamp = begin
|
26
|
-
Time.strptime("#{
|
26
|
+
Time.strptime("#{timestamp}+0000", '%Y%m%d%H%M%z')
|
27
27
|
rescue ArgumentError
|
28
28
|
nil
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
@timestamp = @timestamp.to_datetime if @timestamp
|
33
|
-
|
34
|
-
@
|
35
|
-
|
36
|
-
@reason =
|
33
|
+
@msg_reference = value_at(:MsgReference, data)
|
34
|
+
@status = value_at(:Status, data)
|
35
|
+
reason = value_at(:Reason, data)
|
36
|
+
@reason = reason.blank? ? nil : reason.to_i
|
37
|
+
data = data.xpath('//Tags').xpath('//Tag')
|
38
|
+
return if data.empty?
|
39
|
+
data.each do |d|
|
40
|
+
@operator = d.child.content.to_i if "Operator" == data.attribute('Name').content
|
41
|
+
return if @operator
|
42
|
+
end
|
37
43
|
end
|
44
|
+
private
|
45
|
+
def value_at(path, data)
|
46
|
+
data = data.xpath("//#{path}")
|
47
|
+
(data.empty? || data.children.empty?) ? nil : data.first.child.content
|
48
|
+
end
|
38
49
|
end
|
39
50
|
end
|
data/lib/mblox/sms_response.rb
CHANGED
@@ -19,6 +19,11 @@ module Mblox
|
|
19
19
|
@code, @text = (code.to_i.to_s == code ? code.to_i : code), text
|
20
20
|
end
|
21
21
|
|
22
|
+
def self.from_xml(xml, xpath)
|
23
|
+
code, text = xml.xpath("//#{xpath}Code"), xml.xpath("//#{xpath}Text")
|
24
|
+
new(code.first.child.content, text.first.child.content)
|
25
|
+
end
|
26
|
+
|
22
27
|
def ok?
|
23
28
|
0 == @code
|
24
29
|
end
|
@@ -33,25 +38,25 @@ module Mblox
|
|
33
38
|
|
34
39
|
attr_reader :request, :result, :subscriber_result
|
35
40
|
def initialize(xml)
|
36
|
-
data = Mblox.from_xml(xml)
|
41
|
+
data = Mblox.from_xml(xml).xpath '//NotificationRequestResult'
|
37
42
|
|
38
43
|
raise MissingExpectedXmlContentError, "Xml should have contained a 'NotificationRequestResult' node, but was #{xml}" if data.blank?
|
39
|
-
header = data
|
44
|
+
header = data.xpath '//NotificationResultHeader'
|
40
45
|
raise MissingExpectedXmlContentError, "Xml should have contained a 'NotificationRequestResult' -> 'NotificationResultHeader' node, but was #{xml}" if header.blank?
|
41
|
-
@request = Result.
|
46
|
+
@request = Result.from_xml(header, :RequestResult)
|
42
47
|
@request = nil unless @request.valid?
|
43
48
|
|
44
|
-
result_list = data
|
49
|
+
result_list = data.xpath '//NotificationResultList'
|
45
50
|
raise MissingExpectedXmlContentError, "Xml should have contained a 'NotificationRequestResult' -> 'NotificationResultList' node, but was #{xml}" if result_list.blank?
|
46
|
-
result_list = result_list
|
51
|
+
result_list = result_list.xpath '//NotificationResult'
|
47
52
|
raise MissingExpectedXmlContentError, "Xml should have contained a 'NotificationRequestResult' -> 'NotificationResultList' -> 'NotificationResult' node, but was #{xml}" if result_list.blank?
|
48
|
-
@result = Result.
|
53
|
+
@result = Result.from_xml(result_list, :NotificationResult)
|
49
54
|
@result = nil unless @result.valid?
|
50
55
|
|
51
56
|
if @result.ok?
|
52
|
-
result_list = result_list
|
57
|
+
result_list = result_list.xpath '//SubscriberResult'
|
53
58
|
raise MissingExpectedXmlContentError, "Xml should have contained a 'NotificationRequestResult' -> 'NotificationResultList' -> 'NotificationResult' -> 'SubscriberResult' node, but was #{xml}" if result_list.blank?
|
54
|
-
@subscriber_result = Result.
|
59
|
+
@subscriber_result = Result.from_xml(result_list, :SubscriberResult)
|
55
60
|
@subscriber_result = nil unless @subscriber_result.valid?
|
56
61
|
end
|
57
62
|
end
|
data/lib/mblox/version.rb
CHANGED
data/mblox.gemspec
CHANGED
data/spec/sms_receipt_spec.rb
CHANGED
@@ -33,6 +33,9 @@ describe Mblox::SmsReceipt do
|
|
33
33
|
s.MsgReference(msg_reference)
|
34
34
|
s.Status(status)
|
35
35
|
s.Reason(reason)
|
36
|
+
s.Tags do |t|
|
37
|
+
t.Tag(10487, :Name => :Operator)
|
38
|
+
end
|
36
39
|
end
|
37
40
|
end
|
38
41
|
end
|
@@ -105,6 +108,7 @@ describe Mblox::SmsReceipt do
|
|
105
108
|
target.msg_reference.should == msg_reference
|
106
109
|
target.status.should == status
|
107
110
|
target.reason.should == reason
|
111
|
+
target.operator.should == 10487
|
108
112
|
end
|
109
113
|
|
110
114
|
it "should raise error when missing root node" do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mblox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Isaac Betesh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -108,6 +108,20 @@ dependencies:
|
|
108
108
|
- - ! '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: nokogiri
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.5.0
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ! '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 1.5.0
|
111
125
|
description: Send SMS messages
|
112
126
|
email:
|
113
127
|
- iybetesh@gmail.com
|