esendex 0.3.2 → 0.4.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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZjA2MmZkN2M3ODUzNDEwMGJlOGFlMDE1Njc2ZjdiZjhiMjBjMTZhYQ==
5
- data.tar.gz: !binary |-
6
- YmY1NTZlMTY2ZjY2MzA0ZmY4NTM4NzI3MTk2YmJlMzNlNTVlYWI1Yg==
7
- !binary "U0hBNTEy":
8
- metadata.gz: !binary |-
9
- M2I2ZDkyODUwMDY3NWRkNDhhYjUwOTMzZGI4OThiNzk5MWY4Njk4MzgwYTRj
10
- OGRiYTkzZjg5Y2Y5MDgzNDAxOWI1OTlkNGNhMmQ1NGFkZWFmZGM4MmFjZDJl
11
- NTkwZGQ4MWY4MjJiOTViNTE3Yjc1YTRiMDdiYzY0MjkzNjhjYWU=
12
- data.tar.gz: !binary |-
13
- MjNlYjFjZTY0NzdhNjhjNDgyYTBhM2QzNmFiNjM5MTM2NDIyNmU0NWY4N2Ji
14
- NjI3NDRiYWMxZWRmNGRkNWYwMDg2ZDU5YTBmMGNkN2JmMGI4YzIyMWNmMGVh
15
- Yzk0NzViZjE0YTFiMDRlOTI0MjgxMmE0NjRmMzZhMGYxNzIzZTA=
2
+ SHA1:
3
+ metadata.gz: f9cb035158a9964f5fb7f6bb2719915755e0b6e6
4
+ data.tar.gz: dd8655c31f2d0712ed387d596a714ad6901e5b3c
5
+ SHA512:
6
+ metadata.gz: 30b5201c1c965b9ae62a6dc148ffc42c9d14983a76ee635a42378279bb4e3d77984eb15d35c804316ba26e23b7dbd1407165af3152f5b7ca34627b2a26e7964b
7
+ data.tar.gz: db9c603a303f20819bbfa00e0dbe6c453f53761aad3a76319289881a6897e01e9102a408f307f764652560cb71a8e4b3e7dad8af4d4120cb0993104ac9c35ee2
@@ -5,6 +5,7 @@ module Esendex
5
5
  require_relative 'esendex/hash_serialisation'
6
6
 
7
7
  require_relative 'esendex/account'
8
+ require_relative 'esendex/dispatcher_result'
8
9
  require_relative 'esendex/inbound_message'
9
10
  require_relative 'esendex/message'
10
11
  require_relative 'esendex/message_batch_submission'
@@ -19,7 +20,6 @@ module Esendex
19
20
 
20
21
  API_NAMESPACE = 'http://api.esendex.com/ns/'
21
22
  API_HOST = 'https://api.esendex.com'
22
- API_VERSION = 'v1.0'
23
23
 
24
24
  # Public - used to configure the gem prior to use
25
25
  #
@@ -42,7 +42,7 @@ module Esendex
42
42
 
43
43
  # behaviour config
44
44
  attr_accessor :suppress_error_backtrace
45
-
45
+
46
46
  def account_reference
47
47
  @account_reference ||= ENV['ESENDEX_ACCOUNT']
48
48
  end
@@ -2,6 +2,8 @@ require 'nokogiri'
2
2
 
3
3
  module Esendex
4
4
  class Account
5
+ DEFAULT_DATE_OFFSET = 90
6
+
5
7
  attr_accessor :reference
6
8
 
7
9
  def initialize(account_reference = Esendex.account_reference)
@@ -15,24 +17,28 @@ module Esendex
15
17
  def messages_remaining
16
18
  response = api_connection.get "/v1.0/accounts"
17
19
  doc = Nokogiri::XML(response.body)
18
- node = doc.at_xpath("//api:account[api:reference='#{@reference}']/api:messagesremaining", 'api' => Esendex::API_NAMESPACE)
19
- raise AccountReferenceError.new() if node.nil?
20
- node.content.to_i
20
+ node = doc.at_xpath("//api:account[api:reference='#{@reference}']/api:messagesremaining", 'api' => Esendex::API_NAMESPACE)
21
+ raise AccountReferenceError.new if node.nil?
22
+ node.content.to_i
21
23
  end
22
24
 
23
25
  def send_message(args={})
