govdelivery-tms 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|