rs4 0.1.5 → 0.2.4
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 +4 -4
- data/lib/rs4.rb +3 -0
- data/lib/rs4/configuration.rb +16 -0
- data/lib/rs4/configuration_error.rb +15 -0
- data/lib/rs4/document.rb +28 -25
- data/lib/rs4/error.rb +12 -0
- data/lib/rs4/request.rb +18 -1
- data/lib/rs4/request_error.rb +5 -3
- data/lib/rs4/reusable_template.rb +27 -38
- data/lib/rs4/version.rb +1 -1
- data/lib/test/mock_request.rb +114 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98cdd324402202c22dced91d438c470bb032f16c689155b6e73bf6932a459094
|
4
|
+
data.tar.gz: 13c521a87135c796fec0aa2f6df17a1812452cbb7fee182607ebca47f5bc6873
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '097d79e1a17b7b56e57a96031cf7d1e3afe80ad60c9dd2f09f92ae209dd7d90acddc56f4728cc2e5605977552bcef3739d1fffb9f0f77a410e5d8de8508b5965'
|
7
|
+
data.tar.gz: d24c5abb6e34b9b780b9dfe3cdb1e70aeb8128fec520d24bc9f16e8a65796d9762124cebad3ab5ae25fb99e7a74c2e834d0e64638af01a3fb104e9bb868950a5
|
data/lib/rs4.rb
CHANGED
data/lib/rs4/configuration.rb
CHANGED
@@ -11,7 +11,23 @@ module RS4
|
|
11
11
|
end
|
12
12
|
|
13
13
|
class Configuration
|
14
|
+
attr_accessor :request_handler
|
14
15
|
attr_accessor :private_api_key
|
15
16
|
attr_accessor :api_host
|
17
|
+
attr_accessor :errors
|
18
|
+
|
19
|
+
def valid?
|
20
|
+
@errors = []
|
21
|
+
|
22
|
+
@errors << '`private_api_key` not set' unless private_api_key.present?
|
23
|
+
@errors << '`api_host` not set' unless api_host.present?
|
24
|
+
|
25
|
+
if @errors.any?
|
26
|
+
Rails.logger.error("RS4 Configuration Invalid: #{@errors.join(',')}")
|
27
|
+
return false
|
28
|
+
else
|
29
|
+
return true
|
30
|
+
end
|
31
|
+
end
|
16
32
|
end
|
17
33
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rs4/error.rb'
|
2
|
+
|
3
|
+
module RS4
|
4
|
+
# Error should be returned when the module has been
|
5
|
+
# improperly configured
|
6
|
+
class ConfigurationError < Error
|
7
|
+
attr_accessor :error_fields
|
8
|
+
|
9
|
+
def initialize(error_fields = [], message)
|
10
|
+
super(message)
|
11
|
+
|
12
|
+
@error_fields = error_fields
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/rs4/document.rb
CHANGED
@@ -9,6 +9,7 @@ module RS4
|
|
9
9
|
EXECUTED_STATE = :executed
|
10
10
|
|
11
11
|
attr_accessor :id
|
12
|
+
attr_accessor :original_guid
|
12
13
|
attr_accessor :current_signer_id
|
13
14
|
attr_accessor :name
|
14
15
|
attr_accessor :filename
|
@@ -82,47 +83,49 @@ module RS4
|
|
82
83
|
end
|
83
84
|
|
84
85
|
class << self
|
86
|
+
def get_archive_document(document_guid)
|
87
|
+
return unless document_guid.present?
|
88
|
+
|
89
|
+
path = "archived_documents_by_original_guid/#{document_guid}"
|
90
|
+
|
91
|
+
response = RS4.configuration.request_handler.execute(path, :get)
|
92
|
+
|
93
|
+
unless response.is_a?(RS4::Error) || response.nil?
|
94
|
+
archived_document = response.dig(:archived_document)
|
95
|
+
|
96
|
+
Document.new(archived_document) if archived_document
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
85
100
|
def get_document(document_guid)
|
86
|
-
return unless document_guid
|
101
|
+
return unless document_guid.present?
|
87
102
|
|
88
103
|
path = "documents/#{document_guid}"
|
89
104
|
|
90
|
-
response = RS4
|
105
|
+
response = RS4.configuration.request_handler.execute(path, :get)
|
91
106
|
|
92
|
-
|
93
|
-
raw_document = JSON.parse(response.body, symbolize_names: true)
|
107
|
+
unless response.is_a?(RS4::Error) || response.nil? # .class == Net::HTTPOK
|
108
|
+
raw_document = response.dig(:document) # JSON.parse(response.body, symbolize_names: true)
|
94
109
|
|
95
|
-
Document.new(raw_document[:document])
|
96
|
-
|
97
|
-
Rails.logger.error("Unable to get document #{document_guid}")
|
98
|
-
RS4::RequestError.new(
|
99
|
-
response.code,
|
100
|
-
response.class,
|
101
|
-
JSON.parse(response.read_body)
|
102
|
-
)
|
110
|
+
# Document.new(raw_document[:document])
|
111
|
+
Document.new(raw_document) if raw_document
|
103
112
|
end
|
104
113
|
end
|
105
114
|
|
106
115
|
def get_documents
|
107
116
|
path = 'documents'
|
108
|
-
response = RS4
|
117
|
+
response = RS4.configuration.request_handler.execute(path, :get)
|
109
118
|
|
110
|
-
|
119
|
+
unless response.is_a?(RS4::Error) || response.nil?
|
111
120
|
documents = []
|
112
121
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
documents << Document.new(raw_document[:document])
|
122
|
+
response.dig(:documents).each do |document_hash|
|
123
|
+
# document_hash = raw_document.pluck(:document)
|
124
|
+
documents << Document.new(document_hash)
|
117
125
|
end
|
118
|
-
else
|
119
|
-
Rails.logger.error('Unable to get documents')
|
120
|
-
RS4::RequestError.new(
|
121
|
-
response.code,
|
122
|
-
response.class,
|
123
|
-
JSON.parse(response.read_body)
|
124
|
-
)
|
125
126
|
end
|
127
|
+
|
128
|
+
documents
|
126
129
|
end
|
127
130
|
end
|
128
131
|
end
|
data/lib/rs4/error.rb
ADDED
data/lib/rs4/request.rb
CHANGED
@@ -7,6 +7,11 @@ module RS4
|
|
7
7
|
|
8
8
|
class << self
|
9
9
|
def execute(path, method = :get, body = {})
|
10
|
+
# Check required keys exist before continuing
|
11
|
+
unless RS4.configuration.valid?
|
12
|
+
return RS4::ConfigurationError.new(RS4.configuration.errors, 'Invalid Configuration')
|
13
|
+
end
|
14
|
+
|
10
15
|
url = URI(RS4.configuration.api_host + '/public/v1/' + path)
|
11
16
|
|
12
17
|
http = Net::HTTP.new(url.host, url.port)
|
@@ -30,7 +35,19 @@ module RS4
|
|
30
35
|
# https://stackoverflow.com/questions/5370697/what-s-the-best-way-to-handle-exceptions-from-nethttp#answer-11802674
|
31
36
|
begin
|
32
37
|
retries ||= 0
|
33
|
-
http.request(request)
|
38
|
+
response = http.request(request)
|
39
|
+
|
40
|
+
result = if response.class == Net::HTTPOK
|
41
|
+
JSON.parse(response.body, symbolize_names: true)
|
42
|
+
else
|
43
|
+
RS4::RequestError.new(
|
44
|
+
response.code,
|
45
|
+
response.class,
|
46
|
+
JSON.parse(response.read_body)
|
47
|
+
)
|
48
|
+
end
|
49
|
+
|
50
|
+
result
|
34
51
|
rescue StandardError => e
|
35
52
|
Rails.logger.error(e)
|
36
53
|
retry if (retries += 1) < MAX_RETRIES
|
data/lib/rs4/request_error.rb
CHANGED
@@ -1,18 +1,20 @@
|
|
1
|
+
require 'rs4/error.rb'
|
2
|
+
|
1
3
|
module RS4
|
2
4
|
# The standard error returned when a request to the RS4
|
3
5
|
# API fails
|
4
6
|
# code - the NetHTTP response code as a number (eg - 200)
|
5
7
|
# error_class - which NetHTTP class was returned by the response
|
6
8
|
# message - the error message (if any) returned in the response
|
7
|
-
class RequestError
|
9
|
+
class RequestError < Error
|
8
10
|
attr_accessor :code
|
9
11
|
attr_accessor :error_class
|
10
|
-
attr_accessor :message
|
11
12
|
|
12
13
|
def initialize(code, error_class, message)
|
14
|
+
super(message)
|
15
|
+
|
13
16
|
@code = code
|
14
17
|
@error_class = error_class
|
15
|
-
@message = message
|
16
18
|
end
|
17
19
|
end
|
18
20
|
end
|
@@ -42,62 +42,51 @@ module RS4
|
|
42
42
|
@page_image_urls = options[:page_image_urls]
|
43
43
|
end
|
44
44
|
|
45
|
-
|
46
|
-
|
45
|
+
class << self
|
46
|
+
def get_reusable_template(template_guid)
|
47
|
+
return unless template_guid
|
47
48
|
|
48
|
-
|
49
|
+
path = "reusable_templates/#{template_guid}"
|
49
50
|
|
50
|
-
|
51
|
+
response = RS4.configuration.request_handler.execute(path, :get)
|
51
52
|
|
52
|
-
|
53
|
-
|
53
|
+
unless response.is_a?(RS4::Error) || response.nil?
|
54
|
+
# parsed_response = JSON.parse(response.read_body, symbolize_names: true)
|
54
55
|
|
55
|
-
|
56
|
+
template_hash = response.dig(:reusable_template)
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
RS4::RequestError.new(
|
60
|
-
response.code,
|
61
|
-
response.class,
|
62
|
-
JSON.parse(response.read_body)
|
63
|
-
)
|
58
|
+
RS4::ReusableTemplate.new(template_hash)
|
59
|
+
end
|
64
60
|
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def get_reusable_templates(options = {})
|
68
|
-
base_path = 'reusable_templates'
|
69
61
|
|
70
|
-
|
62
|
+
def get_reusable_templates(options = {})
|
63
|
+
base_path = 'reusable_templates'
|
71
64
|
|
72
|
-
|
65
|
+
query = CGI.unescape(options.to_query)
|
73
66
|
|
74
|
-
|
75
|
-
end
|
67
|
+
path = query.empty? ? base_path : "#{base_path}?#{query}"
|
76
68
|
|
77
|
-
|
78
|
-
|
69
|
+
RS4.configuration.request_handler.execute(path, :get)
|
70
|
+
end
|
79
71
|
|
80
|
-
|
72
|
+
def send_document(template_guid, options = {})
|
73
|
+
path = "reusable_templates/#{template_guid}/send_document"
|
81
74
|
|
82
|
-
|
75
|
+
body = options
|
83
76
|
|
84
|
-
|
77
|
+
body[:in_person] = true
|
85
78
|
|
86
|
-
|
79
|
+
response = RS4.configuration.request_handler.execute(path, :post, body)
|
87
80
|
|
88
|
-
|
89
|
-
parsed_response = JSON.parse(response.read_body, symbolize_names: true)
|
81
|
+
Rails.logger.info("RS4::ReusableTemplate::send_document:: #{response.inspect}")
|
90
82
|
|
91
|
-
|
83
|
+
unless response.is_a?(RS4::Error) || response.nil?
|
84
|
+
# parsed_response = JSON.parse(response.read_body, symbolize_names: true)
|
92
85
|
|
93
|
-
|
86
|
+
document_hash = response.dig(:document)
|
94
87
|
|
95
|
-
|
96
|
-
|
97
|
-
response.code,
|
98
|
-
response.class,
|
99
|
-
JSON.parse(response.read_body)
|
100
|
-
)
|
88
|
+
return RS4::Document.new(document_hash)
|
89
|
+
end
|
101
90
|
end
|
102
91
|
end
|
103
92
|
end
|
data/lib/rs4/version.rb
CHANGED
@@ -0,0 +1,114 @@
|
|
1
|
+
module RS4
|
2
|
+
class MockRequest
|
3
|
+
class << self
|
4
|
+
def execute(path, method = :get, _body = {})
|
5
|
+
mockument = {
|
6
|
+
id: SecureRandom.uuid,
|
7
|
+
current_signer_id: 0,
|
8
|
+
name: 'noname',
|
9
|
+
filename: 'noname.pdf',
|
10
|
+
executed_at: Date.today,
|
11
|
+
expired_at: Date.today + 1.day,
|
12
|
+
sent_at: Date.today,
|
13
|
+
state: 'draft',
|
14
|
+
thumbnail_url: 'google.com',
|
15
|
+
sender: 'sender',
|
16
|
+
recipients: [
|
17
|
+
{
|
18
|
+
role_name: 'Investor',
|
19
|
+
sign_url: 'www.google.com'
|
20
|
+
}
|
21
|
+
],
|
22
|
+
audits: nil,
|
23
|
+
page_image_urls: 'google.com',
|
24
|
+
signed_pdf_url: 'google.com/pdf.pdf',
|
25
|
+
tags: nil,
|
26
|
+
merge_field_values: nil,
|
27
|
+
embed_codes: nil,
|
28
|
+
in_person: true,
|
29
|
+
shared_with: nil,
|
30
|
+
identity_method: nil,
|
31
|
+
passcode_pin_enabled: false,
|
32
|
+
original_file_url: 'google.com'
|
33
|
+
}
|
34
|
+
|
35
|
+
if _body&.dig(:roles)&.any?
|
36
|
+
|
37
|
+
mockument[:recipients] = []
|
38
|
+
|
39
|
+
_body[:roles].each do |role|
|
40
|
+
mockument[:recipients] << {
|
41
|
+
role_name: role[:name],
|
42
|
+
sign_url: 'www.google.com'
|
43
|
+
}
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
mockplate = {
|
48
|
+
id: SecureRandom.uuid,
|
49
|
+
name: 'template',
|
50
|
+
creator: 'creator',
|
51
|
+
expires_in: Date.today + 1.day,
|
52
|
+
signer_sequencing: false,
|
53
|
+
shared_with: nil,
|
54
|
+
distribution_method: nil,
|
55
|
+
identity_method: nil,
|
56
|
+
kba: nil,
|
57
|
+
passcode: nil,
|
58
|
+
filename: 'template.pdf',
|
59
|
+
tags: nil,
|
60
|
+
user_id: 1,
|
61
|
+
roles: [],
|
62
|
+
merge_field_components: [],
|
63
|
+
created_at: Date.today,
|
64
|
+
updated_at: Date.today,
|
65
|
+
thumbnail_url: 'google.com/pdf.pdf',
|
66
|
+
page_image_urls: 'google.com/image'
|
67
|
+
}
|
68
|
+
|
69
|
+
case path
|
70
|
+
when %r{reusable_templates/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}/send_document}
|
71
|
+
return {
|
72
|
+
document: mockument
|
73
|
+
}
|
74
|
+
when %r{reusable_templates/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}}
|
75
|
+
return {
|
76
|
+
reusable_template: mockplate
|
77
|
+
}
|
78
|
+
when /reusable_templates/
|
79
|
+
results = {
|
80
|
+
reusable_templates: []
|
81
|
+
}
|
82
|
+
|
83
|
+
i = 0
|
84
|
+
while i < 3
|
85
|
+
mockplate[:id] = SecureRandom.uuid
|
86
|
+
results[:reusable_templates] << mockplate
|
87
|
+
i += 1
|
88
|
+
end
|
89
|
+
|
90
|
+
return results
|
91
|
+
when %r{documents/[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}}
|
92
|
+
return {
|
93
|
+
document: mockument
|
94
|
+
}
|
95
|
+
|
96
|
+
when /documents/
|
97
|
+
Rails.logger.info("#{method} documents")
|
98
|
+
|
99
|
+
results = {
|
100
|
+
documents: []
|
101
|
+
}
|
102
|
+
i = 0
|
103
|
+
while i < 3
|
104
|
+
results[:documents] << mockument
|
105
|
+
i += 1
|
106
|
+
end
|
107
|
+
|
108
|
+
return results
|
109
|
+
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rs4
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- donny
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Provides ruby access to CRUD operations for RightSignature documents
|
14
14
|
and reusable templates
|
@@ -29,11 +29,14 @@ files:
|
|
29
29
|
- bin/setup
|
30
30
|
- lib/rs4.rb
|
31
31
|
- lib/rs4/configuration.rb
|
32
|
+
- lib/rs4/configuration_error.rb
|
32
33
|
- lib/rs4/document.rb
|
34
|
+
- lib/rs4/error.rb
|
33
35
|
- lib/rs4/request.rb
|
34
36
|
- lib/rs4/request_error.rb
|
35
37
|
- lib/rs4/reusable_template.rb
|
36
38
|
- lib/rs4/version.rb
|
39
|
+
- lib/test/mock_request.rb
|
37
40
|
- license.txt
|
38
41
|
- rs4.gemspec
|
39
42
|
homepage: https://github.com/equitymultiple/rs4
|