sendgrid-web 0.0.1 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +51 -7
- data/lib/sendgrid-web.rb +1 -0
- data/lib/sendgrid/web.rb +12 -8
- data/lib/sendgrid/web/blocks.rb +40 -4
- data/lib/sendgrid/web/bounces.rb +53 -5
- data/lib/sendgrid/web/client.rb +43 -9
- data/lib/sendgrid/web/configurator.rb +1 -1
- data/lib/sendgrid/web/credentials.rb +80 -0
- data/lib/sendgrid/web/filter_commands.rb +67 -0
- data/lib/sendgrid/web/invalid_emails.rb +51 -0
- data/lib/sendgrid/web/mail.rb +63 -0
- data/lib/sendgrid/web/response.rb +27 -0
- data/lib/sendgrid/web/version.rb +1 -1
- data/sendgrid-web.gemspec +2 -2
- data/spec/sendgrid/web/blocks_spec.rb +17 -30
- data/spec/sendgrid/web/bounces_spec.rb +17 -30
- data/spec/sendgrid/web/configurator_spec.rb +1 -1
- data/spec/sendgrid/web/credentials_spec.rb +61 -0
- data/spec/sendgrid/web/filter_commands_spec.rb +75 -0
- data/spec/sendgrid/web/invalid_emails_spec.rb +36 -0
- data/spec/sendgrid/web/mail_spec.rb +25 -0
- data/spec/sendgrid/web/response_spec.rb +74 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/support/shared_sendgrid_response.rb +25 -0
- metadata +28 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c25529f42cb3b382076bbf57b48be5ae98991bee
|
4
|
+
data.tar.gz: 91ceedecf727a38be051799fe81932900357d661
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1a26f04093ebc8c51137300f121a3afa0eab6d5edb51dc99f5fc921d855e0c41136a1b6b692911be75e577243a6875cd56530b292d03ba02e9e16a5bf2e149f0
|
7
|
+
data.tar.gz: 8a56c673cd34b2d4e7cbc535a28097198080af2efb61047f46bec2e332704426df89ccf2661ea60620c5554755f7ce04b19945fb609c655c5238582863497e9b
|
data/README.md
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# Sendgrid::Web
|
2
2
|
|
3
|
-
|
3
|
+
Developed as a means to communicate effectively with the [Sendgrid Web API]
|
4
|
+
whilst utilising new Ruby 2.0.0 features. The aim is to become the go-to
|
5
|
+
library for interacting with Sendgrid via their web API.
|
6
|
+
|
7
|
+
[Sendgrid Web API]: http://sendgrid.com/docs/API_Reference/Web_API/
|
4
8
|
|
5
9
|
## Installation
|
6
10
|
|
@@ -10,20 +14,60 @@ Add this line to your application's Gemfile:
|
|
10
14
|
|
11
15
|
And then execute:
|
12
16
|
|
13
|
-
|
17
|
+
bundle
|
14
18
|
|
15
19
|
Or install it yourself as:
|
16
20
|
|
17
|
-
|
21
|
+
gem install sendgrid-web
|
18
22
|
|
19
23
|
## Usage
|
20
24
|
|
21
|
-
|
25
|
+
First you will need to configure the client:
|
26
|
+
|
27
|
+
Sendgrid::Web::Client.configure do |config|
|
28
|
+
config.username = 'your sendgrid username'
|
29
|
+
config.password = 'your sendgrid password'
|
30
|
+
end
|
31
|
+
|
32
|
+
Now you can create client instances based on the api module you
|
33
|
+
want to access:
|
34
|
+
|
35
|
+
client = Sendgrid::Web::Bounces.new
|
36
|
+
client.get # get list of bounces
|
37
|
+
client.delete(email: 'foobar@example.com') # delete all bounces for foobar
|
22
38
|
|
23
39
|
## Contributing
|
24
40
|
|
25
41
|
1. Fork it
|
26
42
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
-
3.
|
28
|
-
4.
|
29
|
-
5.
|
43
|
+
3. Provide working specs for new features
|
44
|
+
4. Document changes (if changing public interface)
|
45
|
+
5. Commit your changes (`git commit -am 'Add some feature'`)
|
46
|
+
6. Push to the branch (`git push origin my-new-feature`)
|
47
|
+
7. Create new Pull Request
|
48
|
+
|
49
|
+
## License
|
50
|
+
|
51
|
+
```
|
52
|
+
The MIT License (MIT)
|
53
|
+
|
54
|
+
Copyright (c) 2013 Darren Coxall
|
55
|
+
|
56
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
57
|
+
of this software and associated documentation files (the "Software"), to deal
|
58
|
+
in the Software without restriction, including without limitation the rights
|
59
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
60
|
+
copies of the Software, and to permit persons to whom the Software is
|
61
|
+
furnished to do so, subject to the following conditions:
|
62
|
+
|
63
|
+
The above copyright notice and this permission notice shall be included in
|
64
|
+
all copies or substantial portions of the Software.
|
65
|
+
|
66
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
67
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
68
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
69
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
70
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
71
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
72
|
+
THE SOFTWARE.
|
73
|
+
```
|
data/lib/sendgrid-web.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'sendgrid/web'
|
data/lib/sendgrid/web.rb
CHANGED
@@ -1,13 +1,17 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require 'typhoeus/adapters/faraday'
|
4
|
-
require 'sendgrid/web/version'
|
1
|
+
require 'oj'
|
2
|
+
require 'httparty'
|
5
3
|
|
6
4
|
module Sendgrid
|
7
5
|
module Web
|
8
|
-
autoload :
|
9
|
-
autoload :
|
10
|
-
autoload :
|
11
|
-
autoload :
|
6
|
+
autoload :VERSION, 'sendgrid/web/version'
|
7
|
+
autoload :Configurator, 'sendgrid/web/configurator'
|
8
|
+
autoload :Client, 'sendgrid/web/client'
|
9
|
+
autoload :Blocks, 'sendgrid/web/blocks'
|
10
|
+
autoload :Bounces, 'sendgrid/web/bounces'
|
11
|
+
autoload :FilterCommands, 'sendgrid/web/filter_commands'
|
12
|
+
autoload :InvalidEmails, 'sendgrid/web/invalid_emails'
|
13
|
+
autoload :Mail, 'sendgrid/web/mail'
|
14
|
+
autoload :Credentials, 'sendgrid/web/credentials'
|
15
|
+
autoload :Response, 'sendgrid/web/response'
|
12
16
|
end
|
13
17
|
end
|
data/lib/sendgrid/web/blocks.rb
CHANGED
@@ -1,12 +1,48 @@
|
|
1
1
|
class Sendgrid::Web::Blocks < Sendgrid::Web::Client
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
# Retrieves a list of all blocked email addresses along with the
|
4
|
+
# reason why they are blocked.
|
5
|
+
#
|
6
|
+
# @param date [Integer] Retrieve the timestamp of the Block records.
|
7
|
+
# @param days [Integer] Number of days in the past for which to
|
8
|
+
# retrieve blocks (includes today)
|
9
|
+
# @param start_date [DateTime] The start of the date range for which
|
10
|
+
# to retrieve blocks.
|
11
|
+
# @param end_date [DateTime] The end of the date range for which to
|
12
|
+
# retrieve blocks.
|
13
|
+
# @param limit [Integer] Optional field to limit the number of
|
14
|
+
# results returned.
|
15
|
+
# @param offset [Integer] Optional beginning point in the list to
|
16
|
+
# retrieve from.
|
17
|
+
# @return [Sendgrid::Web::Response] The sendgrid response
|
18
|
+
# @note All parameters are optional
|
19
|
+
def get(
|
20
|
+
date: nil, days: nil, start_date: nil,
|
21
|
+
end_date: nil, limit: nil, offset: nil)
|
22
|
+
res = connection.post(
|
23
|
+
'/api/blocks.get.json',
|
24
|
+
default_params(
|
25
|
+
date: date,
|
26
|
+
days: days,
|
27
|
+
start_date: start_date,
|
28
|
+
end_date: end_date,
|
29
|
+
limit: limit,
|
30
|
+
offset: offset))
|
31
|
+
craft_response(res)
|
5
32
|
end
|
6
33
|
|
34
|
+
# Deletes all blocks associated with the provided email
|
35
|
+
#
|
36
|
+
# @param email [String] Email block address to remove
|
37
|
+
# @return [Sendgrid::Web::Response] The sendgrid response
|
7
38
|
def delete(email: nil)
|
8
|
-
|
9
|
-
|
39
|
+
if email.nil?
|
40
|
+
raise ArgumentError.new('Missing required `email` option')
|
41
|
+
end
|
42
|
+
res = connection.post(
|
43
|
+
'/api/blocks.delete.json',
|
44
|
+
default_params(email: email))
|
45
|
+
craft_response(res)
|
10
46
|
end
|
11
47
|
|
12
48
|
end
|
data/lib/sendgrid/web/bounces.rb
CHANGED
@@ -1,16 +1,64 @@
|
|
1
1
|
class Sendgrid::Web::Bounces < Sendgrid::Web::Client
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
# Retrieve a list of bounces with addresses and response codes,
|
4
|
+
# optionally with dates.
|
5
|
+
#
|
6
|
+
# @param date [Integer] Retrieve the timestamp of the bounce
|
7
|
+
# records.
|
8
|
+
# @param days [Integer] Number of days in the past for which to
|
9
|
+
# retrieve bounces (includes today)
|
10
|
+
# @param start_date [DateTime] The start of the date range for which to
|
11
|
+
# retrieve bounces.
|
12
|
+
# @param end_date [DateTime] The end of the date range for which to
|
13
|
+
# retrieve bounces.
|
14
|
+
# @param limit [Integer] Optional field to limit the number of
|
15
|
+
# results returned.
|
16
|
+
# @param offset [Integer] Optional beginning point in the list to
|
17
|
+
# retrieve from.
|
18
|
+
# @param type [String] Choose the type of bounce to search for. Can
|
19
|
+
# be either +hard+ or +soft+.
|
20
|
+
# @param email [String] Optional email addresses to search for.
|
21
|
+
# @return [Sendgrid::Web::Response] The sendgrid response
|
22
|
+
# @note All parameters are optional
|
23
|
+
def get(
|
24
|
+
date: nil, days: nil, start_date: nil,
|
25
|
+
end_date: nil, limit: nil, offset: nil,
|
26
|
+
type: nil, email: nil)
|
27
|
+
res = connection.post(
|
28
|
+
'/api/bounces.get.json',
|
29
|
+
default_params(
|
30
|
+
date: date,
|
31
|
+
days: days,
|
32
|
+
start_date: start_date,
|
33
|
+
end_date: end_date,
|
34
|
+
limit: limit,
|
35
|
+
offset: offset,
|
36
|
+
type: type,
|
37
|
+
email: email))
|
38
|
+
craft_response(res)
|
5
39
|
end
|
6
40
|
|
7
|
-
|
8
|
-
|
9
|
-
|
41
|
+
# Delete an address from the Bounce list.
|
42
|
+
#
|
43
|
+
# @param start_date [DateTime] Optional date to start deleting from.
|
44
|
+
# @param end_date [DateTime] Optional date to end deleting from.
|
45
|
+
# @param type [String] Choose the type of bounce to be removed. Can
|
46
|
+
# be either +hard+ or +soft+.
|
47
|
+
# @param email [String] Email bounce address to remove.
|
48
|
+
# @return [Sendgrid::Web::Response] The sendgrid response
|
49
|
+
# @note All parameters are optional
|
50
|
+
# @note If no parameters are specified the ENTIRE list will be
|
51
|
+
# deleted.
|
52
|
+
def delete(
|
53
|
+
start_date: nil, end_date: nil, type: nil,
|
54
|
+
email: nil)
|
55
|
+
res = connection.post('/api/bounces.delete.json',
|
56
|
+
default_params(
|
10
57
|
start_date: start_date,
|
11
58
|
end_date: end_date,
|
12
59
|
type: type,
|
13
60
|
email: email))
|
61
|
+
craft_response(res)
|
14
62
|
end
|
15
63
|
|
16
64
|
end
|
data/lib/sendgrid/web/client.rb
CHANGED
@@ -1,33 +1,67 @@
|
|
1
1
|
class Sendgrid::Web::Client
|
2
|
+
|
3
|
+
# Sets the global configuration object shared between all clients.
|
4
|
+
# You can use it like so:
|
5
|
+
#
|
6
|
+
# Sendgrid::Web::Client.configure do |config|
|
7
|
+
# config.username = 'foo'
|
8
|
+
# config.password = 'bar'
|
9
|
+
# end
|
10
|
+
#
|
11
|
+
# @return [Sendgrid::Web::Configurator]
|
2
12
|
def self.configure(&block)
|
3
13
|
@@config = Sendgrid::Web::Configurator.new(&block)
|
4
14
|
end
|
5
15
|
|
16
|
+
# Retrieve the current global configuration object and if none
|
17
|
+
# exists, then create an empty one.
|
18
|
+
#
|
19
|
+
# @see #config
|
6
20
|
def self.config
|
7
|
-
@@config
|
21
|
+
@@config ||= Sendgrid::Web::Configurator.new
|
8
22
|
end
|
9
23
|
|
24
|
+
# Returns the configured +root_url+.
|
25
|
+
def self.base_uri
|
26
|
+
config.root_url
|
27
|
+
end
|
28
|
+
|
29
|
+
# Retrieve the current global configuration object and if none
|
30
|
+
# exists, then create an empty one.
|
31
|
+
#
|
32
|
+
# @see .config
|
10
33
|
def config
|
11
34
|
@@config ||= Sendgrid::Web::Configurator.new
|
12
35
|
end
|
13
36
|
|
14
37
|
private
|
15
38
|
|
39
|
+
class API
|
40
|
+
include ::HTTParty
|
41
|
+
base_uri Sendgrid::Web::Client.config.root_url
|
42
|
+
end
|
43
|
+
|
16
44
|
def config=(configurator)
|
17
45
|
@@config = configurator
|
18
46
|
end
|
19
47
|
|
20
48
|
def connection
|
21
|
-
@connection
|
22
|
-
faraday.request :url_encoded
|
23
|
-
faraday.adapter :typhoeus
|
24
|
-
end
|
49
|
+
@connection = API
|
25
50
|
end
|
26
51
|
|
27
|
-
def default_params
|
28
|
-
{
|
29
|
-
|
30
|
-
|
52
|
+
def default_params(additions = {})
|
53
|
+
defaults = {
|
54
|
+
query: {
|
55
|
+
api_user: config.username,
|
56
|
+
api_key: config.password
|
57
|
+
}
|
31
58
|
}
|
59
|
+
defaults[:query].merge!(additions)
|
60
|
+
defaults
|
61
|
+
end
|
62
|
+
|
63
|
+
def craft_response(response)
|
64
|
+
Sendgrid::Web::Response.new(response.code, response.body)
|
32
65
|
end
|
66
|
+
|
33
67
|
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
class Sendgrid::Web::Credentials < Sendgrid::Web::Client
|
2
|
+
|
3
|
+
# Retrieve a list of all credentials, or permissions for a specific
|
4
|
+
# credential.
|
5
|
+
#
|
6
|
+
# @param username [String] If a username is supplied, the API
|
7
|
+
# returns the JSON permissions for that user.
|
8
|
+
# @return [Sendgrid::Web::Response] the Sendgrid response.
|
9
|
+
# @note All parameters are optional
|
10
|
+
def get(username: nil)
|
11
|
+
res = connection.post(
|
12
|
+
'/api/credentials/get.json',
|
13
|
+
default_params(username: username))
|
14
|
+
craft_response(res)
|
15
|
+
end
|
16
|
+
|
17
|
+
# This API call allows user to add a new set of credentials to their
|
18
|
+
# account.
|
19
|
+
#
|
20
|
+
# @param username [String] Enter a username for the new account.
|
21
|
+
# @param password [String] Enter a password for the new account.
|
22
|
+
# @param permissions [Hash] There are three key names: +email+ for
|
23
|
+
# access to SMTP, +api+ for programmatic access, and +web+ for
|
24
|
+
# administration. The values for each are a bit, +0+ for off or
|
25
|
+
# +1+ for on.
|
26
|
+
#
|
27
|
+
# The following example allows the specified username/password to
|
28
|
+
# log into the dashboard, but not send email or have access to any
|
29
|
+
# of the APIs:
|
30
|
+
#
|
31
|
+
# { email: 0, web: 1, api: 0 }
|
32
|
+
#
|
33
|
+
# @return [Sendgrid::Web::Response] the Sendgrid response.
|
34
|
+
# @note Requires +username+ and +password+.
|
35
|
+
def add(username: nil, password: nil, permissions: nil)
|
36
|
+
raise ArgumentError.new('Missing required `username` option') if username.nil?
|
37
|
+
raise ArgumentError.new('Missing required `password` option') if password.nil?
|
38
|
+
res = connection.post(
|
39
|
+
'/api/credentials/add.json',
|
40
|
+
default_params(
|
41
|
+
username: username,
|
42
|
+
password: password,
|
43
|
+
permissions: permissions))
|
44
|
+
craft_response(res)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Update/edit a users credentials and permissions.
|
48
|
+
#
|
49
|
+
# @param username [String] The existing users username.
|
50
|
+
# @param password [String] Optionally update the password.
|
51
|
+
# @param permissions [Hash] Optionally update the permissions.
|
52
|
+
# @return [Sendgrid::Web::Response] the Sendgrid response.
|
53
|
+
# @note Only +username+ is required.
|
54
|
+
# @see #add
|
55
|
+
def edit(username: nil, password: nil, permissions: nil)
|
56
|
+
raise ArgumentError.new('Missing required `username` option') if username.nil?
|
57
|
+
res = connection.post(
|
58
|
+
'/api/credentials/edit.json',
|
59
|
+
default_params(
|
60
|
+
username: username,
|
61
|
+
password: password,
|
62
|
+
permissions: permissions))
|
63
|
+
craft_response(res)
|
64
|
+
end
|
65
|
+
|
66
|
+
# Remove an individuals credentials.
|
67
|
+
#
|
68
|
+
# @param username [String] The credential to remove.
|
69
|
+
# @return [Sendgrid::Web::Response] the Sendgrid response.
|
70
|
+
# @note +username+ is required.
|
71
|
+
def delete(username: nil)
|
72
|
+
raise ArgumentError.new('Missing required `username` option') if username.nil?
|
73
|
+
res = connection.post(
|
74
|
+
'/api/credentials/delete.json',
|
75
|
+
default_params(
|
76
|
+
username: username))
|
77
|
+
craft_response(res)
|
78
|
+
end
|
79
|
+
|
80
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
class Sendgrid::Web::FilterCommands < Sendgrid::Web::Client
|
2
|
+
|
3
|
+
# List all of the available apps.
|
4
|
+
#
|
5
|
+
# @return [Sendgrid::Web::Response] The Sendgrid response.
|
6
|
+
# @note The name entry is used in all the other API calls to
|
7
|
+
# identify the app.
|
8
|
+
def get_available
|
9
|
+
res = connection.post(
|
10
|
+
'/api/filter.getavailable.json',
|
11
|
+
default_params)
|
12
|
+
craft_response(res)
|
13
|
+
end
|
14
|
+
|
15
|
+
# Activate an app.
|
16
|
+
#
|
17
|
+
# @param name [String] The app in which to activate.
|
18
|
+
# @return [Sendgrid::Web::Response] The Sendgrid response.
|
19
|
+
# @note +name+ is required.
|
20
|
+
def activate_app(name: nil)
|
21
|
+
raise ArgumentError.new('Missing required `name` option') if name.nil?
|
22
|
+
res = connection.post(
|
23
|
+
'/api/filter.activate.json',
|
24
|
+
default_params(name: name))
|
25
|
+
craft_response(res)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Deactivate an app.
|
29
|
+
#
|
30
|
+
# @param name [String] The app in which to deactivate.
|
31
|
+
# @return [Sendgrid::Web::Response] The Sendgrid response.
|
32
|
+
# @note +name+ is required.
|
33
|
+
def deactivate_app(name: nil)
|
34
|
+
raise ArgumentError.new('Missing required `name` option') if name.nil?
|
35
|
+
res = connection.post(
|
36
|
+
'/api/filter.deactivate.json',
|
37
|
+
default_params(name: name))
|
38
|
+
craft_response(res)
|
39
|
+
end
|
40
|
+
|
41
|
+
# Update an apps settings.
|
42
|
+
#
|
43
|
+
# @param name [String] The app in which to update.
|
44
|
+
# @return [Sendgrid::Web::Response] The Sendgrid response.
|
45
|
+
# @note Other options are dependant on the app in question.
|
46
|
+
def setup_app(options = {})
|
47
|
+
raise ArgumentError.new('Missing required `name` option') if options[:name].nil?
|
48
|
+
res = connection.post(
|
49
|
+
'/api/filter.setup.json',
|
50
|
+
default_params(options))
|
51
|
+
craft_response(res)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Retrieve the settings of an app.
|
55
|
+
#
|
56
|
+
# @param name [String] The app in which to retrieve.
|
57
|
+
# @return [Sendgrid::Web::Response] The Sendgrid response.
|
58
|
+
# @note +name+ is required.
|
59
|
+
def get_settings(name: nil)
|
60
|
+
raise ArgumentError.new('Missing required `name` option') if name.nil?
|
61
|
+
res = connection.post(
|
62
|
+
'/api/filter.getsettings.json',
|
63
|
+
default_params(name: name))
|
64
|
+
craft_response(res)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
class Sendgrid::Web::InvalidEmails < Sendgrid::Web::Client
|
2
|
+
|
3
|
+
# Retrieve a list of invalid emails with addresses and response
|
4
|
+
# codes, optionally with dates.
|
5
|
+
#
|
6
|
+
# @param date [Integer] Retrieve the timestamp of the invalid email
|
7
|
+
# records.
|
8
|
+
# @param days [Integer] Number of days in the past for which to
|
9
|
+
# retrieve invalid emails (includes today).
|
10
|
+
# @param start_date [DateTime] The start of the date range for which
|
11
|
+
# to retrieve invalid emails.
|
12
|
+
# @param end_date [DateTime] The end of the date range for which to
|
13
|
+
# retrieve invalid emails.
|
14
|
+
# @param limit [Integer] Optional field to limit the number of
|
15
|
+
# results returned.
|
16
|
+
# @param offset [Integer] Optional beginning point in the list to
|
17
|
+
# retrieve from.
|
18
|
+
# @param email [String] Optional email addresses to search for.
|
19
|
+
# @return [Sendgrid::Web::Response] The Sendgrid response.
|
20
|
+
# @note All parameters are optional.
|
21
|
+
def get(
|
22
|
+
date: nil, days: nil, start_date: nil,
|
23
|
+
end_date: nil, limit: nil, offset: nil,
|
24
|
+
email: nil)
|
25
|
+
res = connection.post(
|
26
|
+
'/api/invalidemails.get.json',
|
27
|
+
default_params(
|
28
|
+
date: date,
|
29
|
+
days: days,
|
30
|
+
start_date: start_date,
|
31
|
+
end_date: end_date,
|
32
|
+
limit: limit,
|
33
|
+
offset: offset,
|
34
|
+
email: email))
|
35
|
+
craft_response(res)
|
36
|
+
end
|
37
|
+
|
38
|
+
# Delete an address from the Invalid Email list.
|
39
|
+
#
|
40
|
+
# @param email [String] Email address to remove.
|
41
|
+
# @return [Sendgrid::Web::Response] The Sendgrid response.
|
42
|
+
# @note +email+ parameter is required.
|
43
|
+
def delete(email: nil)
|
44
|
+
raise ArgumentError.new('Missing required `email` option') if email.nil?
|
45
|
+
res = connection.post(
|
46
|
+
'/api/invalidemails.delete.json',
|
47
|
+
default_params(email: email))
|
48
|
+
craft_response(res)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
class Sendgrid::Web::Mail < Sendgrid::Web::Client
|
2
|
+
|
3
|
+
# Send an email.
|
4
|
+
#
|
5
|
+
# @param to [String|Array<String>] This can also be passed in as an
|
6
|
+
# array, to send to multiple locations. Note that recipients
|
7
|
+
# passed in this parameter will be visible as part of the message.
|
8
|
+
# @param to_name [String|Array<String>] Give a name to the
|
9
|
+
# recipient.
|
10
|
+
# @param x_smtpapi [Hash] see
|
11
|
+
# {http://sendgrid.com/docs/API_Reference/SMTP_API/index.html X-SMTP API}
|
12
|
+
# for details.
|
13
|
+
# @param subject [String] The subject of your email.
|
14
|
+
# @param text [String] The actual content of your email message.
|
15
|
+
# @param html [String] The actual content of your email message.
|
16
|
+
# @param from [String] This is where the email will appear to
|
17
|
+
# originate from for your recipient.
|
18
|
+
# @param bcc [String|Array<String>] This can also be passed in as an
|
19
|
+
# array of email addresses for multiple recipients.
|
20
|
+
# @param from_name [String] This is name appended to the from email
|
21
|
+
# field.
|
22
|
+
# @param reply_to [String] Append a reply-to field to your email
|
23
|
+
# message.
|
24
|
+
# @param date [DateTime] Specify the date header of your email.
|
25
|
+
# @param files [Array] Files to be attached. The file contents must
|
26
|
+
# be part of the multipart HTTP POST.
|
27
|
+
# @param content [Hash] Content IDs of the files to be used as
|
28
|
+
# inline images. Content IDs should match the cid’s used in the
|
29
|
+
# HTML markup.
|
30
|
+
# @param headers [Hash] Each key represents a header name and the
|
31
|
+
# value the header value.
|
32
|
+
# @return [Sendgrid::Web::Response] The Sendgrid response.
|
33
|
+
# @note The required parameters are: +from+, +text+/+html+,
|
34
|
+
# +subject+ and +to+.
|
35
|
+
def send(
|
36
|
+
to: nil, to_name: nil, x_smtpapi: nil,
|
37
|
+
subject: nil, text: nil, html: nil,
|
38
|
+
from: nil, bcc: nil, from_name: nil,
|
39
|
+
reply_to: nil, date: nil, files: nil,
|
40
|
+
content: nil, headers: nil)
|
41
|
+
options = {
|
42
|
+
'to' => to, 'toname' => to_name, 'x-smtpapi' => x_smtpapi,
|
43
|
+
'subject' => subject, 'text' => text, 'html' => html,
|
44
|
+
'from' => from, 'bcc' => bcc, 'fromname' => from_name,
|
45
|
+
'replyto' => reply_to, 'date' => date, 'files' => files,
|
46
|
+
'content' => content, 'headers' => headers }
|
47
|
+
%w{ subject to }.each do |required_option|
|
48
|
+
if options[required_option].nil?
|
49
|
+
raise ArgumentError.new(
|
50
|
+
"Missing required `#{required_option}` option")
|
51
|
+
end
|
52
|
+
end
|
53
|
+
if options['text'].nil? && options['html'].nil?
|
54
|
+
raise ArgumentError.new(
|
55
|
+
'Missing required `text` or `html` option')
|
56
|
+
end
|
57
|
+
res = connection.post(
|
58
|
+
'/api/mail.send.json',
|
59
|
+
default_params(options))
|
60
|
+
craft_response(res)
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
class Sendgrid::Web::Response
|
2
|
+
|
3
|
+
attr_reader :status_code, :raw_body, :parsed_body
|
4
|
+
|
5
|
+
def initialize(status_code, body)
|
6
|
+
@status_code = status_code.to_i
|
7
|
+
@raw_body = body.to_s
|
8
|
+
@parsed_body = ::Oj.safe_load(raw_body)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Checks if the Sengrid response contained errors.
|
12
|
+
#
|
13
|
+
# @return [bool] True if there were errors found.
|
14
|
+
def errors?
|
15
|
+
!parsed_body.nil? &&
|
16
|
+
parsed_body.is_a?(Hash) &&
|
17
|
+
parsed_body.has_key?('errors')
|
18
|
+
end
|
19
|
+
|
20
|
+
# Fetches an array of error messages from the response.
|
21
|
+
#
|
22
|
+
# @return [Array<String>] A list of any error messages.
|
23
|
+
def error_messages
|
24
|
+
errors? ? parsed_body['errors'] : []
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
data/lib/sendgrid/web/version.rb
CHANGED
data/sendgrid-web.gemspec
CHANGED
@@ -18,8 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_runtime_dependency "
|
22
|
-
spec.add_runtime_dependency "
|
21
|
+
spec.add_runtime_dependency "httparty", ">= 0.11.0"
|
22
|
+
spec.add_runtime_dependency "oj", "~> 2.1.0"
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
25
|
spec.add_development_dependency "rake"
|
@@ -9,42 +9,29 @@ describe Sendgrid::Web::Blocks do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '#get' do
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
it_behaves_like('a sendgrid response', '/api/blocks.get.json') do
|
13
|
+
let(:action) { subject.get }
|
14
|
+
let(:response) do
|
15
|
+
'[
|
16
|
+
{
|
17
|
+
"status": "4.0.0",
|
18
|
+
"created": "2012-09-02 00:12:12",
|
19
|
+
"reason": "550 Access denied...04d52d35b93501d500a9bca895ddad5cddd1a9f8486c89ace8c5e959398198cd49cd58288c9d11313975284d852811... (throttled)",
|
20
|
+
"email": "example@juno.com"
|
21
|
+
}
|
22
|
+
]'
|
15
23
|
end
|
16
24
|
end
|
17
|
-
|
18
|
-
before do
|
19
|
-
subject.stub(:connection).and_return(test_connection)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'makes a json request to /blocks.get.json' do
|
23
|
-
test_connection.should_receive(:post).
|
24
|
-
with('blocks.get.json',
|
25
|
-
hash_including(api_user: 'foo', api_key: 'bar')).
|
26
|
-
and_call_original
|
27
|
-
subject.get
|
28
|
-
end
|
29
25
|
end
|
30
26
|
|
31
27
|
describe '#delete' do
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
it_behaves_like('a sendgrid response', '/api/blocks.delete.json') do
|
29
|
+
let(:action) { subject.delete(email: 'foobar@example.com') }
|
30
|
+
let(:response) do
|
31
|
+
'{
|
32
|
+
"message": "success"
|
33
|
+
}'
|
35
34
|
end
|
36
35
|
end
|
37
|
-
|
38
|
-
before do
|
39
|
-
subject.stub(:connection).and_return(test_connection)
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'makes a json request to /blocks.delete.json' do
|
43
|
-
test_connection.should_receive(:post).
|
44
|
-
with('blocks.delete.json',
|
45
|
-
hash_including(api_user: 'foo', api_key: 'bar', email: 'foobar@example.com')).
|
46
|
-
and_call_original
|
47
|
-
subject.delete(email: 'foobar@example.com')
|
48
|
-
end
|
49
36
|
end
|
50
37
|
end
|
@@ -9,42 +9,29 @@ describe Sendgrid::Web::Bounces do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
describe '#get' do
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
it_behaves_like('a sendgrid response', '/api/bounces.get.json') do
|
13
|
+
let(:action) { subject.get }
|
14
|
+
let(:response) do
|
15
|
+
'[
|
16
|
+
{
|
17
|
+
"status": "4.0.0",
|
18
|
+
"created": "2011-09-16 22:02:19",
|
19
|
+
"reason": "Unable to resolve MX host sendgrid.ne",
|
20
|
+
"email": "esting@sendgrid.ne"
|
21
|
+
}
|
22
|
+
]'
|
15
23
|
end
|
16
24
|
end
|
17
|
-
|
18
|
-
before do
|
19
|
-
subject.stub(:connection).and_return(test_connection)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'makes a json request to /bounces.get.json' do
|
23
|
-
test_connection.should_receive(:post).
|
24
|
-
with('bounces.get.json',
|
25
|
-
hash_including(api_user: 'foo', api_key: 'bar')).
|
26
|
-
and_call_original
|
27
|
-
subject.get
|
28
|
-
end
|
29
25
|
end
|
30
26
|
|
31
27
|
describe '#delete' do
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
it_behaves_like('a sendgrid response', '/api/bounces.delete.json') do
|
29
|
+
let(:action) { subject.delete }
|
30
|
+
let(:response) do
|
31
|
+
'{
|
32
|
+
"message": "success"
|
33
|
+
}'
|
35
34
|
end
|
36
35
|
end
|
37
|
-
|
38
|
-
before do
|
39
|
-
subject.stub(:connection).and_return(test_connection)
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'makes a json request to /bounces.delete.json' do
|
43
|
-
test_connection.should_receive(:post).
|
44
|
-
with('bounces.delete.json',
|
45
|
-
hash_including(api_user: 'foo', api_key: 'bar', email: 'foobar@example.com')).
|
46
|
-
and_call_original
|
47
|
-
subject.delete(email: 'foobar@example.com')
|
48
|
-
end
|
49
36
|
end
|
50
37
|
end
|
@@ -14,7 +14,7 @@ describe Sendgrid::Web::Configurator do
|
|
14
14
|
end
|
15
15
|
|
16
16
|
it 'sets a default root_url for sendgrid' do
|
17
|
-
subject.root_url.should eql('https://sendgrid.com
|
17
|
+
subject.root_url.should eql('https://sendgrid.com')
|
18
18
|
end
|
19
19
|
|
20
20
|
it 'can overwrite the api root_url' do
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sendgrid::Web::Credentials do
|
4
|
+
before(:all) do
|
5
|
+
Sendgrid::Web::Client.configure do |config|
|
6
|
+
config.username = 'foo'
|
7
|
+
config.password = 'bar'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#get' do
|
12
|
+
it_behaves_like('a sendgrid response', '/api/credentials/get.json') do
|
13
|
+
let(:action) { subject.get }
|
14
|
+
let(:response) do
|
15
|
+
'[
|
16
|
+
{
|
17
|
+
"id": 4,
|
18
|
+
"name": "johnsmith",
|
19
|
+
"permissions": {
|
20
|
+
"email": 0,
|
21
|
+
"api": 1
|
22
|
+
}
|
23
|
+
}
|
24
|
+
]'
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '#add' do
|
30
|
+
it_behaves_like('a sendgrid response', '/api/credentials/add.json') do
|
31
|
+
let(:action) { subject.add(username: 'foobar', password: 'foobar') }
|
32
|
+
let(:response) do
|
33
|
+
'{
|
34
|
+
"message": "success"
|
35
|
+
}'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#edit' do
|
41
|
+
it_behaves_like('a sendgrid response', '/api/credentials/edit.json') do
|
42
|
+
let(:action) { subject.edit(username: 'foobar') }
|
43
|
+
let(:response) do
|
44
|
+
'{
|
45
|
+
"message": "success"
|
46
|
+
}'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#delete' do
|
52
|
+
it_behaves_like('a sendgrid response', '/api/credentials/delete.json') do
|
53
|
+
let(:action) { subject.delete(username: 'foobar') }
|
54
|
+
let(:response) do
|
55
|
+
'{
|
56
|
+
"message": "success"
|
57
|
+
}'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sendgrid::Web::FilterCommands do
|
4
|
+
before(:all) do
|
5
|
+
Sendgrid::Web::Client.configure do |config|
|
6
|
+
config.username = 'foo'
|
7
|
+
config.password = 'bar'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#get_available' do
|
12
|
+
it_behaves_like('a sendgrid response', '/api/filter.getavailable.json') do
|
13
|
+
let(:action) { subject.get_available }
|
14
|
+
let(:response) do
|
15
|
+
'[
|
16
|
+
{
|
17
|
+
"name": "twitter",
|
18
|
+
"title": "Twitter",
|
19
|
+
"description": "This plugin allows you to send an email message to twitter",
|
20
|
+
"activated": false
|
21
|
+
}
|
22
|
+
]'
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe '#activate_app' do
|
28
|
+
it_behaves_like('a sendgrid response', '/api/filter.activate.json') do
|
29
|
+
let(:action) { subject.activate_app(name: 'twitter') }
|
30
|
+
let(:response) do
|
31
|
+
'{
|
32
|
+
"message": "success"
|
33
|
+
}'
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '#deactivate_app' do
|
39
|
+
it_behaves_like('a sendgrid response', '/api/filter.deactivate.json') do
|
40
|
+
let(:action) { subject.deactivate_app(name: 'twitter') }
|
41
|
+
let(:response) do
|
42
|
+
'{
|
43
|
+
"message": "success"
|
44
|
+
}'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#setup_app' do
|
50
|
+
it_behaves_like('a sendgrid response', '/api/filter.setup.json') do
|
51
|
+
let(:action) { subject.setup_app(name: 'twitter', username: 'foo', password: 'bar') }
|
52
|
+
let(:response) do
|
53
|
+
'{
|
54
|
+
"message": "success"
|
55
|
+
}'
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#get_settings' do
|
61
|
+
it_behaves_like('a sendgrid response', '/api/filter.getsettings.json') do
|
62
|
+
let(:action) { subject.get_settings(name: 'twitter') }
|
63
|
+
let(:response) do
|
64
|
+
'{
|
65
|
+
"message": "success",
|
66
|
+
"settings": [
|
67
|
+
{
|
68
|
+
"field_name": "field_value"
|
69
|
+
}
|
70
|
+
]
|
71
|
+
}'
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sendgrid::Web::InvalidEmails do
|
4
|
+
before(:all) do
|
5
|
+
Sendgrid::Web::Client.configure do |config|
|
6
|
+
config.username = 'foo'
|
7
|
+
config.password = 'bar'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#get' do
|
12
|
+
it_behaves_like('a sendgrid response', '/api/invalidemails.get.json') do
|
13
|
+
let(:action) { subject.get }
|
14
|
+
let(:response) do
|
15
|
+
'[
|
16
|
+
{
|
17
|
+
"reason": "Known bad domain",
|
18
|
+
"created": "2011-06-06 16:11:57",
|
19
|
+
"email": "test@example.com"
|
20
|
+
}
|
21
|
+
]'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#delete' do
|
27
|
+
it_behaves_like('a sendgrid response', '/api/invalidemails.delete.json') do
|
28
|
+
let(:action) { subject.delete(email: 'foobar@example.com') }
|
29
|
+
let(:response) do
|
30
|
+
'{
|
31
|
+
"message": "success"
|
32
|
+
}'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sendgrid::Web::Mail do
|
4
|
+
before(:all) do
|
5
|
+
Sendgrid::Web::Client.configure do |config|
|
6
|
+
config.username = 'foo'
|
7
|
+
config.password = 'bar'
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '#send' do
|
12
|
+
it_behaves_like('a sendgrid response', '/api/mail.send.json') do
|
13
|
+
let(:action) { subject.send(
|
14
|
+
to: 'foobar@example.com',
|
15
|
+
subject: 'Test Email',
|
16
|
+
text: 'Sent using `sendgrid-web`',
|
17
|
+
from: 'test@example.com') }
|
18
|
+
let(:response) do
|
19
|
+
'{
|
20
|
+
"message": "success"
|
21
|
+
}'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Sendgrid::Web::Response do
|
4
|
+
|
5
|
+
let(:valid_body) do
|
6
|
+
'[{
|
7
|
+
"username": "sampleuser@example.com",
|
8
|
+
"email": "sampleemail@example.com",
|
9
|
+
"active": "true",
|
10
|
+
"first_name": "john",
|
11
|
+
"last_name": "doe",
|
12
|
+
"address": "555 any street",
|
13
|
+
"city": "any city",
|
14
|
+
"state": "CA",
|
15
|
+
"zip": "91234",
|
16
|
+
"country": "US",
|
17
|
+
"phone": "555-555-5555",
|
18
|
+
"website": "example.com"
|
19
|
+
}]'
|
20
|
+
end
|
21
|
+
|
22
|
+
let(:error_body) do
|
23
|
+
'{
|
24
|
+
"message": "error",
|
25
|
+
"errors": [
|
26
|
+
"error message one",
|
27
|
+
"error message two"
|
28
|
+
]
|
29
|
+
}'
|
30
|
+
end
|
31
|
+
|
32
|
+
let(:body) { valid_body }
|
33
|
+
let(:status_code) { '200' }
|
34
|
+
let(:response) { Sendgrid::Web::Response.new(status_code, body) }
|
35
|
+
|
36
|
+
subject { response }
|
37
|
+
|
38
|
+
it 'stores the response body' do
|
39
|
+
subject.raw_body.should eql(body)
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'stores the response status' do
|
43
|
+
subject.status_code.should eql(status_code.to_i)
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#errors?' do
|
47
|
+
subject { response.errors? }
|
48
|
+
|
49
|
+
context 'when sendgrid returns a json error' do
|
50
|
+
let(:body) { error_body }
|
51
|
+
it { should be_true }
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'when sendgrid returns a valid result' do
|
55
|
+
let(:body) { valid_body }
|
56
|
+
it { should be_false }
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
describe '#error_messages' do
|
61
|
+
subject { response.error_messages }
|
62
|
+
|
63
|
+
context 'when sendgrid returns a json error' do
|
64
|
+
let(:body) { error_body }
|
65
|
+
it { should eql(['error message one', 'error message two']) }
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'when sendgrid returns a valid result' do
|
69
|
+
let(:body) { valid_body }
|
70
|
+
it { should be_empty }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -7,7 +7,11 @@ require 'sendgrid/web'
|
|
7
7
|
# loaded once.
|
8
8
|
#
|
9
9
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
10
|
+
|
10
11
|
RSpec.configure do |config|
|
12
|
+
|
13
|
+
Dir["./spec/support/**/*.rb"].sort.each {|f| require f}
|
14
|
+
|
11
15
|
config.treat_symbols_as_metadata_keys_with_true_values = true
|
12
16
|
config.run_all_when_everything_filtered = true
|
13
17
|
config.filter_run :focus
|
@@ -0,0 +1,25 @@
|
|
1
|
+
shared_examples "a sendgrid response" do |path|
|
2
|
+
let(:test_connection) { double(:connection) }
|
3
|
+
|
4
|
+
before do
|
5
|
+
test_connection.stub(:post).
|
6
|
+
with(path, anything).
|
7
|
+
and_return(double(:response, code: 200, body: response))
|
8
|
+
subject.stub(:connection).and_return(test_connection)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "makes a json request to #{path}" do
|
12
|
+
params = double(:parameters)
|
13
|
+
subject.stub(:default_params) { params }
|
14
|
+
test_connection.should_receive(:post).
|
15
|
+
with(path, params)
|
16
|
+
action
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'returns a Sendgrid::Web::Response' do
|
20
|
+
result = action
|
21
|
+
result.should be_instance_of(Sendgrid::Web::Response)
|
22
|
+
result.status_code.should eql(200)
|
23
|
+
result.raw_body.should eql(response)
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,43 +1,43 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sendgrid-web
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Darren Coxall
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: httparty
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.11.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.11.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: oj
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.1.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 2.1.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -95,18 +95,30 @@ files:
|
|
95
95
|
- LICENSE.txt
|
96
96
|
- README.md
|
97
97
|
- Rakefile
|
98
|
+
- lib/sendgrid-web.rb
|
98
99
|
- lib/sendgrid/web.rb
|
99
100
|
- lib/sendgrid/web/blocks.rb
|
100
101
|
- lib/sendgrid/web/bounces.rb
|
101
102
|
- lib/sendgrid/web/client.rb
|
102
103
|
- lib/sendgrid/web/configurator.rb
|
104
|
+
- lib/sendgrid/web/credentials.rb
|
105
|
+
- lib/sendgrid/web/filter_commands.rb
|
106
|
+
- lib/sendgrid/web/invalid_emails.rb
|
107
|
+
- lib/sendgrid/web/mail.rb
|
108
|
+
- lib/sendgrid/web/response.rb
|
103
109
|
- lib/sendgrid/web/version.rb
|
104
110
|
- sendgrid-web.gemspec
|
105
111
|
- spec/sendgrid/web/blocks_spec.rb
|
106
112
|
- spec/sendgrid/web/bounces_spec.rb
|
107
113
|
- spec/sendgrid/web/client_spec.rb
|
108
114
|
- spec/sendgrid/web/configurator_spec.rb
|
115
|
+
- spec/sendgrid/web/credentials_spec.rb
|
116
|
+
- spec/sendgrid/web/filter_commands_spec.rb
|
117
|
+
- spec/sendgrid/web/invalid_emails_spec.rb
|
118
|
+
- spec/sendgrid/web/mail_spec.rb
|
119
|
+
- spec/sendgrid/web/response_spec.rb
|
109
120
|
- spec/spec_helper.rb
|
121
|
+
- spec/support/shared_sendgrid_response.rb
|
110
122
|
homepage: https://github.com/FreakyDazio/sendgrid-web
|
111
123
|
licenses:
|
112
124
|
- MIT
|
@@ -136,4 +148,10 @@ test_files:
|
|
136
148
|
- spec/sendgrid/web/bounces_spec.rb
|
137
149
|
- spec/sendgrid/web/client_spec.rb
|
138
150
|
- spec/sendgrid/web/configurator_spec.rb
|
151
|
+
- spec/sendgrid/web/credentials_spec.rb
|
152
|
+
- spec/sendgrid/web/filter_commands_spec.rb
|
153
|
+
- spec/sendgrid/web/invalid_emails_spec.rb
|
154
|
+
- spec/sendgrid/web/mail_spec.rb
|
155
|
+
- spec/sendgrid/web/response_spec.rb
|
139
156
|
- spec/spec_helper.rb
|
157
|
+
- spec/support/shared_sendgrid_response.rb
|