mailjet 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +42 -0
- data/README.md +457 -0
- data/Rakefile +14 -0
- data/lib/mailjet.rb +33 -0
- data/lib/mailjet/api.rb +20 -0
- data/lib/mailjet/api_error.rb +19 -0
- data/lib/mailjet/api_request.rb +70 -0
- data/lib/mailjet/campaign.rb +62 -0
- data/lib/mailjet/click.rb +15 -0
- data/lib/mailjet/configuration.rb +16 -0
- data/lib/mailjet/contact.rb +18 -0
- data/lib/mailjet/core_extensions/ostruct.rb +9 -0
- data/lib/mailjet/email.rb +4 -0
- data/lib/mailjet/list.rb +52 -0
- data/lib/mailjet/mailer.rb +19 -0
- data/lib/mailjet/rack/endpoint.rb +24 -0
- data/lib/mailjet/reporting.rb +41 -0
- data/lib/mailjet/template_category.rb +13 -0
- data/lib/mailjet/template_model.rb +13 -0
- data/lib/mailjet/version.rb +3 -0
- data/test/mailjet/api_request_test.rb +72 -0
- data/test/mailjet/api_test.rb +13 -0
- data/test/mailjet/campaign_test.rb +62 -0
- data/test/mailjet/configuration_test.rb +16 -0
- data/test/mailjet/contact_test.rb +24 -0
- data/test/mailjet/list_test.rb +62 -0
- data/test/mailjet/rack/endpoint_test.rb +30 -0
- data/test/mailjet/reporting_test.rb +26 -0
- data/test/mailjet/template_category_test.rb +13 -0
- data/test/mailjet/template_model_test.rb +13 -0
- data/test/mailjet_test.rb +19 -0
- data/test/minitest_helper.rb +23 -0
- metadata +198 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'mailjet/api'
|
2
|
+
|
3
|
+
module Mailjet
|
4
|
+
class TemplateModel < OpenStruct
|
5
|
+
class << self
|
6
|
+
def all(options = {})
|
7
|
+
(options.delete(:api) || Mailjet::Api.singleton).messageTplmodels(options)["templates"].map do |result_hash|
|
8
|
+
self.new(result_hash)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'minitest_helper'
|
4
|
+
|
5
|
+
describe Mailjet::ApiRequest do
|
6
|
+
|
7
|
+
describe "#request_path" do
|
8
|
+
it "should return the path of the method" do
|
9
|
+
Mailjet::ApiRequest.new('method_name').send(:request_path).must_equal '/0.1/methodName?output=json'
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should respect api_version" do
|
13
|
+
Mailjet.config.expects(:api_version).returns(0.2)
|
14
|
+
Mailjet::ApiRequest.new('method_name').send(:request_path).must_equal '/0.2/methodName?output=json'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#request_port" do
|
19
|
+
it "should return 80 if use_https is false" do
|
20
|
+
Mailjet.config.use_https = false
|
21
|
+
Mailjet::ApiRequest.new('method_name').send(:request_port).must_equal 80
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should return 443 if use_https is true" do
|
25
|
+
Mailjet.config.use_https = true
|
26
|
+
Mailjet::ApiRequest.new('method_name').send(:request_port).must_equal 443
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#request" do
|
31
|
+
it "should return an Http request" do
|
32
|
+
request = Mailjet::ApiRequest.new('method_name', {}, 'Post')
|
33
|
+
request.send(:request).must_be_kind_of(Net::HTTP::Post)
|
34
|
+
|
35
|
+
request = Mailjet::ApiRequest.new('method_name', {}, 'Get')
|
36
|
+
request.send(:request).must_be_kind_of(Net::HTTP::Get)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#response" do
|
41
|
+
it "should raise an ApiError if authentication fails" do
|
42
|
+
request = Mailjet::ApiRequest.new('method_name', {}, 'Get')
|
43
|
+
lambda {
|
44
|
+
request.response
|
45
|
+
}.must_raise(Mailjet::ApiError)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return a Hash with response values if request is ok" do
|
49
|
+
request = Mailjet::ApiRequest.new('user_infos', {}, 'Get')
|
50
|
+
response = request.response
|
51
|
+
response.must_be_kind_of(Hash)
|
52
|
+
response['infos']['username'].must_equal 'benoit.benezech@gmail.com'
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "#guess_request_type" do
|
57
|
+
it "should return 'Post' if method_name contains a special verb" do
|
58
|
+
Mailjet::ApiRequest.new('lists_add_contact').send(:guess_request_type).must_equal 'Post'
|
59
|
+
Mailjet::ApiRequest.new('lists_create').send(:guess_request_type).must_equal 'Post'
|
60
|
+
Mailjet::ApiRequest.new('lists_delete').send(:guess_request_type).must_equal 'Post'
|
61
|
+
Mailjet::ApiRequest.new('lists_remove_contact').send(:guess_request_type).must_equal 'Post'
|
62
|
+
Mailjet::ApiRequest.new('lists_update').send(:guess_request_type).must_equal 'Post'
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should return 'Get' if method_name does not contain a verb" do
|
66
|
+
Mailjet::ApiRequest.new('key_list').send(:guess_request_type).must_equal 'Get'
|
67
|
+
Mailjet::ApiRequest.new('contact_list').send(:guess_request_type).must_equal 'Get'
|
68
|
+
Mailjet::ApiRequest.new('lists_all').send(:guess_request_type).must_equal 'Get'
|
69
|
+
Mailjet::ApiRequest.new('lists_email').send(:guess_request_type).must_equal 'Get'
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'minitest_helper'
|
3
|
+
|
4
|
+
describe Mailjet::Api do
|
5
|
+
describe "#method_missing" do
|
6
|
+
it "should create an ApiRequest" do
|
7
|
+
|
8
|
+
request = mock(:response => true)
|
9
|
+
Mailjet::ApiRequest.expects(:new).with(:user_infos ,{:param1 => 1}, 'Post', Mailjet.config.api_key, Mailjet.config.secret_key).returns(request)
|
10
|
+
Mailjet::Api.new.user_infos({:param1 => 1}, 'Post')
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Mailjet::Campaign do
|
4
|
+
it 'has an integration suite, tested directly against Mailjet service' do
|
5
|
+
|
6
|
+
# init
|
7
|
+
Mailjet::List.all.each do |list|
|
8
|
+
list.delete
|
9
|
+
end
|
10
|
+
list = Mailjet::List.create(:label => 'My Mailjet list', :name => "mymailjetlist")
|
11
|
+
list.add_contacts("c1@contacts.com", "c2@contacts.com")
|
12
|
+
|
13
|
+
# Mailjet::Campaign.create
|
14
|
+
campaign = Mailjet::Campaign.create(
|
15
|
+
:title => "My Mailjet Campaign",
|
16
|
+
:list_id => list.id,
|
17
|
+
:from => Mailjet.config.default_from, # must be valid
|
18
|
+
:from_name => "Sender Name",
|
19
|
+
:subject => "Our new product",
|
20
|
+
:template_id => Mailjet::TemplateModel.all.first.id,
|
21
|
+
:lang => "en",
|
22
|
+
:footer => "default"
|
23
|
+
)
|
24
|
+
campaign.url.must_match /^https\:\/\/www\.mailjet\.com\/campaigns\/template\/[0-9]+$/
|
25
|
+
|
26
|
+
# Mailjet::Campaign.all
|
27
|
+
campaigns = Mailjet::Campaign.all
|
28
|
+
campaigns.wont_be_empty # we can't empty the whole campaign list...
|
29
|
+
campaigns.first.must_be_instance_of Mailjet::Campaign
|
30
|
+
|
31
|
+
# Mailjet::Campaign.find
|
32
|
+
Mailjet::Campaign.find(campaign.id).must_be_instance_of Mailjet::Campaign
|
33
|
+
Mailjet::Campaign.find(0).must_be_nil
|
34
|
+
|
35
|
+
# Mailjet::Campaign#update
|
36
|
+
campaign.update(:title => "My *new* Mailjet Campaign")
|
37
|
+
|
38
|
+
# Mailjet::Campaign#duplicate
|
39
|
+
dup = campaign.duplicate(:title => "My *new* Mailjet Campaign")
|
40
|
+
dup.must_be_instance_of Mailjet::Campaign
|
41
|
+
dup.id.wont_be_same_as campaign.id
|
42
|
+
|
43
|
+
# Mailjet::Campaign#send!
|
44
|
+
campaign.send!.must_equal 'OK'
|
45
|
+
# TODO does not work, 500 server side.
|
46
|
+
|
47
|
+
# Mailjet::Campaign#test
|
48
|
+
campaign.test('benoit.benezech@gmail.com').must_equal 'OK'
|
49
|
+
|
50
|
+
# Mailjet::Campaign#html
|
51
|
+
campaign.html.must_be_nil
|
52
|
+
# TODO how to get content in the campaign template?
|
53
|
+
|
54
|
+
campaign = Mailjet::Campaign.find(campaign.id)
|
55
|
+
|
56
|
+
# Mailjet::Campaign#contacts
|
57
|
+
campaign.contacts.wont_be_empty
|
58
|
+
|
59
|
+
# Mailjet::Campaign#statistics
|
60
|
+
campaign.statistics.keys.must_include "blocked"
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Mailjet::Configuration do
|
4
|
+
describe "accessors" do
|
5
|
+
it "should memorize values" do
|
6
|
+
Mailjet::Configuration.api_key = '1234'
|
7
|
+
Mailjet::Configuration.api_key.must_equal '1234'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#use_https" do
|
12
|
+
it "should be true by default" do
|
13
|
+
Mailjet::Configuration.use_https.must_equal true
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Mailjet::Contact do
|
4
|
+
it 'has an integration suite, tested directly against Mailjet service' do
|
5
|
+
# init
|
6
|
+
Mailjet::List.all.each do |list|
|
7
|
+
list.delete
|
8
|
+
end
|
9
|
+
list = Mailjet::List.create(:label => 'My Mailjet list', :name => "mymailjetlist")
|
10
|
+
list.add_contacts("c1@contacts.com")
|
11
|
+
|
12
|
+
# Mailjet::Contact.all
|
13
|
+
contacts = Mailjet::Contact.all
|
14
|
+
contacts.wont_be_empty # we can't empty the whole contact list...
|
15
|
+
contacts.first.must_be_instance_of Mailjet::Contact
|
16
|
+
|
17
|
+
# Mailjet::Contact.all(:openers => true)
|
18
|
+
# Mailjet::Contact.all(:openers => true).must_be_empty
|
19
|
+
# TODO :openers does not work, times out
|
20
|
+
|
21
|
+
# Mailjet::Contact#infos
|
22
|
+
contacts.first.infos["click"].wont_be_nil
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Mailjet::List do
|
4
|
+
it 'has an integration suite, tested directly against Mailjet service' do
|
5
|
+
# clean-up all existing lists:
|
6
|
+
Mailjet::List.all.each do |list|
|
7
|
+
list.delete
|
8
|
+
end
|
9
|
+
|
10
|
+
# Mailjet::List.all for no lists
|
11
|
+
Mailjet::List.all.must_be_empty
|
12
|
+
|
13
|
+
# Mailjet::List#create
|
14
|
+
list = Mailjet::List.create(:label => 'My Mailjet list', :name => "mymailjetlist")
|
15
|
+
list.must_be_instance_of Mailjet::List
|
16
|
+
list.label.must_equal 'My Mailjet list'
|
17
|
+
list.name.must_equal 'mymailjetlist'
|
18
|
+
|
19
|
+
# Mailjet::List#update.
|
20
|
+
list.update(:label => 'My updated Mailjet list', :name => "myupdatedmailjetlist").must_equal "OK"
|
21
|
+
updated_list = Mailjet::List.all.first
|
22
|
+
updated_list.label.must_equal 'My updated Mailjet list'
|
23
|
+
updated_list.name.must_equal 'myupdatedmailjetlist'
|
24
|
+
updated_list.id.must_equal list.id
|
25
|
+
|
26
|
+
# Mailjet::List.all
|
27
|
+
lists = Mailjet::List.all
|
28
|
+
lists.count.must_equal 1
|
29
|
+
lists.first.must_be_instance_of Mailjet::List
|
30
|
+
lists.first.id.must_equal updated_list.id
|
31
|
+
|
32
|
+
# Mailjet::List#add_contacts
|
33
|
+
list.add_contacts.must_equal "NotModified"
|
34
|
+
list.add_contacts("c1@contacts.com").must_equal "OK"
|
35
|
+
list.add_contacts("c1@contacts.com").must_equal "NotModified"
|
36
|
+
list.add_contacts("c2@contacts.com", "c3@contacts.com").must_equal "OK"
|
37
|
+
list.add_contacts("c4@contacts.com", "c5@contacts.com").must_equal "OK"
|
38
|
+
|
39
|
+
# Mailjet::List#contacts and validate results of add_contacts
|
40
|
+
contacts = list.contacts
|
41
|
+
contacts.first.must_be_instance_of Mailjet::Contact
|
42
|
+
contacts.map(&:email).sort.must_equal ["c1@contacts.com", "c2@contacts.com", "c3@contacts.com", "c4@contacts.com", "c5@contacts.com"]
|
43
|
+
|
44
|
+
# Mailjet::List#remove_contacts
|
45
|
+
list.remove_contacts.must_equal "NotModified"
|
46
|
+
list.remove_contacts("does-not-exist@nowhere.com").must_equal "NotModified"
|
47
|
+
list.remove_contacts("c1@contacts.com", "c2@contacts.com").must_equal "OK"
|
48
|
+
list.contacts.count.must_equal 3
|
49
|
+
|
50
|
+
# Mailjet::List#email
|
51
|
+
list.email.must_match /\@lists\.mailjet\.com$/
|
52
|
+
|
53
|
+
# Mailjet::List#statistics
|
54
|
+
list.statistics["sent"].must_equal "0"
|
55
|
+
|
56
|
+
# Mailjet::List#delete
|
57
|
+
list.delete.must_equal 'OK'
|
58
|
+
Mailjet::List.all.must_be_empty
|
59
|
+
exception = proc { list.delete }.must_raise(Mailjet::ApiError)
|
60
|
+
exception.to_s.must_match /This ID not appears to be an active list on your account/
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
require 'rack/mock'
|
3
|
+
|
4
|
+
SAMPLE_MAILJET_PAYLOAD = "{\"event\":\"open\",\"time\":1331581827,\"email\":\"benoit.benezech+1634@gmail.com\",\"mj_campaign_id\":\"105881975\",\"mj_contact_id\":\"116408391\",\"customcampaign\":null,\"ip\":\"88.164.20.58\",\"geo\":\"FR\",\"agent\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit\\/535.11 (KHTML, like Gecko) Chrome\\/17.0.963.79 Safari\\/535.11\"}"
|
5
|
+
SAMPLE_MAILJET_PARAMS = {"event"=>"open", "time"=>1331581827, "email"=>"benoit.benezech+1634@gmail.com", "mj_campaign_id"=>"105881975", "mj_contact_id"=>"116408391", "customcampaign"=>nil, "ip"=>"88.164.20.58", "geo"=>"FR", "agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11"}
|
6
|
+
|
7
|
+
|
8
|
+
describe Mailjet::Rack::Endpoint do
|
9
|
+
it "should decipher Mailjet's posted events and pass them to the block" do
|
10
|
+
# mock should receive :find with "benoit.benezech+1634@gmail.com" and will return true
|
11
|
+
$user_class_mock = MiniTest::Mock.new.expect(:find, true, ["benoit.benezech+1634@gmail.com"])
|
12
|
+
|
13
|
+
app = Rack::Builder.new do
|
14
|
+
use Rack::Lint
|
15
|
+
use Mailjet::Rack::Endpoint, '/callback' do |params|
|
16
|
+
$user_class_mock.find(params['email'])#.do_smtg_with_the_user....
|
17
|
+
end
|
18
|
+
run lambda { |env|
|
19
|
+
[200, {'Content-Type' => 'text/plain'}, ['passed through your endpoint, haha']]
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
response = Rack::MockRequest.new(app).get('/not_callback')
|
24
|
+
response.body.must_equal('passed through your endpoint, haha')
|
25
|
+
|
26
|
+
response = Rack::MockRequest.new(app).post('/callback', :input => SAMPLE_MAILJET_PAYLOAD)
|
27
|
+
response.body.must_equal('')
|
28
|
+
$user_class_mock.verify
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Mailjet::Reporting do
|
4
|
+
it 'has an integration suite, tested directly against Mailjet service' do
|
5
|
+
# Mailjet::Reporting.clicks
|
6
|
+
Mailjet::Reporting.clicks.must_be_instance_of Array
|
7
|
+
|
8
|
+
# Mailjet::Reporting.domains
|
9
|
+
Mailjet::Reporting.domains.must_be_instance_of Array
|
10
|
+
|
11
|
+
# Mailjet::Reporting.clients
|
12
|
+
Mailjet::Reporting.clients.must_be_instance_of Array
|
13
|
+
|
14
|
+
# Mailjet::Reporting.emails
|
15
|
+
Mailjet::Reporting.emails.must_be_instance_of Array
|
16
|
+
|
17
|
+
# Mailjet::Reporting.statistics
|
18
|
+
Mailjet::Reporting.statistics["cnt_messages"].wont_be_nil
|
19
|
+
|
20
|
+
# Mailjet::Reporting.geolocation
|
21
|
+
Mailjet::Reporting.geolocation.must_be_instance_of Hash
|
22
|
+
|
23
|
+
# Mailjet::Reporting.agents
|
24
|
+
Mailjet::Reporting.agents.must_be_instance_of Array
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Mailjet::TemplateCategory do
|
4
|
+
it 'has an integration suite, tested directly against Mailjet service' do
|
5
|
+
|
6
|
+
# Mailjet::TemplateCategory.all
|
7
|
+
models = Mailjet::TemplateCategory.all
|
8
|
+
models.wont_be_empty
|
9
|
+
model = models.find{|m| m.id == "2"} # from default Mailjet templates
|
10
|
+
model.must_be_instance_of Mailjet::TemplateCategory
|
11
|
+
model.label.must_equal "basic"
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Mailjet::TemplateModel do
|
4
|
+
it 'has an integration suite, tested directly against Mailjet service' do
|
5
|
+
|
6
|
+
# Mailjet::TemplateModel.all
|
7
|
+
models = Mailjet::TemplateModel.all
|
8
|
+
models.wont_be_empty
|
9
|
+
model = models.find{|t| t.id == '4'} # from default Mailjet templates
|
10
|
+
model.must_be_instance_of Mailjet::TemplateModel
|
11
|
+
model.name == "Text"
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
describe Mailjet do
|
4
|
+
describe "#configure" do
|
5
|
+
it "should permit to set api keys and remember them" do
|
6
|
+
Mailjet.configure do |config|
|
7
|
+
config.api_key = "1234"
|
8
|
+
config.secret_key = "5678"
|
9
|
+
config.domain = "domain_test"
|
10
|
+
config.default_from = "default from test"
|
11
|
+
end
|
12
|
+
|
13
|
+
Mailjet.config.api_key.must_equal "1234"
|
14
|
+
Mailjet.config.secret_key.must_equal "5678"
|
15
|
+
Mailjet.config.domain.must_equal "domain_test"
|
16
|
+
Mailjet.config.default_from = "default from test"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'minitest/matchers'
|
3
|
+
require "mocha"
|
4
|
+
require 'mailjet'
|
5
|
+
require 'turn'
|
6
|
+
|
7
|
+
test_account = YAML::load(File.new(File.expand_path("../../config.yml", __FILE__)))['mailjet']
|
8
|
+
|
9
|
+
MiniTest::Spec.before do
|
10
|
+
Mailjet.configure do |config|
|
11
|
+
config.api_key = test_account['api_key']
|
12
|
+
config.secret_key = test_account['secret_key']
|
13
|
+
config.domain = test_account['domain']
|
14
|
+
config.default_from = test_account['default_from']
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
MiniTest::Spec.after do
|
19
|
+
Object.send(:remove_const, 'Mailjet')
|
20
|
+
Dir["#{File.dirname(__FILE__)}/../lib/**/*.rb"].each {|f| load f}
|
21
|
+
end
|
22
|
+
|
23
|
+
Turn.config.format = :outline
|
metadata
ADDED
@@ -0,0 +1,198 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mailjet
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- "Aur\xC3\xA9lien AMILIN"
|
9
|
+
- "Benoit B\xC3\xA9n\xC3\xA9zech"
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
|
14
|
+
date: 2012-03-26 00:00:00 +02:00
|
15
|
+
default_executable:
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: activesupport
|
19
|
+
prerelease: false
|
20
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
|
+
none: false
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: 3.0.9
|
26
|
+
type: :runtime
|
27
|
+
version_requirements: *id001
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: actionmailer
|
30
|
+
prerelease: false
|
31
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
32
|
+
none: false
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 3.0.9
|
37
|
+
type: :development
|
38
|
+
version_requirements: *id002
|
39
|
+
- !ruby/object:Gem::Dependency
|
40
|
+
name: minitest
|
41
|
+
prerelease: false
|
42
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
43
|
+
none: false
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: "0"
|
48
|
+
type: :development
|
49
|
+
version_requirements: *id003
|
50
|
+
- !ruby/object:Gem::Dependency
|
51
|
+
name: minitest-matchers
|
52
|
+
prerelease: false
|
53
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: "0"
|
59
|
+
type: :development
|
60
|
+
version_requirements: *id004
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: turn
|
63
|
+
prerelease: false
|
64
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ">="
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: "0"
|
70
|
+
type: :development
|
71
|
+
version_requirements: *id005
|
72
|
+
- !ruby/object:Gem::Dependency
|
73
|
+
name: rake
|
74
|
+
prerelease: false
|
75
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: "0"
|
81
|
+
type: :development
|
82
|
+
version_requirements: *id006
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: json
|
85
|
+
prerelease: false
|
86
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: "0"
|
92
|
+
type: :development
|
93
|
+
version_requirements: *id007
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: rack
|
96
|
+
prerelease: false
|
97
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: "0"
|
103
|
+
type: :development
|
104
|
+
version_requirements: *id008
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: mocha
|
107
|
+
prerelease: false
|
108
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
109
|
+
none: false
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: "0"
|
114
|
+
type: :development
|
115
|
+
version_requirements: *id009
|
116
|
+
description: Cloud Emailing for easy delivery.
|
117
|
+
email:
|
118
|
+
- benoit.benezech@gmail.com
|
119
|
+
executables: []
|
120
|
+
|
121
|
+
extensions: []
|
122
|
+
|
123
|
+
extra_rdoc_files: []
|
124
|
+
|
125
|
+
files:
|
126
|
+
- lib/mailjet/api.rb
|
127
|
+
- lib/mailjet/api_error.rb
|
128
|
+
- lib/mailjet/api_request.rb
|
129
|
+
- lib/mailjet/campaign.rb
|
130
|
+
- lib/mailjet/click.rb
|
131
|
+
- lib/mailjet/configuration.rb
|
132
|
+
- lib/mailjet/contact.rb
|
133
|
+
- lib/mailjet/core_extensions/ostruct.rb
|
134
|
+
- lib/mailjet/email.rb
|
135
|
+
- lib/mailjet/list.rb
|
136
|
+
- lib/mailjet/mailer.rb
|
137
|
+
- lib/mailjet/rack/endpoint.rb
|
138
|
+
- lib/mailjet/reporting.rb
|
139
|
+
- lib/mailjet/template_category.rb
|
140
|
+
- lib/mailjet/template_model.rb
|
141
|
+
- lib/mailjet/version.rb
|
142
|
+
- lib/mailjet.rb
|
143
|
+
- MIT-LICENSE
|
144
|
+
- Rakefile
|
145
|
+
- README.md
|
146
|
+
- test/mailjet/api_request_test.rb
|
147
|
+
- test/mailjet/api_test.rb
|
148
|
+
- test/mailjet/campaign_test.rb
|
149
|
+
- test/mailjet/configuration_test.rb
|
150
|
+
- test/mailjet/contact_test.rb
|
151
|
+
- test/mailjet/list_test.rb
|
152
|
+
- test/mailjet/rack/endpoint_test.rb
|
153
|
+
- test/mailjet/reporting_test.rb
|
154
|
+
- test/mailjet/template_category_test.rb
|
155
|
+
- test/mailjet/template_model_test.rb
|
156
|
+
- test/mailjet_test.rb
|
157
|
+
- test/minitest_helper.rb
|
158
|
+
has_rdoc: true
|
159
|
+
homepage: http://www.mailjet.com
|
160
|
+
licenses: []
|
161
|
+
|
162
|
+
post_install_message:
|
163
|
+
rdoc_options: []
|
164
|
+
|
165
|
+
require_paths:
|
166
|
+
- lib
|
167
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
168
|
+
none: false
|
169
|
+
requirements:
|
170
|
+
- - ">="
|
171
|
+
- !ruby/object:Gem::Version
|
172
|
+
version: "0"
|
173
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
174
|
+
none: false
|
175
|
+
requirements:
|
176
|
+
- - ">="
|
177
|
+
- !ruby/object:Gem::Version
|
178
|
+
version: "0"
|
179
|
+
requirements: []
|
180
|
+
|
181
|
+
rubyforge_project:
|
182
|
+
rubygems_version: 1.6.2
|
183
|
+
signing_key:
|
184
|
+
specification_version: 3
|
185
|
+
summary: Cloud Emailing for easy delivery.
|
186
|
+
test_files:
|
187
|
+
- test/mailjet/api_request_test.rb
|
188
|
+
- test/mailjet/api_test.rb
|
189
|
+
- test/mailjet/campaign_test.rb
|
190
|
+
- test/mailjet/configuration_test.rb
|
191
|
+
- test/mailjet/contact_test.rb
|
192
|
+
- test/mailjet/list_test.rb
|
193
|
+
- test/mailjet/rack/endpoint_test.rb
|
194
|
+
- test/mailjet/reporting_test.rb
|
195
|
+
- test/mailjet/template_category_test.rb
|
196
|
+
- test/mailjet/template_model_test.rb
|
197
|
+
- test/mailjet_test.rb
|
198
|
+
- test/minitest_helper.rb
|