govdelivery-tms 0.8.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +1 -1
- data/README.md +8 -8
- data/govdelivery-tms.gemspec +2 -2
- data/lib/{govdelivery-tms → govdelivery/tms}/base.rb +4 -4
- data/lib/{govdelivery-tms → govdelivery/tms}/client.rb +9 -9
- data/lib/{govdelivery-tms → govdelivery/tms}/collection_resource.rb +2 -2
- data/lib/{govdelivery-tms → govdelivery/tms}/connection.rb +4 -4
- data/lib/{govdelivery-tms → govdelivery/tms}/errors.rb +1 -1
- data/lib/govdelivery/tms/instance_resource.rb +219 -0
- data/lib/{govdelivery-tms → govdelivery/tms}/link_header.rb +0 -0
- data/lib/{govdelivery-tms → govdelivery/tms}/logger.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/mail/delivery_method.rb +11 -11
- data/lib/govdelivery/tms/resource/collections.rb +98 -0
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/command.rb +7 -7
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/command_action.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/command_type.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/email_message.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/email_recipient.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/email_recipient_click.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/email_recipient_open.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/email_template.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/from_address.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/inbound_sms_message.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/ipaws_acknowledgement.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/ipaws_alert.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/ipaws_category.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/ipaws_cog_profile.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/ipaws_event_code.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/ipaws_nwem_area.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/ipaws_nwem_authorization.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/ipaws_nwem_auxilary_data.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/ipaws_response_type.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/ipaws_static_resource.rb +2 -2
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/keyword.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/recipient.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/sms_message.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/resource/webhook.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/util/core_ext.rb +1 -1
- data/lib/{govdelivery-tms → govdelivery/tms}/util/hal_link_parser.rb +2 -2
- data/lib/govdelivery/tms/version.rb +5 -0
- data/lib/govdelivery-tms/instance_resource.rb +7 -7
- data/lib/govdelivery-tms.rb +38 -36
- data/spec/client_spec.rb +18 -18
- data/spec/command_types_spec.rb +6 -6
- data/spec/email_message_spec.rb +58 -58
- data/spec/email_template_spec.rb +39 -39
- data/spec/errors_spec.rb +3 -3
- data/spec/from_address_spec.rb +22 -22
- data/spec/inbound_sms_messages_spec.rb +5 -5
- data/spec/instance_resource_spec.rb +14 -14
- data/spec/ipaws_acknowledgement_spec.rb +6 -6
- data/spec/ipaws_alerts_spec.rb +31 -31
- data/spec/ipaws_cog_profile_spec.rb +26 -26
- data/spec/ipaws_event_codes_spec.rb +5 -5
- data/spec/ipaws_nwem_areas_spec.rb +22 -22
- data/spec/ipaws_nwem_authorization_spec.rb +6 -6
- data/spec/keyword_spec.rb +23 -23
- data/spec/keywords_spec.rb +5 -5
- data/spec/mail/delivery_method_spec.rb +19 -19
- data/spec/sms_message_spec.rb +29 -29
- data/spec/sms_messages_spec.rb +7 -7
- data/spec/spec_helper.rb +2 -3
- data/spec/tms_spec.rb +2 -2
- metadata +50 -41
- checksums.yaml +0 -15
- data/lib/govdelivery-tms/resource/collections.rb +0 -98
- data/lib/govdelivery-tms/version.rb +0 -3
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -21,11 +21,11 @@ $ gem install govdelivery-tms
|
|
21
21
|
|
22
22
|
Connecting
|
23
23
|
----------
|
24
|
-
Loading an instance of `TMS::Client` will automatically connect to the API to query the available resources for your account.
|
24
|
+
Loading an instance of `GovDelivery::TMS::Client` will automatically connect to the API to query the available resources for your account.
|
25
25
|
|
26
26
|
```ruby
|
27
27
|
# default api root endpoint is https://tms.govdelivery.com
|
28
|
-
client = TMS::Client.new('auth_token', :api_root => 'https://stage-tms.govdelivery.com')
|
28
|
+
client = GovDelivery::TMS::Client.new('auth_token', :api_root => 'https://stage-tms.govdelivery.com')
|
29
29
|
```
|
30
30
|
|
31
31
|
Messages
|
@@ -51,13 +51,13 @@ message.post # true
|
|
51
51
|
message.recipients.collection.detect{|r| r.errors } # {"phone"=>["is not a number"]}
|
52
52
|
# save succeeded, but we have one bad recipient
|
53
53
|
message.href # "/messages/sms/87"
|
54
|
-
message.get # <TMS::SmsMessage href=/messages/sms/87 attributes={...}>
|
54
|
+
message.get # <GovDelivery::TMS::SmsMessage href=/messages/sms/87 attributes={...}>
|
55
55
|
```
|
56
56
|
|
57
57
|
### Retrieving Inbound SMS Messages
|
58
58
|
```ruby
|
59
|
-
client.inbound_sms_messages.get # <TMS::InboundSmsMessages href=/inbound/sms attributes={...}>
|
60
|
-
inbound_sms = client.inbound_sms_messages.collection.first # <TMS::InboundSmsMessage href=/inbound/sms/10041 attributes={...}>
|
59
|
+
client.inbound_sms_messages.get # <GovDelivery::TMS::InboundSmsMessages href=/inbound/sms attributes={...}>
|
60
|
+
inbound_sms = client.inbound_sms_messages.collection.first # <GovDelivery::TMS::InboundSmsMessage href=/inbound/sms/10041 attributes={...}>
|
61
61
|
inbound_sms.to # "+15559999999"
|
62
62
|
inbound_sms.from # "+15005550006"
|
63
63
|
inbound_sms.attributes # {:from=>"+15005550006", :to=>"+15559999999", :body=>"test", :command_status=>"success", :keyword_response=>"kwidjebo", :created_at=>"2014-11-05T17:15:01Z"}
|
@@ -76,7 +76,7 @@ message.post # true
|
|
76
76
|
message.recipients.collection.detect{|r| r.errors } # {"email"=>["can't be blank"]}
|
77
77
|
# save succeeded, but we have one bad recipient
|
78
78
|
message.href # "/messages/email/87"
|
79
|
-
message.get # <TMS::EmailMessage href=/messages/email/88 attributes={...}>
|
79
|
+
message.get # <GovDelivery::TMS::EmailMessage href=/messages/email/88 attributes={...}>
|
80
80
|
```
|
81
81
|
|
82
82
|
#### Sending an Email with Macros
|
@@ -256,11 +256,11 @@ Logging
|
|
256
256
|
|
257
257
|
Any instance of a [Logger](http://www.ruby-doc.org/stdlib-1.9.3/libdoc/logger/rdoc/Logger.html "Ruby Logger")-like class can be passed in to the client; incoming and outgoing request information will then be logged to that instance.
|
258
258
|
|
259
|
-
The example below configures `TMS::Client` to log to `STDOUT`:
|
259
|
+
The example below configures `GovDelivery::TMS::Client` to log to `STDOUT`:
|
260
260
|
|
261
261
|
```ruby
|
262
262
|
logger = Logger.new(STDOUT)
|
263
|
-
client = TMS::Client.new('auth_token', :logger => logger)
|
263
|
+
client = GovDelivery::TMS::Client.new('auth_token', :logger => logger)
|
264
264
|
```
|
265
265
|
|
266
266
|
ActionMailer integration
|
data/govdelivery-tms.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
3
|
-
require "govdelivery
|
3
|
+
require "govdelivery/tms/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "govdelivery-tms"
|
7
|
-
s.version = TMS::VERSION
|
7
|
+
s.version = GovDelivery::TMS::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["GovDelivery"]
|
10
10
|
s.email = ["support@govdelivery.com"]
|
@@ -1,11 +1,11 @@
|
|
1
|
-
module TMS #:nodoc:
|
1
|
+
module GovDelivery::TMS #:nodoc:
|
2
2
|
module Base
|
3
3
|
def self.included(base)
|
4
|
-
base.send(:include, TMS::Util::HalLinkParser)
|
4
|
+
base.send(:include, GovDelivery::TMS::Util::HalLinkParser)
|
5
5
|
base.extend(ClassMethods)
|
6
6
|
base.send(:include, InstanceMethods)
|
7
|
-
base.send(:include, TMS::CoreExt)
|
8
|
-
base.send(:extend, TMS::CoreExt)
|
7
|
+
base.send(:include, GovDelivery::TMS::CoreExt)
|
8
|
+
base.send(:extend, GovDelivery::TMS::CoreExt)
|
9
9
|
end
|
10
10
|
|
11
11
|
attr_accessor :client, :href, :errors, :new_record
|
@@ -1,12 +1,12 @@
|
|
1
1
|
require 'logger'
|
2
2
|
# The client class to connect and talk to the TMS REST API.
|
3
|
-
class TMS::Client
|
4
|
-
include TMS::Util::HalLinkParser
|
5
|
-
include TMS::CoreExt
|
3
|
+
class GovDelivery::TMS::Client
|
4
|
+
include GovDelivery::TMS::Util::HalLinkParser
|
5
|
+
include GovDelivery::TMS::CoreExt
|
6
6
|
|
7
7
|
attr_accessor :connection, :href, :api_root, :logger
|
8
8
|
|
9
|
-
DEFAULTS = {:
|
9
|
+
DEFAULTS = {api_root: 'https://tms.govdelivery.com', logger: nil}.freeze
|
10
10
|
|
11
11
|
# Create a new client and issue a request for the available resources for a given account.
|
12
12
|
#
|
@@ -30,7 +30,7 @@ class TMS::Client
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def connect!(auth_token, options={})
|
33
|
-
self.connection = TMS::Connection.new({:
|
33
|
+
self.connection = GovDelivery::TMS::Connection.new({auth_token: auth_token, api_root: api_root, logger: logger}.merge!(options))
|
34
34
|
end
|
35
35
|
|
36
36
|
def discover!
|
@@ -42,11 +42,11 @@ class TMS::Client
|
|
42
42
|
response = raw_connection.get(href)
|
43
43
|
case response.status
|
44
44
|
when 500..599
|
45
|
-
raise TMS::Request::Error.new(response.status)
|
45
|
+
raise GovDelivery::TMS::Request::Error.new(response.status)
|
46
46
|
when 401..499
|
47
|
-
raise TMS::Request::Error.new(response.status)
|
47
|
+
raise GovDelivery::TMS::Request::Error.new(response.status)
|
48
48
|
when 202
|
49
|
-
raise TMS::Request::InProgress.new(response.body['message'])
|
49
|
+
raise GovDelivery::TMS::Request::InProgress.new(response.body['message'])
|
50
50
|
else
|
51
51
|
return response
|
52
52
|
end
|
@@ -74,7 +74,7 @@ class TMS::Client
|
|
74
74
|
when 200...299
|
75
75
|
return response
|
76
76
|
else
|
77
|
-
raise TMS::Request::Error.new(response.status)
|
77
|
+
raise GovDelivery::TMS::Request::Error.new(response.status)
|
78
78
|
end
|
79
79
|
end
|
80
80
|
|
@@ -1,10 +1,10 @@
|
|
1
|
-
module TMS::CollectionResource
|
1
|
+
module GovDelivery::TMS::CollectionResource
|
2
2
|
def self.included(base)
|
3
3
|
base.send(:include, InstanceMethods)
|
4
4
|
end
|
5
5
|
|
6
6
|
module InstanceMethods
|
7
|
-
include TMS::Base
|
7
|
+
include GovDelivery::TMS::Base
|
8
8
|
attr_accessor :collection
|
9
9
|
|
10
10
|
def initialize(client, href, items=nil)
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class TMS::Connection
|
1
|
+
class GovDelivery::TMS::Connection
|
2
2
|
attr_accessor :auth_token, :api_root, :connection, :logger
|
3
3
|
|
4
4
|
def get(href)
|
@@ -18,12 +18,12 @@ class TMS::Connection
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def setup_connection
|
21
|
-
self.connection = Faraday.new(:
|
22
|
-
faraday.use TMS::Logger, self.logger if self.logger
|
21
|
+
self.connection = Faraday.new(url: self.api_root) do |faraday|
|
22
|
+
faraday.use GovDelivery::TMS::Logger, self.logger if self.logger
|
23
23
|
faraday.request :json
|
24
24
|
faraday.headers['X-AUTH-TOKEN'] = auth_token
|
25
25
|
faraday.headers[:user_agent] = "GovDelivery Ruby TMS::Client #{TMS::VERSION}"
|
26
|
-
faraday.response :json, :
|
26
|
+
faraday.response :json, content_type: /\bjson$/
|
27
27
|
faraday.adapter :net_http
|
28
28
|
end
|
29
29
|
end
|
@@ -0,0 +1,219 @@
|
|
1
|
+
module GovDelivery::TMS::InstanceResource
|
2
|
+
def self.included(base)
|
3
|
+
base.send(:include, GovDelivery::TMS::Base)
|
4
|
+
base.extend(ClassMethods)
|
5
|
+
base.send(:include, InstanceMethods)
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_accessor :response
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
##
|
12
|
+
# Writeable attributes are sent on POST/PUT.
|
13
|
+
#
|
14
|
+
def writeable_attributes(*attrs)
|
15
|
+
@writeable_attributes ||= []
|
16
|
+
if attrs.any?
|
17
|
+
@writeable_attributes.map!(&:to_sym).concat(attrs).uniq! if attrs.any?
|
18
|
+
setup_attributes(@writeable_attributes, false)
|
19
|
+
end
|
20
|
+
@writeable_attributes
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# Linkable attributes are sent on POST/PUT.
|
25
|
+
#
|
26
|
+
def linkable_attributes(*attrs)
|
27
|
+
@linkable_attributes ||= []
|
28
|
+
if attrs.any?
|
29
|
+
@linkable_attributes.map!(&:to_sym).concat(attrs).uniq! if attrs.any?
|
30
|
+
end
|
31
|
+
@linkable_attributes
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Readonly attributes don't get POSTed.
|
36
|
+
# (timestamps are included by default)
|
37
|
+
#
|
38
|
+
def readonly_attributes(*attrs)
|
39
|
+
@readonly_attributes ||= [:created_at, :updated_at, :completed_at]
|
40
|
+
if attrs.any?
|
41
|
+
@readonly_attributes.map!(&:to_sym).concat(attrs).uniq!
|
42
|
+
setup_attributes(@readonly_attributes, true)
|
43
|
+
end
|
44
|
+
@readonly_attributes
|
45
|
+
end
|
46
|
+
|
47
|
+
##
|
48
|
+
# For collections that are represented as attributes (i.e. inline, no href)
|
49
|
+
#
|
50
|
+
# @example
|
51
|
+
# collection_attributes :recipients
|
52
|
+
#
|
53
|
+
def collection_attributes(*attrs)
|
54
|
+
@collection_attributes ||= []
|
55
|
+
if attrs.any?
|
56
|
+
@collection_attributes.map!(&:to_sym).concat(attrs).uniq!
|
57
|
+
@collection_attributes.each { |a| setup_collection(a) }
|
58
|
+
end
|
59
|
+
@collection_attributes
|
60
|
+
end
|
61
|
+
|
62
|
+
def custom_class_names
|
63
|
+
@custom_class_names ||= {}
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# For collections that are represented as attributes (i.e. inline, no href)
|
68
|
+
# and that have a class name other than the one we would infer.
|
69
|
+
#
|
70
|
+
# @example
|
71
|
+
# collection_attributes :recipients, 'EmailRecipient'
|
72
|
+
#
|
73
|
+
def collection_attribute(attr, tms_class)
|
74
|
+
@collection_attributes ||= []
|
75
|
+
@collection_attributes.push(attr).uniq!
|
76
|
+
setup_collection(attr, GovDelivery::TMS.const_get(tms_class))
|
77
|
+
end
|
78
|
+
|
79
|
+
##
|
80
|
+
# Read-only collection attributes don't get POSTed.
|
81
|
+
# Use this for collections that are represented as attributes, but cannot be modified.
|
82
|
+
#
|
83
|
+
# @example
|
84
|
+
# readonly_collection_attribute :opens
|
85
|
+
#
|
86
|
+
def readonly_collection_attribute(attr, tms_class)
|
87
|
+
@readonly_collection_attributes ||= []
|
88
|
+
@readonly_collection_attributes.push(attr).uniq!
|
89
|
+
setup_collection(attr, GovDelivery::TMS.const_get(tms_class))
|
90
|
+
end
|
91
|
+
|
92
|
+
def setup_attributes(attrs, readonly=false)
|
93
|
+
attrs.map(&:to_sym).each do |property|
|
94
|
+
self.send :define_method, :"#{property}=", &lambda { |v| @attributes[property] = v } unless readonly
|
95
|
+
self.send :define_method, property.to_sym, &lambda { @attributes[property] }
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def setup_collection(property, klass=nil)
|
100
|
+
if klass
|
101
|
+
custom_class_names[property] = klass
|
102
|
+
else
|
103
|
+
klass ||= GovDelivery::TMS.const_get(property.to_s.capitalize)
|
104
|
+
end
|
105
|
+
|
106
|
+
self.send :define_method, property.to_sym, &lambda { @attributes[property] ||= klass.new(self.client, nil, nil) }
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
module InstanceMethods
|
111
|
+
attr_reader :links
|
112
|
+
|
113
|
+
def initialize(client, href=nil, attrs=nil)
|
114
|
+
super(client, href)
|
115
|
+
@attributes = {}
|
116
|
+
@links = {}
|
117
|
+
set_attributes_from_hash(attrs) if attrs
|
118
|
+
end
|
119
|
+
|
120
|
+
def attributes
|
121
|
+
@attributes
|
122
|
+
end
|
123
|
+
|
124
|
+
def get
|
125
|
+
raise GovDelivery::TMS::Errors::InvalidGet if self.new_record?
|
126
|
+
process_response(client.get(self.href), :get) && self
|
127
|
+
end
|
128
|
+
alias_method :get!, :get
|
129
|
+
|
130
|
+
def post
|
131
|
+
self.errors = nil
|
132
|
+
process_response(client.post(self), :post)
|
133
|
+
end
|
134
|
+
|
135
|
+
def post!
|
136
|
+
self.post or raise GovDelivery::TMS::Errors::InvalidPost.new(self)
|
137
|
+
end
|
138
|
+
|
139
|
+
def put
|
140
|
+
process_response(client.put(self), :put)
|
141
|
+
end
|
142
|
+
|
143
|
+
def put!
|
144
|
+
process_response(client.put(self), :put) or raise GovDelivery::TMS::Errors::InvalidPut.new(self)
|
145
|
+
end
|
146
|
+
|
147
|
+
def delete
|
148
|
+
process_response(client.delete(self.href), :delete)
|
149
|
+
end
|
150
|
+
|
151
|
+
def delete!
|
152
|
+
process_response(client.delete(self.href), :delete) or raise GovDelivery::TMS::Errors::InvalidDelete.new(self)
|
153
|
+
end
|
154
|
+
|
155
|
+
def to_s
|
156
|
+
"<#{self.class.inspect}#{' href=' + self.href if self.href} attributes=#{@attributes.inspect}>"
|
157
|
+
end
|
158
|
+
|
159
|
+
def to_json
|
160
|
+
json_hash = {}
|
161
|
+
self.class.writeable_attributes.each do |attr|
|
162
|
+
json_hash[attr] = self.send(attr)
|
163
|
+
end
|
164
|
+
self.class.collection_attributes.each do |coll|
|
165
|
+
json_hash[coll] = self.send(coll).to_json
|
166
|
+
end
|
167
|
+
self.class.linkable_attributes.each do |attr|
|
168
|
+
json_hash[:_links] ||= {}
|
169
|
+
json_hash[:_links][attr] = @links[attr]
|
170
|
+
end
|
171
|
+
json_hash
|
172
|
+
end
|
173
|
+
|
174
|
+
protected
|
175
|
+
|
176
|
+
def relation_class(rel)
|
177
|
+
self.class.custom_class_names[rel.to_sym] || super
|
178
|
+
end
|
179
|
+
|
180
|
+
def process_response(response, method)
|
181
|
+
self.response = response
|
182
|
+
error_class = GovDelivery::TMS::Errors.const_get("Invalid#{method.to_s.capitalize}")
|
183
|
+
case response.status
|
184
|
+
when 204
|
185
|
+
return true
|
186
|
+
when 200..299
|
187
|
+
set_attributes_from_hash(response.body) if response.body.is_a?(Hash)
|
188
|
+
@links = {}
|
189
|
+
self.new_record=false
|
190
|
+
return true
|
191
|
+
when 401
|
192
|
+
raise error_class.new("401 Not Authorized")
|
193
|
+
when 404
|
194
|
+
raise(error_class.new("Can't POST to #{self.href}"))
|
195
|
+
when 500..599
|
196
|
+
raise(GovDelivery::TMS::Errors::ServerError.new(response))
|
197
|
+
else # 422?
|
198
|
+
if response.body['errors']
|
199
|
+
self.errors = response.body['errors']
|
200
|
+
end
|
201
|
+
end
|
202
|
+
return false
|
203
|
+
end
|
204
|
+
|
205
|
+
def set_attributes_from_hash(hash)
|
206
|
+
hash.reject { |k, _| k=~/^_/ }.each do |property, value|
|
207
|
+
if self.class.collection_attributes.include?(property.to_sym)
|
208
|
+
klass = self.class.custom_class_names[property] || GovDelivery::TMS.const_get(property.to_s.capitalize)
|
209
|
+
@attributes[property.to_sym] = klass.new(client, nil, value)
|
210
|
+
else
|
211
|
+
@attributes[property.to_sym] = value
|
212
|
+
end
|
213
|
+
end
|
214
|
+
self.errors = hash['errors']
|
215
|
+
parse_links(hash['_links'])
|
216
|
+
end
|
217
|
+
|
218
|
+
end
|
219
|
+
end
|
File without changes
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'govdelivery-tms'
|
2
2
|
require 'mail'
|
3
3
|
require 'mail/check_delivery_params'
|
4
|
-
module TMS
|
4
|
+
module GovDelivery::TMS
|
5
5
|
module Mail
|
6
6
|
# Use TMS from the mail gem or ActionMailer as a delivery method.
|
7
7
|
#
|
@@ -24,7 +24,7 @@ module TMS
|
|
24
24
|
attr_accessor :settings
|
25
25
|
|
26
26
|
def deliver!(mail)
|
27
|
-
raise TMS::Errors::NoRelation.new('email_messages', client) unless client.respond_to?(:email_messages)
|
27
|
+
raise GovDelivery::TMS::Errors::NoRelation.new('email_messages', client) unless client.respond_to?(:email_messages)
|
28
28
|
|
29
29
|
envelope_from = mail.return_path || mail.sender || mail.from_addrs.first
|
30
30
|
|
@@ -38,26 +38,26 @@ module TMS
|
|
38
38
|
end.decoded
|
39
39
|
|
40
40
|
tms_message = client.email_messages.build(
|
41
|
-
:
|
42
|
-
:
|
43
|
-
:
|
41
|
+
from_name: mail[:from].display_names.first,
|
42
|
+
subject: mail.subject,
|
43
|
+
body: body
|
44
44
|
)
|
45
45
|
|
46
|
-
mail.to.each { |recip| tms_message.recipients.build(:
|
46
|
+
mail.to.each { |recip| tms_message.recipients.build(email: recip) }
|
47
47
|
tms_message.post!
|
48
48
|
tms_message
|
49
49
|
end
|
50
50
|
|
51
51
|
def client
|
52
|
-
@client ||= TMS::Client.new(settings[:auth_token], settings)
|
52
|
+
@client ||= GovDelivery::TMS::Client.new(settings[:auth_token], settings)
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
if defined?(ActionMailer)
|
59
|
-
ActionMailer::Base.add_delivery_method :govdelivery_tms, TMS::Mail::DeliveryMethod, {
|
60
|
-
:
|
61
|
-
:
|
62
|
-
:
|
59
|
+
ActionMailer::Base.add_delivery_method :govdelivery_tms, GovDelivery::TMS::Mail::DeliveryMethod, {
|
60
|
+
auth_token: nil,
|
61
|
+
logger: ActionMailer::Base.logger,
|
62
|
+
api_root: GovDelivery::TMS::Client::DEFAULTS[:api_root]}
|
63
63
|
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
class GovDelivery::TMS::Emails
|
2
|
+
include GovDelivery::TMS::CollectionResource
|
3
|
+
end
|
4
|
+
|
5
|
+
class GovDelivery::TMS::SmsMessages
|
6
|
+
include GovDelivery::TMS::CollectionResource
|
7
|
+
end
|
8
|
+
|
9
|
+
class GovDelivery::TMS::EmailMessages
|
10
|
+
include GovDelivery::TMS::CollectionResource
|
11
|
+
end
|
12
|
+
|
13
|
+
class GovDelivery::TMS::Recipients
|
14
|
+
include GovDelivery::TMS::CollectionResource
|
15
|
+
end
|
16
|
+
|
17
|
+
class GovDelivery::TMS::EmailRecipients
|
18
|
+
include GovDelivery::TMS::CollectionResource
|
19
|
+
end
|
20
|
+
|
21
|
+
class GovDelivery::TMS::EmailRecipientOpens
|
22
|
+
include GovDelivery::TMS::CollectionResource
|
23
|
+
end
|
24
|
+
|
25
|
+
class GovDelivery::TMS::EmailRecipientClicks
|
26
|
+
include GovDelivery::TMS::CollectionResource
|
27
|
+
end
|
28
|
+
|
29
|
+
# A collection of Keyword objects.
|
30
|
+
#
|
31
|
+
# @example
|
32
|
+
# keywords = client.keywords.get
|
33
|
+
#
|
34
|
+
class GovDelivery::TMS::Keywords
|
35
|
+
include GovDelivery::TMS::CollectionResource
|
36
|
+
end
|
37
|
+
|
38
|
+
class GovDelivery::TMS::InboundSmsMessages
|
39
|
+
include GovDelivery::TMS::CollectionResource
|
40
|
+
end
|
41
|
+
|
42
|
+
# A collection of CommandType instances.
|
43
|
+
# This resource changes infrequently. It may be used to dynamically construct a
|
44
|
+
# user interface for configuring arbitrary SMS keywords for an account.
|
45
|
+
#
|
46
|
+
# This resource is read-only.
|
47
|
+
#
|
48
|
+
# @example
|
49
|
+
# client.command_types.get
|
50
|
+
# client.command_types.collection.each {|at| ... }
|
51
|
+
class GovDelivery::TMS::CommandTypes
|
52
|
+
include GovDelivery::TMS::CollectionResource
|
53
|
+
end
|
54
|
+
|
55
|
+
class GovDelivery::TMS::Commands
|
56
|
+
include GovDelivery::TMS::CollectionResource
|
57
|
+
end
|
58
|
+
|
59
|
+
class GovDelivery::TMS::CommandActions
|
60
|
+
include GovDelivery::TMS::CollectionResource
|
61
|
+
end
|
62
|
+
|
63
|
+
class GovDelivery::TMS::IpawsEventCodes
|
64
|
+
include GovDelivery::TMS::CollectionResource
|
65
|
+
end
|
66
|
+
|
67
|
+
class GovDelivery::TMS::IpawsCategories
|
68
|
+
include GovDelivery::TMS::CollectionResource
|
69
|
+
end
|
70
|
+
|
71
|
+
class GovDelivery::TMS::IpawsResponseTypes
|
72
|
+
include GovDelivery::TMS::CollectionResource
|
73
|
+
end
|
74
|
+
|
75
|
+
class GovDelivery::TMS::IpawsAlerts
|
76
|
+
include GovDelivery::TMS::CollectionResource
|
77
|
+
end
|
78
|
+
|
79
|
+
class GovDelivery::TMS::IpawsNwemAreas
|
80
|
+
include GovDelivery::TMS::CollectionResource
|
81
|
+
end
|
82
|
+
|
83
|
+
class GovDelivery::TMS::Webhooks
|
84
|
+
include GovDelivery::TMS::CollectionResource
|
85
|
+
end
|
86
|
+
|
87
|
+
# A collection of Email Template objects.
|
88
|
+
#
|
89
|
+
# @example
|
90
|
+
# email_template = client.email_template.get
|
91
|
+
#
|
92
|
+
class GovDelivery::TMS::EmailTemplates
|
93
|
+
include GovDelivery::TMS::CollectionResource
|
94
|
+
end
|
95
|
+
|
96
|
+
class GovDelivery::TMS::FromAddresses
|
97
|
+
include GovDelivery::TMS::CollectionResource
|
98
|
+
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
module TMS #:nodoc:
|
2
|
-
# A command is a combination of behavior and parameters that should be executed
|
1
|
+
module GovDelivery::TMS #:nodoc:
|
2
|
+
# A command is a combination of behavior and parameters that should be executed
|
3
3
|
# when an incoming SMS message matches the associated Keyword.
|
4
4
|
#
|
5
|
-
# @attr name [String] The name of the command. This will default to the command_type if not supplied.
|
6
|
-
# @attr command_type [String] The type of this command. A list of valid types can be found by querying the CommandType list.
|
7
|
-
# @attr params [Hash] A Hash of string/string pairs used as configuration for this command.
|
8
|
-
#
|
5
|
+
# @attr name [String] The name of the command. This will default to the command_type if not supplied.
|
6
|
+
# @attr command_type [String] The type of this command. A list of valid types can be found by querying the CommandType list.
|
7
|
+
# @attr params [Hash] A Hash of string/string pairs used as configuration for this command.
|
8
|
+
#
|
9
9
|
# @example
|
10
10
|
# command = keyword.commands.build(:name => "subscribe to news", :command_type => "dcm_subscribe", :dcm_account_code => "NEWS", :dcm_topic_codes => "NEWS_1, NEWS_2")
|
11
11
|
# command.post
|
@@ -17,7 +17,7 @@ module TMS #:nodoc:
|
|
17
17
|
|
18
18
|
# @!parse attr_accessor :name, :command_type, :params
|
19
19
|
writeable_attributes :name, :command_type, :params
|
20
|
-
|
20
|
+
|
21
21
|
# @!parse attr_reader :created_at, :updated_at
|
22
22
|
readonly_attributes :created_at, :updated_at
|
23
23
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module TMS #:nodoc:
|
1
|
+
module GovDelivery::TMS #:nodoc:
|
2
2
|
# An EmailMessage is used to create and send a email to a collection of EmailRecipient
|
3
3
|
# objects. Certain metrics are available after the email is sent, including
|
4
4
|
# the collection of recipients who clicked or opened the email.
|