xednese 0.0.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 +7 -0
- data/Gemfile +9 -0
- data/LICENSE +19 -0
- data/README.md +13 -0
- data/Rakefile +9 -0
- data/lib/xednese/accounts.rb +25 -0
- data/lib/xednese/client.rb +48 -0
- data/lib/xednese/dispatcher.rb +20 -0
- data/lib/xednese/messages.rb +28 -0
- data/lib/xednese/requests/messages.rb +24 -0
- data/lib/xednese/responses/account.rb +25 -0
- data/lib/xednese/responses/accounts.rb +10 -0
- data/lib/xednese/responses/message_dispatcher_headers.rb +18 -0
- data/lib/xednese/responses/message_header.rb +33 -0
- data/lib/xednese/responses/message_headers.rb +15 -0
- data/lib/xednese/responses/parser.rb +11 -0
- data/lib/xednese/users.rb +15 -0
- data/lib/xednese/version.rb +3 -0
- data/lib/xednese.rb +46 -0
- data/spec/helper.rb +13 -0
- data/spec/xednese/accounts_spec.rb +67 -0
- data/spec/xednese/client_spec.rb +130 -0
- data/spec/xednese/dispatcher_spec.rb +41 -0
- data/spec/xednese/messages_spec.rb +54 -0
- data/spec/xednese/requests/messages_spec.rb +33 -0
- data/spec/xednese/responses/account_spec.rb +48 -0
- data/spec/xednese/responses/accounts_spec.rb +51 -0
- data/spec/xednese/responses/message_dispatcher_headers_spec.rb +29 -0
- data/spec/xednese/responses/message_header_spec.rb +61 -0
- data/spec/xednese/responses/message_headers_spec.rb +73 -0
- data/spec/xednese/users_spec.rb +18 -0
- data/spec/xednese_spec.rb +59 -0
- metadata +173 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0655d51c18e3166feda964a5401798ec46d59900
|
4
|
+
data.tar.gz: 31a7d981298f71cf23da411388eb4920aa5291b4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 28015566c69de2d862a79ecff04434badaa1ae2e354ce1dddfbf9b1c28f9b2c3ac37152663879285f78db37b5c1aafb72bdae7c75d01120372fc0a59be59acbc
|
7
|
+
data.tar.gz: afa21575f1230639c5a5da75808081638568d8d8b8dc67ac1b886de9567b3179ec07e635fcd1ad412816a3a1f250ebea9ad7e0b8e980727474f480e867143c13
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2014 Joshua Hawxwell
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# Xednese
|
2
|
+
|
3
|
+
``` ruby
|
4
|
+
require 'xednese'
|
5
|
+
|
6
|
+
esendex = Esendex.new('me@company.com', 'password', 'account reference')
|
7
|
+
p esendex.messages.sent.first.body
|
8
|
+
#=> "..."
|
9
|
+
|
10
|
+
response = esendex.dispatcher.send('Hey guys', '445275XXX')
|
11
|
+
p response.message_headers.map(&:id)
|
12
|
+
#=> ["..."]
|
13
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
class Esendex
|
2
|
+
class Accounts
|
3
|
+
def initialize(credentials)
|
4
|
+
@credentials = credentials
|
5
|
+
end
|
6
|
+
|
7
|
+
def reference
|
8
|
+
@credentials.account_reference
|
9
|
+
end
|
10
|
+
|
11
|
+
def each(&block)
|
12
|
+
Client.get(@credentials, 'v1.0/accounts') {|status, data|
|
13
|
+
Responses::Accounts.deserialise(data).accounts
|
14
|
+
}.each(&block)
|
15
|
+
end
|
16
|
+
|
17
|
+
include Enumerable
|
18
|
+
|
19
|
+
def get(id)
|
20
|
+
Client.get(@credentials, "v1.0/accounts/#{id}") do |status, data|
|
21
|
+
Responses::Account.deserialise(data)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
class Esendex
|
2
|
+
class Client
|
3
|
+
ROOT = URI('https://api.esendex.com/')
|
4
|
+
USER_AGENT = "ruby/xednese-#{VERSION}"
|
5
|
+
CONTENT_TYPE = "application/xml"
|
6
|
+
|
7
|
+
def self.get(credentials, path, args={})
|
8
|
+
uri = url(path)
|
9
|
+
uri.query = URI.encode_www_form(args)
|
10
|
+
request = Net::HTTP::Get.new(uri)
|
11
|
+
|
12
|
+
code, body = execute(credentials, request)
|
13
|
+
|
14
|
+
block_given? ? yield(code, body) : [code, body]
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.post(credentials, path, object)
|
18
|
+
request = Net::HTTP::Post.new(url(path))
|
19
|
+
request.body = object.serialise
|
20
|
+
request.content_type = CONTENT_TYPE
|
21
|
+
|
22
|
+
code, body = execute(credentials, request)
|
23
|
+
|
24
|
+
block_given? ? yield(code, body) : [code, body]
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def self.url(path)
|
30
|
+
URI.join(ROOT.to_s, path)
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.execute(credentials, request)
|
34
|
+
request["User-Agent"] = USER_AGENT
|
35
|
+
request.basic_auth credentials.username, credentials.password
|
36
|
+
|
37
|
+
code, body = nil, nil
|
38
|
+
|
39
|
+
Net::HTTP.start(ROOT.host, ROOT.port, use_ssl: true) do |http|
|
40
|
+
resp = http.request(request)
|
41
|
+
code = resp.code
|
42
|
+
body = resp.body
|
43
|
+
end
|
44
|
+
|
45
|
+
[code, body]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Esendex
|
2
|
+
class Dispatcher
|
3
|
+
def initialize(credentials)
|
4
|
+
@credentials = credentials
|
5
|
+
end
|
6
|
+
|
7
|
+
def send(body, to)
|
8
|
+
args = {
|
9
|
+
account_reference: @credentials.account_reference,
|
10
|
+
messages: [{to: to, body: body}]
|
11
|
+
}
|
12
|
+
|
13
|
+
messages = Requests::Messages.new(args)
|
14
|
+
|
15
|
+
Client.post(@credentials, 'v1.0/messagedispatcher', messages) do |code, body|
|
16
|
+
Responses::MessageDispatcherHeaders.deserialise(body)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Esendex
|
2
|
+
class Messages
|
3
|
+
PAGE_COUNT = 25
|
4
|
+
|
5
|
+
def initialize(credentials)
|
6
|
+
@credentials = credentials
|
7
|
+
end
|
8
|
+
|
9
|
+
def sent
|
10
|
+
Seq::Paged.new do |page|
|
11
|
+
params = {
|
12
|
+
startIndex: PAGE_COUNT * page,
|
13
|
+
count: PAGE_COUNT
|
14
|
+
}
|
15
|
+
|
16
|
+
Client.get(@credentials, 'v1.0/messageheaders', params) do |status, data|
|
17
|
+
Responses::MessageHeaders.deserialise(data).messageheaders
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def get(id)
|
23
|
+
Client.get(@credentials, "v1.0/messageheaders/#{id}") do |status, data|
|
24
|
+
Responses::MessageHeader.deserialise(data)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class Esendex
|
2
|
+
module Requests
|
3
|
+
class Messages
|
4
|
+
def initialize(args)
|
5
|
+
@args = args
|
6
|
+
end
|
7
|
+
|
8
|
+
def serialise
|
9
|
+
Nokogiri::XML::Builder.new(:encoding => 'utf-8') do |xml|
|
10
|
+
xml.messages {
|
11
|
+
xml.accountreference @args[:account_reference]
|
12
|
+
|
13
|
+
@args[:messages].each do |message|
|
14
|
+
xml.message {
|
15
|
+
xml.to message[:to]
|
16
|
+
xml.body message[:body]
|
17
|
+
}
|
18
|
+
end
|
19
|
+
}
|
20
|
+
end.to_xml
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Esendex
|
2
|
+
module Responses
|
3
|
+
class Account
|
4
|
+
extend Serialisable
|
5
|
+
|
6
|
+
root 'account'
|
7
|
+
|
8
|
+
attribute :id, 'id'
|
9
|
+
attribute :uri, 'uri'
|
10
|
+
|
11
|
+
element :reference, 'reference'
|
12
|
+
element :label, 'label'
|
13
|
+
element :address, 'address'
|
14
|
+
element :type, 'type'
|
15
|
+
element :messages_remaining, 'messagesremaining', Parser.for(&:to_i)
|
16
|
+
element :expires_on, 'expireson'
|
17
|
+
element :role, 'role'
|
18
|
+
element :settings, Class.new {
|
19
|
+
extend Serialisable
|
20
|
+
root 'settings'
|
21
|
+
attribute :uri, 'uri'
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Esendex
|
2
|
+
module Responses
|
3
|
+
class MessageDispatcherHeaders
|
4
|
+
extend Serialisable
|
5
|
+
|
6
|
+
root 'messageheaders'
|
7
|
+
|
8
|
+
attribute :batch_id, 'batchid'
|
9
|
+
elements :message_headers, Class.new {
|
10
|
+
extend Serialisable
|
11
|
+
|
12
|
+
root 'messageheader'
|
13
|
+
attribute :uri, 'uri'
|
14
|
+
attribute :id, 'id'
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class Esendex
|
2
|
+
module Responses
|
3
|
+
class MessageHeader
|
4
|
+
extend Serialisable
|
5
|
+
|
6
|
+
root 'messageheader'
|
7
|
+
|
8
|
+
attribute :id, 'id'
|
9
|
+
attribute :uri, 'uri'
|
10
|
+
|
11
|
+
element :status, 'status'
|
12
|
+
element :last_status_at, 'laststatusat', Time
|
13
|
+
element :submitted_at, 'submittedat', Time
|
14
|
+
element :type, 'type'
|
15
|
+
element :to, Class.new { extend Serialisable
|
16
|
+
root 'to'
|
17
|
+
element :phonenumber, 'phonenumber'
|
18
|
+
}
|
19
|
+
element :from, Class.new { extend Serialisable
|
20
|
+
root 'from'
|
21
|
+
element :phonenumber, 'phonenumber'
|
22
|
+
}
|
23
|
+
element :summary, 'summary'
|
24
|
+
element :body, Class.new { extend Serialisable
|
25
|
+
root 'body'
|
26
|
+
attribute :uri, 'uri'
|
27
|
+
}
|
28
|
+
element :direction, 'direction'
|
29
|
+
element :parts, 'parts', Parser.for(&:to_i)
|
30
|
+
element :username, 'username'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Esendex
|
2
|
+
module Responses
|
3
|
+
class MessageHeaders
|
4
|
+
extend Serialisable
|
5
|
+
|
6
|
+
root 'messageheaders'
|
7
|
+
|
8
|
+
attribute :start_index, 'startindex', Parser.for(&:to_i)
|
9
|
+
attribute :count, 'count', Parser.for(&:to_i)
|
10
|
+
attribute :total_count, 'totalcount', Parser.for(&:to_i)
|
11
|
+
|
12
|
+
elements :message_headers, MessageHeader
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/xednese.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'seq/paged'
|
4
|
+
require 'serialisable'
|
5
|
+
require 'time'
|
6
|
+
|
7
|
+
require_relative 'xednese/version'
|
8
|
+
require_relative 'xednese/client'
|
9
|
+
|
10
|
+
require_relative 'xednese/requests/messages'
|
11
|
+
|
12
|
+
require_relative 'xednese/responses/parser'
|
13
|
+
require_relative 'xednese/responses/account'
|
14
|
+
require_relative 'xednese/responses/accounts'
|
15
|
+
require_relative 'xednese/responses/message_dispatcher_headers'
|
16
|
+
require_relative 'xednese/responses/message_header'
|
17
|
+
require_relative 'xednese/responses/message_headers'
|
18
|
+
|
19
|
+
require_relative 'xednese/accounts'
|
20
|
+
require_relative 'xednese/dispatcher'
|
21
|
+
require_relative 'xednese/messages'
|
22
|
+
require_relative 'xednese/users'
|
23
|
+
|
24
|
+
class Esendex
|
25
|
+
Credentials = Struct.new(:username, :password, :account_reference)
|
26
|
+
|
27
|
+
def initialize(username, password, account_reference)
|
28
|
+
@credentials = Credentials.new(username, password, account_reference)
|
29
|
+
end
|
30
|
+
|
31
|
+
def account
|
32
|
+
Accounts.new(@credentials)
|
33
|
+
end
|
34
|
+
|
35
|
+
def dispatcher
|
36
|
+
Dispatcher.new(@credentials)
|
37
|
+
end
|
38
|
+
|
39
|
+
def user
|
40
|
+
Users.new(@credentials)
|
41
|
+
end
|
42
|
+
|
43
|
+
def messages
|
44
|
+
Messages.new(@credentials)
|
45
|
+
end
|
46
|
+
end
|
data/spec/helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/pride'
|
3
|
+
require 'mocha/mini_test'
|
4
|
+
|
5
|
+
require_relative '../lib/xednese'
|
6
|
+
|
7
|
+
def dummy_esendex
|
8
|
+
Esendex.new('what', 'when', 'really?')
|
9
|
+
end
|
10
|
+
|
11
|
+
def dummy_credentials
|
12
|
+
Esendex::Credentials.new('user', 'pass', 'what?')
|
13
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
describe Esendex::Accounts do
|
4
|
+
let(:credentials) { Esendex::Credentials.new('user', 'pass', 'ref') }
|
5
|
+
subject { Esendex::Accounts.new(credentials) }
|
6
|
+
|
7
|
+
describe '#reference' do
|
8
|
+
it 'returns the account reference' do
|
9
|
+
subject.reference.must_equal credentials.account_reference
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#each' do
|
14
|
+
let(:data) { mock }
|
15
|
+
let(:account_list) { [mock, mock] }
|
16
|
+
let(:accounts) { stub(accounts: account_list) }
|
17
|
+
|
18
|
+
before {
|
19
|
+
Esendex::Client
|
20
|
+
.expects(:get)
|
21
|
+
.with(credentials, 'v1.0/accounts')
|
22
|
+
.yields(200, data)
|
23
|
+
.returns(account_list)
|
24
|
+
|
25
|
+
Esendex::Responses::Accounts
|
26
|
+
.expects(:deserialise)
|
27
|
+
.with(data)
|
28
|
+
.returns(accounts)
|
29
|
+
|
30
|
+
accounts
|
31
|
+
.expects(:accounts)
|
32
|
+
.returns(account_list)
|
33
|
+
}
|
34
|
+
|
35
|
+
it 'retrieves all accounts' do
|
36
|
+
returned_accounts = []
|
37
|
+
subject.each do |account|
|
38
|
+
returned_accounts << account
|
39
|
+
end
|
40
|
+
|
41
|
+
returned_accounts.must_equal account_list
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#get' do
|
46
|
+
let(:id) { "heyohid" }
|
47
|
+
let(:data) { mock }
|
48
|
+
let(:account) { mock }
|
49
|
+
|
50
|
+
before {
|
51
|
+
Esendex::Client
|
52
|
+
.expects(:get)
|
53
|
+
.with(credentials, "v1.0/accounts/#{id}")
|
54
|
+
.yields(200, data)
|
55
|
+
.returns(account)
|
56
|
+
|
57
|
+
Esendex::Responses::Account
|
58
|
+
.expects(:deserialise)
|
59
|
+
.with(data)
|
60
|
+
.returns(account)
|
61
|
+
}
|
62
|
+
|
63
|
+
it 'retrieves the specified accounts' do
|
64
|
+
subject.get(id).must_equal account
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
describe Esendex::Client do
|
4
|
+
subject { Esendex::Client }
|
5
|
+
|
6
|
+
describe '.get' do
|
7
|
+
let(:credentials) { dummy_credentials }
|
8
|
+
let(:path) { "some/url/path" }
|
9
|
+
let(:args) { { query: "what", thing: "yep" } }
|
10
|
+
|
11
|
+
let(:expected_code) { 418 }
|
12
|
+
let(:expected_body) { "Hi I'm a body" }
|
13
|
+
|
14
|
+
let(:uri) { mock }
|
15
|
+
let(:form_params) { mock }
|
16
|
+
let(:http) { mock }
|
17
|
+
let(:get_request) { mock }
|
18
|
+
|
19
|
+
before {
|
20
|
+
URI.expects(:encode_www_form).with(args).returns(form_params)
|
21
|
+
uri.expects(:query=).with(form_params)
|
22
|
+
subject.expects(:url).with(path).returns(uri)
|
23
|
+
|
24
|
+
subject
|
25
|
+
.expects(:execute)
|
26
|
+
.with(credentials, get_request)
|
27
|
+
.returns([expected_code, expected_body])
|
28
|
+
|
29
|
+
Net::HTTP::Get.expects(:new).with(uri).returns(get_request)
|
30
|
+
}
|
31
|
+
|
32
|
+
it 'returns the expected status code' do
|
33
|
+
code, _ = subject.get(credentials, path, args)
|
34
|
+
code.must_equal expected_code
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns the expected body' do
|
38
|
+
_, body = subject.get(credentials, path, args)
|
39
|
+
body.must_equal expected_body
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '.post' do
|
44
|
+
let(:credentials) { dummy_credentials }
|
45
|
+
|
46
|
+
let(:path) { "some/url/path?query=yah" }
|
47
|
+
|
48
|
+
let(:expected_code) { 418 }
|
49
|
+
let(:expected_body) { "Hi I'm a body" }
|
50
|
+
|
51
|
+
let(:xml) { "</xml>" }
|
52
|
+
let(:serialisable_object) { stub(serialise: xml) }
|
53
|
+
let(:post_request) { mock }
|
54
|
+
|
55
|
+
before {
|
56
|
+
subject
|
57
|
+
.expects(:execute)
|
58
|
+
.with(credentials, post_request)
|
59
|
+
.returns([expected_code, expected_body])
|
60
|
+
|
61
|
+
Net::HTTP::Post
|
62
|
+
.expects(:new)
|
63
|
+
.with(subject::ROOT + path)
|
64
|
+
.returns(post_request)
|
65
|
+
|
66
|
+
post_request
|
67
|
+
.expects(:body=)
|
68
|
+
.with(xml)
|
69
|
+
|
70
|
+
post_request
|
71
|
+
.expects(:content_type=)
|
72
|
+
.with('application/xml')
|
73
|
+
}
|
74
|
+
|
75
|
+
it 'returns the expected status code' do
|
76
|
+
code, _ = subject.post(credentials, path, serialisable_object)
|
77
|
+
code.must_equal expected_code
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'returns the expected body' do
|
81
|
+
_, body = subject.post(credentials, path, serialisable_object)
|
82
|
+
body.must_equal expected_body
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
describe '.execute' do
|
88
|
+
let(:username) { 'myusername' }
|
89
|
+
let(:password) { 'mypassword' }
|
90
|
+
let(:credentials) { Esendex::Credentials.new(username, password, 'EX00') }
|
91
|
+
|
92
|
+
let(:expected_code) { 418 }
|
93
|
+
let(:expected_body) { "Hi I'm a body" }
|
94
|
+
|
95
|
+
let(:http) { mock }
|
96
|
+
let(:request) { mock }
|
97
|
+
let(:response) { stub(body: expected_body, code: expected_code) }
|
98
|
+
|
99
|
+
before {
|
100
|
+
Net::HTTP
|
101
|
+
.expects(:start)
|
102
|
+
.with(subject::ROOT.host, subject::ROOT.port, use_ssl: true)
|
103
|
+
.yields(http)
|
104
|
+
.returns(expected_code, expected_body)
|
105
|
+
|
106
|
+
request
|
107
|
+
.expects(:[]=)
|
108
|
+
.with("User-Agent", subject::USER_AGENT)
|
109
|
+
|
110
|
+
request
|
111
|
+
.expects(:basic_auth)
|
112
|
+
.with(username, password)
|
113
|
+
|
114
|
+
http
|
115
|
+
.expects(:request)
|
116
|
+
.with(request)
|
117
|
+
.returns(response)
|
118
|
+
}
|
119
|
+
|
120
|
+
it 'returns the expected status code' do
|
121
|
+
code, _ = subject.send(:execute, credentials, request)
|
122
|
+
code.must_equal expected_code
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'returns the expected body' do
|
126
|
+
_, body = subject.send(:execute, credentials, request)
|
127
|
+
body.must_equal expected_body
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
describe Esendex::Dispatcher do
|
4
|
+
let(:credentials) { dummy_credentials }
|
5
|
+
subject { Esendex::Dispatcher.new(credentials) }
|
6
|
+
|
7
|
+
describe '.send' do
|
8
|
+
let(:body) { 'Hey I am message' }
|
9
|
+
let(:to) { '44123456789' }
|
10
|
+
let(:messages) { mock }
|
11
|
+
let(:response_xml) { mock }
|
12
|
+
let(:response_message_headers) { mock }
|
13
|
+
|
14
|
+
before {
|
15
|
+
args = {
|
16
|
+
account_reference: credentials.account_reference,
|
17
|
+
messages: [{ to: to, body: body }]
|
18
|
+
}
|
19
|
+
|
20
|
+
Esendex::Requests::Messages
|
21
|
+
.expects(:new)
|
22
|
+
.with(args)
|
23
|
+
.returns(messages)
|
24
|
+
|
25
|
+
Esendex::Responses::MessageDispatcherHeaders
|
26
|
+
.expects(:deserialise)
|
27
|
+
.with(response_xml)
|
28
|
+
.returns(response_message_headers)
|
29
|
+
|
30
|
+
Esendex::Client
|
31
|
+
.expects(:post)
|
32
|
+
.with(credentials, 'v1.0/messagedispatcher', messages)
|
33
|
+
.yields(200, response_xml)
|
34
|
+
.returns(response_message_headers)
|
35
|
+
}
|
36
|
+
|
37
|
+
it 'sends a single message' do
|
38
|
+
subject.send(body, to).must_equal response_message_headers
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
describe Esendex::Messages do
|
4
|
+
subject { dummy_esendex }
|
5
|
+
let(:credentials) { subject.instance_variable_get(:@credentials) }
|
6
|
+
|
7
|
+
describe '#sent' do
|
8
|
+
let(:xml) { "Hey I'm xml" }
|
9
|
+
let(:first_message) { Object.new }
|
10
|
+
let(:parsed_messages) { stub(messageheaders: [first_message]) }
|
11
|
+
|
12
|
+
before {
|
13
|
+
Esendex::Client
|
14
|
+
.expects(:get)
|
15
|
+
.with(credentials, 'v1.0/messageheaders', startIndex: 0, count: 25)
|
16
|
+
.yields(200, xml)
|
17
|
+
.returns(parsed_messages.messageheaders)
|
18
|
+
|
19
|
+
Esendex::Responses::MessageHeaders
|
20
|
+
.expects(:deserialise)
|
21
|
+
.with(xml)
|
22
|
+
.returns(parsed_messages)
|
23
|
+
}
|
24
|
+
|
25
|
+
it 'returns the messages sent by the user on the account' do
|
26
|
+
sent = subject.messages.sent
|
27
|
+
sent.first.must_equal first_message
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#get' do
|
32
|
+
let(:message_id) { "guid" }
|
33
|
+
let(:xml) { "Hey I'm xml" }
|
34
|
+
let(:parsed_message) { Object.new }
|
35
|
+
|
36
|
+
before {
|
37
|
+
Esendex::Client
|
38
|
+
.expects(:get)
|
39
|
+
.with(credentials, "v1.0/messageheaders/#{message_id}")
|
40
|
+
.yields(200, xml)
|
41
|
+
.returns(parsed_message)
|
42
|
+
|
43
|
+
Esendex::Responses::MessageHeader
|
44
|
+
.expects(:deserialise)
|
45
|
+
.with(xml)
|
46
|
+
.returns(parsed_message)
|
47
|
+
}
|
48
|
+
|
49
|
+
it 'returns the message sent with the given id' do
|
50
|
+
sent = subject.messages.get(message_id)
|
51
|
+
sent.must_equal parsed_message
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
describe Esendex::Requests::Messages do
|
4
|
+
subject { Esendex::Requests::Messages }
|
5
|
+
|
6
|
+
describe '#serialise' do
|
7
|
+
let(:reference) { 'EX0000' }
|
8
|
+
let(:first) { { to: 'someone', body: 'yo' } }
|
9
|
+
let(:second) { { to: 'other', body: 'what?' } }
|
10
|
+
|
11
|
+
it 'returns an xml representation of the instance' do
|
12
|
+
messages = subject.new({
|
13
|
+
account_reference: reference,
|
14
|
+
messages: [first, second]
|
15
|
+
})
|
16
|
+
|
17
|
+
messages.serialise.must_equal <<EOS
|
18
|
+
<?xml version="1.0" encoding="utf-8"?>
|
19
|
+
<messages>
|
20
|
+
<accountreference>#{reference}</accountreference>
|
21
|
+
<message>
|
22
|
+
<to>#{first[:to]}</to>
|
23
|
+
<body>#{first[:body]}</body>
|
24
|
+
</message>
|
25
|
+
<message>
|
26
|
+
<to>#{second[:to]}</to>
|
27
|
+
<body>#{second[:body]}</body>
|
28
|
+
</message>
|
29
|
+
</messages>
|
30
|
+
EOS
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
describe Esendex::Responses::Account do
|
4
|
+
describe '.deserialise' do
|
5
|
+
|
6
|
+
let(:id) { "A00F0218-510D-423D-A74E-5A65342FE070" }
|
7
|
+
let(:uri) { "http://api.esendex.com/v1.0/accounts/A00F0218-510D-423D-A74E-5A65342FE070" }
|
8
|
+
let(:reference) { "EX0000000" }
|
9
|
+
let(:label) { "label" }
|
10
|
+
let(:address) { "447700900654" }
|
11
|
+
let(:type) { "Professional" }
|
12
|
+
let(:messagesremaining) { 2000 }
|
13
|
+
let(:expireson) { "2999-02-25T00:00:00" }
|
14
|
+
let(:role) { "PowerUser" }
|
15
|
+
let(:settings_uri) { "http://api.esendex.com/v1.0/accounts/A00F0218-510D-423D-A74E-5A65342FE070/settings" }
|
16
|
+
|
17
|
+
let(:xml) {
|
18
|
+
<<EOS
|
19
|
+
<?xml version="1.0" encoding="utf-8"?>
|
20
|
+
<account id="#{id}" uri="#{uri}" xmlns="http://api.esendex.com/ns/">
|
21
|
+
<reference>#{reference}</reference>
|
22
|
+
<label>#{label}</label>
|
23
|
+
<address>#{address}</address>
|
24
|
+
<type>#{type}</type>
|
25
|
+
<messagesremaining>#{messagesremaining}</messagesremaining>
|
26
|
+
<expireson>#{expireson}</expireson>
|
27
|
+
<role>#{role}</role>
|
28
|
+
<settings uri="#{settings_uri}" />
|
29
|
+
</account>
|
30
|
+
EOS
|
31
|
+
}
|
32
|
+
|
33
|
+
it 'deserialises xml into an Account instance' do
|
34
|
+
account = Esendex::Responses::Account.deserialise(xml)
|
35
|
+
|
36
|
+
account.id.must_equal id
|
37
|
+
account.uri.must_equal uri
|
38
|
+
account.reference.must_equal reference
|
39
|
+
account.label.must_equal label
|
40
|
+
account.address.must_equal address
|
41
|
+
account.type.must_equal type
|
42
|
+
account.messages_remaining.must_equal messagesremaining
|
43
|
+
account.expires_on.must_equal expireson
|
44
|
+
account.role.must_equal role
|
45
|
+
account.settings.uri.must_equal settings_uri
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
describe Esendex::Responses::Accounts do
|
4
|
+
describe '.deserialise' do
|
5
|
+
|
6
|
+
let(:id) { "A00F0218-510D-423D-A74E-5A65342FE070" }
|
7
|
+
let(:uri) { "http://api.esendex.com/v1.0/accounts/A00F0218-510D-423D-A74E-5A65342FE070" }
|
8
|
+
let(:reference) { "EX0000000" }
|
9
|
+
let(:label) { "label" }
|
10
|
+
let(:address) { "447700900654" }
|
11
|
+
let(:type) { "Professional" }
|
12
|
+
let(:messagesremaining) { 2000 }
|
13
|
+
let(:expireson) { "2999-02-25T00:00:00" }
|
14
|
+
let(:role) { "PowerUser" }
|
15
|
+
let(:settings_uri) { "http://api.esendex.com/v1.0/accounts/A00F0218-510D-423D-A74E-5A65342FE070/settings" }
|
16
|
+
|
17
|
+
let(:xml) {
|
18
|
+
<<EOS
|
19
|
+
<?xml version="1.0" encoding="utf-8"?>
|
20
|
+
<accounts xmlns="http://api.esendex.com/ns/">
|
21
|
+
<account id="#{id}" uri="#{uri}">
|
22
|
+
<reference>#{reference}</reference>
|
23
|
+
<label>#{label}</label>
|
24
|
+
<address>#{address}</address>
|
25
|
+
<type>#{type}</type>
|
26
|
+
<messagesremaining>#{messagesremaining}</messagesremaining>
|
27
|
+
<expireson>#{expireson}</expireson>
|
28
|
+
<role>#{role}</role>
|
29
|
+
<settings uri="#{settings_uri}" />
|
30
|
+
</account>
|
31
|
+
</accounts>
|
32
|
+
EOS
|
33
|
+
}
|
34
|
+
|
35
|
+
it 'deserialises xml into an Accounts instance' do
|
36
|
+
accounts = Esendex::Responses::Accounts.deserialise(xml)
|
37
|
+
account = accounts.accounts.first
|
38
|
+
|
39
|
+
account.id.must_equal id
|
40
|
+
account.uri.must_equal uri
|
41
|
+
account.reference.must_equal reference
|
42
|
+
account.label.must_equal label
|
43
|
+
account.address.must_equal address
|
44
|
+
account.type.must_equal type
|
45
|
+
account.messages_remaining.must_equal messagesremaining
|
46
|
+
account.expires_on.must_equal expireson
|
47
|
+
account.role.must_equal role
|
48
|
+
account.settings.uri.must_equal settings_uri
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
describe Esendex::Responses::MessageDispatcherHeaders do
|
4
|
+
subject { Esendex::Responses::MessageDispatcherHeaders }
|
5
|
+
|
6
|
+
describe '.deserialise' do
|
7
|
+
let(:batch_id) { "F8BF9867-FF81-49E4-ACC5-774DE793B776" }
|
8
|
+
let(:header_uri) { "https://api.esendex.com/v1.0/MessageHeaders/1183C73D-2E62-4F60-B610-30F160BDFBD5" }
|
9
|
+
let(:header_id) { "1183C73D-2E62-4F60-B610-30F160BDFBD5" }
|
10
|
+
|
11
|
+
let(:xml) {
|
12
|
+
<<EOS
|
13
|
+
<?xml version="1.0" encoding="utf-8"?>
|
14
|
+
<messageheaders batchid="#{batch_id}"
|
15
|
+
xmlns="http://api.esendex.com/ns/">
|
16
|
+
<messageheader uri="#{header_uri}" id="#{header_id}" />
|
17
|
+
</messageheaders>
|
18
|
+
EOS
|
19
|
+
}
|
20
|
+
|
21
|
+
it 'deserialises xml into a MessageDispatcherHeaders instance' do
|
22
|
+
headers = subject.deserialise(xml)
|
23
|
+
|
24
|
+
headers.batch_id.must_equal batch_id
|
25
|
+
headers.message_headers.first.uri.must_equal header_uri
|
26
|
+
headers.message_headers.first.id.must_equal header_id
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
describe Esendex::Responses::MessageHeader do
|
4
|
+
describe '.deserialise' do
|
5
|
+
|
6
|
+
let(:id) { "CDEB3533-1F76-46D7-A2A9-0DAF8290F7FC" }
|
7
|
+
let(:uri) { "http://api.esendex.com/v1.0/messageheaders/CDEB3533-1F76-46D7-A2A9-0DAF8290F7FC/" }
|
8
|
+
let(:status) { "Delivered" }
|
9
|
+
let(:laststatusat) { "2010-01-01T12:00:05.000" }
|
10
|
+
let(:submittedat) { "2010-01-01T12:00:02.000" }
|
11
|
+
let(:type) { "SMS" }
|
12
|
+
let(:to) { "447700900123" }
|
13
|
+
let(:from) { "447700900654" }
|
14
|
+
let(:summary) { "Testing REST API" }
|
15
|
+
let(:body) { "http://api.esendex.com/v1.0/messageheaders/CDEB3533-1F76-46D7-A2A9-0DAF8290F7FC/body" }
|
16
|
+
let(:direction) { "Outbound" }
|
17
|
+
let(:parts) { 1 }
|
18
|
+
let(:username) { "user@example.com" }
|
19
|
+
|
20
|
+
let(:xml) {
|
21
|
+
<<EOS
|
22
|
+
<?xml version="1.0" encoding="utf-8"?>
|
23
|
+
<messageheader id="#{id}" uri="#{uri}" xmlns="http://api.esendex.com/ns/">
|
24
|
+
<status>#{status}</status>
|
25
|
+
<laststatusat>#{laststatusat}</laststatusat>
|
26
|
+
<submittedat>#{submittedat}</submittedat>
|
27
|
+
<type>#{type}</type>
|
28
|
+
<to>
|
29
|
+
<phonenumber>#{to}</phonenumber>
|
30
|
+
</to>
|
31
|
+
<from>
|
32
|
+
<phonenumber>#{from}</phonenumber>
|
33
|
+
</from>
|
34
|
+
<summary>#{summary}</summary>
|
35
|
+
<body uri="#{body}"/>
|
36
|
+
<direction>#{direction}</direction>
|
37
|
+
<parts>#{parts}</parts>
|
38
|
+
<username>#{username}</username>
|
39
|
+
</messageheader>
|
40
|
+
EOS
|
41
|
+
}
|
42
|
+
|
43
|
+
it 'deseralises xml into a MessageHeader instance' do
|
44
|
+
message_header = Esendex::Responses::MessageHeader.deserialise(xml)
|
45
|
+
|
46
|
+
message_header.id.must_equal id
|
47
|
+
message_header.uri.must_equal uri
|
48
|
+
message_header.status.must_equal status
|
49
|
+
message_header.last_status_at.must_equal Time.parse(laststatusat)
|
50
|
+
message_header.submitted_at.must_equal Time.parse(submittedat)
|
51
|
+
message_header.type.must_equal type
|
52
|
+
message_header.to.phonenumber.must_equal to
|
53
|
+
message_header.from.phonenumber.must_equal from
|
54
|
+
message_header.summary.must_equal summary
|
55
|
+
message_header.body.uri.must_equal body
|
56
|
+
message_header.direction.must_equal direction
|
57
|
+
message_header.parts.must_equal parts
|
58
|
+
message_header.username.must_equal username
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require_relative '../../helper'
|
2
|
+
|
3
|
+
describe Esendex::Responses::MessageHeaders do
|
4
|
+
describe '.deserialise' do
|
5
|
+
|
6
|
+
let(:startindex) { 5 }
|
7
|
+
let(:count) { 15 }
|
8
|
+
let(:totalcount) { 200 }
|
9
|
+
|
10
|
+
let(:id) { "CDEB3533-1F76-46D7-A2A9-0DAF8290F7FC" }
|
11
|
+
let(:uri) { "http://api.esendex.com/v1.0/messageheaders/CDEB3533-1F76-46D7-A2A9-0DAF8290F7FC/" }
|
12
|
+
let(:status) { "Delivered" }
|
13
|
+
let(:laststatusat) { "2010-01-01T12:00:05.000" }
|
14
|
+
let(:submittedat) { "2010-01-01T12:00:02.000" }
|
15
|
+
let(:type) { "SMS" }
|
16
|
+
let(:to) { "447700900123" }
|
17
|
+
let(:from) { "447700900654" }
|
18
|
+
let(:summary) { "Testing REST API" }
|
19
|
+
let(:body) { "http://api.esendex.com/v1.0/messageheaders/CDEB3533-1F76-46D7-A2A9-0DAF8290F7FC/body" }
|
20
|
+
let(:direction) { "Outbound" }
|
21
|
+
let(:parts) { 1 }
|
22
|
+
let(:username) { "user@example.com" }
|
23
|
+
|
24
|
+
let(:xml) {
|
25
|
+
<<EOS
|
26
|
+
<?xml version="1.0" encoding="utf-8"?>
|
27
|
+
<messageheaders startindex="#{startindex}" count="#{count}" totalcount="#{totalcount}" xmlns="http://api.esendex.com/ns/">
|
28
|
+
<messageheader id="#{id}" uri="#{uri}" xmlns="http://api.esendex.com/ns/">
|
29
|
+
<status>#{status}</status>
|
30
|
+
<laststatusat>#{laststatusat}</laststatusat>
|
31
|
+
<submittedat>#{submittedat}</submittedat>
|
32
|
+
<type>#{type}</type>
|
33
|
+
<to>
|
34
|
+
<phonenumber>#{to}</phonenumber>
|
35
|
+
</to>
|
36
|
+
<from>
|
37
|
+
<phonenumber>#{from}</phonenumber>
|
38
|
+
</from>
|
39
|
+
<summary>#{summary}</summary>
|
40
|
+
<body uri="#{body}"/>
|
41
|
+
<direction>#{direction}</direction>
|
42
|
+
<parts>#{parts}</parts>
|
43
|
+
<username>#{username}</username>
|
44
|
+
</messageheader>
|
45
|
+
</messageheaders>
|
46
|
+
EOS
|
47
|
+
}
|
48
|
+
|
49
|
+
it 'deserialises xml into a MessageHeaders instance' do
|
50
|
+
message_headers = Esendex::Responses::MessageHeaders.deserialise(xml)
|
51
|
+
|
52
|
+
message_headers.start_index.must_equal startindex
|
53
|
+
message_headers.count.must_equal count
|
54
|
+
message_headers.total_count.must_equal totalcount
|
55
|
+
|
56
|
+
message_header = message_headers.message_headers.first
|
57
|
+
|
58
|
+
message_header.id.must_equal id
|
59
|
+
message_header.uri.must_equal uri
|
60
|
+
message_header.status.must_equal status
|
61
|
+
message_header.last_status_at.must_equal Time.parse(laststatusat)
|
62
|
+
message_header.submitted_at.must_equal Time.parse(submittedat)
|
63
|
+
message_header.type.must_equal type
|
64
|
+
message_header.to.phonenumber.must_equal to
|
65
|
+
message_header.from.phonenumber.must_equal from
|
66
|
+
message_header.summary.must_equal summary
|
67
|
+
message_header.body.uri.must_equal body
|
68
|
+
message_header.direction.must_equal direction
|
69
|
+
message_header.parts.must_equal parts
|
70
|
+
message_header.username.must_equal username
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative '../helper'
|
2
|
+
|
3
|
+
describe Esendex::Users do
|
4
|
+
let(:credentials) { Esendex::Credentials.new('user', 'pass', 'ref') }
|
5
|
+
subject { Esendex::Users.new(credentials) }
|
6
|
+
|
7
|
+
describe '#username' do
|
8
|
+
it 'returns the username' do
|
9
|
+
subject.username.must_equal credentials.username
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
describe '#password' do
|
14
|
+
it 'returns the password' do
|
15
|
+
subject.password.must_equal credentials.password
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require_relative 'helper'
|
2
|
+
|
3
|
+
describe Esendex do
|
4
|
+
|
5
|
+
subject { dummy_esendex }
|
6
|
+
let(:credentials) { subject.instance_variable_get(:@credentials) }
|
7
|
+
|
8
|
+
describe '#account' do
|
9
|
+
let(:account) { Object.new }
|
10
|
+
|
11
|
+
it 'returns a new Accounts instance' do
|
12
|
+
Esendex::Accounts
|
13
|
+
.expects(:new)
|
14
|
+
.with(credentials)
|
15
|
+
.returns(account)
|
16
|
+
|
17
|
+
subject.account.must_equal account
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe '#dispatcher' do
|
22
|
+
let(:dispatcher) { Object.new }
|
23
|
+
|
24
|
+
it 'returns a new Dispatcher instance' do
|
25
|
+
Esendex::Dispatcher
|
26
|
+
.expects(:new)
|
27
|
+
.with(credentials)
|
28
|
+
.returns(dispatcher)
|
29
|
+
|
30
|
+
subject.dispatcher.must_equal dispatcher
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#messages' do
|
35
|
+
let(:messages) { Object.new }
|
36
|
+
|
37
|
+
it 'returns a new Messages instance' do
|
38
|
+
Esendex::Messages
|
39
|
+
.expects(:new)
|
40
|
+
.with(credentials)
|
41
|
+
.returns(messages)
|
42
|
+
|
43
|
+
subject.messages.must_equal messages
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#user' do
|
48
|
+
let(:user) { Object.new }
|
49
|
+
|
50
|
+
it 'returns a new Users instance' do
|
51
|
+
Esendex::Users
|
52
|
+
.expects(:new)
|
53
|
+
.with(credentials)
|
54
|
+
.returns(user)
|
55
|
+
|
56
|
+
subject.user.must_equal user
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
metadata
ADDED
@@ -0,0 +1,173 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: xednese
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Joshua Hawxwell
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-02-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: seq
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.2.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.2.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: serialisable
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: nokogiri
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.6'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.6'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.1'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.1'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: minitest
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '5.2'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '5.2'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: mocha
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.0'
|
97
|
+
description: |2
|
98
|
+
Xednese provides an easy to use client for interacting with the Esendex
|
99
|
+
REST API.
|
100
|
+
email: m@hawx.me
|
101
|
+
executables: []
|
102
|
+
extensions: []
|
103
|
+
extra_rdoc_files: []
|
104
|
+
files:
|
105
|
+
- README.md
|
106
|
+
- Gemfile
|
107
|
+
- Rakefile
|
108
|
+
- LICENSE
|
109
|
+
- lib/xednese.rb
|
110
|
+
- lib/xednese/accounts.rb
|
111
|
+
- lib/xednese/client.rb
|
112
|
+
- lib/xednese/messages.rb
|
113
|
+
- lib/xednese/version.rb
|
114
|
+
- lib/xednese/users.rb
|
115
|
+
- lib/xednese/responses/accounts.rb
|
116
|
+
- lib/xednese/responses/message_headers.rb
|
117
|
+
- lib/xednese/responses/parser.rb
|
118
|
+
- lib/xednese/responses/message_header.rb
|
119
|
+
- lib/xednese/responses/account.rb
|
120
|
+
- lib/xednese/responses/message_dispatcher_headers.rb
|
121
|
+
- lib/xednese/dispatcher.rb
|
122
|
+
- lib/xednese/requests/messages.rb
|
123
|
+
- spec/helper.rb
|
124
|
+
- spec/xednese_spec.rb
|
125
|
+
- spec/xednese/accounts_spec.rb
|
126
|
+
- spec/xednese/responses/message_header_spec.rb
|
127
|
+
- spec/xednese/responses/message_dispatcher_headers_spec.rb
|
128
|
+
- spec/xednese/responses/accounts_spec.rb
|
129
|
+
- spec/xednese/responses/account_spec.rb
|
130
|
+
- spec/xednese/responses/message_headers_spec.rb
|
131
|
+
- spec/xednese/dispatcher_spec.rb
|
132
|
+
- spec/xednese/messages_spec.rb
|
133
|
+
- spec/xednese/requests/messages_spec.rb
|
134
|
+
- spec/xednese/client_spec.rb
|
135
|
+
- spec/xednese/users_spec.rb
|
136
|
+
homepage: http://github.com/hawx/xednese
|
137
|
+
licenses:
|
138
|
+
- MIT
|
139
|
+
metadata: {}
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options: []
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
requirements: []
|
155
|
+
rubyforge_project:
|
156
|
+
rubygems_version: 2.0.14
|
157
|
+
signing_key:
|
158
|
+
specification_version: 4
|
159
|
+
summary: Client library for interacting with the Esendex API
|
160
|
+
test_files:
|
161
|
+
- spec/helper.rb
|
162
|
+
- spec/xednese_spec.rb
|
163
|
+
- spec/xednese/accounts_spec.rb
|
164
|
+
- spec/xednese/responses/message_header_spec.rb
|
165
|
+
- spec/xednese/responses/message_dispatcher_headers_spec.rb
|
166
|
+
- spec/xednese/responses/accounts_spec.rb
|
167
|
+
- spec/xednese/responses/account_spec.rb
|
168
|
+
- spec/xednese/responses/message_headers_spec.rb
|
169
|
+
- spec/xednese/dispatcher_spec.rb
|
170
|
+
- spec/xednese/messages_spec.rb
|
171
|
+
- spec/xednese/requests/messages_spec.rb
|
172
|
+
- spec/xednese/client_spec.rb
|
173
|
+
- spec/xednese/users_spec.rb
|