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