sendgrid-api 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +4 -2
- data/.yardopts +6 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +5 -1
- data/README.md +200 -12
- data/Rakefile +3 -0
- data/lib/sendgrid/api/client.rb +16 -0
- data/lib/sendgrid/api/entities/category.rb +13 -0
- data/lib/sendgrid/api/entities/email.rb +13 -0
- data/lib/sendgrid/api/entities/entity.rb +2 -2
- data/lib/sendgrid/api/entities/list.rb +30 -0
- data/lib/sendgrid/api/entities/marketing_email.rb +20 -0
- data/lib/sendgrid/api/entities/response_insert.rb +23 -0
- data/lib/sendgrid/api/entities/response_remove.rb +23 -0
- data/lib/sendgrid/api/entities/schedule.rb +13 -0
- data/lib/sendgrid/api/entities/sender_address.rb +13 -0
- data/lib/sendgrid/api/newsletter/categories.rb +74 -0
- data/lib/sendgrid/api/newsletter/emails.rb +69 -0
- data/lib/sendgrid/api/newsletter/lists.rb +64 -0
- data/lib/sendgrid/api/newsletter/marketing_emails.rb +72 -0
- data/lib/sendgrid/api/newsletter/recipients.rb +55 -0
- data/lib/sendgrid/api/newsletter/schedule.rb +70 -0
- data/lib/sendgrid/api/newsletter/sender_addresses.rb +80 -0
- data/lib/sendgrid/api/newsletter/utils.rb +34 -0
- data/lib/sendgrid/api/rest/errors/error.rb +9 -3
- data/lib/sendgrid/api/rest/resource.rb +3 -1
- data/lib/sendgrid/api/version.rb +1 -1
- data/lib/sendgrid/api/web/mail.rb +44 -0
- data/lib/sendgrid/api/web/profile.rb +3 -3
- data/lib/sendgrid/api/web/stats.rb +3 -3
- data/spec/fixtures/categories.json +11 -0
- data/spec/fixtures/emails/email.json +6 -0
- data/spec/fixtures/emails/emails.json +10 -0
- data/spec/fixtures/errors/already_exists.json +3 -0
- data/spec/fixtures/errors/bad_request.json +6 -0
- data/spec/fixtures/errors/database_error.json +3 -0
- data/spec/fixtures/errors/does_not_exist.json +3 -0
- data/spec/fixtures/{forbidden.json → errors/forbidden.json} +0 -0
- data/spec/fixtures/errors/invalid_fields.json +3 -0
- data/spec/fixtures/errors/not_scheduled.json +3 -0
- data/spec/fixtures/errors/unauthorized.json +6 -0
- data/spec/fixtures/lists/list.json +5 -0
- data/spec/fixtures/lists/lists.json +11 -0
- data/spec/fixtures/marketing_emails/marketing_email.json +19 -0
- data/spec/fixtures/marketing_emails/marketing_emails.json +10 -0
- data/spec/fixtures/recipients.json +8 -0
- data/spec/fixtures/schedule.json +3 -0
- data/spec/fixtures/sender_addresses/sender_address.json +11 -0
- data/spec/fixtures/sender_addresses/sender_addresses.json +11 -0
- data/spec/sendgrid/api/client_spec.rb +16 -0
- data/spec/sendgrid/api/entities/category_spec.rb +14 -0
- data/spec/sendgrid/api/entities/email_spec.rb +15 -0
- data/spec/sendgrid/api/entities/list_spec.rb +34 -0
- data/spec/sendgrid/api/entities/marketing_email_spec.rb +31 -0
- data/spec/sendgrid/api/entities/response_insert_spec.rb +28 -0
- data/spec/sendgrid/api/entities/response_remove_spec.rb +28 -0
- data/spec/sendgrid/api/entities/schedule_spec.rb +14 -0
- data/spec/sendgrid/api/entities/sender_address_spec.rb +21 -0
- data/spec/sendgrid/api/newsletter/categories_spec.rb +247 -0
- data/spec/sendgrid/api/newsletter/emails_spec.rb +265 -0
- data/spec/sendgrid/api/newsletter/lists_spec.rb +307 -0
- data/spec/sendgrid/api/newsletter/marketing_emails_spec.rb +306 -0
- data/spec/sendgrid/api/newsletter/recipients_spec.rb +252 -0
- data/spec/sendgrid/api/newsletter/schedule_spec.rb +263 -0
- data/spec/sendgrid/api/newsletter/sender_addresses_spec.rb +300 -0
- data/spec/sendgrid/api/rest/errors/error_spec.rb +40 -16
- data/spec/sendgrid/api/rest/resource_spec.rb +2 -0
- data/spec/sendgrid/api/web/mail_spec.rb +111 -0
- data/spec/sendgrid/api/web/profile_spec.rb +13 -29
- data/spec/sendgrid/api/web/stats_spec.rb +9 -15
- data/spec/support/helpers.rb +8 -0
- data/spec/support/mock.rb +6 -2
- data/spec/support/online.rb +114 -0
- data/spec/support/shared_examples.rb +93 -0
- metadata +96 -10
- data/spec/fixtures/unauthorized.json +0 -6
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'sendgrid/api/entities/entity'
|
2
|
+
|
3
|
+
module Sendgrid
|
4
|
+
module API
|
5
|
+
module Entities
|
6
|
+
class ResponseInsert < Entity
|
7
|
+
|
8
|
+
attribute :inserted
|
9
|
+
|
10
|
+
# Return true if one or more inserts were made
|
11
|
+
def any?
|
12
|
+
inserted > 0
|
13
|
+
end
|
14
|
+
|
15
|
+
# Return true if no inserts were made
|
16
|
+
def none?
|
17
|
+
!any?
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'sendgrid/api/entities/entity'
|
2
|
+
|
3
|
+
module Sendgrid
|
4
|
+
module API
|
5
|
+
module Entities
|
6
|
+
class ResponseRemove < Entity
|
7
|
+
|
8
|
+
attribute :removed
|
9
|
+
|
10
|
+
# Return true if one or more removals were made
|
11
|
+
def any?
|
12
|
+
removed > 0
|
13
|
+
end
|
14
|
+
|
15
|
+
# Return true if no removals were made
|
16
|
+
def none?
|
17
|
+
!any?
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'sendgrid/api/service'
|
2
|
+
require 'sendgrid/api/entities/category'
|
3
|
+
require 'sendgrid/api/entities/response'
|
4
|
+
require 'sendgrid/api/newsletter/utils'
|
5
|
+
|
6
|
+
module Sendgrid
|
7
|
+
module API
|
8
|
+
module Newsletter
|
9
|
+
module Categories
|
10
|
+
|
11
|
+
def categories
|
12
|
+
Services.new(resource)
|
13
|
+
end
|
14
|
+
|
15
|
+
class Services < Sendgrid::API::Service
|
16
|
+
include Newsletter::Utils
|
17
|
+
|
18
|
+
# Create a new Category.
|
19
|
+
#
|
20
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/categories.html#-create
|
21
|
+
# @param category [String, Entities::Category] A category name or Entities::Category object.
|
22
|
+
# @return [Entities::Response] An Entities::Response object.
|
23
|
+
def create(category)
|
24
|
+
params = { :category => extract_category(category) }
|
25
|
+
perform_request(Entities::Response, 'newsletter/category/create.json', params)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Assign a Category to an existing Marketing Email.
|
29
|
+
#
|
30
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/categories.html#-add
|
31
|
+
# @param marketing_email [String, Entities::MarketingEmail] An existing marketing email name or Entities::MarketingEmail object.
|
32
|
+
# @param category [String, Entities::Category] A category name or Entities::Category object.
|
33
|
+
# @return [Entities::Response] An Entities::Response object.
|
34
|
+
def add(marketing_email, category)
|
35
|
+
params = { :name => extract_marketing_email(marketing_email), :category => extract_category(category) }
|
36
|
+
perform_request(Entities::Response, 'newsletter/category/add.json', params)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Remove specific categories, or all categories from a Marketing Email.
|
40
|
+
#
|
41
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/categories.html#-remove
|
42
|
+
# @param marketing_email [String, Entities::MarketingEmail] An existing marketing email name or Entities::MarketingEmail object.
|
43
|
+
# @param category [String, Entities::Category] A category name or Entities::Category object.
|
44
|
+
# @return [Entities::Response] An Entities::Response object.
|
45
|
+
def remove(marketing_email, category)
|
46
|
+
params = { :name => extract_marketing_email(marketing_email), :category => extract_category(category) }
|
47
|
+
perform_request(Entities::Response, 'newsletter/category/remove.json', params)
|
48
|
+
end
|
49
|
+
|
50
|
+
# List all categories.
|
51
|
+
#
|
52
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/categories.html#-list
|
53
|
+
# @return [Array<Entities::Category>] An array of Entities::Category objects.
|
54
|
+
def list
|
55
|
+
perform_request(Entities::Category, 'newsletter/category/list.json')
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def extract_category(category)
|
61
|
+
case category
|
62
|
+
when ::String
|
63
|
+
category
|
64
|
+
when Entities::Category
|
65
|
+
category.category
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'sendgrid/api/service'
|
2
|
+
require 'sendgrid/api/entities/email'
|
3
|
+
require 'sendgrid/api/entities/response_insert'
|
4
|
+
require 'sendgrid/api/entities/response_remove'
|
5
|
+
require 'sendgrid/api/newsletter/utils'
|
6
|
+
|
7
|
+
module Sendgrid
|
8
|
+
module API
|
9
|
+
module Newsletter
|
10
|
+
module Emails
|
11
|
+
|
12
|
+
def emails
|
13
|
+
Services.new(resource)
|
14
|
+
end
|
15
|
+
|
16
|
+
class Services < Sendgrid::API::Service
|
17
|
+
include Newsletter::Utils
|
18
|
+
|
19
|
+
# Add one or more emails to a Recipient List.
|
20
|
+
#
|
21
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/emails.html#-add
|
22
|
+
# @param list [String, Entities::List] A list name or Entities::List object.
|
23
|
+
# @param emails [Array<Entities::Email>] A list of emails to be added. Limited to a 1000 entries maximum.
|
24
|
+
# @return [Entities::ResponseInsert] An Entities::ResponseInsert object.
|
25
|
+
def add(list, emails)
|
26
|
+
params = { :list => extract_listname(list), :data => map_emails(emails, :to_json) }
|
27
|
+
perform_request(Entities::ResponseInsert, 'newsletter/lists/email/add.json', params)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Get the email addresses and associated fields for a Recipient List.
|
31
|
+
#
|
32
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/emails.html#-get
|
33
|
+
# @param list [String, Entities::List] A list name or Entities::List object.
|
34
|
+
# @param emails [Entities::Email, Array<Entities::Email>] An email or list of emails to be searched and retrieved. Optional.
|
35
|
+
# @return [Array<Entities::Email>] An array of Entities::Email object.
|
36
|
+
def get(list, emails = nil)
|
37
|
+
params = { :list => extract_listname(list) }
|
38
|
+
params[:email] = map_emails(emails, :email) if emails
|
39
|
+
perform_request(Entities::Email, 'newsletter/lists/email/get.json', params)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Remove one or more emails from a Recipient List.
|
43
|
+
#
|
44
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/emails.html#-delete
|
45
|
+
# @param list [String, Entities::List] A list name or Entities::List object.
|
46
|
+
# @param emails [Entities::Email, Array<Entities::Email>] An email or list of emails to be removed.
|
47
|
+
# @return [Entities::ResponseRemove] An Entities::ResponseRemove object.
|
48
|
+
def delete(list, emails)
|
49
|
+
params = { :list => extract_listname(list), :email => map_emails(emails, :email) }
|
50
|
+
perform_request(Entities::ResponseRemove, 'newsletter/lists/email/delete.json', params)
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
# Return a mapping from an email method name.
|
56
|
+
#
|
57
|
+
# @param emails [Entities::Email, Array<Entities::Email>] An email or list of emails.
|
58
|
+
# @param to [Symbol] The email method name to be mapped.
|
59
|
+
# @return [Array] An array of the mapping.
|
60
|
+
def map_emails(emails, to)
|
61
|
+
emails = [emails] unless emails.is_a?(Array)
|
62
|
+
emails.map(&to)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'sendgrid/api/service'
|
2
|
+
require 'sendgrid/api/entities/list'
|
3
|
+
require 'sendgrid/api/entities/response'
|
4
|
+
require 'sendgrid/api/newsletter/utils'
|
5
|
+
|
6
|
+
module Sendgrid
|
7
|
+
module API
|
8
|
+
module Newsletter
|
9
|
+
module Lists
|
10
|
+
|
11
|
+
def lists
|
12
|
+
Services.new(resource)
|
13
|
+
end
|
14
|
+
|
15
|
+
class Services < Sendgrid::API::Service
|
16
|
+
include Newsletter::Utils
|
17
|
+
|
18
|
+
# Create a new Recipient List.
|
19
|
+
#
|
20
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/lists.html#-add
|
21
|
+
# @param list [String, Entities::List] A new list name or Entities::List object.
|
22
|
+
# @return [Entities::Response] An Entities::Response object.
|
23
|
+
def add(list)
|
24
|
+
params = { :list => extract_listname(list) }
|
25
|
+
perform_request(Entities::Response, 'newsletter/lists/add.json', params)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Rename a Recipient List.
|
29
|
+
#
|
30
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/lists.html#-edit
|
31
|
+
# @param list [String, Entities::List] An existing list name or Entities::List object.
|
32
|
+
# @param newlist [String, Entities::List] A new list name or Entities::List object.
|
33
|
+
# @return [Entities::Response] An Entities::Response object.
|
34
|
+
def edit(list, newlist)
|
35
|
+
params = { :list => extract_listname(list), :newlist => extract_listname(newlist) }
|
36
|
+
perform_request(Entities::Response, 'newsletter/lists/edit.json', params)
|
37
|
+
end
|
38
|
+
|
39
|
+
# List all Recipient Lists on your account, or check if a particular List exists.
|
40
|
+
#
|
41
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/lists.html#-get
|
42
|
+
# @param list [String, Entities::List] An existing list name or Entities::List object. Optional.
|
43
|
+
# @return [Array<Entities::List>] An array of Entities::List objects.
|
44
|
+
def get(list = nil)
|
45
|
+
params = { :list => extract_listname(list) } if list
|
46
|
+
perform_request(Entities::List, 'newsletter/lists/get.json', params || {})
|
47
|
+
end
|
48
|
+
|
49
|
+
# Remove a Recipient List from your account.
|
50
|
+
#
|
51
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/lists.html#-delete
|
52
|
+
# @param list [String, Entities::List] An existing list name or Entities::List object.
|
53
|
+
# @return [Entities::Response] An Entities::Response object.
|
54
|
+
def delete(list)
|
55
|
+
params = { :list => extract_listname(list) }
|
56
|
+
perform_request(Entities::Response, 'newsletter/lists/delete.json', params)
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'sendgrid/api/service'
|
2
|
+
require 'sendgrid/api/entities/marketing_email'
|
3
|
+
require 'sendgrid/api/entities/response'
|
4
|
+
require 'sendgrid/api/newsletter/utils'
|
5
|
+
|
6
|
+
module Sendgrid
|
7
|
+
module API
|
8
|
+
module Newsletter
|
9
|
+
module MarketingEmails
|
10
|
+
|
11
|
+
def marketing_emails
|
12
|
+
Services.new(resource)
|
13
|
+
end
|
14
|
+
|
15
|
+
class Services < Sendgrid::API::Service
|
16
|
+
include Newsletter::Utils
|
17
|
+
|
18
|
+
# Create a new Marketing Email.
|
19
|
+
#
|
20
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/newsletters.html#-add
|
21
|
+
# @param marketing_email [Entities::MarketingEmail] An Entities::MarketingEmail object.
|
22
|
+
# @return [Entities::Response] An Entities::Response object.
|
23
|
+
def add(marketing_email)
|
24
|
+
perform_request(Entities::Response, 'newsletter/add.json', marketing_email.as_json)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Edit an existing Marketing Email.
|
28
|
+
#
|
29
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/newsletters.html#-edit
|
30
|
+
# @param marketing_email [Entities::MarketingEmail] An Entities::MarketingEmail object.
|
31
|
+
# @param newname [String] The new name for the Marketing Email being edited. Optional.
|
32
|
+
# @return [Entities::Response] An Entities::Response object.
|
33
|
+
def edit(marketing_email, newname = nil)
|
34
|
+
params = marketing_email.as_json
|
35
|
+
params.merge!(:newname => newname) if newname
|
36
|
+
perform_request(Entities::Response, 'newsletter/edit.json', params)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Retrieve the contents of an existing Marketing Email.
|
40
|
+
#
|
41
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/newsletters.html#-get
|
42
|
+
# @param marketing_email [String, Entities::MarketingEmail] An existing marketing email name or Entities::MarketingEmail object.
|
43
|
+
# @return [Entities::MarketingEmail] An Entities::MarketingEmail object.
|
44
|
+
def get(marketing_email)
|
45
|
+
params = { :name => extract_marketing_email(marketing_email) }
|
46
|
+
perform_request(Entities::MarketingEmail, 'newsletter/get.json', params)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Retrieve a list of all existing Marketing Email.
|
50
|
+
#
|
51
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/newsletters.html#-list
|
52
|
+
# @return [Array<Entities::MarketingEmail>] An array of Entities::MarketingEmail objects.
|
53
|
+
def list
|
54
|
+
perform_request(Entities::MarketingEmail, 'newsletter/list.json')
|
55
|
+
end
|
56
|
+
|
57
|
+
# Remove an existing Marketing Email.
|
58
|
+
#
|
59
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/newsletters.html#-delete
|
60
|
+
# @param marketing_email [String, Entities::MarketingEmail] An existing marketing email name or Entities::MarketingEmail object.
|
61
|
+
# @return [Entities::Response] An Entities::Response object.
|
62
|
+
def delete(marketing_email)
|
63
|
+
params = { :name => extract_marketing_email(marketing_email) }
|
64
|
+
perform_request(Entities::Response, 'newsletter/delete.json', params)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'sendgrid/api/service'
|
2
|
+
require 'sendgrid/api/entities/list'
|
3
|
+
require 'sendgrid/api/entities/response'
|
4
|
+
require 'sendgrid/api/newsletter/utils'
|
5
|
+
|
6
|
+
module Sendgrid
|
7
|
+
module API
|
8
|
+
module Newsletter
|
9
|
+
module Recipients
|
10
|
+
|
11
|
+
def recipients
|
12
|
+
Services.new(resource)
|
13
|
+
end
|
14
|
+
|
15
|
+
class Services < Sendgrid::API::Service
|
16
|
+
include Newsletter::Utils
|
17
|
+
|
18
|
+
# Assign a List to a Marketing Email.
|
19
|
+
#
|
20
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/recipients.html#-add
|
21
|
+
# @param list [String, Entities::List] A list name or Entities::List object.
|
22
|
+
# @param marketing_email [String, Entities::MarketingEmail] A marketing email name or Entities::MarketingEmail object.
|
23
|
+
# @return [Entities::Response] An Entities::Response object.
|
24
|
+
def add(list, marketing_email)
|
25
|
+
params = { :list => extract_listname(list), :name => extract_marketing_email(marketing_email) }
|
26
|
+
perform_request(Entities::Response, 'newsletter/recipients/add.json', params)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Get all lists assigned to a particular Marketing Email.
|
30
|
+
#
|
31
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/recipients.html#-get
|
32
|
+
# @param marketing_email [String, Entities::MarketingEmail] A marketing email name or Entities::MarketingEmail object.
|
33
|
+
# @return [Array<Entities::List>] An array of Entities::List objects.
|
34
|
+
def get(marketing_email)
|
35
|
+
params = { :name => extract_marketing_email(marketing_email) }
|
36
|
+
perform_request(Entities::List, 'newsletter/recipients/get.json', params)
|
37
|
+
end
|
38
|
+
|
39
|
+
# Remove assigned lists from Marketing Email.
|
40
|
+
#
|
41
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/recipients.html#-delete
|
42
|
+
# @param list [String, Entities::List] A list name or Entities::List object.
|
43
|
+
# @param marketing_email [String, Entities::MarketingEmail] A marketing email name or Entities::MarketingEmail object.
|
44
|
+
# @return [Entities::Response] An Entities::Response object.
|
45
|
+
def delete(list, marketing_email)
|
46
|
+
params = { :list => extract_listname(list), :name => extract_marketing_email(marketing_email) }
|
47
|
+
perform_request(Entities::Response, 'newsletter/recipients/delete.json', params)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'sendgrid/api/service'
|
2
|
+
require 'sendgrid/api/entities/schedule'
|
3
|
+
require 'sendgrid/api/entities/response'
|
4
|
+
require 'sendgrid/api/newsletter/utils'
|
5
|
+
|
6
|
+
module Sendgrid
|
7
|
+
module API
|
8
|
+
module Newsletter
|
9
|
+
module Schedule
|
10
|
+
|
11
|
+
def schedule
|
12
|
+
Services.new(resource)
|
13
|
+
end
|
14
|
+
|
15
|
+
class Services < Sendgrid::API::Service
|
16
|
+
include Newsletter::Utils
|
17
|
+
|
18
|
+
# Schedule a delivery time for an existing Marketing Email.
|
19
|
+
#
|
20
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/schedule.html#-add
|
21
|
+
# @param marketing_email [String, Entities::MarketingEmail] A marketing email name or Entities::MarketingEmail object.
|
22
|
+
# @param options [Hash] A customizable set of options.
|
23
|
+
# @option options [String] :at Date/Time to schedule marketing email Delivery. Date/Time must be provided in ISO 8601 format (YYYY-MM-DD HH:MM:SS+-HH:MM)
|
24
|
+
# @option options [Fixnum] :after Number of minutes until delivery should occur. Must be a positive integer.
|
25
|
+
# @return [Entities::Response] An Entities::Response object.
|
26
|
+
def add(marketing_email, options = {})
|
27
|
+
options.keep_if {|key, value| [:at, :after].include?(key) }
|
28
|
+
options[:at] = format_time(options[:at]) if options.member?(:at)
|
29
|
+
params = { :name => extract_marketing_email(marketing_email) }
|
30
|
+
params.merge!(options) if options.any?
|
31
|
+
perform_request(Entities::Response, 'newsletter/schedule/add.json', params)
|
32
|
+
end
|
33
|
+
|
34
|
+
# Retrieve the scheduled delivery time for an existing Marketing Email.
|
35
|
+
#
|
36
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/schedule.html#-get
|
37
|
+
# @param marketing_email [String, Entities::MarketingEmail] A marketing email name or Entities::MarketingEmail object.
|
38
|
+
# @return [Entities::Schedule] An Entities::Schedule objects.
|
39
|
+
def get(marketing_email)
|
40
|
+
params = { :name => extract_marketing_email(marketing_email) }
|
41
|
+
perform_request(Entities::Schedule, 'newsletter/schedule/get.json', params)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Cancel a scheduled send for a Marketing Email.
|
45
|
+
#
|
46
|
+
# @see http://sendgrid.com/docs/API_Reference/Marketing_Emails_API/schedule.html#-delete
|
47
|
+
# @param marketing_email [String, Entities::MarketingEmail] A marketing email name or Entities::MarketingEmail object.
|
48
|
+
# @return [Entities::Response] An Entities::Response object.
|
49
|
+
def delete(marketing_email)
|
50
|
+
params = { :name => extract_marketing_email(marketing_email) }
|
51
|
+
perform_request(Entities::Response, 'newsletter/schedule/delete.json', params)
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def format_time(at)
|
57
|
+
case at
|
58
|
+
when ::String
|
59
|
+
at
|
60
|
+
when ::Time
|
61
|
+
at.strftime('%Y-%m-%d %H:%M:%S%:z')
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|