24
26
  raise ArgumentError.new(":to required") unless args[:to]
25
27
  raise ArgumentError.new(":body required") unless args[:body]
26
28
 
27
- send_messages([Message.new(args[:to], args[:body], args[:from])])
29
+ send_messages [Message.new(args[:to], args[:body], args[:from])]
28
30
  end
29
31
 
30
32
  def send_messages(messages)
31
33
  batch_submission = MessageBatchSubmission.new(@reference, messages)
32
- response = api_connection.post "/v1.0/messagedispatcher", batch_submission.to_s
33
- doc = Nokogiri::XML(response.body)
34
- doc.at_xpath('//api:messageheaders', 'api' => Esendex::API_NAMESPACE)['batchid']
34
+ response = api_connection.post("/v1.0/messagedispatcher", batch_submission.to_s)
35
+ DispatcherResult.from_xml response.body
35
36
  end
36
37
 
38
+ def sent_messages(args={})
39
+ SentMessageClient
40
+ .new(api_connection)
41
+ .get_messages(args.merge(account_reference: reference))
42
+ end
37
43
  end
38
44
  end
@@ -1,28 +1,29 @@
1
1
  require 'nestful'
2
2
 
3
- class ApiConnection
3
+ module Esendex
4
+ class ApiConnection
4
5
 
5
- def initialize
6
- @connection = Nestful::Connection.new(Esendex::API_HOST)
7
- @connection.user = Esendex.username
8
- @connection.password = Esendex.password
9
- @connection.auth_type = :basic
10
- end
6
+ def initialize
7
+ @connection = Nestful::Connection.new(Esendex::API_HOST)
8
+ @connection.user = Esendex.username
9
+ @connection.password = Esendex.password
10
+ @connection.auth_type = :basic
11
+ end
11
12
 
12
- def default_headers
13
- { 'User-Agent' => Esendex.user_agent }
14
- end
13
+ def default_headers
14
+ { 'User-Agent' => Esendex.user_agent }
15
+ end
15
16
 
16
- def get(url)
17
- @connection.get url, default_headers
18
- rescue => e
19
- raise Esendex::ApiErrorFactory.new.get_api_error(e)
20
- end
17
+ def get(url)
18
+ @connection.get url, default_headers
19
+ rescue => e
20
+ raise Esendex::ApiErrorFactory.new.get_api_error(e)
21
+ end
21
22
 
22
- def post(url, body)
23
- @connection.post url, body, default_headers
24
- rescue => e
25
- raise Esendex::ApiErrorFactory.new.get_api_error(e)
23
+ def post(url, body)
24
+ @connection.post url, body, default_headers
25
+ rescue => e
26
+ raise Esendex::ApiErrorFactory.new.get_api_error(e)
27
+ end
26
28
  end
27
-
28
- end
29
+ end
@@ -0,0 +1,25 @@
1
+ require 'nokogiri'
2
+
3
+ module Esendex
4
+ class DispatcherResult
5
+ attr_reader :batch_id, :messages
6
+
7
+ def initialize(batch_id, messages)
8
+ @batch_id = batch_id
9
+ @messages = messages
10
+ end
11
+
12
+ def self.from_xml(source)
13
+ doc = Nokogiri::XML source
14
+ batch_id = doc.at_xpath('//api:messageheaders', 'api' => Esendex::API_NAMESPACE)['batchid']
15
+ messages = doc.xpath('//api:messageheader', 'api' => Esendex::API_NAMESPACE).map do |header|
16
+ { id: header['id'], uri: header['uri'] }
17
+ end
18
+ DispatcherResult.new batch_id, messages
19
+ end
20
+
21
+ def to_s
22
+ batch_id
23
+ end
24
+ end
25
+ end
@@ -17,9 +17,11 @@ module Esendex
17
17
  attr_accessor :account_reference, :messages, :send_at
18
18
 
19
19
  def initialize(account_reference, messages)
20
+ raise AccountReferenceError unless account_reference
21
+ raise StandardError, "Need at least one message" unless messages.kind_of?(Array) && !messages.empty?
22
+
20
23
  @account_reference = account_reference
21
24
  @messages = messages
22
- @send_at = send_at
23
25
  end
24
26
 
25
27
  def xml_node
@@ -29,10 +31,10 @@ module Esendex
29
31
  account_reference.content = self.account_reference
