email_center_api 0.0.1
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/.gitignore +18 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +48 -0
- data/Rakefile +1 -0
- data/email_center_api.gemspec +25 -0
- data/lib/email_center_api/base.rb +40 -0
- data/lib/email_center_api/configuration.rb +32 -0
- data/lib/email_center_api/list.rb +90 -0
- data/lib/email_center_api/recipient.rb +62 -0
- data/lib/email_center_api/version.rb +3 -0
- data/lib/email_center_api.rb +13 -0
- data/spec/configuration_spec.rb +28 -0
- data/spec/list_spec.rb +119 -0
- data/spec/recipient_spec.rb +56 -0
- data/spec/spec_helper.rb +48 -0
- metadata +161 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Ed Robinson
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
# EmailCenterApi
|
2
|
+
|
3
|
+
A RubyGem That wraps EmailCenter's maxemail JSON Api
|
4
|
+
|
5
|
+
see http://maxemail.emailcenteruk.com/manual/doku.php?id=maxemail:v6:webservices
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
gem 'email_center_api'
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install email_center_api
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
Experimental and Feature Incomplete. Will allow some manipulation of
|
24
|
+
lists and recipients.
|
25
|
+
|
26
|
+
Try it out with something like this:
|
27
|
+
|
28
|
+
require 'rubygems'
|
29
|
+
require 'email_center_api'
|
30
|
+
require 'pry'
|
31
|
+
|
32
|
+
|
33
|
+
EmailCenterApi.configure do |config|
|
34
|
+
config.username = 'yourusername'
|
35
|
+
config.password = 'yourpassword'
|
36
|
+
end
|
37
|
+
|
38
|
+
binding.pry
|
39
|
+
|
40
|
+
## Contributing
|
41
|
+
|
42
|
+
1. Fork it
|
43
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
44
|
+
3. Write Some Tests
|
45
|
+
4. Write Some Code
|
46
|
+
5. Commit your changes (`git commit -am 'Add some feature'`)
|
47
|
+
6. Push to the branch (`git push origin my-new-feature`)
|
48
|
+
7. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'email_center_api/version'
|
5
|
+
require 'base64'
|
6
|
+
|
7
|
+
Gem::Specification.new do |gem|
|
8
|
+
gem.name = "email_center_api"
|
9
|
+
gem.version = EmailCenterApi::VERSION
|
10
|
+
gem.authors = ["Ed Robinson"]
|
11
|
+
gem.email = Base64.decode64("ZWQucm9iaW5zb25AcmVldm9vLmNvbQ==\n")
|
12
|
+
gem.description = %q{ A RubyGem That wraps EmailCenter's maxemail JSON Api }
|
13
|
+
gem.summary = %q{ A RubyGem That wraps EmailCenter's maxemail JSON Api }
|
14
|
+
gem.homepage = "https://github.com/reevoo/email_center_api"
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split($/)
|
17
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
19
|
+
gem.require_paths = ["lib"]
|
20
|
+
gem.add_dependency("httparty", "~> 0.9.0")
|
21
|
+
gem.add_dependency("json", "~> 1.7.5")
|
22
|
+
gem.add_development_dependency("fakeweb", "~> 1.3.0")
|
23
|
+
gem.add_development_dependency("rspec", "~> 2.11.0")
|
24
|
+
gem.add_development_dependency("pry")
|
25
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module EmailCenterApi
|
2
|
+
class Base
|
3
|
+
include HTTParty
|
4
|
+
default_timeout 10
|
5
|
+
|
6
|
+
def to_i
|
7
|
+
id
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.get(*args, &block)
|
11
|
+
base_uri EmailCenterApi.endpoint
|
12
|
+
basic_auth EmailCenterApi.username, EmailCenterApi.password
|
13
|
+
super(*args, &block)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.post(*args, &block)
|
17
|
+
base_uri EmailCenterApi.endpoint
|
18
|
+
basic_auth EmailCenterApi.username, EmailCenterApi.password
|
19
|
+
super(*args, &block)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.raise_errors(response)
|
23
|
+
if response['msg']
|
24
|
+
raise "Api Error: #{response['msg']}"
|
25
|
+
else
|
26
|
+
raise "Email Center Api: General Error!"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.get_with_retry(*args, &block)
|
31
|
+
retries = 0
|
32
|
+
begin
|
33
|
+
get(*args, &block)
|
34
|
+
rescue Timeout::Error
|
35
|
+
raise if (self.retries += 1) > 3
|
36
|
+
retry
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module EmailCenterApi
|
2
|
+
module Configuration
|
3
|
+
VALID_CONNECTION_KEYS = [:endpoint].freeze
|
4
|
+
VALID_OPTIONS_KEYS = [:username, :password].freeze
|
5
|
+
VALID_CONFIG_KEYS = VALID_CONNECTION_KEYS + VALID_OPTIONS_KEYS
|
6
|
+
|
7
|
+
DEFAULT_USERNAME = 'test'
|
8
|
+
DEFAULT_PASSWORD = 'test'
|
9
|
+
DEFAULT_ENDPOINT = 'https://maxemail.emailcenteruk.com/api/json/'
|
10
|
+
# Build accessor methods for every config options so we can do this, for example:
|
11
|
+
# EmailCenterApi.endpoint = 'https://maxemail.emailcenteruk.com/api/json/'
|
12
|
+
attr_accessor *VALID_CONFIG_KEYS
|
13
|
+
|
14
|
+
# Make sure we have the default values set when we get 'extended'
|
15
|
+
def self.extended(base)
|
16
|
+
base.reset
|
17
|
+
end
|
18
|
+
|
19
|
+
#Configure the gem with a configure block
|
20
|
+
def configure
|
21
|
+
yield self
|
22
|
+
end
|
23
|
+
|
24
|
+
def reset
|
25
|
+
self.username = DEFAULT_USERNAME
|
26
|
+
self.password = DEFAULT_PASSWORD
|
27
|
+
self.endpoint = DEFAULT_ENDPOINT
|
28
|
+
end
|
29
|
+
|
30
|
+
end # Configuration
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module EmailCenterApi
|
2
|
+
class List < EmailCenterApi::Base
|
3
|
+
attr_accessor :name, :created_ts, :list_total, :folder_id, :type, :id, :status, :update_ts
|
4
|
+
|
5
|
+
def initialize(name, created_ts, list_total, folder_id, type, id, status, update_ts)
|
6
|
+
self.name = name
|
7
|
+
self.created_ts = created_ts
|
8
|
+
self.list_total = list_total.to_i
|
9
|
+
self.folder_id = folder_id.to_i
|
10
|
+
self.type = type
|
11
|
+
self.id = id.to_i
|
12
|
+
self.status = status
|
13
|
+
self.update_ts = update_ts
|
14
|
+
end
|
15
|
+
|
16
|
+
def insert_recipient(options)
|
17
|
+
self.class.insert_recipient(id, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def delete_recipient(recipient)
|
21
|
+
self.class.delete_recipient(id,recipient.to_i)
|
22
|
+
end
|
23
|
+
|
24
|
+
def recipients
|
25
|
+
response = self.class.get_with_retry("/list", :query => {:method => "fetchRecipients", "listId" => id, :limit => 100, :start => 0, :sort => "email_address", :dir => "ASC", :filter => ["email_address"]})
|
26
|
+
recipients = []
|
27
|
+
if response.success?
|
28
|
+
response['records'].each do |record|
|
29
|
+
recipients << EmailCenterApi::Recipient.new(record['recipient_id'],record['email_address'],record['update_ts'])
|
30
|
+
end
|
31
|
+
else
|
32
|
+
raise_errors(response)
|
33
|
+
end
|
34
|
+
recipients
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.find(list_id)
|
38
|
+
response = get_with_retry("/list?method=find&listId=#{list_id}")
|
39
|
+
if response.success?
|
40
|
+
self.new(response['name'], response['created_ts'], response['list_total'], response['folder_id'],
|
41
|
+
response['type'], response['list_id'], response['status'], response['update_ts'])
|
42
|
+
else
|
43
|
+
raise_errors(response)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.all
|
48
|
+
response = get_with_retry("/list?method=fetchAll")
|
49
|
+
if response.success?
|
50
|
+
lists = []
|
51
|
+
response.each do |list|
|
52
|
+
lists << self.new(list['name'], list['created_ts'], list['list_total'], list['folder_id'],
|
53
|
+
list['type'], list['list_id'], list['status'], list['update_ts'])
|
54
|
+
end
|
55
|
+
lists
|
56
|
+
else
|
57
|
+
raise response.response
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.find_by_name(name)
|
62
|
+
lists = all.collect {|list| list if list.name == name}.compact
|
63
|
+
if lists.empty?
|
64
|
+
raise "Api Error: No list named #{name} was found"
|
65
|
+
else
|
66
|
+
lists.first
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.insert_recipient(list_id, options)
|
71
|
+
body = { :method => "insertRecipient", :listId => list_id, :data => options }
|
72
|
+
response = post("/list", {:body => body })
|
73
|
+
if response.success?
|
74
|
+
Recipient.new(response['recipient_id'],response['email_address'],response['update_ts'])
|
75
|
+
else
|
76
|
+
raise_errors(response)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def self.delete_recipient(list_id, recipient_id)
|
81
|
+
body = { :method => "deleteRecipient", :listId => list_id, :recipientId => recipient_id }
|
82
|
+
response = post("/list", { :body => body })
|
83
|
+
if response.success?
|
84
|
+
response
|
85
|
+
else
|
86
|
+
raise_errors(response)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module EmailCenterApi
|
2
|
+
class Recipient < EmailCenterApi::Base
|
3
|
+
attr_accessor :id, :email_address, :domain_name, :updated_at
|
4
|
+
|
5
|
+
def initialize(id,email_address, updated_at)
|
6
|
+
self.id = id.to_i
|
7
|
+
self.email_address = email_address
|
8
|
+
self.updated_at = updated_at
|
9
|
+
end
|
10
|
+
|
11
|
+
def lists
|
12
|
+
lists = self.class.get_with_retry("/recipient?method=fetchLists&recipientId=#{id}")
|
13
|
+
if lists.success?
|
14
|
+
lists.collect{ |list| list if list['subscribed'] == "1" }.compact.collect do |list|
|
15
|
+
List.find(list['list_id'])
|
16
|
+
end
|
17
|
+
else
|
18
|
+
raise_errors(lists)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def unsubscribed?
|
23
|
+
!unsubscribed_from.empty?
|
24
|
+
end
|
25
|
+
|
26
|
+
def unsubscribed_from
|
27
|
+
lists = self.class.get_with_retry("/recipient", :query => { :method => "fetchLists", "recipientId" => id })
|
28
|
+
if lists.success?
|
29
|
+
lists.collect{ |list| list if list['subscribed'] == "0" }.compact.collect do |list|
|
30
|
+
List.find(list['list_id'])
|
31
|
+
end
|
32
|
+
else
|
33
|
+
raise_errors(lists)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.find(id)
|
38
|
+
recipient = get_with_retry("/recipient?method=find&recipientId=#{id}")
|
39
|
+
if recipient.success?
|
40
|
+
self.new(recipient['recipient_id'],recipient['email_address'],recipient['update_ts'])
|
41
|
+
else
|
42
|
+
raise_errors(recipient)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.find_by_email(email_address)
|
47
|
+
id = get_with_retry("/recipient", :query => {:method => "findByEmailAddress", "emailAddress" => email_address })
|
48
|
+
if id.success?
|
49
|
+
recipient = get_with_retry("/recipient?method=find&recipientId=#{id.body}")
|
50
|
+
if recipient.success?
|
51
|
+
self.new(recipient['recipient_id'],recipient['email_address'],recipient['update_ts'])
|
52
|
+
else
|
53
|
+
raise_errors(recipient)
|
54
|
+
end
|
55
|
+
else
|
56
|
+
raise_errors(id)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require "httparty"
|
2
|
+
require "email_center_api/version"
|
3
|
+
require "email_center_api/configuration"
|
4
|
+
require "email_center_api/base"
|
5
|
+
|
6
|
+
|
7
|
+
module EmailCenterApi
|
8
|
+
extend Configuration
|
9
|
+
end
|
10
|
+
|
11
|
+
require "email_center_api/list"
|
12
|
+
require "email_center_api/recipient"
|
13
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'configuration' do
|
4
|
+
after(:each) do
|
5
|
+
EmailCenterApi.reset
|
6
|
+
end
|
7
|
+
|
8
|
+
EmailCenterApi::Configuration::VALID_CONFIG_KEYS.each do |key|
|
9
|
+
describe ".#{key}" do
|
10
|
+
it 'should return the default value' do
|
11
|
+
EmailCenterApi.send(key).should == EmailCenterApi::Configuration.const_get("DEFAULT_#{key.to_s.upcase}")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe '.configure' do
|
17
|
+
EmailCenterApi::Configuration::VALID_CONFIG_KEYS.each do |key|
|
18
|
+
it "should set the #{key}" do
|
19
|
+
EmailCenterApi.configure do |config|
|
20
|
+
config.send("#{key}=", key)
|
21
|
+
end
|
22
|
+
EmailCenterApi.send(key).should == key
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
end
|
data/spec/list_spec.rb
ADDED
@@ -0,0 +1,119 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EmailCenterApi::List do
|
4
|
+
describe ".find" do
|
5
|
+
it "returns the list with the right id" do
|
6
|
+
EmailCenterApi::List.find(4).id.should == 4
|
7
|
+
end
|
8
|
+
|
9
|
+
it "Throws an exception if the list is not found" do
|
10
|
+
expect { EmailCenterApi::List.find(10) }.to raise_error "Api Error: Unable to find requested list"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe ".all" do
|
15
|
+
it "returns an array" do
|
16
|
+
EmailCenterApi::List.all.class.should == Array
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should have the correct number of elements" do
|
20
|
+
EmailCenterApi::List.all.size.should == 11
|
21
|
+
end
|
22
|
+
|
23
|
+
it "has List objects as elements in the array" do
|
24
|
+
EmailCenterApi::List.all.first.class.should == EmailCenterApi::List
|
25
|
+
end
|
26
|
+
|
27
|
+
it "sets up the list objects with the correct attributes" do
|
28
|
+
EmailCenterApi::List.all.first.id.should == 19
|
29
|
+
EmailCenterApi::List.all.first.status.should == "available"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe ".find_by_name" do
|
34
|
+
it "should return the correct named list" do
|
35
|
+
EmailCenterApi::List.find_by_name("Master Unsubscribe List").id.should == 4
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should throw an error if the list dosn't exist" do
|
39
|
+
expect { EmailCenterApi::List.find_by_name("Stupid Monkey List") }.to raise_error
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe ".insert_recipient" do
|
44
|
+
time = "#{Time.now}"
|
45
|
+
email = "james@example.com"
|
46
|
+
id = 123456
|
47
|
+
FakeWeb.register_uri(:post, "https://test:test@maxemail.emailcenteruk.com/api/json/list", :body => "{\"recipient_id\":\"#{id}\",\"email_address\":\"#{email}\",\"subscribed\":\"0\",\"update_ts\":\"#{time}\"}", :content_type => "application/json; charset=utf-8")
|
48
|
+
options = { :email => email, :subscribed => "0" }
|
49
|
+
|
50
|
+
it "hits the api with the correct post request" do
|
51
|
+
EmailCenterApi::Base.stub_chain(:post, :success?).and_return(true)
|
52
|
+
EmailCenterApi::Base.stub_chain(:post, :[]).and_return(1)
|
53
|
+
EmailCenterApi::Base.should_receive(:post).with("/list", {:body=>{:data=> options, :listId=>25, :method=>"insertRecipient"}})
|
54
|
+
EmailCenterApi::List.insert_recipient(25, options)
|
55
|
+
end
|
56
|
+
|
57
|
+
it "returns a recipient object" do
|
58
|
+
EmailCenterApi::List.insert_recipient(25, options).class.should == EmailCenterApi::Recipient
|
59
|
+
end
|
60
|
+
|
61
|
+
it "returns a recipient with the right attributes" do
|
62
|
+
EmailCenterApi::List.insert_recipient(25, options).id.should == id
|
63
|
+
EmailCenterApi::List.insert_recipient(25, options).email_address.should == email
|
64
|
+
EmailCenterApi::List.insert_recipient(25, options).updated_at.should == time
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "an instance method .insert_recipient" do
|
68
|
+
list = EmailCenterApi::List.new("A List", Time.now.to_s, 123, 14, "Sometype", 25, "A Status", Time.now.to_s)
|
69
|
+
it "works in a similar way" do
|
70
|
+
list.insert_recipient(options).class.should == EmailCenterApi::Recipient
|
71
|
+
list.insert_recipient(options).id.should == id
|
72
|
+
list.insert_recipient(options).email_address.should == email
|
73
|
+
list.insert_recipient(options).updated_at.should == time
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe ".delete_recipient" do
|
79
|
+
it "hits the api with the correct post request" do
|
80
|
+
EmailCenterApi::Base.stub_chain(:post, :success?).and_return(true)
|
81
|
+
EmailCenterApi::Base.should_receive(:post).with("/list", {:body=>{:recipientId=> 1234, :listId=>25, :method=>"deleteRecipient"}})
|
82
|
+
EmailCenterApi::List.delete_recipient(25,1234)
|
83
|
+
end
|
84
|
+
|
85
|
+
it "returns true if the recipient was removed from the list" do
|
86
|
+
FakeWeb.register_uri(:post, "https://test:test@maxemail.emailcenteruk.com/api/json/list", :body => "true", :content_type => "application/json; charset=utf-8")
|
87
|
+
EmailCenterApi::List.delete_recipient(25,1234)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "throws an error if the recipient dosn't exist on the list" do
|
91
|
+
FakeWeb.register_uri(:post, "https://test:test@maxemail.emailcenteruk.com/api/json/list", :body => "{\"success\":false,\"msg\":\"Unable to find requested list recipient\",\"code\":0,\"errors\":[]}", :content_type => "application/json; charset=utf-8", :status => 400)
|
92
|
+
expect { EmailCenterApi::List.delete_recipient(25,1234) }.to raise_error "Api Error: Unable to find requested list recipient"
|
93
|
+
end
|
94
|
+
|
95
|
+
it "has an instance method that accepts a recipient object" do
|
96
|
+
list = EmailCenterApi::List.new("A List", Time.now.to_s, 123, 14, "Sometype", 25, "A Status", Time.now.to_s)
|
97
|
+
EmailCenterApi::Base.stub_chain(:post, :success?).and_return(true)
|
98
|
+
EmailCenterApi::Base.should_receive(:post).with("/list", {:body=>{:recipientId=> 1234, :listId=>25, :method=>"deleteRecipient"}})
|
99
|
+
recipient = EmailCenterApi::Recipient.new(1234,"something@whatever.com",Time.now.to_s)
|
100
|
+
list.delete_recipient(recipient)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe ".recipients" do
|
105
|
+
id = rand(10000)
|
106
|
+
id2 = rand(10000)
|
107
|
+
recipients = "{\"list_total\":\"2\",\"count\":2,\"offset\":\"0\",\"limit\":\"100\",\"sort\":\"email_address\",\"dir\":\"ASC\",\"records\":[{\"record_type\":\"campaign\",\"subscribed\":\"0\",\"unsubscribe_method\":\"manual\",\"update_ts\":\"2012-09-11 16:43:10\",\"recipient_id\":\"#{id}\",\"email_address\":\"testing@exam41313ple123245.com\",\"Default.Date of Birth\":null,\"Default.EmailAddress\":null,\"Default.First Name\":null,\"Default.Gender\":null,\"Default.Last Name\":null,\"Default.Location\":null,\"Reviews.Country\":null,\"Reviews.product_image\":null,\"Reviews.purchase_date\":null,\"Reviews.questionnaire_no\":null,\"Reviews.questionnaire_short\":null,\"Reviews.questionnaire_yes\":null,\"Reviews.retailer_from\":null,\"Reviews.retailer_image\":null,\"Reviews.retailer_name\":null,\"Reviews.retailer_privacy_link\":null,\"Reviews.retailer_product_name\":null,\"Reviews.retailer_terms_conditions\":null,\"Reviews.retailer_website\":null,\"Reviews.subject\":null,\"Reviews.tracking_image\":null,\"Reviews.unsubscribe_link\":null,\"Reviews.variant\":null,\"Sent.FirstReview\":null},{\"record_type\":\"campaign\",\"subscribed\":\"1\",\"unsubscribe_method\":null,\"update_ts\":\"2012-09-11 16:26:09\",\"recipient_id\":\"#{id2}\",\"email_address\":\"testing@example.com\",\"Default.Date of Birth\":null,\"Default.EmailAddress\":null,\"Default.First Name\":null,\"Default.Gender\":null,\"Default.Last Name\":null,\"Default.Location\":null,\"Reviews.Country\":null,\"Reviews.product_image\":null,\"Reviews.purchase_date\":null,\"Reviews.questionnaire_no\":null,\"Reviews.questionnaire_short\":null,\"Reviews.questionnaire_yes\":null,\"Reviews.retailer_from\":null,\"Reviews.retailer_image\":null,\"Reviews.retailer_name\":null,\"Reviews.retailer_privacy_link\":null,\"Reviews.retailer_product_name\":null,\"Reviews.retailer_terms_conditions\":null,\"Reviews.retailer_website\":null,\"Reviews.subject\":null,\"Reviews.tracking_image\":null,\"Reviews.unsubscribe_link\":null,\"Reviews.variant\":null,\"Sent.FirstReview\":null}]}"
|
108
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/list?dir=ASC&filter[]=email_address&limit=100&listId=25&start=0&method=fetchRecipients&sort=email_address", :body => recipients, :content_type => "application/json; charset=utf-8")
|
109
|
+
list = EmailCenterApi::List.new("A List", Time.now.to_s, 123, 14, "Sometype", 25, "A Status", Time.now.to_s)
|
110
|
+
|
111
|
+
it "returns an array of the recipients in the list" do
|
112
|
+
list.recipients.first.class.should == EmailCenterApi::Recipient
|
113
|
+
list.recipients.first.id.should == id
|
114
|
+
list.recipients.last.id.should == id2
|
115
|
+
list.recipients.first.email_address.should == "testing@exam41313ple123245.com"
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe EmailCenterApi::Recipient do
|
4
|
+
describe ".find" do
|
5
|
+
it 'returns a recipient with the correct id' do
|
6
|
+
EmailCenterApi::Recipient.find(1234).id.should == 1234
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'returns a recipient with the correct params' do
|
10
|
+
EmailCenterApi::Recipient.find(1234).email_address.should == "test@example.co.uk"
|
11
|
+
EmailCenterApi::Recipient.find(1234).updated_at.should == "2012-01-21 07:15:13"
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'rases an error if the id is not found' do
|
15
|
+
expect { EmailCenterApi::Recipient.find(5678) }.to raise_error "Api Error: Unable to find selected recipient"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe ".unsubscribed_from" do
|
20
|
+
it "returns all the lists where subscribed == 0" do
|
21
|
+
EmailCenterApi::Recipient.find(1234).unsubscribed_from.first.id.should == 25
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe ".unsubscribed?" do
|
26
|
+
it "returns true if the recipient is unsubscribed from somthing" do
|
27
|
+
EmailCenterApi::Recipient.find(1234).unsubscribed?.should == true
|
28
|
+
end
|
29
|
+
|
30
|
+
it "returns false if the recipient is not unsubscribed from anything" do
|
31
|
+
EmailCenterApi::Recipient.find(2345).unsubscribed?.should == false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe ".lists" do
|
36
|
+
it "returns all the lists where subscribed == 1" do
|
37
|
+
EmailCenterApi::Recipient.find(1234).lists.first.id.should == 26
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe ".find" do
|
42
|
+
it "finds the recipient with the given id" do
|
43
|
+
EmailCenterApi::Recipient.find(1234).id.should == 1234
|
44
|
+
end
|
45
|
+
|
46
|
+
it "creates the objects with the correct params" do
|
47
|
+
EmailCenterApi::Recipient.find(1234).email_address.should == "test@example.co.uk"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe ".find_by_email" do
|
52
|
+
it "finds the correct recipient" do
|
53
|
+
EmailCenterApi::Recipient.find_by_email("test@example.co.uk").id.should == 1234
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'email_center_api'
|
2
|
+
require 'email_center_api/list'
|
3
|
+
require 'email_center_api/recipient'
|
4
|
+
require 'email_center_api/configuration'
|
5
|
+
|
6
|
+
require 'fakeweb'
|
7
|
+
require 'httparty'
|
8
|
+
FakeWeb.allow_net_connect = false
|
9
|
+
#Subscribed and Unsubscribed lists
|
10
|
+
lists_body = "[{\"recipient_id\":\"1234\",\"list_id\":\"25\",\"record_type\":\"campaign\",\"subscribed\":\"0\",\"unsubscribe_method\":\"manual\",\"update_ts\":\"2012-09-11 16:43:10\",\"list_name\":\"testunsub\",\"list_type\":\"suppression\",\"email_address\":\"test@example.co.uk\"},
|
11
|
+
{\"recipient_id\":\"1234\",\"list_id\":\"26\",\"record_type\":\"campaign\",\"subscribed\":\"1\",\"update_ts\":\"2012-09-11 16:43:10\",\"list_name\":\"testsublist\",\"list_type\":\"something\",\"email_address\":\"test@example.co.uk\"}]"
|
12
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/recipient?recipientId=1234&method=fetchLists", :body => lists_body, :content_type => "application/json" )
|
13
|
+
#Subscribed list only
|
14
|
+
sub_list_body = "[{\"recipient_id\":\"1234\",\"list_id\":\"26\",\"record_type\":\"campaign\",\"subscribed\":\"1\",\"update_ts\":\"2012-09-11 16:43:10\",\"list_name\":\"testsublist\",\"list_type\":\"something\",\"email_address\":\"test@example.co.uk\"}]"
|
15
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/recipient?recipientId=2346&method=fetchLists", :body => sub_list_body, :content_type => 'application/json')
|
16
|
+
#Find Recipient
|
17
|
+
recipient_body = "{\"recipient_id\":\"1234\",\"email_address\":\"test@example.co.uk\",\"domain_name\":\"example.co.uk\",\"update_ts\":\"2012-01-21 07:15:13\"}"
|
18
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/recipient?method=find&recipientId=1234", :body => recipient_body, :content_type => "application/json")
|
19
|
+
#Find another
|
20
|
+
another_recipient_body = "{\"recipient_id\":\"2346\",\"email_address\":\"test2@example.co.uk\",\"domain_name\":\"example.co.uk\",\"update_ts\":\"2012-01-21 07:15:13\"}"
|
21
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/recipient?method=find&recipientId=2345", :body => another_recipient_body, :content_type => "application/json")
|
22
|
+
|
23
|
+
#Recipient not found
|
24
|
+
recipient_not_found_body = "{\"success\":false,\"msg\":\"Unable to find selected recipient\",\"code\":0,\"errors\":[]}"
|
25
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/recipient?method=find&recipientId=5678", :body => recipient_not_found_body, :content_type => "application/json", :status => 400)
|
26
|
+
#Find List list
|
27
|
+
list = '{"list_id":"4","folder_id":"9","name":"Master Unsubscribe List","list_total":"1925","status":"available","type":"suppression","created_ts":"2009-02-13 11:18:05","update_ts":"2012-09-11 13:29:25"}'
|
28
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/list?method=find&listId=4", :body => list, :content_type => "application/json")
|
29
|
+
#List Not Found
|
30
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/list?method=find&listId=10", :body => '{"success":false,"msg":"Unable to find requested list","code":0,"errors":[]}', :content_type => "application/json", :status => 400)
|
31
|
+
#All lists
|
32
|
+
all_lists = '[{"list_id":"19","folder_id":"9","name":"111116_clicked_bad_link","list_total":"2930","status":"available","type":"include","created_ts":"2011-11-16 17:42:44","update_ts":"2011-11-16 17:43:02"},
|
33
|
+
{"list_id":"21","folder_id":"9","name":"111116_clicked_good_link","list_total":"3602","status":"available","type":"suppression","created_ts":"2011-11-16 17:43:28","update_ts":"2011-11-16 17:43:46"},
|
34
|
+
{"list_id":"23","folder_id":"9","name":"111123_clicked_initial_email","list_total":"23632","status":"available","type":"suppression","created_ts":"2011-11-23 10:02:03","update_ts":"2011-11-23 10:02:28"},
|
35
|
+
{"list_id":"7","folder_id":"9","name":"Contacts","list_total":"0","status":"available","type":"include","created_ts":"2011-08-10 16:23:39","update_ts":"2011-08-10 16:23:39"},
|
36
|
+
{"list_id":"2","folder_id":"9","name":"Master Bounce List","list_total":"4030","status":"available","type":"bounce","created_ts":"2009-02-13 11:18:05","update_ts":"2012-09-11 10:02:15"},
|
37
|
+
{"list_id":"9","folder_id":"33","name":"Master List","list_total":"7521","status":"available","type":"include","created_ts":"2011-08-15 14:50:05","update_ts":"2012-09-11 04:00:15"},
|
38
|
+
{"list_id":"4","folder_id":"9","name":"Master Unsubscribe List","list_total":"1925","status":"available","type":"suppression","created_ts":"2009-02-13 11:18:05","update_ts":"2012-09-11 13:29:25"},
|
39
|
+
{"list_id":"13","folder_id":"33","name":"Reminder List","list_total":"1642205","status":"available","type":"include","created_ts":"2011-10-03 16:22:09","update_ts":"2012-09-11 04:00:15"},
|
40
|
+
{"list_id":"5","folder_id":"9","name":"Test Data (EMC)","list_total":"9","status":"available","type":"include","created_ts":"2011-08-10 14:45:03","update_ts":"2011-08-10 14:48:34"},
|
41
|
+
{"list_id":"11","folder_id":"9","name":"Test Data (SD)","list_total":"3","status":"available","type":"include","created_ts":"2011-08-17 14:14:01","update_ts":"2011-08-17 14:16:48"},
|
42
|
+
{"list_id":"25","folder_id":"9","name":"testunsub","list_total":"0","status":"available","type":"suppression","created_ts":"2012-09-10 13:39:19","update_ts":"2012-09-10 13:39:19"}]'
|
43
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/list?method=fetchAll", :body => all_lists, :content_type => "application/json")
|
44
|
+
|
45
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/list?method=find&listId=25", :body => "{\"list_id\":\"25\",\"folder_id\":\"9\",\"name\":\"testunsub\",\"list_total\":\"2\",\"status\":\"available\",\"type\":\"suppression\",\"created_ts\":\"2012-09-10 13:39:19\",\"update_ts\":\"2012-09-12 10:23:20\"}", :content_type => "application/json")
|
46
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/list?method=find&listId=26", :body => "{\"list_id\":\"26\",\"folder_id\":\"9\",\"name\":\"tunsublist\",\"list_total\":\"2\",\"status\":\"available\",\"type\":\"something\",\"created_ts\":\"2012-09-10 13:39:19\",\"update_ts\":\"2012-09-12 10:23:20\"}", :content_type => "application/json")
|
47
|
+
|
48
|
+
FakeWeb.register_uri(:get, "https://test:test@maxemail.emailcenteruk.com/api/json/recipient?emailAddress=test%40example.co.uk&method=findByEmailAddress", :body => "1234")
|
metadata
ADDED
@@ -0,0 +1,161 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: email_center_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Ed Robinson
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-09-12 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: httparty
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 59
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 9
|
32
|
+
- 0
|
33
|
+
version: 0.9.0
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: json
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 1
|
45
|
+
segments:
|
46
|
+
- 1
|
47
|
+
- 7
|
48
|
+
- 5
|
49
|
+
version: 1.7.5
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: fakeweb
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ~>
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 27
|
61
|
+
segments:
|
62
|
+
- 1
|
63
|
+
- 3
|
64
|
+
- 0
|
65
|
+
version: 1.3.0
|
66
|
+
type: :development
|
67
|
+
version_requirements: *id003
|
68
|
+
- !ruby/object:Gem::Dependency
|
69
|
+
name: rspec
|
70
|
+
prerelease: false
|
71
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
hash: 35
|
77
|
+
segments:
|
78
|
+
- 2
|
79
|
+
- 11
|
80
|
+
- 0
|
81
|
+
version: 2.11.0
|
82
|
+
type: :development
|
83
|
+
version_requirements: *id004
|
84
|
+
- !ruby/object:Gem::Dependency
|
85
|
+
name: pry
|
86
|
+
prerelease: false
|
87
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
hash: 3
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
version: "0"
|
96
|
+
type: :development
|
97
|
+
version_requirements: *id005
|
98
|
+
description: " A RubyGem That wraps EmailCenter's maxemail JSON Api "
|
99
|
+
email: ed.robinson@reevoo.com
|
100
|
+
executables: []
|
101
|
+
|
102
|
+
extensions: []
|
103
|
+
|
104
|
+
extra_rdoc_files: []
|
105
|
+
|
106
|
+
files:
|
107
|
+
- .gitignore
|
108
|
+
- Gemfile
|
109
|
+
- LICENSE.txt
|
110
|
+
- README.md
|
111
|
+
- Rakefile
|
112
|
+
- email_center_api.gemspec
|
113
|
+
- lib/email_center_api.rb
|
114
|
+
- lib/email_center_api/base.rb
|
115
|
+
- lib/email_center_api/configuration.rb
|
116
|
+
- lib/email_center_api/list.rb
|
117
|
+
- lib/email_center_api/recipient.rb
|
118
|
+
- lib/email_center_api/version.rb
|
119
|
+
- spec/configuration_spec.rb
|
120
|
+
- spec/list_spec.rb
|
121
|
+
- spec/recipient_spec.rb
|
122
|
+
- spec/spec_helper.rb
|
123
|
+
homepage: https://github.com/reevoo/email_center_api
|
124
|
+
licenses: []
|
125
|
+
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options: []
|
128
|
+
|
129
|
+
require_paths:
|
130
|
+
- lib
|
131
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
none: false
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
hash: 3
|
137
|
+
segments:
|
138
|
+
- 0
|
139
|
+
version: "0"
|
140
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
|
+
none: false
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
hash: 3
|
146
|
+
segments:
|
147
|
+
- 0
|
148
|
+
version: "0"
|
149
|
+
requirements: []
|
150
|
+
|
151
|
+
rubyforge_project:
|
152
|
+
rubygems_version: 1.8.24
|
153
|
+
signing_key:
|
154
|
+
specification_version: 3
|
155
|
+
summary: A RubyGem That wraps EmailCenter's maxemail JSON Api
|
156
|
+
test_files:
|
157
|
+
- spec/configuration_spec.rb
|
158
|
+
- spec/list_spec.rb
|
159
|
+
- spec/recipient_spec.rb
|
160
|
+
- spec/spec_helper.rb
|
161
|
+
has_rdoc:
|