govdelivery-tms 0.8.2 → 0.8.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.
- checksums.yaml +7 -0
- data/Gemfile +4 -5
- data/README.md +0 -32
- data/Rakefile +4 -6
- data/govdelivery-tms.gemspec +15 -15
- data/lib/govdelivery-tms.rb +0 -9
- data/lib/govdelivery/tms/base.rb +4 -6
- data/lib/govdelivery/tms/client.rb +15 -16
- data/lib/govdelivery/tms/collection_resource.rb +7 -8
- data/lib/govdelivery/tms/connection.rb +4 -4
- data/lib/govdelivery/tms/errors.rb +7 -8
- data/lib/govdelivery/tms/instance_resource.rb +34 -39
- data/lib/govdelivery/tms/link_header.rb +27 -28
- data/lib/govdelivery/tms/mail/delivery_method.rb +11 -14
- data/lib/govdelivery/tms/resource/collections.rb +0 -20
- data/lib/govdelivery/tms/resource/command.rb +1 -2
- data/lib/govdelivery/tms/resource/command_action.rb +1 -1
- data/lib/govdelivery/tms/resource/command_type.rb +8 -9
- data/lib/govdelivery/tms/resource/email_message.rb +0 -1
- data/lib/govdelivery/tms/resource/email_recipient.rb +1 -1
- data/lib/govdelivery/tms/resource/from_address.rb +1 -1
- data/lib/govdelivery/tms/resource/inbound_sms_message.rb +1 -1
- data/lib/govdelivery/tms/resource/keyword.rb +6 -7
- data/lib/govdelivery/tms/resource/recipient.rb +1 -1
- data/lib/govdelivery/tms/resource/sms_message.rb +0 -1
- data/lib/govdelivery/tms/util/core_ext.rb +3 -3
- data/lib/govdelivery/tms/util/hal_link_parser.rb +11 -12
- data/lib/govdelivery/tms/version.rb +1 -1
- data/spec/client_spec.rb +6 -6
- data/spec/command_types_spec.rb +14 -14
- data/spec/email_message_spec.rb +42 -45
- data/spec/email_template_spec.rb +49 -51
- data/spec/errors_spec.rb +3 -3
- data/spec/from_address_spec.rb +37 -36
- data/spec/inbound_sms_messages_spec.rb +2 -2
- data/spec/instance_resource_spec.rb +4 -6
- data/spec/keyword_spec.rb +8 -10
- data/spec/keywords_spec.rb +4 -4
- data/spec/mail/delivery_method_spec.rb +8 -9
- data/spec/sms_message_spec.rb +9 -11
- data/spec/sms_messages_spec.rb +3 -3
- data/spec/spec_helper.rb +4 -5
- data/spec/tms_spec.rb +3 -3
- metadata +34 -64
- data/lib/govdelivery/tms/resource/ipaws_acknowledgement.rb +0 -9
- data/lib/govdelivery/tms/resource/ipaws_alert.rb +0 -38
- data/lib/govdelivery/tms/resource/ipaws_category.rb +0 -7
- data/lib/govdelivery/tms/resource/ipaws_cog_profile.rb +0 -29
- data/lib/govdelivery/tms/resource/ipaws_event_code.rb +0 -7
- data/lib/govdelivery/tms/resource/ipaws_nwem_area.rb +0 -18
- data/lib/govdelivery/tms/resource/ipaws_nwem_authorization.rb +0 -9
- data/lib/govdelivery/tms/resource/ipaws_nwem_auxilary_data.rb +0 -8
- data/lib/govdelivery/tms/resource/ipaws_response_type.rb +0 -7
- data/lib/govdelivery/tms/resource/ipaws_static_resource.rb +0 -8
- data/spec/ipaws_acknowledgement_spec.rb +0 -16
- data/spec/ipaws_alerts_spec.rb +0 -192
- data/spec/ipaws_cog_profile_spec.rb +0 -75
- data/spec/ipaws_event_codes_spec.rb +0 -35
- data/spec/ipaws_nwem_areas_spec.rb +0 -58
- data/spec/ipaws_nwem_authorization_spec.rb +0 -16
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: fdf82ccfb0673c58b8eb65e498cb81fc4840859a
|
|
4
|
+
data.tar.gz: e0061974613e76215c69fd7dff98f7eea1b6033f
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 1585d7cb1099b43919f268a91ed155e97b30f0394d37cb3863ff933e402bce6ce6ea58438ce9586a2f88f8d9f53d3f36911846b085f1c9cf19714afe9ea2dbb9
|
|
7
|
+
data.tar.gz: 69cf8905b65b09871ddf2f0b303e05ec83cc3c170b4b0aa71f0bf3dcce713e7b5650abcc9209e7ee1627a56875453e096520bf9b3da69361224a1d4c4515a609
|
data/Gemfile
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
source
|
|
1
|
+
source 'https://rubygems.org'
|
|
2
2
|
gemspec
|
|
3
3
|
|
|
4
4
|
group :development, :test do
|
|
5
|
-
gem
|
|
5
|
+
gem 'appraisal'
|
|
6
6
|
gem 'rspec', '~> 3.2.0'
|
|
7
7
|
gem 'rspec-its'
|
|
8
8
|
gem 'rake'
|
|
9
|
-
gem 'redcarpet', :
|
|
9
|
+
gem 'redcarpet', platform: :ruby
|
|
10
10
|
gem 'yard'
|
|
11
11
|
gem 'mail'
|
|
12
|
-
gem 'rubygems-tasks', :
|
|
12
|
+
gem 'rubygems-tasks', git: 'https://github.com/postmodern/rubygems-tasks.git', platform: :ruby
|
|
13
13
|
end
|
|
14
|
-
|
data/README.md
CHANGED
|
@@ -91,38 +91,6 @@ message.recipients.build(:email=>'bill@example.com')
|
|
|
91
91
|
message.post
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
### Obtaining IPAWS Ack ###
|
|
95
|
-
```ruby
|
|
96
|
-
client.ipaws_acknowledgement.get
|
|
97
|
-
client.ipaws_acknowledgement.ACK # "PONG"
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### Obtaining IPAWS COG Profile
|
|
101
|
-
```ruby
|
|
102
|
-
client.ipaws_cog_profile.get
|
|
103
|
-
client.ipaws_cog_profile.attributes # {:cogid=>"120082", :name=>"GovDelivery" ... }
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
### Determining NWEM COG Authorization ###
|
|
107
|
-
```ruby
|
|
108
|
-
client.ipaws_nwem_authorization.get
|
|
109
|
-
client.ipaws_nwem_authorization.cogid # true
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
### Obtaining NWEM Auxilary Data (Authorized areas) ###
|
|
113
|
-
```ruby
|
|
114
|
-
client.ipaws_nwem_areas.get
|
|
115
|
-
client.ipaws_nwem_areas.collection.first.countyFipsCd # "51013"
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### Sending an IPAWS Alert ###
|
|
119
|
-
```ruby
|
|
120
|
-
alert = client.ipaws_alerts.build({ identifier: "CAP12-TEST-12345", sender: 'test@open.com' ...})
|
|
121
|
-
alert.post # true
|
|
122
|
-
alert.ipaws_response # { "identifier"=>"CAP12-TEST-1397743203", "statuses"=> [{"CHANNELNAME"=>"CAPEXCH" ... }]}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
|
|
126
94
|
Webhooks
|
|
127
95
|
-------
|
|
128
96
|
### POST to a URL when a recipient is blacklisted (i.e. to remove from your list)
|
data/Rakefile
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
require
|
|
2
|
-
require
|
|
3
|
-
require
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'bundler/setup'
|
|
3
|
+
require 'bundler/gem_tasks'
|
|
4
4
|
require 'rspec/core/rake_task'
|
|
5
5
|
unless defined?(JRUBY_VERSION)
|
|
6
6
|
require 'rubygems/tasks'
|
|
@@ -15,6 +15,4 @@ end
|
|
|
15
15
|
|
|
16
16
|
RSpec::Core::RakeTask.new(:spec)
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
task :default => :spec
|
|
20
|
-
|
|
18
|
+
task default: :spec
|
data/govdelivery-tms.gemspec
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
require
|
|
2
|
+
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
|
3
|
+
require 'govdelivery/tms/version'
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |s|
|
|
6
|
-
s.name =
|
|
6
|
+
s.name = 'govdelivery-tms'
|
|
7
7
|
s.version = GovDelivery::TMS::VERSION
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
|
9
|
-
s.authors = [
|
|
10
|
-
s.email = [
|
|
11
|
-
s.homepage =
|
|
12
|
-
s.summary =
|
|
13
|
-
s.description =
|
|
9
|
+
s.authors = ['GovDelivery']
|
|
10
|
+
s.email = ['support@govdelivery.com']
|
|
11
|
+
s.homepage = 'http://govdelivery.com'
|
|
12
|
+
s.summary = 'A ruby client to interact with the GovDelivery TMS REST API.'
|
|
13
|
+
s.description = "A reference implementation, written in Ruby,
|
|
14
14
|
to interact with GovDelivery's TMS API. The client is
|
|
15
|
-
compatible with Ruby 1.9 and 2.0.
|
|
15
|
+
compatible with Ruby 1.9 and 2.0. "
|
|
16
16
|
|
|
17
|
-
s.add_runtime_dependency
|
|
18
|
-
s.add_runtime_dependency
|
|
19
|
-
s.add_runtime_dependency
|
|
17
|
+
s.add_runtime_dependency 'activesupport'
|
|
18
|
+
s.add_runtime_dependency 'faraday'
|
|
19
|
+
s.add_runtime_dependency 'faraday_middleware'
|
|
20
20
|
|
|
21
|
-
s.files = %w
|
|
21
|
+
s.files = %w(
|
|
22
22
|
Gemfile
|
|
23
23
|
README.md
|
|
24
24
|
Rakefile
|
|
25
25
|
govdelivery-tms.gemspec
|
|
26
|
-
|
|
26
|
+
) + Dir['lib/**/*']
|
|
27
27
|
|
|
28
28
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
29
|
-
s.require_paths = [
|
|
29
|
+
s.require_paths = ['lib']
|
|
30
30
|
end
|
data/lib/govdelivery-tms.rb
CHANGED
|
@@ -33,13 +33,4 @@ require 'govdelivery/tms/resource/command_type'
|
|
|
33
33
|
require 'govdelivery/tms/resource/command_action'
|
|
34
34
|
require 'govdelivery/tms/resource/command'
|
|
35
35
|
require 'govdelivery/tms/resource/keyword'
|
|
36
|
-
require 'govdelivery/tms/resource/ipaws_static_resource'
|
|
37
|
-
require 'govdelivery/tms/resource/ipaws_category'
|
|
38
|
-
require 'govdelivery/tms/resource/ipaws_event_code'
|
|
39
|
-
require 'govdelivery/tms/resource/ipaws_response_type'
|
|
40
|
-
require 'govdelivery/tms/resource/ipaws_acknowledgement'
|
|
41
|
-
require 'govdelivery/tms/resource/ipaws_cog_profile'
|
|
42
|
-
require 'govdelivery/tms/resource/ipaws_nwem_authorization'
|
|
43
|
-
require 'govdelivery/tms/resource/ipaws_nwem_area'
|
|
44
|
-
require 'govdelivery/tms/resource/ipaws_alert'
|
|
45
36
|
require 'govdelivery/tms/resource/webhook'
|
data/lib/govdelivery/tms/base.rb
CHANGED
|
@@ -23,15 +23,13 @@ module GovDelivery::TMS #:nodoc:
|
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def new_record?
|
|
26
|
-
!!
|
|
26
|
+
!!new_record
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def href=(href)
|
|
30
|
-
self.new_record=false
|
|
31
|
-
@href=href
|
|
30
|
+
self.new_record = false
|
|
31
|
+
@href = href
|
|
32
32
|
end
|
|
33
33
|
end
|
|
34
|
-
|
|
35
34
|
end
|
|
36
|
-
|
|
37
|
-
end
|
|
35
|
+
end
|
|
@@ -6,7 +6,7 @@ class GovDelivery::TMS::Client
|
|
|
6
6
|
|
|
7
7
|
attr_accessor :connection, :href, :api_root, :logger
|
|
8
8
|
|
|
9
|
-
DEFAULTS = {api_root: 'https://tms.govdelivery.com', logger: nil}.freeze
|
|
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
|
#
|
|
@@ -29,8 +29,8 @@ class GovDelivery::TMS::Client
|
|
|
29
29
|
discover!
|
|
30
30
|
end
|
|
31
31
|
|
|
32
|
-
def connect!(auth_token, options={})
|
|
33
|
-
self.connection = GovDelivery::TMS::Connection.new({auth_token: auth_token, api_root: api_root, logger: logger}.merge!(options))
|
|
32
|
+
def connect!(auth_token, options = {})
|
|
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!
|
|
@@ -41,14 +41,14 @@ class GovDelivery::TMS::Client
|
|
|
41
41
|
def get(href)
|
|
42
42
|
response = raw_connection.get(href)
|
|
43
43
|
case response.status
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
44
|
+
when 500..599
|
|
45
|
+
fail GovDelivery::TMS::Request::Error.new(response.status)
|
|
46
|
+
when 401..499
|
|
47
|
+
fail GovDelivery::TMS::Request::Error.new(response.status)
|
|
48
|
+
when 202
|
|
49
|
+
fail GovDelivery::TMS::Request::InProgress.new(response.body['message'])
|
|
50
|
+
else
|
|
51
|
+
return response
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -71,10 +71,10 @@ class GovDelivery::TMS::Client
|
|
|
71
71
|
def delete(href)
|
|
72
72
|
response = raw_connection.delete(href)
|
|
73
73
|
case response.status
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
74
|
+
when 200...299
|
|
75
|
+
return response
|
|
76
|
+
else
|
|
77
|
+
fail GovDelivery::TMS::Request::Error.new(response.status)
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
|
|
@@ -93,5 +93,4 @@ class GovDelivery::TMS::Client
|
|
|
93
93
|
logger.level = debug ? Logger::DEBUG : Logger::INFO
|
|
94
94
|
logger
|
|
95
95
|
end
|
|
96
|
-
|
|
97
96
|
end
|
|
@@ -7,31 +7,30 @@ module GovDelivery::TMS::CollectionResource
|
|
|
7
7
|
include GovDelivery::TMS::Base
|
|
8
8
|
attr_accessor :collection
|
|
9
9
|
|
|
10
|
-
def initialize(client, href, items=nil)
|
|
10
|
+
def initialize(client, href, items = nil)
|
|
11
11
|
super(client, href)
|
|
12
12
|
if items
|
|
13
13
|
initialize_collection_from_items(items)
|
|
14
14
|
else
|
|
15
15
|
self.collection = []
|
|
16
16
|
end
|
|
17
|
-
|
|
18
17
|
end
|
|
19
18
|
|
|
20
19
|
def get
|
|
21
20
|
response = client.get(href)
|
|
22
21
|
initialize_collection_from_items(response.body)
|
|
23
|
-
#setup page links from header
|
|
22
|
+
# setup page links from header
|
|
24
23
|
links = LinkHeader.parse(response.headers['link']).to_a.collect do |a|
|
|
25
|
-
{a[1][0].last => a[0]}
|
|
24
|
+
{ a[1][0].last => a[0] }
|
|
26
25
|
end
|
|
27
26
|
parse_links(links)
|
|
28
27
|
self
|
|
29
28
|
end
|
|
30
29
|
|
|
31
|
-
def build(attributes=nil)
|
|
32
|
-
thing = instance_class(self.class).new(client,
|
|
30
|
+
def build(attributes = nil)
|
|
31
|
+
thing = instance_class(self.class).new(client, href, attributes || {})
|
|
33
32
|
thing.new_record = true
|
|
34
|
-
|
|
33
|
+
collection << thing
|
|
35
34
|
thing
|
|
36
35
|
end
|
|
37
36
|
|
|
@@ -40,7 +39,7 @@ module GovDelivery::TMS::CollectionResource
|
|
|
40
39
|
end
|
|
41
40
|
|
|
42
41
|
def to_s
|
|
43
|
-
"<#{self.class.inspect} href=#{
|
|
42
|
+
"<#{self.class.inspect} href=#{href} collection=#{collection.inspect}>"
|
|
44
43
|
end
|
|
45
44
|
|
|
46
45
|
private
|
|
@@ -4,13 +4,13 @@ class GovDelivery::TMS::Connection
|
|
|
4
4
|
def get(href)
|
|
5
5
|
resp = connection.get("#{href}.json")
|
|
6
6
|
if resp.status != 200
|
|
7
|
-
|
|
7
|
+
fail RecordNotFound.new("Could not find resource at #{href} (status #{resp.status})")
|
|
8
8
|
else
|
|
9
9
|
resp.body
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
|
|
13
|
-
def initialize(opts={})
|
|
13
|
+
def initialize(opts = {})
|
|
14
14
|
self.auth_token = opts[:auth_token]
|
|
15
15
|
self.api_root = opts[:api_root]
|
|
16
16
|
self.logger = opts[:logger]
|
|
@@ -18,8 +18,8 @@ class GovDelivery::TMS::Connection
|
|
|
18
18
|
end
|
|
19
19
|
|
|
20
20
|
def setup_connection
|
|
21
|
-
self.connection = Faraday.new(url:
|
|
22
|
-
faraday.use GovDelivery::TMS::Logger,
|
|
21
|
+
self.connection = Faraday.new(url: api_root) do |faraday|
|
|
22
|
+
faraday.use GovDelivery::TMS::Logger, logger if logger
|
|
23
23
|
faraday.request :json
|
|
24
24
|
faraday.headers['X-AUTH-TOKEN'] = auth_token
|
|
25
25
|
faraday.headers[:user_agent] = "GovDelivery Ruby GovDelivery::TMS::Client #{GovDelivery::TMS::VERSION}"
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
module GovDelivery::TMS
|
|
2
2
|
module Request
|
|
3
|
-
# The generic TMS error class
|
|
3
|
+
# The generic TMS error class
|
|
4
4
|
class Error < StandardError
|
|
5
5
|
attr_reader :code
|
|
6
6
|
|
|
7
7
|
def initialize(code)
|
|
8
8
|
super("HTTP Error: #{code}")
|
|
9
|
-
@code=code
|
|
9
|
+
@code = code
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
|
|
13
13
|
# Raised when a recipient list is still being constructed and a request is made to view the
|
|
14
14
|
# recipient list for a message.
|
|
15
|
-
class InProgress < StandardError;end
|
|
15
|
+
class InProgress < StandardError; end
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
module Errors
|
|
@@ -22,8 +22,8 @@ module GovDelivery::TMS
|
|
|
22
22
|
end
|
|
23
23
|
end
|
|
24
24
|
class NoRelation < StandardError
|
|
25
|
-
def initialize(rel=nil, obj=nil)
|
|
26
|
-
message =
|
|
25
|
+
def initialize(rel = nil, obj = nil)
|
|
26
|
+
message = 'no link relation '
|
|
27
27
|
message << "'#{rel}' " if rel
|
|
28
28
|
message << 'is available'
|
|
29
29
|
message << " for #{obj}" if obj
|
|
@@ -40,7 +40,6 @@ module GovDelivery::TMS
|
|
|
40
40
|
else
|
|
41
41
|
super(record_or_string)
|
|
42
42
|
end
|
|
43
|
-
|
|
44
43
|
end
|
|
45
44
|
end
|
|
46
45
|
class InvalidPost < InvalidVerb
|
|
@@ -50,9 +49,9 @@ module GovDelivery::TMS
|
|
|
50
49
|
class InvalidDelete < InvalidVerb
|
|
51
50
|
end
|
|
52
51
|
class InvalidGet < StandardError
|
|
53
|
-
def initialize(message=nil)
|
|
52
|
+
def initialize(message = nil)
|
|
54
53
|
super(message || "Can't GET a resource after an invalid POST; either create a new object or fix errors")
|
|
55
54
|
end
|
|
56
55
|
end
|
|
57
56
|
end
|
|
58
|
-
end
|
|
57
|
+
end
|
|
@@ -89,41 +89,39 @@ module GovDelivery::TMS::InstanceResource
|
|
|
89
89
|
setup_collection(attr, GovDelivery::TMS.const_get(tms_class))
|
|
90
90
|
end
|
|
91
91
|
|
|
92
|
-
def setup_attributes(attrs, readonly=false)
|
|
92
|
+
def setup_attributes(attrs, readonly = false)
|
|
93
93
|
attrs.map(&:to_sym).each do |property|
|
|
94
|
-
|
|
95
|
-
|
|
94
|
+
send :define_method, :"#{property}=", &lambda { |v| @attributes[property] = v } unless readonly
|
|
95
|
+
send :define_method, property.to_sym, &lambda { @attributes[property] }
|
|
96
96
|
end
|
|
97
97
|
end
|
|
98
98
|
|
|
99
|
-
def setup_collection(property, klass=nil)
|
|
99
|
+
def setup_collection(property, klass = nil)
|
|
100
100
|
if klass
|
|
101
101
|
custom_class_names[property] = klass
|
|
102
102
|
else
|
|
103
103
|
klass ||= GovDelivery::TMS.const_get(property.to_s.capitalize)
|
|
104
104
|
end
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
send :define_method, property.to_sym, &lambda { @attributes[property] ||= klass.new(self.client, nil, nil) }
|
|
107
107
|
end
|
|
108
108
|
end
|
|
109
109
|
|
|
110
110
|
module InstanceMethods
|
|
111
111
|
attr_reader :links
|
|
112
112
|
|
|
113
|
-
def initialize(client, href=nil, attrs=nil)
|
|
113
|
+
def initialize(client, href = nil, attrs = nil)
|
|
114
114
|
super(client, href)
|
|
115
115
|
@attributes = {}
|
|
116
116
|
@links = {}
|
|
117
117
|
set_attributes_from_hash(attrs) if attrs
|
|
118
118
|
end
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
@attributes
|
|
122
|
-
end
|
|
120
|
+
attr_reader :attributes
|
|
123
121
|
|
|
124
122
|
def get
|
|
125
|
-
|
|
126
|
-
process_response(client.get(
|
|
123
|
+
fail GovDelivery::TMS::Errors::InvalidGet if self.new_record?
|
|
124
|
+
process_response(client.get(href), :get) && self
|
|
127
125
|
end
|
|
128
126
|
alias_method :get!, :get
|
|
129
127
|
|
|
@@ -133,7 +131,7 @@ module GovDelivery::TMS::InstanceResource
|
|
|
133
131
|
end
|
|
134
132
|
|
|
135
133
|
def post!
|
|
136
|
-
|
|
134
|
+
post || fail(GovDelivery::TMS::Errors::InvalidPost.new(self))
|
|
137
135
|
end
|
|
138
136
|
|
|
139
137
|
def put
|
|
@@ -141,28 +139,28 @@ module GovDelivery::TMS::InstanceResource
|
|
|
141
139
|
end
|
|
142
140
|
|
|
143
141
|
def put!
|
|
144
|
-
process_response(client.put(self), :put)
|
|
142
|
+
process_response(client.put(self), :put) || fail(GovDelivery::TMS::Errors::InvalidPut.new(self))
|
|
145
143
|
end
|
|
146
144
|
|
|
147
145
|
def delete
|
|
148
|
-
process_response(client.delete(
|
|
146
|
+
process_response(client.delete(href), :delete)
|
|
149
147
|
end
|
|
150
148
|
|
|
151
149
|
def delete!
|
|
152
|
-
process_response(client.delete(
|
|
150
|
+
process_response(client.delete(href), :delete) || fail(GovDelivery::TMS::Errors::InvalidDelete.new(self))
|
|
153
151
|
end
|
|
154
152
|
|
|
155
153
|
def to_s
|
|
156
|
-
"<#{self.class.inspect}#{' href=' +
|
|
154
|
+
"<#{self.class.inspect}#{' href=' + href if href} attributes=#{@attributes.inspect}>"
|
|
157
155
|
end
|
|
158
156
|
|
|
159
157
|
def to_json
|
|
160
158
|
json_hash = {}
|
|
161
159
|
self.class.writeable_attributes.each do |attr|
|
|
162
|
-
json_hash[attr] =
|
|
160
|
+
json_hash[attr] = send(attr)
|
|
163
161
|
end
|
|
164
162
|
self.class.collection_attributes.each do |coll|
|
|
165
|
-
json_hash[coll] =
|
|
163
|
+
json_hash[coll] = send(coll).to_json
|
|
166
164
|
end
|
|
167
165
|
self.class.linkable_attributes.each do |attr|
|
|
168
166
|
json_hash[:_links] ||= {}
|
|
@@ -181,29 +179,27 @@ module GovDelivery::TMS::InstanceResource
|
|
|
181
179
|
self.response = response
|
|
182
180
|
error_class = GovDelivery::TMS::Errors.const_get("Invalid#{method.to_s.capitalize}")
|
|
183
181
|
case response.status
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
self.errors = response.body['errors']
|
|
200
|
-
end
|
|
182
|
+
when 204
|
|
183
|
+
return true
|
|
184
|
+
when 200..299
|
|
185
|
+
set_attributes_from_hash(response.body) if response.body.is_a?(Hash)
|
|
186
|
+
@links = {}
|
|
187
|
+
self.new_record = false
|
|
188
|
+
return true
|
|
189
|
+
when 401
|
|
190
|
+
fail error_class.new('401 Not Authorized')
|
|
191
|
+
when 404
|
|
192
|
+
fail(error_class.new("Can't POST to #{href}"))
|
|
193
|
+
when 500..599
|
|
194
|
+
fail(GovDelivery::TMS::Errors::ServerError.new(response))
|
|
195
|
+
else # 422?
|
|
196
|
+
self.errors = response.body['errors'] if response.body['errors']
|
|
201
197
|
end
|
|
202
|
-
|
|
198
|
+
false
|
|
203
199
|
end
|
|
204
200
|
|
|
205
201
|
def set_attributes_from_hash(hash)
|
|
206
|
-
hash.reject { |k, _| k
|
|
202
|
+
hash.reject { |k, _| k =~ /^_/ }.each do |property, value|
|
|
207
203
|
if self.class.collection_attributes.include?(property.to_sym)
|
|
208
204
|
klass = self.class.custom_class_names[property] || GovDelivery::TMS.const_get(property.to_s.capitalize)
|
|
209
205
|
@attributes[property.to_sym] = klass.new(client, nil, value)
|
|
@@ -214,6 +210,5 @@ module GovDelivery::TMS::InstanceResource
|
|
|
214
210
|
self.errors = hash['errors']
|
|
215
211
|
parse_links(hash['_links'])
|
|
216
212
|
end
|
|
217
|
-
|
|
218
213
|
end
|
|
219
|
-
end
|
|
214
|
+
end
|