30
32
  doc.root.add_child(account_reference)
31
33
 
32
- if self.send_at
33
- send_at = Nokogiri::XML::Node.new 'sendat', doc
34
- send_at.content = self.send_at.strftime("%Y-%m-%dT%H:%M:%S")
35
- doc.root.add_child(send_at)
34
+ if send_at
35
+ send_at_node = Nokogiri::XML::Node.new 'sendat', doc
36
+ send_at_node.content = send_at.strftime("%Y-%m-%dT%H:%M:%S")
37
+ doc.root.add_child(send_at_node)
36
38
  end
37
39
 
38
40
  @messages.each do |message|
@@ -43,7 +45,7 @@ module Esendex
43
45
  end
44
46
 
45
47
  def to_s
46
- self.xml_node.to_s
48
+ xml_node.to_s
47
49
  end
48
50
  end
49
51
  end
@@ -1,3 +1,3 @@
1
1
  module Esendex
2
- VERSION = "0.3.2"
2
+ VERSION = "0.4.0"
3
3
  end
data/readme.md CHANGED
@@ -33,11 +33,11 @@ You can also specify these using the environment variables `ESENDEX_USERNAME`, `
33
33
  ### Sending Messages
34
34
 
35
35
  First instantiate an Account with the reference. You can omit the reference if you've already configured one to use in the *Esendex.configure* step.
36
- Then, call the send method on the account object with a hash describing the message. The return value is a *batch_id* you can use to obtain the status of the messages you have sent.
36
+ Then, call the send method on the account object with a hash describing the message. The return value is a *DispatcherResult* which has the *batch_id* you can use to obtain the status of the *messages* you have sent.
37
37
 
38
38
  ```ruby
39
39
  account = Account.new
40
- batch_id = account.send_message( to: "07777111222", body: "Saying hello to the world with the help of Esendex")
40
+ result = account.send_message( to: "07777111222", body: "Saying hello to the world with the help of Esendex")
41
41
  ```
42
42
  You can specify a different account to the default by passing the reference in as an initialization argument
43
43
 
@@ -48,7 +48,17 @@ account = Account.new('EX23847')
48
48
  Multiple messages are sent by passing an array of `Messages` to the `send_messages` method
49
49
 
50
50
  ```ruby
51
- batch_id = account.send_messages([Message.new("07777111222", "Hello"), Message.new("07777111333", "Hi")])
51
+ result = account.send_messages([Message.new("07777111222", "Hello"), Message.new("07777111333", "Hi")])
52
+ ```
53
+
54
+ Sent messages can be retrieved by calling the `sent_messages` method. The return value is a *SentMessagesResult*
55
+
56
+ ```ruby
57
+ result = account.sent_messages
58
+ puts result
59
+ result.messages.each do |message|
60
+ puts message
61
+ end
52
62
  ```
53
63
 
54
64
  ### Testing Configuration
@@ -86,7 +96,7 @@ Classes are provided in the gem for deserialising the notifications: `MessageDel
86
96
  message = InboundMessage.from_xml request.body
