govdelivery-tms 0.8.1 → 0.8.2
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.
@@ -22,7 +22,7 @@ class GovDelivery::TMS::Connection
|
|
22
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
|
-
faraday.headers[:user_agent] = "GovDelivery Ruby TMS::Client #{TMS::VERSION}"
|
25
|
+
faraday.headers[:user_agent] = "GovDelivery Ruby GovDelivery::TMS::Client #{GovDelivery::TMS::VERSION}"
|
26
26
|
faraday.response :json, content_type: /\bjson$/
|
27
27
|
faraday.adapter :net_http
|
28
28
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: govdelivery-tms
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -109,7 +109,6 @@ files:
|
|
109
109
|
- lib/govdelivery/tms/util/core_ext.rb
|
110
110
|
- lib/govdelivery/tms/util/hal_link_parser.rb
|
111
111
|
- lib/govdelivery/tms/version.rb
|
112
|
-
- lib/govdelivery-tms/instance_resource.rb
|
113
112
|
- lib/govdelivery-tms.rb
|
114
113
|
- spec/client_spec.rb
|
115
114
|
- spec/command_types_spec.rb
|
@@ -1,219 +0,0 @@
|
|
1
|
-
module GovDelivery::TMS::InstanceResource
|
2
|
-
def self.included(base)
|
3
|
-
base.send(:include, 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 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 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 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 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 = 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(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
|