capistrano-mailgun 0.1.1 → 1.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.
- data/.rspec +1 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/README.md +97 -19
- data/capistrano-mailgun.gemspec +3 -0
- data/lib/capistrano-mailgun/version.rb +1 -1
- data/lib/capistrano-mailgun.rb +67 -36
- data/spec/capistrano-mailgun_spec.rb +174 -0
- data/spec/fixtures/html_body.erb +1 -0
- data/spec/fixtures/text_body.erb +1 -0
- data/spec/spec_helper.rb +18 -0
- metadata +52 -5
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--color
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Capistrano-Mailgun
|
1
|
+
# Capistrano-Mailgun [](https://travis-ci.org/spikegrobstein/capistrano-mailgun)
|
2
2
|
|
3
3
|
*Bust a cap in your deployment notifications*
|
4
4
|
|
@@ -29,17 +29,17 @@ In your `Capfile`, add:
|
|
29
29
|
|
30
30
|
To send a notification after deploy, add the following to your `deploy.rb` file:
|
31
31
|
|
32
|
-
require 'capistrano-mailgun'
|
33
|
-
|
34
32
|
set :mailgun_api_key, 'key-12345678901234567890123456789012' # your mailgun API key
|
35
33
|
set :mailgun_domain, 'example.com' # your mailgun email domain
|
36
34
|
set :mailgun_from, 'deployment@example.com' # who the email will appear to come from
|
37
35
|
set :mailgun_recipients, [ 'you@example.com', 'otherguy@example.com' ] # who will receive the email
|
38
36
|
|
39
|
-
# create an after:deploy hook
|
40
|
-
# pass it the path to an erb template.
|
41
37
|
# The erb template will have visibility into all your capistrano variables.
|
42
|
-
|
38
|
+
# this template will be the text body of the notification email
|
39
|
+
set :mailgun_text_template, File.join(File.dirname(__FILE__), 'mail.erb')
|
40
|
+
|
41
|
+
# create an after deploy hook
|
42
|
+
after(:deploy) { mailgun.notify_of_deploy }
|
43
43
|
|
44
44
|
You should then create a `mail.erb` file in the same directory as `deploy.rb`:
|
45
45
|
|
@@ -47,6 +47,55 @@ You should then create a `mail.erb` file in the same directory as `deploy.rb`:
|
|
47
47
|
|
48
48
|
That's it. When you do a deploy, it should automatically send an email.
|
49
49
|
|
50
|
+
## Example using mailgun.send_email
|
51
|
+
|
52
|
+
If you need a little more control over the message being sent or you want to bcc or be a little
|
53
|
+
more conditional over what you're sending, see the following example, which should be placed
|
54
|
+
in your `deploy.rb` file:
|
55
|
+
|
56
|
+
# when using send_email, the following 2 settings are REQUIRED
|
57
|
+
set :mailgun_api_key, 'key-12345678901234567890123456789012' # your mailgun API key
|
58
|
+
set :mailgun_domain, 'example.com' # your mailgun email domain
|
59
|
+
|
60
|
+
set(:email_body) { abort "Please set email_body using `-s email_body='this is the body of the email'" }
|
61
|
+
|
62
|
+
# some variables that we'll use when calling mailgun.send_email
|
63
|
+
set :ops_emails, [ 'alice', 'bob' ]
|
64
|
+
set :dev_emails, [ 'carl@contractors.com', 'dave' ]
|
65
|
+
|
66
|
+
# some basic tasks
|
67
|
+
namespace :email do
|
68
|
+
task :ops do
|
69
|
+
mailgun.send_email(
|
70
|
+
:to => mailgun.build_recipients(ops_emails, 'example.com'),
|
71
|
+
:from => 'some_dude@example.com',
|
72
|
+
:subject => 'you have just been mailgunned',
|
73
|
+
:text => email_body
|
74
|
+
)
|
75
|
+
end
|
76
|
+
|
77
|
+
task :devs do
|
78
|
+
mailgun.send_email(
|
79
|
+
:to => 'no-reply@example.com',
|
80
|
+
:from => 'no-reply@example.com',
|
81
|
+
:bcc => mailgun.build_recipients(dev_emails, 'example.com'),
|
82
|
+
:subject => 'You guys are just developers',
|
83
|
+
:text => email_body
|
84
|
+
)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
This defines 2 tasks that can be used to send emails to ops or devs. The `email:ops` task is using
|
89
|
+
an Capistrano variable `email_body` which should be set on the commandline. With this example, you could
|
90
|
+
send an email to ops guys like the following:
|
91
|
+
|
92
|
+
cap email:ops -s email_body="You guys are awesome. Keep up the good work"
|
93
|
+
|
94
|
+
You could also take advantage of `:text_template` and/or `:html_template` for more complex messages. The
|
95
|
+
above is just an example.
|
96
|
+
|
97
|
+
Also, notice the use of `mailgun.build_recipients`. See documentation below for more information.
|
98
|
+
|
50
99
|
## Capistrano Variables
|
51
100
|
|
52
101
|
`capistrano-mailgun` leverages variables defined in Capistrano to reduce the amount of configuration
|
@@ -71,6 +120,19 @@ An array of email addresses who should recieve a notification when a deployment
|
|
71
120
|
You can optionally only specify just the part of the email address before the @ and `capistrano-mailgun` will
|
72
121
|
automatically append the `mailgun_recipient_domain` to it. See `mailgun_recipient_domain`.
|
73
122
|
|
123
|
+
### mailgun_text_template (required for notify_of_deploy)
|
124
|
+
|
125
|
+
This is the path to the ERB template that `Capistrano::Mailgun` will use to create the text body of
|
126
|
+
your email. This is only required if you do not use the `mailgun_html_template` variable. You can
|
127
|
+
specify both text and html templates and the emails will contain the proper bodies where the client
|
128
|
+
supports it.
|
129
|
+
|
130
|
+
### mailgun_html_template (required for notify_of_deploy)
|
131
|
+
|
132
|
+
This is the path to the ERB template that will be used to generate the HTML body of the email. It is only
|
133
|
+
required if you do not specify the `mailgun_text_template` variable. You can specify both text and html
|
134
|
+
templates and emails will contain the proper bodies where the client supports it.
|
135
|
+
|
74
136
|
### mailgun_recipient_domain
|
75
137
|
|
76
138
|
The domain that will be automatically appended to incomplete email addresses in the `mailgun_recipients`.
|
@@ -87,23 +149,41 @@ Setting this will override the default.
|
|
87
149
|
|
88
150
|
`capistrano-mailgun` has a couple of methods to enable you to send emails easily. The following are the functions:
|
89
151
|
|
90
|
-
### mailgun.
|
152
|
+
### mailgun.build_recipients( recipients, default_domain=nil )
|
153
|
+
|
154
|
+
Given an array of email addresses, this will join them with a comma so any recipients field with more than 1 recipient
|
155
|
+
will be formatted properly. Typically, you will only use this function in the event that you're using `mailgun.send_email`.
|
156
|
+
|
157
|
+
You can also pass an alternate `default_domain`. This is useful if you're not using the global `mailgun_recipient_domain`
|
158
|
+
Capistrano variable of if you want to override the behavior in this one use-case. `mailgun.build_recipients` will always
|
159
|
+
choose the specified `default_domain` over `mailgun_recipient_domain`.
|
91
160
|
|
92
|
-
|
93
|
-
|
161
|
+
### mailgun.notify_of_deploy
|
162
|
+
|
163
|
+
This is a convenience function to send an email via the Mailgun api using your Capistrano variables for
|
164
|
+
basic configuration. It will use either/or `mailgun_html_template` and `mailgun_text_template` to generate the
|
165
|
+
email body, `mailgun_recipients` for who to address the email to, `mailgun_from` for the reply-to field
|
166
|
+
of the email and `mailgun_subject` for the subject of the email.
|
94
167
|
|
95
168
|
See Quickstart, above, for an example.
|
96
169
|
|
97
|
-
### mailgun.send_email(
|
170
|
+
### mailgun.send_email( options )
|
171
|
+
|
172
|
+
This is the base function for operating the Mailgun API. It uses the `mailgun_api_key` and `mailgun_domain`
|
173
|
+
Capistrano variables for interacting with the service. If you need additional control over headers and options
|
174
|
+
when sending the emails, call this function directly. For a full list of options, see the Mailgun REST API
|
175
|
+
documentation:
|
176
|
+
|
177
|
+
http://documentation.mailgun.net/api-sending.html
|
178
|
+
|
179
|
+
This function also takes the following additional options:
|
98
180
|
|
99
|
-
|
181
|
+
* `:text_template` -- a path to an ERB template for the text body of the email.
|
182
|
+
* `:html_template` -- a path to an ERB template for the HTML body of the email.
|
100
183
|
|
101
|
-
|
102
|
-
triggered by Capistrano. `mailgun.send_email` adheres to the same behavior for recipients (automatically adding
|
103
|
-
the domain to the email addresses) as the regular `mailgun.notify_of_deploy` function.
|
184
|
+
The templates will have access to all of your Capistrano variables.
|
104
185
|
|
105
|
-
|
106
|
-
capistrano has access to.
|
186
|
+
Of course, you can also pass `:text` and `:html` options for the exact text/html bodies of the sent emails.
|
107
187
|
|
108
188
|
### deployer_username
|
109
189
|
|
@@ -113,10 +193,8 @@ actually did the deployment.
|
|
113
193
|
|
114
194
|
## Limitations
|
115
195
|
|
116
|
-
* Only supports plain-text emails. This should be fixed in the next release.
|
117
196
|
* Only supports ERB for templates. This should be changed in a future release.
|
118
|
-
*
|
119
|
-
* Extremely limited access to Mailgun parameters. Eventually I'd like to add support for better customization of this.
|
197
|
+
* Currently requires that ERB templates are on the filesystem. Future releases may allow for inline templates.
|
120
198
|
|
121
199
|
## Contributing
|
122
200
|
|
data/capistrano-mailgun.gemspec
CHANGED
data/lib/capistrano-mailgun.rb
CHANGED
@@ -6,18 +6,54 @@ require 'erb'
|
|
6
6
|
module Capistrano
|
7
7
|
module Mailgun
|
8
8
|
|
9
|
+
def self.load_into(config)
|
10
|
+
config.load do
|
11
|
+
|
12
|
+
Capistrano.plugin :mailgun, Capistrano::Mailgun
|
13
|
+
|
14
|
+
set(:mailgun_subject) { "[Deployment] #{ application.capitalize } completed" }
|
15
|
+
|
16
|
+
set(:mailgun_api_key) { abort "Please set mailgun_api_key accordingly" }
|
17
|
+
set(:mailgun_domain) { abort "Please set mailgun_domain accordingly" }
|
18
|
+
set(:mailgun_from) { abort "Please set mailgun_from to your desired From field" }
|
19
|
+
set(:mailgun_recipients) { abort "Please specify mailgun_recipients" }
|
20
|
+
set(:mailgun_recipient_domain) { abort "Please set mailgun_recipient_domain accordingly" }
|
21
|
+
|
22
|
+
set(:deployer_username) do
|
23
|
+
if fetch(:scm, nil).to_sym == :git
|
24
|
+
`git config user.name`.chomp
|
25
|
+
else
|
26
|
+
`whoami`.chomp
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
end # config.load
|
32
|
+
end
|
33
|
+
|
9
34
|
# simple wrapper for sending an email with a given template
|
10
|
-
def send_email(
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
:subject => subject,
|
15
|
-
:text => ERB.new( File.open( find_template(template), 'r' ).read ).result(self.binding)
|
35
|
+
def send_email(options)
|
36
|
+
options = process_send_email_options(options)
|
37
|
+
|
38
|
+
RestClient.post build_mailgun_uri( mailgun_api_key, mailgun_domain ), options
|
16
39
|
end
|
17
40
|
|
18
41
|
# does a deploy notification leveraging variables defined in capistrano.
|
19
|
-
def notify_of_deploy
|
20
|
-
|
42
|
+
def notify_of_deploy
|
43
|
+
options = {
|
44
|
+
:to => build_recipients( fetch(:mailgun_recipients) ),
|
45
|
+
:from => fetch(:mailgun_from),
|
46
|
+
:subject => fetch(:mailgun_subject)
|
47
|
+
}
|
48
|
+
|
49
|
+
if fetch(:mailgun_text_template, nil).nil? && fetch(:mailgun_html_template, nil).nil?
|
50
|
+
abort "You must specify one (or both) of mailgun_text_template and mailgun_html_template to use notify_of_deploy"
|
51
|
+
end
|
52
|
+
|
53
|
+
options[:text_template] = fetch(:mailgun_text_template) if fetch(:mailgun_text_template, nil)
|
54
|
+
options[:html_template] = fetch(:mailgun_html_template) if fetch(:mailgun_html_template, nil)
|
55
|
+
|
56
|
+
send_email options
|
21
57
|
end
|
22
58
|
|
23
59
|
# kinda unused function for locating a provided template
|
@@ -26,42 +62,37 @@ module Capistrano
|
|
26
62
|
File.join( File.dirname(__FILE__), t )
|
27
63
|
end
|
28
64
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
recipients.map do |r|
|
34
|
-
if r.match /.+?@.+?$/
|
65
|
+
# regenerates the recipients list using the mailgun_domain for any reciients without domains
|
66
|
+
def build_recipients(recipients, default_domain=nil)
|
67
|
+
[*recipients].map do |r|
|
68
|
+
if r.match /.+?@.+?$/ # the email contains an @ so it's fully-qualified.
|
35
69
|
r
|
36
70
|
else
|
37
|
-
"#{ r }@#{ mailgun_recipient_domain }"
|
71
|
+
"#{ r }@#{ default_domain || fetch(:mailgun_recipient_domain) }"
|
38
72
|
end
|
39
|
-
end
|
73
|
+
end.uniq
|
40
74
|
end
|
41
75
|
|
42
|
-
|
43
|
-
end
|
76
|
+
private
|
44
77
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
if fetch(:scm, nil).to_sym == :git
|
59
|
-
`git config user.name`.chomp
|
60
|
-
else
|
61
|
-
`whoami`.chomp
|
62
|
-
end
|
78
|
+
# apply templates and all that jazz
|
79
|
+
def process_send_email_options(options)
|
80
|
+
text_template = options.delete(:text_template)
|
81
|
+
html_template = options.delete(:html_template)
|
82
|
+
|
83
|
+
options[:text] = ERB.new( File.open( find_template(text_template) ).read ).result(self.binding) if text_template
|
84
|
+
options[:html] = ERB.new( File.open( find_template(html_template) ).read ).result(self.binding) if html_template
|
85
|
+
|
86
|
+
options
|
87
|
+
end
|
88
|
+
|
89
|
+
def build_mailgun_uri(mailgun_api_key, mailgun_domain)
|
90
|
+
"https://api:#{ mailgun_api_key }@api.mailgun.net/v2/#{ mailgun_domain }/messages"
|
63
91
|
end
|
64
92
|
|
65
93
|
end
|
94
|
+
end
|
66
95
|
|
96
|
+
if Capistrano::Configuration.instance
|
97
|
+
Capistrano::Mailgun.load_into(Capistrano::Configuration.instance)
|
67
98
|
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Capistrano::Mailgun do
|
4
|
+
|
5
|
+
let(:config) do
|
6
|
+
Capistrano::Configuration.new
|
7
|
+
end
|
8
|
+
|
9
|
+
before do
|
10
|
+
Capistrano::Mailgun.load_into(config)
|
11
|
+
end
|
12
|
+
|
13
|
+
let!(:mailgun) { config.mailgun }
|
14
|
+
|
15
|
+
context '#buid_recipients' do
|
16
|
+
let(:email_1) { 'spike@example.com' }
|
17
|
+
let(:email_2) { 'bob@example.com' }
|
18
|
+
|
19
|
+
def build_recipients(recipients, default_domain=nil)
|
20
|
+
mailgun.send(:build_recipients, recipients, default_domain)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should accept a single recipient (not an array)" do
|
24
|
+
build_recipients(email_1).should == [email_1]
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should accept an array of recipeints" do
|
28
|
+
build_recipients( [email_1, email_2] ).should == [email_1, email_2]
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should deduplicate emails in the recipients" do
|
32
|
+
build_recipients( [email_1, email_2, email_1] ).should == [email_1, email_2]
|
33
|
+
end
|
34
|
+
|
35
|
+
context "when working with unqualified email addresses" do
|
36
|
+
before do
|
37
|
+
config.load do
|
38
|
+
set :mailgun_recipient_domain, 'another.com'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should add the mailgun_recipient_domain to any unqualified email addresses" do
|
43
|
+
build_recipients( %w( spike ) ).should == ['spike@another.com']
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should accept a mix of qualified and unqualified email addresses" do
|
47
|
+
build_recipients( [email_1, 'spike']).should == [email_1, 'spike@another.com']
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
context "when working with custom default domains" do
|
53
|
+
|
54
|
+
it "should not raise an error if mailgun_recipient_domain is not defined, but default_domain is" do
|
55
|
+
lambda { build_recipients( ['spike'], 'example.com' ) }.should_not raise_error
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should use the passed default_domain over the mailgun_recipient_domain if it's passed" do
|
59
|
+
config.load { set :mailgun_recipient_domain, 'example.com' }
|
60
|
+
build_recipients( ['spike'], 'awesome.com' ).should == ['spike@awesome.com']
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
context "#find_template" do
|
68
|
+
|
69
|
+
# future behavior might be different
|
70
|
+
it "should return the path passed to it" do
|
71
|
+
mailgun.find_template('asdf').should == 'asdf'
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
context "when ensuring cap variables are defined" do
|
78
|
+
|
79
|
+
def should_require(var)
|
80
|
+
lambda do
|
81
|
+
config.load { fetch var }
|
82
|
+
end.should raise_error
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should require mailgun_api_key" do
|
86
|
+
should_require :mailgun_api_key
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should require mailgun_domain" do
|
90
|
+
should_require :mailgun_domain
|
91
|
+
end
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
context "#send_email" do
|
96
|
+
|
97
|
+
before do
|
98
|
+
config.load do
|
99
|
+
set :mailgun_api_key, 'asdfasdf'
|
100
|
+
set :mailgun_domain, 'example.com'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
|
106
|
+
context "#notify_of_deploy" do
|
107
|
+
|
108
|
+
before do
|
109
|
+
config.load do
|
110
|
+
set :mailgun_recipients, 'people@example.com'
|
111
|
+
set :mailgun_from, 'me@example.com'
|
112
|
+
|
113
|
+
set :mailgun_subject, 'new subject'
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
it "should raise an error if neither mailgun_text_template nor mailgun_html_template are defined" do
|
118
|
+
lambda { mailgun.send(:notify_of_deploy) }.should raise_error
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should not raise an error if mailgun_text_template is defined" do
|
122
|
+
config.load { set :mailgun_text_template, 'template' }
|
123
|
+
mailgun.should_receive(:send_email)
|
124
|
+
|
125
|
+
lambda { mailgun.notify_of_deploy }.should_not raise_error
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should not raise an error if mailgun_html_template is defined" do
|
129
|
+
config.load { set :mailgun_html_template, 'template' }
|
130
|
+
mailgun.should_receive(:send_email)
|
131
|
+
|
132
|
+
lambda { mailgun.notify_of_deploy }.should_not raise_error
|
133
|
+
end
|
134
|
+
|
135
|
+
end
|
136
|
+
|
137
|
+
context "#process_send_email_options" do
|
138
|
+
let(:test_mailgun_domain) { 'example.com' }
|
139
|
+
|
140
|
+
before do
|
141
|
+
config.load { set :mailgun_domain, 'example.com' }
|
142
|
+
end
|
143
|
+
|
144
|
+
it "should set text to the rendered text template if text_template is passed" do
|
145
|
+
result = mailgun.send(:process_send_email_options, :text_template => fixture_path('text_body.erb'))
|
146
|
+
|
147
|
+
result[:text].should include(test_mailgun_domain)
|
148
|
+
result[:text].should_not include('<%=')
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should not change text if no text_template is passed" do
|
152
|
+
ERB.should_not_receive(:new)
|
153
|
+
File.should_not_receive(:open)
|
154
|
+
|
155
|
+
mailgun.send(:process_send_email_options, :text => 'normal text')[:text].should == 'normal text'
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should set html to the rendered html template if html_template is passed" do
|
159
|
+
result = mailgun.send(:process_send_email_options, :html_template => fixture_path('html_body.erb'))
|
160
|
+
|
161
|
+
result[:html].should include(test_mailgun_domain)
|
162
|
+
result[:html].should_not include('<%=')
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should not change html if no html_template is passed" do
|
166
|
+
ERB.should_not_receive(:new)
|
167
|
+
File.should_not_receive(:open)
|
168
|
+
|
169
|
+
mailgun.send(:process_send_email_options, :html => 'normal html')[:html].should == 'normal html'
|
170
|
+
end
|
171
|
+
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
This is an html template. <%= mailgun_domain %>
|
@@ -0,0 +1 @@
|
|
1
|
+
This is a text template. <%= mailgun_domain %>
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
|
4
|
+
require 'awesome_print'
|
5
|
+
|
6
|
+
$: << File.dirname(__FILE__) + '/../lib'
|
7
|
+
|
8
|
+
require 'capistrano'
|
9
|
+
require 'capistrano-mailgun'
|
10
|
+
|
11
|
+
Rspec.configure do |config|
|
12
|
+
# config
|
13
|
+
end
|
14
|
+
|
15
|
+
def fixture_path(filename)
|
16
|
+
File.join( File.dirname(__FILE__), 'fixtures', filename )
|
17
|
+
end
|
18
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-mailgun
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,40 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-10-15 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: capistrano
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rest-client
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
14
46
|
description: Notify of deploys and other actions using mailgun
|
15
47
|
email:
|
16
48
|
- spike@ticketevolution.com
|
@@ -19,6 +51,8 @@ extensions: []
|
|
19
51
|
extra_rdoc_files: []
|
20
52
|
files:
|
21
53
|
- .gitignore
|
54
|
+
- .rspec
|
55
|
+
- .travis.yml
|
22
56
|
- Gemfile
|
23
57
|
- LICENSE
|
24
58
|
- README.md
|
@@ -26,6 +60,10 @@ files:
|
|
26
60
|
- capistrano-mailgun.gemspec
|
27
61
|
- lib/capistrano-mailgun.rb
|
28
62
|
- lib/capistrano-mailgun/version.rb
|
63
|
+
- spec/capistrano-mailgun_spec.rb
|
64
|
+
- spec/fixtures/html_body.erb
|
65
|
+
- spec/fixtures/text_body.erb
|
66
|
+
- spec/spec_helper.rb
|
29
67
|
homepage: ''
|
30
68
|
licenses: []
|
31
69
|
post_install_message:
|
@@ -38,17 +76,26 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
38
76
|
- - ! '>='
|
39
77
|
- !ruby/object:Gem::Version
|
40
78
|
version: '0'
|
79
|
+
segments:
|
80
|
+
- 0
|
81
|
+
hash: 224140973397268413
|
41
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
42
83
|
none: false
|
43
84
|
requirements:
|
44
85
|
- - ! '>='
|
45
86
|
- !ruby/object:Gem::Version
|
46
87
|
version: '0'
|
88
|
+
segments:
|
89
|
+
- 0
|
90
|
+
hash: 224140973397268413
|
47
91
|
requirements: []
|
48
92
|
rubyforge_project:
|
49
93
|
rubygems_version: 1.8.24
|
50
94
|
signing_key:
|
51
95
|
specification_version: 3
|
52
96
|
summary: Notify of deploys and other actions using mailgun
|
53
|
-
test_files:
|
54
|
-
|
97
|
+
test_files:
|
98
|
+
- spec/capistrano-mailgun_spec.rb
|
99
|
+
- spec/fixtures/html_body.erb
|
100
|
+
- spec/fixtures/text_body.erb
|
101
|
+
- spec/spec_helper.rb
|