87
97
  ```
88
98
 
89
- ### Rails 3
99
+ ### Rails 3 / Rails 4
90
100
 
91
101
  In order to simplify receipt of push notifications for Rails 3 users, the gem ships with mountable Rails controllers to handle the receipt of these notifications.
92
102
 
@@ -38,34 +38,71 @@ describe Account do
38
38
  end
39
39
 
40
40
  describe "#messages_remaining" do
41
-
42
41
  subject { account.messages_remaining }
43
42
 
44
43
  it "should get the account resource" do
45
44
  api_connection.should_receive(:get).with("/v1.0/accounts")
46
45
  subject
47
46
  end
47
+
48
48
  it "should get the messages remaining from the document" do
49
49
  subject.should eq(messages_remaining)
50
50
  end
51
+
52
+ context "with invalid reference" do
53
+ before(:each) do
54
+ account.reference = "invalid"
55
+ end
56
+
57
+ it "should raise AccountReferenceError" do
58
+ expect { account.messages_remaining }.to raise_error(AccountReferenceError)
59
+ end
60
+ end
51
61
  end
52
-
53
- describe "#messages_remaining_invalid_reference" do
62
+
63
+ describe "#send_message" do
64
+ let(:batch_id) { random_string }
65
+ let(:send_response_xml) {
66
+ "<?xml version=\"1.0\" encoding=\"utf-8\"?>
67
+ <messageheaders batchid=\"#{batch_id}\" xmlns=\"http://api.esendex.com/ns/\">
68
+ <messageheader\ uri=\"http://api.esendex.com/v1.0/MessageHeaders/00000000-0000-0000-0000-000000000001\" id=\"00000000-0000-0000-0000-000000000001\" />
69
+ </messageheaders>"
70
+ }
71
+
54
72
  before(:each) do
55
- account.reference = "invalid"
56
- end
57
-
58
- it "should raise AccountReferenceError" do
59
- expect { account.messages_remaining }.to raise_error(AccountReferenceError)
73
+ api_connection.stub(:post) { mock('Response', :body => send_response_xml) }
74
+ end
75
+
76
+ subject { account.send_message(to: "447815777555", body: "Hello from the Esendex Ruby Gem") }
77
+
78
+ it "should post to the message dispatcher resource" do
79
+ api_connection.should_receive(:post).with("/v1.0/messagedispatcher", anything)
80
+ subject
81
+ end
82
+
83
+ it "should return the batch_id when treated as string" do
84
+ subject.to_s.should eq(batch_id)
85
+ end
86
+
87
+ it "should return the batch_id in the result" do
88
+ subject.batch_id.should eq(batch_id)
89
+ end
90
+
91
+ it "should provide a list of messages with a single message" do
92
+ subject.messages.should have(1).items
60
93
  end
61
94
  end
62
95
 
63
- describe "#send_message" do
96
+ describe "#send_messages" do
64
97
  let(:batch_id) { random_string }
98
+ let(:uri_prefix) { "https://api.esendex.com/messages/" }
99
+ let(:message_one_id) { random_guid }
100
+ let(:message_two_id) { random_guid }
65
101
  let(:send_response_xml) {
66
102
  "<?xml version=\"1.0\" encoding=\"utf-8\"?>
67
103
  <messageheaders batchid=\"#{batch_id}\" xmlns=\"http://api.esendex.com/ns/\">
68
- <messageheader\ uri=\"http://api.esendex.com/v1.0/MessageHeaders/00000000-0000-0000-0000-000000000000\" id=\"00000000-0000-0000-0000-000000000000\" />
104
+ <messageheader\ uri=\"#{uri_prefix}#{message_one_id}\" id=\"#{message_one_id}\" />
105
+ <messageheader\ uri=\"#{uri_prefix}#{message_two_id}\" id=\"#{message_two_id}\" />
69
106
  </messageheaders>"
70
107
  }
71
108
 
@@ -75,12 +112,100 @@ describe Account do
75
112
 
76
113
  subject { account.send_message(to: "447815777555", body: "Hello from the Esendex Ruby Gem") }
77
114
 
78
- it "posts to the message dispatcher resource" do
115
+ it "should post to the message dispatcher resource" do
79
116
  api_connection.should_receive(:post).with("/v1.0/messagedispatcher", anything)
80
117
  subject
81
118
  end
82
- it "should return the batch_id in the result" do
83
- subject.should eq(batch_id)
119
+
120
+ it "should provide a list containing two messages" do
121
+ subject.messages.should have(2).items
122
+ end
123
+
124
+ it "should have message one in the message list" do
125
+ subject.messages.should include(id: "#{message_one_id}", uri: "#{uri_prefix}#{message_one_id}")
84
126
  end
85
- end
127
+
128
+ it "should have message two in the message list" do
129
+ subject.messages.should include(id: "#{message_two_id}", uri: "#{uri_prefix}#{message_two_id}")
130
+ end
131
+ end
132
+
133
+ describe "#sent_messages" do
134
+ let(:sent_message_client) { stub("sent_message_client") }
135
+ let(:sent_messages_result) { Class.new }
136
+
137
+ before(:each) do
138
+ stub_const("Esendex::SentMessageClient", sent_message_client)
139
+ sent_message_client
140
+ .should_receive(:new)
141
+ .with(api_connection)
142
+ .and_return(sent_message_client)
143
+ end
144
+
145
+ context "with no args" do
146
+ before(:each) do
147
+ sent_message_client
148
+ .should_receive(:get_messages)
149
+ .with({account_reference: account_reference})
150
+ .and_return(sent_messages_result)
151
+ end
152
+
153
+ subject { account.sent_messages() }
154
+
155
+ it "should return expected result" do
156
+ subject.should eq(sent_messages_result)
157
+ end
158
+ end
159
+
160
+ context "with start and finish dates" do
161
+ it "should pass dates without adjustment" do
162
+ start_date = DateTime.now - 30
163
+ finish_date = DateTime.now - 15
164
+ sent_message_client
165
+ .should_receive(:get_messages)
166
+ .with({account_reference: account_reference, start: start_date, finish: finish_date})
167
+ .and_return(sent_messages_result)
168
+
169
+ account.sent_messages({start: start_date, finish: finish_date}).should_not be_nil
170
+ end
171
+ end
172
+
173
+ context "with start date" do
174
+ it "should specify start date and default finish date" do
175
+ start_date = DateTime.now - 1
176
+ sent_message_client
177
+ .should_receive(:get_messages)
178
+ .with({account_reference: account_reference, start: start_date})
179
+ .and_return(sent_messages_result)
180
+
181
+ account.sent_messages({start: start_date}).should_not be_nil
182
+ end
183
+ end
184
+
185
+ context "with finish date" do
186
+ it "should specify default start date and finish date" do
187
+ finish_date = DateTime.now - 1
188
+ start_date = finish_date - 90
189
+ sent_message_client
190
+ .should_receive(:get_messages)
191
+ .with({account_reference: account_reference, finish: finish_date})
192
+ .and_return(sent_messages_result)
193
+
194
+ account.sent_messages({finish: finish_date}).should_not be_nil
195
+ end
196
+ end
197
+
198
+ context "with start index and count" do
199
+ it "should pass expected arguments" do
200
+ start_index = 3
201
+ count = 35
202
+ sent_message_client
203
+ .should_receive(:get_messages)
204
+ .with({account_reference: account_reference, start_index: start_index, count: count})
205
+ .and_return(sent_messages_result)
206
+
207
+ account.sent_messages({start_index: start_index, count: count}).should_not be_nil
208
+ end
209
+ end
210
+ end
86
211
  end
@@ -15,22 +15,22 @@ describe ApiConnection do
15
15
  end
16
16
 
17
17
  describe "#initialise" do
18
-
19
18
  subject { ApiConnection.new }
20
19
 
21
20
  it "should set the username" do
22
21
  subject
23
22
  @connection.user.should eq(Esendex.username)
24
23
  end
24
+
25
25
  it "should set the password" do
26
26
  subject
27
27
  @connection.password.should eq(Esendex.password)
28
28
  end
29
+
29
30
  it "should set the auth to basic" do
30
31
  subject
31
32
  @connection.auth_type.should eq(:basic)
32
33
  end
33
-
34
34
  end
35
35
 
36
36
 
@@ -48,11 +48,11 @@ describe ApiConnection do
48
48
  before(:each) do
49
49
  @connection.stub(:get) { raise Nestful::ForbiddenAccess.new(nil) }
50
50
  end
51
- it "raises an Esendex::ForbiddenError" do
52
- expect { subject }.to raise_error(Esendex::ForbiddenError)
51
+
52
+ it "raises an ForbiddenError" do
53
+ expect { subject }.to raise_error(ForbiddenError)
53
54
  end
54
55
  end
55
-
56
56
  end
57
57
 
58
58
  describe "#post" do
@@ -70,10 +70,10 @@ describe ApiConnection do
70
70
  before(:each) do
71
71
  @connection.stub(:post) { raise Nestful::ForbiddenAccess.new(nil) }
72
72
  end
73
- it "raises an Esendex::ForbiddenError" do
74
- expect { subject }.to raise_error(Esendex::ForbiddenError)
73
+
74
+ it "raises an ForbiddenError" do
75
+ expect { subject }.to raise_error(ForbiddenError)
75
76
  end
76
77
  end
77
-
78
78
  end
79
79
  end
File without changes
@@ -9,29 +9,47 @@ describe MessageBatchSubmission do
9
9
 
10
10
  subject { message_batch.xml_node }
11
11
 
12
- it "should create message nodes" do
12
+ it "creates message nodes" do
13
13
  subject.xpath('//messages/message').count.should eq(messages.count)
14
14
  end
15
- it "should set the message to" do
15
+
16
+ it "sets the message to" do
16
17
  (0..1).each do |i|
17
18
  subject.xpath('//messages/message/to')[i].content.should eq(messages[i].to)
18
19
  end
19
20
  end
20
- it "should set the message body" do
21
+
22
+ it "sets the message body" do
21
23
  (0..1).each do |i|
22
24
  subject.xpath('//messages/message/body')[i].content.should eq(messages[i].body)
23
25
  end
24
26
  end
25
- context "when send_at set" do
27
+
28
+ context "when #send_at set" do
26
29
  let(:target_time) { Time.local(2011, 4, 7, 15, 0, 0) }
27
30
 
28
31
  before(:each) do
29
32
  message_batch.send_at = target_time
30
33
  end
31
34
 
32
- it "should create a properly formatted sendat node" do
35
+ it "creates a properly formatted sendat node" do
33
36
  subject.at_xpath('//messages/sendat').content.should eq("2011-04-07T15:00:00")
34
37
  end
35
38
  end
36
39
  end
40
+
41
+ describe "#initialize" do
42
+ context "with nil account reference" do
43
+ it "raises AccountReferenceError" do
44
+ messages = [Message.new(random_mobile, random_string)]
45
+ expect { MessageBatchSubmission.new nil, messages }.to raise_error(AccountReferenceError)
46
+ end
47
+ end
48
+
49
+ context "with empty message array" do
50
+ it "raises expected error" do
51
+ expect { MessageBatchSubmission.new account, [] }.to raise_error("Need at least one message")
52
+ end
53
+ end
54
+ end
37
55
  end
@@ -33,8 +33,8 @@ describe Message do
33
33
  it "contains a body node" do
34
34
  subject.at_xpath('//message/body').content.should eq(body)
35
35
  end
36
-
37
- context "when from set" do
36
+
37
+ context "when #from set" do
38
38
  let(:from) { random_string }
39
39
 
40
40
  before(:each) do
@@ -34,4 +34,8 @@ end
34
34
 
35
35
  def random_time
36
36
  Time.now + rand(9999)
37
- end
37
+ end
38
+
39
+ def random_guid
40
+ SecureRandom.uuid
41
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: esendex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adam Bird
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-21 00:00:00.000000000 Z
11
+ date: 2015-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nestful
@@ -28,14 +28,14 @@ dependencies:
28
28
  name: nokogiri
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ! '>='
31
+ - - '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 1.4.4.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ! '>='
38
+ - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: 1.4.4.1
41
41
  description: Send SMS from your application using the Esendex API
@@ -53,8 +53,10 @@ files:
53
53
  - app/controllers/esendex/message_failed_events_controller.rb
54
54
  - app/controllers/esendex/push_notification_handler.rb
55
55
  - config/routes.rb
56
+ - lib/esendex.rb
56
57
  - lib/esendex/account.rb
57
58
  - lib/esendex/api_connection.rb
59
+ - lib/esendex/dispatcher_result.rb
58
60
  - lib/esendex/engine.rb
59
61
  - lib/esendex/exceptions.rb
60
62
  - lib/esendex/hash_serialisation.rb
@@ -65,7 +67,6 @@ files:
65
67
  - lib/esendex/message_failed_event.rb
66
68
  - lib/esendex/railtie.rb
67
69
  - lib/esendex/version.rb
68
- - lib/esendex.rb
69
70
  - lib/tasks/esendex.rake
70
71
  - licence.txt
71
72
  - readme.md
@@ -73,11 +74,14 @@ files:
73
74
  - spec/api_connection_spec.rb
74
75
  - spec/controllers/message_delivered_events_controller_spec.rb
75
76
  - spec/controllers/push_notification_handler_spec.rb
77
+ - spec/dummy/README.rdoc
78
+ - spec/dummy/Rakefile
76
79
  - spec/dummy/app/assets/javascripts/application.js
77
80
  - spec/dummy/app/assets/stylesheets/application.css
78
81
  - spec/dummy/app/controllers/application_controller.rb
79
82
  - spec/dummy/app/helpers/application_helper.rb
80
83
  - spec/dummy/app/views/layouts/application.html.erb
84
+ - spec/dummy/config.ru
81
85
  - spec/dummy/config/application.rb
82
86
  - spec/dummy/config/boot.rb
83
87
  - spec/dummy/config/environment.rb
@@ -92,15 +96,10 @@ files:
92
96
  - spec/dummy/config/initializers/wrap_parameters.rb
93
97
  - spec/dummy/config/locales/en.yml
94
98
  - spec/dummy/config/routes.rb
95
- - spec/dummy/config.ru
96
- - spec/dummy/log/development.log
97
- - spec/dummy/log/test.log
98
99
  - spec/dummy/public/404.html
99
100
  - spec/dummy/public/422.html
100
101
  - spec/dummy/public/500.html
101
102
  - spec/dummy/public/favicon.ico
102
- - spec/dummy/Rakefile
103
- - spec/dummy/README.rdoc
104
103
  - spec/dummy/script/rails
105
104
  - spec/hash_serialisation_spec.rb
106
105
  - spec/inbound_message_spec.rb
@@ -118,17 +117,17 @@ require_paths:
118
117
  - lib
119
118
  required_ruby_version: !ruby/object:Gem::Requirement
120
119
  requirements:
121
- - - ! '>='
120
+ - - '>='
122
121
  - !ruby/object:Gem::Version
123
122
  version: '0'
124
123
  required_rubygems_version: !ruby/object:Gem::Requirement
125
124
  requirements:
126
- - - ! '>='
125
+ - - '>='
127
126
  - !ruby/object:Gem::Version
128
127
  version: '0'
129
128
  requirements: []
130
129
  rubyforge_project:
131
- rubygems_version: 2.0.3
130
+ rubygems_version: 2.4.8
132
131
  signing_key:
133
132
  specification_version: 4
134
133
  summary: Gem for interacting with the Esendex API
@@ -157,8 +156,6 @@ test_files:
157
156
  - spec/dummy/config/locales/en.yml
158
157
  - spec/dummy/config/routes.rb
159
158
  - spec/dummy/config.ru
160
- - spec/dummy/log/development.log
161
- - spec/dummy/log/test.log
162
159
  - spec/dummy/public/404.html
163
160
  - spec/dummy/public/422.html
164
161
  - spec/dummy/public/500.html
@@ -1,83 +0,0 @@
1
-
2
-
3
- Started GET "/esendex/message_delivered_events" for 127.0.0.1 at 2013-02-26 09:20:04 +0000
4
- Connecting to database specified by database.yml
5
-
6
- ActiveRecord::ConnectionNotEstablished (ActiveRecord::ConnectionNotEstablished):
7
- activerecord (3.2.12) lib/active_record/connection_adapters/abstract/connection_pool.rb:410:in `retrieve_connection'
8
- activerecord (3.2.12) lib/active_record/connection_adapters/abstract/connection_specification.rb:171:in `retrieve_connection'
9
- activerecord (3.2.12) lib/active_record/connection_adapters/abstract/connection_specification.rb:145:in `connection'
10
- activerecord (3.2.12) lib/active_record/query_cache.rb:67:in `rescue in call'
11
- activerecord (3.2.12) lib/active_record/query_cache.rb:61:in `call'
12
- activerecord (3.2.12) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
13
- actionpack (3.2.12) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
14
- activesupport (3.2.12) lib/active_support/callbacks.rb:405:in `_run__3535235831481479337__call__1320289842362401676__callbacks'
15
- activesupport (3.2.12) lib/active_support/callbacks.rb:405:in `__run_callback'
16
- activesupport (3.2.12) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
17
- activesupport (3.2.12) lib/active_support/callbacks.rb:81:in `run_callbacks'
18
- actionpack (3.2.12) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
19
- actionpack (3.2.12) lib/action_dispatch/middleware/reloader.rb:65:in `call'
20
- actionpack (3.2.12) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
21
- actionpack (3.2.12) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
22
- actionpack (3.2.12) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
23
- railties (3.2.12) lib/rails/rack/logger.rb:32:in `call_app'
24
- railties (3.2.12) lib/rails/rack/logger.rb:16:in `block in call'
25
- activesupport (3.2.12) lib/active_support/tagged_logging.rb:22:in `tagged'
26
- railties (3.2.12) lib/rails/rack/logger.rb:16:in `call'
27
- actionpack (3.2.12) lib/action_dispatch/middleware/request_id.rb:22:in `call'
28
- rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
29
- rack (1.4.5) lib/rack/runtime.rb:17:in `call'
30
- activesupport (3.2.12) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
31
- rack (1.4.5) lib/rack/lock.rb:15:in `call'
32
- actionpack (3.2.12) lib/action_dispatch/middleware/static.rb:62:in `call'
33
- railties (3.2.12) lib/rails/engine.rb:479:in `call'
34
- railties (3.2.12) lib/rails/application.rb:223:in `call'
35
- rack (1.4.5) lib/rack/content_length.rb:14:in `call'
36
- railties (3.2.12) lib/rails/rack/log_tailer.rb:17:in `call'
37
- rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service'
38
- /Users/adambird/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
39
- /Users/adambird/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
40
- /Users/adambird/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
41
-
42
-
43
- Rendered /Users/adambird/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_dispatch/middleware/templates/rescues/_trace.erb (0.9ms)
44
- Rendered /Users/adambird/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (2.3ms)
45
- Rendered /Users/adambird/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (10.7ms)
46
-
47
-
48
- Started GET "/esendex/message_delivered_events" for 127.0.0.1 at 2013-02-26 09:23:48 +0000
49
-
50
- ActionController::RoutingError (No route matches [GET] "/esendex/message_delivered_events"):
51
- actionpack (3.2.12) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
52
- actionpack (3.2.12) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
53
- railties (3.2.12) lib/rails/rack/logger.rb:32:in `call_app'
54
- railties (3.2.12) lib/rails/rack/logger.rb:16:in `block in call'
55
- activesupport (3.2.12) lib/active_support/tagged_logging.rb:22:in `tagged'
56
- railties (3.2.12) lib/rails/rack/logger.rb:16:in `call'
57
- actionpack (3.2.12) lib/action_dispatch/middleware/request_id.rb:22:in `call'
58
- rack (1.4.5) lib/rack/methodoverride.rb:21:in `call'
59
- rack (1.4.5) lib/rack/runtime.rb:17:in `call'
60
- activesupport (3.2.12) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
61
- rack (1.4.5) lib/rack/lock.rb:15:in `call'
62
- actionpack (3.2.12) lib/action_dispatch/middleware/static.rb:62:in `call'
63
- railties (3.2.12) lib/rails/engine.rb:479:in `call'
64
- railties (3.2.12) lib/rails/application.rb:223:in `call'
65
- rack (1.4.5) lib/rack/content_length.rb:14:in `call'
66
- railties (3.2.12) lib/rails/rack/log_tailer.rb:17:in `call'
67
- rack (1.4.5) lib/rack/handler/webrick.rb:59:in `service'
68
- /Users/adambird/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
69
- /Users/adambird/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
70
- /Users/adambird/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
71
-
72
-
73
- Rendered /Users/adambird/.rvm/gems/ruby-1.9.3-p194/gems/actionpack-3.2.12/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.7ms)
74
-
75
-
76
- Started POST "/esendex/message_delivered_events" for 127.0.0.1 at 2013-02-26 09:24:19 +0000
77
- Processing by Esendex::MessageDeliveredEventsController#create as */*
78
- Completed 200 OK in 0ms (Views: 0.2ms)
79
-
80
-
81
- Started POST "/esendex/message_delivered_events" for 127.0.0.1 at 2013-02-26 09:43:03 +0000
82
- Processing by Esendex::MessageDeliveredEventsController#create as */*
83
- Completed 200 OK in 0ms (Views: 0.1ms)
@@ -1,14 +0,0 @@
1
- Processing by Esendex::MessageDeliveredEventsController#create as HTML
2
- Completed 200 OK in 0ms (Views: 0.2ms)
3
- Processing by Esendex::MessageDeliveredEventsController#create as HTML
4
- Completed 200 OK in 0ms (Views: 0.1ms)
5
- Processing by Esendex::MessageDeliveredEventsController#create as HTML
6
- Completed 200 OK in 0ms (Views: 0.1ms)
7
- Processing by Esendex::MessageDeliveredEventsController#create as HTML
8
- Completed 200 OK in 0ms (Views: 0.1ms)
9
- Processing by Esendex::MessageDeliveredEventsController#create as HTML
10
- Completed 200 OK in 0ms (Views: 0.1ms)
11
- Received MessageDeliveredEvent but no handler configured
12
- Rendered text template (0.0ms)
13
- Received MessageDeliveredEvent but no handler configured
14
- Rendered text template (0.0ms)