govdelivery-tms 0.8.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.
- checksums.yaml +15 -0
- data/Gemfile +14 -0
- data/README.md +324 -0
- data/Rakefile +20 -0
- data/govdelivery-tms.gemspec +30 -0
- data/lib/govdelivery-tms.rb +43 -0
- data/lib/govdelivery-tms/base.rb +37 -0
- data/lib/govdelivery-tms/client.rb +97 -0
- data/lib/govdelivery-tms/collection_resource.rb +54 -0
- data/lib/govdelivery-tms/connection.rb +34 -0
- data/lib/govdelivery-tms/errors.rb +58 -0
- data/lib/govdelivery-tms/instance_resource.rb +219 -0
- data/lib/govdelivery-tms/link_header.rb +223 -0
- data/lib/govdelivery-tms/logger.rb +36 -0
- data/lib/govdelivery-tms/mail/delivery_method.rb +63 -0
- data/lib/govdelivery-tms/resource/collections.rb +98 -0
- data/lib/govdelivery-tms/resource/command.rb +25 -0
- data/lib/govdelivery-tms/resource/command_action.rb +17 -0
- data/lib/govdelivery-tms/resource/command_type.rb +20 -0
- data/lib/govdelivery-tms/resource/email_message.rb +81 -0
- data/lib/govdelivery-tms/resource/email_recipient.rb +31 -0
- data/lib/govdelivery-tms/resource/email_recipient_click.rb +8 -0
- data/lib/govdelivery-tms/resource/email_recipient_open.rb +8 -0
- data/lib/govdelivery-tms/resource/email_template.rb +15 -0
- data/lib/govdelivery-tms/resource/from_address.rb +10 -0
- data/lib/govdelivery-tms/resource/inbound_sms_message.rb +8 -0
- data/lib/govdelivery-tms/resource/ipaws_acknowledgement.rb +9 -0
- data/lib/govdelivery-tms/resource/ipaws_alert.rb +38 -0
- data/lib/govdelivery-tms/resource/ipaws_category.rb +7 -0
- data/lib/govdelivery-tms/resource/ipaws_cog_profile.rb +29 -0
- data/lib/govdelivery-tms/resource/ipaws_event_code.rb +7 -0
- data/lib/govdelivery-tms/resource/ipaws_nwem_area.rb +18 -0
- data/lib/govdelivery-tms/resource/ipaws_nwem_authorization.rb +9 -0
- data/lib/govdelivery-tms/resource/ipaws_nwem_auxilary_data.rb +8 -0
- data/lib/govdelivery-tms/resource/ipaws_response_type.rb +7 -0
- data/lib/govdelivery-tms/resource/ipaws_static_resource.rb +8 -0
- data/lib/govdelivery-tms/resource/keyword.rb +30 -0
- data/lib/govdelivery-tms/resource/recipient.rb +10 -0
- data/lib/govdelivery-tms/resource/sms_message.rb +35 -0
- data/lib/govdelivery-tms/resource/webhook.rb +20 -0
- data/lib/govdelivery-tms/util/core_ext.rb +27 -0
- data/lib/govdelivery-tms/util/hal_link_parser.rb +50 -0
- data/lib/govdelivery-tms/version.rb +3 -0
- data/spec/client_spec.rb +41 -0
- data/spec/command_types_spec.rb +29 -0
- data/spec/email_message_spec.rb +102 -0
- data/spec/email_template_spec.rb +149 -0
- data/spec/errors_spec.rb +13 -0
- data/spec/from_address_spec.rb +86 -0
- data/spec/inbound_sms_messages_spec.rb +19 -0
- data/spec/instance_resource_spec.rb +61 -0
- data/spec/ipaws_acknowledgement_spec.rb +16 -0
- data/spec/ipaws_alerts_spec.rb +192 -0
- data/spec/ipaws_cog_profile_spec.rb +75 -0
- data/spec/ipaws_event_codes_spec.rb +35 -0
- data/spec/ipaws_nwem_areas_spec.rb +58 -0
- data/spec/ipaws_nwem_authorization_spec.rb +16 -0
- data/spec/keyword_spec.rb +62 -0
- data/spec/keywords_spec.rb +21 -0
- data/spec/mail/delivery_method_spec.rb +52 -0
- data/spec/sms_message_spec.rb +63 -0
- data/spec/sms_messages_spec.rb +21 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/tms_spec.rb +7 -0
- metadata +172 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
# CommandAction object represent the results of Commands for a particular input (e.g. an incoming SMS message)
|
3
|
+
#
|
4
|
+
# This resource is read-only.
|
5
|
+
#
|
6
|
+
# ==== Attributes
|
7
|
+
#
|
8
|
+
# * +http_response_code+ - e.g. 200, 404, etc.
|
9
|
+
# * +http_content_type+ - text/html, etc.
|
10
|
+
# * +http_body+ - Request body (if it's <500 characters, otherwise it'll be nil)
|
11
|
+
#
|
12
|
+
class CommandAction
|
13
|
+
include InstanceResource
|
14
|
+
|
15
|
+
readonly_attributes :status, :content_type, :response_body, :created_at
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
# CommandType is a pair of values (name, string_fields, array_fields) that can be attached
|
3
|
+
# to a Keyword (in a Command object).
|
4
|
+
#
|
5
|
+
# This resource is read-only.
|
6
|
+
#
|
7
|
+
# @attr name [String] The name of the CommandType.
|
8
|
+
# @attr string_fields [Array] An Array of strings representing the different string_fields on this
|
9
|
+
# CommandType. Field values will always be strings.
|
10
|
+
# @attr array_fields [Array] An array of strings representing the different array fields on this
|
11
|
+
# CommandType. Field values will always be arrays of strings.
|
12
|
+
#
|
13
|
+
class CommandType
|
14
|
+
|
15
|
+
include InstanceResource
|
16
|
+
|
17
|
+
# @!parse attr_reader :string_fields, :array_fields, :name
|
18
|
+
readonly_attributes :name, :string_fields, :array_fields
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
# An EmailMessage is used to create and send a email to a collection of EmailRecipient
|
3
|
+
# objects. Certain metrics are available after the email is sent, including
|
4
|
+
# the collection of recipients who clicked or opened the email.
|
5
|
+
#
|
6
|
+
# @attr from_name [String] The name of the person or entity sending the email.
|
7
|
+
# @attr from_email [String] Optional - the email address of the person or entity sending the email. Must be configured in TMS beforehand. Defaults to the account default from address.
|
8
|
+
# @attr reply_to [String] Optional - the email address used for the Reply-To header of this email. Defaults to the account default reply_to_email address (which itself defaults to the default from address if not specified).
|
9
|
+
# @attr errors_to [String] Optional - the email address used for the Errors-To header of this email. Defaults to the account default bounce_email address (which itself defaults to the default from address if not specified).
|
10
|
+
# @attr subject [String] The subject of the email.
|
11
|
+
# @attr body [String] The body of the email.
|
12
|
+
# @attr open_tracking_enabled [Boolean] Optional - Whether to track opens on this message. Defaults to true.
|
13
|
+
# @attr click_tracking_enabled [Boolean] Optional - Whether to track clicks on links in this message. Defaults to true.
|
14
|
+
# @attr macros [Hash] Optional - A dictionary of key/value pairs to use in the subject and body as default macros.
|
15
|
+
# The message-level macros are used when a recipient has no value for a given macro key.
|
16
|
+
#
|
17
|
+
# @example Sending a message
|
18
|
+
# email_message = client.email_messages.build(:subject => "Great news!",
|
19
|
+
# :body => "You win! <a href='http://example.com/'>click here</a>.",
|
20
|
+
# :from_email => 'foo@example.com')
|
21
|
+
# email_message.recipients.build(:email => "john@example.com")
|
22
|
+
# email_message.recipients.build(:email => "jeff@example.com")
|
23
|
+
# email_message.post
|
24
|
+
# email_message.get
|
25
|
+
#
|
26
|
+
# @example Viewing recipients that clicked on a link in the email
|
27
|
+
# email_message.get
|
28
|
+
# email_message.clicked.get
|
29
|
+
# email_message.clicked.collection # => [<#EmailRecipient>,...]
|
30
|
+
#
|
31
|
+
# @example Viewing recipients that opened the email
|
32
|
+
# email_message.get
|
33
|
+
# email_message.opened.get
|
34
|
+
# email_message.opened.collection # => [<#EmailRecipient>,...]
|
35
|
+
#
|
36
|
+
# @example Using macros
|
37
|
+
# email_message = client.email_messages.build(:subject => "Hello [[user]]",
|
38
|
+
# :body => "Your name is [[name]]",
|
39
|
+
# :macros => {:user => "Sir or Madam", :name => "unknown"})
|
40
|
+
# email_message.recipients.build(:email => "jeff@example.com", :macros => {:user => "jexample", :name => "Jeff Example"})
|
41
|
+
# email_message.post
|
42
|
+
#
|
43
|
+
class EmailMessage
|
44
|
+
include InstanceResource
|
45
|
+
|
46
|
+
# @!parse attr_accessor :body, :from_name, :from_email, :reply_to, :errors_to, :subject, :open_tracking_enabled, :click_tracking_enabled, :macros
|
47
|
+
writeable_attributes :body,
|
48
|
+
:click_tracking_enabled,
|
49
|
+
:errors_to,
|
50
|
+
:from_email,
|
51
|
+
:from_name,
|
52
|
+
:macros,
|
53
|
+
:open_tracking_enabled,
|
54
|
+
:reply_to,
|
55
|
+
:subject
|
56
|
+
|
57
|
+
|
58
|
+
# @!parse attr_reader :created_at, :status
|
59
|
+
readonly_attributes :created_at, :status
|
60
|
+
|
61
|
+
##
|
62
|
+
# A CollectionResource of EmailRecipients on this email
|
63
|
+
collection_attribute :recipients, 'EmailRecipients'
|
64
|
+
|
65
|
+
##
|
66
|
+
# A CollectionResource of EmailRecipients that opened this email
|
67
|
+
collection_attribute :opened, 'EmailRecipients'
|
68
|
+
|
69
|
+
##
|
70
|
+
# A CollectionResource of EmailRecipients that clicked on at least one link in this email
|
71
|
+
collection_attribute :clicked, 'EmailRecipients'
|
72
|
+
|
73
|
+
##
|
74
|
+
# A CollectionResource of EmailRecipients that sent successfully
|
75
|
+
collection_attribute :sent, 'EmailRecipients'
|
76
|
+
|
77
|
+
##
|
78
|
+
# A CollectionResource of EmailRecipients that failed, not neccessarily bounced
|
79
|
+
collection_attribute :failed, 'EmailRecipients'
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
# An EmailRecipient is used in conjunction with an EmailMessage to send email.
|
3
|
+
#
|
4
|
+
# @attr email [String] The recipient email address
|
5
|
+
# @attr macros [Hash] A dictionary of key/value pairs to resolve in the subject and body as macros. This value can be nil.
|
6
|
+
#
|
7
|
+
# @example Sending a message
|
8
|
+
# email_message = client.email_messages.build(:subject => "Great news!", :body => "You win! <a href='http://example.com/'>click here</a>.")
|
9
|
+
# email_message.recipients.build(:email => "john@example.com")
|
10
|
+
# email_message.recipients.build(:email => "jeff@example.com")
|
11
|
+
# email_message.post
|
12
|
+
# email_message.get
|
13
|
+
#
|
14
|
+
class EmailRecipient
|
15
|
+
include InstanceResource
|
16
|
+
|
17
|
+
# @!parse attr_accessor :email, :macros
|
18
|
+
writeable_attributes :email, :macros
|
19
|
+
|
20
|
+
# @!parse attr_reader :completed_at, :status, :error_message
|
21
|
+
readonly_attributes :completed_at, :status, :error_message
|
22
|
+
|
23
|
+
##
|
24
|
+
# A CollectionResource of EmailRecipientOpens for this EmailRecipient
|
25
|
+
readonly_collection_attribute :opens, 'EmailRecipientOpens'
|
26
|
+
|
27
|
+
##
|
28
|
+
# A CollectionResource of EmailRecipientClicks for this EmailRecipient
|
29
|
+
readonly_collection_attribute :clicks, 'EmailRecipientClicks'
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
class EmailTemplate
|
3
|
+
include InstanceResource
|
4
|
+
|
5
|
+
# @!parse attr_accessor :body, :subject, :link_tracking_parameters, :macros, :open_tracking_enabled, :click_tracking_enabled
|
6
|
+
writeable_attributes :body, :subject, :link_tracking_parameters, :macros, :open_tracking_enabled, :click_tracking_enabled
|
7
|
+
|
8
|
+
linkable_attributes :from_address
|
9
|
+
|
10
|
+
# @!parse attr_reader :created_at
|
11
|
+
readonly_attributes :id, :created_at
|
12
|
+
|
13
|
+
collection_attribute :from_address, 'FromAddress'
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
class FromAddress
|
3
|
+
include InstanceResource
|
4
|
+
|
5
|
+
# @!parse attr_accessor :from_email, :reply_to_email, :bounce_email, :is_default
|
6
|
+
writeable_attributes :from_email, :reply_to_email, :bounce_email, :is_default
|
7
|
+
|
8
|
+
readonly_attributes :created_at
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
class InboundSmsMessage
|
3
|
+
include InstanceResource
|
4
|
+
|
5
|
+
# @!parse attr_reader :created_at, :completed_at, :from, :body, :to, :command_status
|
6
|
+
readonly_attributes :created_at, :completed_at, :from, :body, :to, :command_status, :keyword_response
|
7
|
+
end
|
8
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module TMS
|
2
|
+
class IpawsAlert
|
3
|
+
|
4
|
+
include InstanceResource
|
5
|
+
|
6
|
+
writeable_attributes(
|
7
|
+
:identifier,
|
8
|
+
:sender,
|
9
|
+
:sent,
|
10
|
+
:status,
|
11
|
+
:msgType,
|
12
|
+
:source,
|
13
|
+
:scope,
|
14
|
+
:restriction,
|
15
|
+
:addresses,
|
16
|
+
:code,
|
17
|
+
:note,
|
18
|
+
:references,
|
19
|
+
:incidents,
|
20
|
+
:info
|
21
|
+
)
|
22
|
+
|
23
|
+
attr_accessor :ipaws_response
|
24
|
+
|
25
|
+
def process_response(response, method)
|
26
|
+
# All IPAWS responses are 200, even if there are errors.
|
27
|
+
# Capture the IPAWS response on a 200 response to POST (create alert)
|
28
|
+
if method == :post && response.status == 200
|
29
|
+
self.ipaws_response = response.body
|
30
|
+
true
|
31
|
+
else
|
32
|
+
self.ipaws_response = nil
|
33
|
+
super
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module TMS
|
2
|
+
class IpawsCogProfile
|
3
|
+
|
4
|
+
include InstanceResource
|
5
|
+
|
6
|
+
readonly_attributes(
|
7
|
+
:cogid,
|
8
|
+
:name,
|
9
|
+
:description,
|
10
|
+
:categoryName,
|
11
|
+
:organizationName,
|
12
|
+
:cogEnabled,
|
13
|
+
:caeAuthorized,
|
14
|
+
:caeCmasAuthorized,
|
15
|
+
:eanAuthorized,
|
16
|
+
:allEventCode,
|
17
|
+
:allGeoCode,
|
18
|
+
:easAuthorized,
|
19
|
+
:cmasAlertAuthorized,
|
20
|
+
:cmamTextAuthorized,
|
21
|
+
:publicAlertAuthorized,
|
22
|
+
:broadcastAuthorized,
|
23
|
+
:email,
|
24
|
+
:eventCodes,
|
25
|
+
:geoCodes
|
26
|
+
)
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
# A Keyword is a word that TMS will detect in an incoming SMS message. Keywords can have Commands, and
|
3
|
+
# when an incoming text message has a keyword, TMS will execute the keyword's Commands. Keywords may
|
4
|
+
# also have a response text field. If the response text is not blank, the system will send an SMS reply to the user
|
5
|
+
# immediately with the given text.
|
6
|
+
#
|
7
|
+
# @attr name [String] The name of the keyword. The system will scan an incoming SMS for this string (in a case-insensitive manner).
|
8
|
+
# @attr response_text [String] (Optional) The static text with which to reply to an SMS to this keyword.
|
9
|
+
# This value can be blank, in which case the handset user will not receive a response.
|
10
|
+
# Note that all keyword commands will be executed, regardless of the value of response_text.
|
11
|
+
#
|
12
|
+
# @example
|
13
|
+
# keyword = client.keywords.build(:name => "HOWDY")
|
14
|
+
# keyword.post
|
15
|
+
# keyword.name = "INFO"
|
16
|
+
# keyword.response_text = "Please call our support staff at 1-555-555-5555"
|
17
|
+
# keyword.put
|
18
|
+
# keyword.delete
|
19
|
+
class Keyword
|
20
|
+
include InstanceResource
|
21
|
+
|
22
|
+
# @!parse attr_accessor :name, :response_text
|
23
|
+
writeable_attributes :name, :response_text
|
24
|
+
|
25
|
+
##
|
26
|
+
# A CollectionResource of Command objects
|
27
|
+
collection_attributes :commands
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
class Recipient
|
3
|
+
include InstanceResource
|
4
|
+
# @!parse attr_accessor :phone
|
5
|
+
writeable_attributes :phone
|
6
|
+
|
7
|
+
# @!parse attr_reader :formatted_phone, :error_message, :status, :completed_at
|
8
|
+
readonly_attributes :formatted_phone, :error_message, :status, :completed_at
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module TMS #:nodoc:
|
2
|
+
# An SMSMessage is used to create and send a text message to a collection of Recipient
|
3
|
+
# objects.
|
4
|
+
#
|
5
|
+
#
|
6
|
+
# @attr body [String] The content of the SMS. This field will be truncated to 160 characters.
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# sms = client.sms_messages.build(:body => "Hello")
|
10
|
+
# sms.recipients.build(:phone => "+18001002000")
|
11
|
+
# sms.post
|
12
|
+
# sms.get
|
13
|
+
class SmsMessage
|
14
|
+
include InstanceResource
|
15
|
+
|
16
|
+
# @!parse attr_accessor :body
|
17
|
+
writeable_attributes :body
|
18
|
+
|
19
|
+
# @!parse attr_reader :created_at, :completed_at, :status
|
20
|
+
readonly_attributes :created_at, :completed_at, :status
|
21
|
+
|
22
|
+
##
|
23
|
+
# A CollectionResource of Recipient objects
|
24
|
+
collection_attributes :recipients
|
25
|
+
|
26
|
+
##
|
27
|
+
# A CollectionResource of Recipients that sent successfully
|
28
|
+
collection_attribute :sent, 'Recipients'
|
29
|
+
|
30
|
+
##
|
31
|
+
# A CollectionResource of Recipients that failed
|
32
|
+
collection_attribute :failed, 'Recipients'
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|