mailgun-mailbox 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.
- checksums.yaml +15 -0
- data/.gitignore +17 -0
- data/Gemfile +9 -0
- data/LICENSE.txt +22 -0
- data/README.md +56 -0
- data/Rakefile +1 -0
- data/features/mailgun-mailbox.feature +10 -0
- data/features/step_definitions/mailgun_steps.rb +50 -0
- data/features/support/env.rb +5 -0
- data/lib/mailgun/mailbox.rb +166 -0
- data/lib/mailgun/mailbox/version.rb +5 -0
- data/lib/mailgun/mailbox/wait_until.rb +12 -0
- data/lib/mailgun/mailbox/with_rescue.rb +34 -0
- data/mailgun-mailbox.gemspec +34 -0
- metadata +178 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YTczNGJmNTllNTQwNGUxNDc4MTI3MTA5MWMwYmJhMDhhZjM3ODcyNg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
N2Q2NWM3NzcyYTUzMmI5OTIwZWMxZTNkYTg2Nzk2NjQ5NmEyNTAyNQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZTRlYTYyN2MxNWM4OGRkZGMyZGVmM2NkN2E2ZGMyMTRhMjUzZjFhNjFmZDEx
|
10
|
+
MjQ3NWU0ZTExMTdiYzRhNTI1NTBiMmIxMTk3NDUzMzVmZTJmY2UzYzA4NzIz
|
11
|
+
MWE4ZmYwOGNiOTI2ZmQ3YmZmYTEwOTYzOTJmNmZiYjJkZTcyZTk=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
OTRlNTVjZjEyMzZiOGMxZDcyYzBhNzlkY2Y1MzQ4OWY4Y2EzN2ZmYWYyYWY5
|
14
|
+
NjI3MzIwZmNiZWJmNWYxOTdiMGI0MDE0Y2I1ZTM1OGEyMjIwOGVlMDQyMWQ5
|
15
|
+
YmMwNGVjMTkzYjEyM2M1ODAzNmJjNDNlMWZlZTJkZGVjY2JlNmI=
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Long Tail Ad Solutions
|
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,56 @@
|
|
1
|
+
# Mailgun::Mailbox
|
2
|
+
|
3
|
+
This library allows to have a disposable email address service built on top of subset of Mailgun Events and Storage API.
|
4
|
+
It does not require creating email address in advance.
|
5
|
+
We use this library as a part of our Cucumber Testing Framework to validate that emails are actually get sent to end users.
|
6
|
+
Also every test case should be independent from other test cases - email addresses should be unique every time.
|
7
|
+
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
gem 'mailgun-mailbox'
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install mailgun-mailbox
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
See features/steps_definitions.rb for detailed example
|
26
|
+
|
27
|
+
````ruby
|
28
|
+
require 'mailgun/mailbox'
|
29
|
+
|
30
|
+
#set thing up
|
31
|
+
#Mailgun::Mailbox.set_config(<your mailgun api key>, <your mailgun domain>)
|
32
|
+
#generate random email address with your mailgun domain
|
33
|
+
@email_address = Mailgun::Mailbox.generate_email()
|
34
|
+
|
35
|
+
#Here your app will send email message with specific subject to generated email address
|
36
|
+
#...
|
37
|
+
|
38
|
+
email = Mailgun::Mailbox.wait_for_email(<know subject>, email_address)
|
39
|
+
#print email body
|
40
|
+
puts email
|
41
|
+
|
42
|
+
#delete all emails sent to address:
|
43
|
+
Mailgun::Mailbox.delete_emails_to!(email_address)
|
44
|
+
````
|
45
|
+
|
46
|
+
## Testing package
|
47
|
+
|
48
|
+
$ cucumber MAILGUN_API_KEY=<your api key> MAILGUN_HOST=<your domain name registered with mailgun> SMTP_PASSWORD=<smtp password provided by mailgun for your domain>
|
49
|
+
|
50
|
+
## Contributing
|
51
|
+
|
52
|
+
1. Fork it
|
53
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
54
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
55
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
56
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Feature: Validating Mailgun Mailbox functionality
|
2
|
+
Scenario: Finding message with random address
|
3
|
+
When I send email to random mailbox with random subject
|
4
|
+
Then I can load this message from mailbox
|
5
|
+
|
6
|
+
Scenario: Deleting message
|
7
|
+
When I send email to random mailbox with random subject
|
8
|
+
Then I can load this message from mailbox
|
9
|
+
When I delete this message
|
10
|
+
Then I don't see this message in mailbox
|
@@ -0,0 +1,50 @@
|
|
1
|
+
When(/^I send email to random mailbox with random subject$/) do
|
2
|
+
|
3
|
+
Mailgun::Mailbox.set_config(ENV['MAILGUN_API_KEY'], ENV['MAILGUN_HOST'], 20)
|
4
|
+
@email_address = Mailgun::Mailbox.generate_email()
|
5
|
+
|
6
|
+
#send email with SMTP and mailgun account
|
7
|
+
options = { :address => "smtp.mailgun.org",
|
8
|
+
:port => 587,
|
9
|
+
:domain => ENV['MAILGUN_HOST'],
|
10
|
+
:user_name => "postmaster@#{ENV['MAILGUN_HOST']}",
|
11
|
+
:password => ENV['SMTP_PASSWORD'],
|
12
|
+
:authentication => 'plain',
|
13
|
+
:enable_starttls_auto => true }
|
14
|
+
|
15
|
+
|
16
|
+
Mail.defaults do
|
17
|
+
delivery_method :smtp, options
|
18
|
+
end
|
19
|
+
|
20
|
+
@subject = "Random Subject #{Random.rand(999)}"
|
21
|
+
|
22
|
+
@body = 'testing mailgun mailbox'
|
23
|
+
|
24
|
+
Mail.deliver({to:"#{@email_address}", from:"#{@email_address}", subject: "#{@subject}", body: @body})
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
Then(/^I can load this message from mailbox$/) do
|
29
|
+
email = Mailgun::Mailbox.wait_for_email(@subject, @email_address)
|
30
|
+
email.nil?.should_not be_true
|
31
|
+
email.should == @body
|
32
|
+
end
|
33
|
+
|
34
|
+
When(/^I delete this message$/) do
|
35
|
+
Mailgun::Mailbox.delete_emails_to!(@email_address)
|
36
|
+
end
|
37
|
+
|
38
|
+
Then(/^I don't see this message in mailbox$/) do
|
39
|
+
email = nil
|
40
|
+
found_email = false
|
41
|
+
begin
|
42
|
+
email = Mailgun::Mailbox.wait_for_email(@subject, @email_address, 15)
|
43
|
+
found_email = true
|
44
|
+
rescue Selenium::WebDriver::Error::TimeOutError=>e
|
45
|
+
email = nil
|
46
|
+
found_email = false
|
47
|
+
end
|
48
|
+
email.nil?.should be_true
|
49
|
+
found_email.should be_false
|
50
|
+
end
|
@@ -0,0 +1,166 @@
|
|
1
|
+
require 'mailgun/mailbox/version'
|
2
|
+
require 'rest_client'
|
3
|
+
require 'json'
|
4
|
+
require 'mail'
|
5
|
+
require 'mailgun/mailbox/wait_until'
|
6
|
+
require 'mailgun/mailbox/with_rescue'
|
7
|
+
|
8
|
+
|
9
|
+
module Mailgun
|
10
|
+
module Mailbox
|
11
|
+
@mailgun_user = 'api'
|
12
|
+
@mailgun_host = 'api.mailgun.net'
|
13
|
+
@mailbox_timeout = 90
|
14
|
+
|
15
|
+
@found_message = nil
|
16
|
+
@generated_email = nil
|
17
|
+
|
18
|
+
def self.get_events_url
|
19
|
+
base_url = "https://#{@mailgun_host}/v2/#{@mailbox_domain}/events"
|
20
|
+
add_auth(base_url)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.add_auth(base_url)
|
24
|
+
uri = URI(base_url)
|
25
|
+
uri.user=@mailgun_user
|
26
|
+
uri.password=@mailgun_key
|
27
|
+
uri.to_s
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.set_generated_email(email)
|
31
|
+
@generated_email = email
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
module_function
|
36
|
+
def look_for_email(subject, to_address)
|
37
|
+
|
38
|
+
to_address=@generated_email if to_address.nil?
|
39
|
+
|
40
|
+
t = events_request({:params => {:subject=>subject, :recipient => to_address}})
|
41
|
+
|
42
|
+
return if t['items'].count==0
|
43
|
+
|
44
|
+
m=nil
|
45
|
+
if t['items'][0].has_key?('storage')
|
46
|
+
m = get_first_message(t)
|
47
|
+
else
|
48
|
+
m = get_message_by_mid(t['items'][0]['message']['headers']['message-id'])
|
49
|
+
end
|
50
|
+
|
51
|
+
return if m.nil?
|
52
|
+
|
53
|
+
found_message = nil
|
54
|
+
found_message = m.text_part.decoded if m.text_part
|
55
|
+
found_message = m.html_part.decoded if m.html_part and found_message.nil?
|
56
|
+
found_message = m.body.decoded if found_message.nil?
|
57
|
+
return if found_message.nil?
|
58
|
+
return if found_message.length==0
|
59
|
+
@found_message = found_message
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
alias :_look_for_email :look_for_email
|
64
|
+
|
65
|
+
def get_message_by_mid(message_id)
|
66
|
+
t = events_request({:params => {'message-id' => message_id}})
|
67
|
+
return if !t.has_key?('items')
|
68
|
+
return if t['items'].count==0
|
69
|
+
return if !t['items'][0].has_key?('storage')
|
70
|
+
get_first_message(t)
|
71
|
+
end
|
72
|
+
|
73
|
+
def get_first_message(t)
|
74
|
+
msg_url = add_auth(t['items'][0]['storage']['url'])
|
75
|
+
r = RestClient.get add_auth(msg_url), {'accept' => 'message/rfc2822'}
|
76
|
+
t = JSON.parse(r.body)
|
77
|
+
m = Mail.new(t['body-mime'])
|
78
|
+
rescue RestClient::ResourceNotFound=>e
|
79
|
+
return nil
|
80
|
+
end
|
81
|
+
|
82
|
+
def events_request(params)
|
83
|
+
::Mailgun::RetryHelper::with_rescue_many([RestClient::BadGateway, RestClient::RequestTimeout], 5) do
|
84
|
+
r = RestClient.get get_events_url, params
|
85
|
+
JSON.parse(r.body)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.wait_for_email(subject, to_address)
|
90
|
+
to_address=@generated_email if to_address.nil?
|
91
|
+
::Mailgun::WaitUntil::wait_until(@mailbox_timeout, message="Email to '#{to_address}' with subject '#{subject}' was not found within #{@mailbox_timeout}") do
|
92
|
+
look_for_email(subject, to_address)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def self.get_message_urls(to_address)
|
97
|
+
t = events_request({:params => {:recipient => to_address}})
|
98
|
+
return if t['items'].count==0
|
99
|
+
t['items'].each do |item|
|
100
|
+
if item.has_key?('storage')
|
101
|
+
yield item['storage']['url']
|
102
|
+
else
|
103
|
+
t = events_request({:params => {'message-id' => item['message']['headers']['message-id']}})
|
104
|
+
yield t['items'][0]['storage']['url']
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
module_function
|
110
|
+
|
111
|
+
# deletes all email message in mailbox addressed to @to_address
|
112
|
+
# please note this method is tested to work on <100 messages in mailbox
|
113
|
+
# it would run slow if you'll try to delete 1000s of messages
|
114
|
+
# so it is suggested to run it after every test case
|
115
|
+
# @param [String] to_address
|
116
|
+
def delete_emails_to!(to_address)
|
117
|
+
get_message_urls(to_address) do |url|
|
118
|
+
RestClient.delete add_auth(url)
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
module_function
|
123
|
+
|
124
|
+
def clear_mailbox(to_address=nil)
|
125
|
+
to_address=@generated_email if to_address.nil?
|
126
|
+
delete_emails_to!(to_address)
|
127
|
+
end
|
128
|
+
|
129
|
+
module_function
|
130
|
+
#blocks till email message with specific subject and recipient address show up in the mailbox
|
131
|
+
#if email message doesn't show up withing <timeout> seconds throw Selenium::WebDriver::Error::TimeOutError exception
|
132
|
+
# @param [String] subject
|
133
|
+
# @param [String] to_address
|
134
|
+
# @param [Integer] timeout (optional)
|
135
|
+
# @return [String] return message body
|
136
|
+
# @raise Selenium::WebDriver::Error::TimeOutError if email message haven't shown up withing timeout seconds
|
137
|
+
def wait_for_email(subject, to_address, timeout=nil)
|
138
|
+
timeout = @mailbox_timeout if timeout.nil?
|
139
|
+
to_address=@generated_email if to_address.nil?
|
140
|
+
::Mailgun::WaitUntil::wait_until(timeout, message="Email to '#{to_address}' with subject '#{subject}' was not found within #{@mailbox_timeout}") do
|
141
|
+
look_for_email(subject, to_address)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
module_function
|
146
|
+
# @return [String] = random email address with Mailgun user Domain
|
147
|
+
def generate_email
|
148
|
+
@generated_email = "bot_test_runner+#{Time.now.strftime('%Y%m%d_%H%M%S')}_#{Random.rand(999)}@#{@mailbox_domain}"
|
149
|
+
end
|
150
|
+
|
151
|
+
module_function
|
152
|
+
# set configuration
|
153
|
+
# @param [String] mailgun_key
|
154
|
+
# @param [String] mailbox_domain
|
155
|
+
# @param [Integer] mailbox_timeout
|
156
|
+
# @param [String] mailgun_host
|
157
|
+
def set_config(mailgun_key, mailbox_domain, mailbox_timeout=90, mailgun_host='api.mailgun.net')
|
158
|
+
@mailgun_key = mailgun_key
|
159
|
+
@mailbox_domain = mailbox_domain
|
160
|
+
@mailgun_host = mailgun_host unless mailbox_timeout.nil?
|
161
|
+
@mailbox_timeout = mailbox_timeout unless mailbox_timeout.nil?
|
162
|
+
end
|
163
|
+
|
164
|
+
|
165
|
+
end
|
166
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'selenium/webdriver/common/error'
|
2
|
+
require 'selenium/webdriver/common/wait'
|
3
|
+
module Mailgun
|
4
|
+
module WaitUntil
|
5
|
+
|
6
|
+
def self.wait_until(timeout = 10, message=nil, &block)
|
7
|
+
wait = Selenium::WebDriver::Wait.new(:timeout => timeout, :message => message)
|
8
|
+
wait.until &block
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Mailgun
|
2
|
+
module RetryHelper
|
3
|
+
def self.with_rescue(exception, limit=1, &block)
|
4
|
+
|
5
|
+
try=0
|
6
|
+
begin
|
7
|
+
block.call(try)
|
8
|
+
rescue exception
|
9
|
+
try+=1
|
10
|
+
retry if try<=limit
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.with_rescue_many(exceptions, limit=1, &block)
|
15
|
+
|
16
|
+
try=0
|
17
|
+
begin
|
18
|
+
block.call(try)
|
19
|
+
rescue *exceptions
|
20
|
+
try+=1
|
21
|
+
retry if try<=limit
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
=begin
|
29
|
+
usage example
|
30
|
+
RetryHelper::with_rescue(Selenium::WebDriver::Error::StaleElementReferenceError, 5) do
|
31
|
+
page_headline.include?('Your Billing Information')
|
32
|
+
end
|
33
|
+
|
34
|
+
=end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'mailgun/mailbox/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "mailgun-mailbox"
|
8
|
+
spec.version = Mailgun::Mailbox::VERSION
|
9
|
+
spec.authors = ["Vladimir Vladimirov"]
|
10
|
+
spec.email = ["vladimir@jwplayer.com"]
|
11
|
+
spec.description = %q{Ruby client for Mailgun API that provides methods to use subset Mailgun Events and Storage API functionality as a disposable email address service.}
|
12
|
+
spec.summary = <<-eos
|
13
|
+
This library allows to have a disposable email address service built on top of subset of Mailgun Events and Storage API.
|
14
|
+
It does not require creating email address in advance.
|
15
|
+
We use this library as a part of our Cucumber Testing Framework to validate that emails are actually get sent to end users.
|
16
|
+
Also every test case should be independent from other test cases - email addresses should be unique every time.
|
17
|
+
eos
|
18
|
+
spec.homepage = "https://github.com/JWPlayer/mailgun-mailbox"
|
19
|
+
spec.license = "MIT"
|
20
|
+
|
21
|
+
spec.files = `git ls-files`.split($/)
|
22
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
24
|
+
spec.require_paths = ["lib"]
|
25
|
+
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
27
|
+
spec.add_development_dependency "rake"
|
28
|
+
spec.add_development_dependency "rspec"
|
29
|
+
spec.add_development_dependency "cucumber"
|
30
|
+
spec.add_dependency "rest-client"
|
31
|
+
spec.add_dependency "json"
|
32
|
+
spec.add_dependency "mail"
|
33
|
+
spec.add_dependency "selenium-webdriver"
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,178 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mailgun-mailbox
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Vladimir Vladimirov
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-01-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: cucumber
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rest-client
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ! '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: json
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ! '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: mail
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: selenium-webdriver
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ! '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: Ruby client for Mailgun API that provides methods to use subset Mailgun
|
126
|
+
Events and Storage API functionality as a disposable email address service.
|
127
|
+
email:
|
128
|
+
- vladimir@jwplayer.com
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- .gitignore
|
134
|
+
- Gemfile
|
135
|
+
- LICENSE.txt
|
136
|
+
- README.md
|
137
|
+
- Rakefile
|
138
|
+
- features/mailgun-mailbox.feature
|
139
|
+
- features/step_definitions/mailgun_steps.rb
|
140
|
+
- features/support/env.rb
|
141
|
+
- lib/mailgun/mailbox.rb
|
142
|
+
- lib/mailgun/mailbox/version.rb
|
143
|
+
- lib/mailgun/mailbox/wait_until.rb
|
144
|
+
- lib/mailgun/mailbox/with_rescue.rb
|
145
|
+
- mailgun-mailbox.gemspec
|
146
|
+
homepage: https://github.com/JWPlayer/mailgun-mailbox
|
147
|
+
licenses:
|
148
|
+
- MIT
|
149
|
+
metadata: {}
|
150
|
+
post_install_message:
|
151
|
+
rdoc_options: []
|
152
|
+
require_paths:
|
153
|
+
- lib
|
154
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - ! '>='
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '0'
|
159
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
160
|
+
requirements:
|
161
|
+
- - ! '>='
|
162
|
+
- !ruby/object:Gem::Version
|
163
|
+
version: '0'
|
164
|
+
requirements: []
|
165
|
+
rubyforge_project:
|
166
|
+
rubygems_version: 2.1.9
|
167
|
+
signing_key:
|
168
|
+
specification_version: 4
|
169
|
+
summary: This library allows to have a disposable email address service built on top
|
170
|
+
of subset of Mailgun Events and Storage API. It does not require creating email
|
171
|
+
address in advance. We use this library as a part of our Cucumber Testing Framework
|
172
|
+
to validate that emails are actually get sent to end users. Also every test case
|
173
|
+
should be independent from other test cases - email addresses should be unique every
|
174
|
+
time.
|
175
|
+
test_files:
|
176
|
+
- features/mailgun-mailbox.feature
|
177
|
+
- features/step_definitions/mailgun_steps.rb
|
178
|
+
- features/support/env.rb
|