eversign 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 35b1e22aeecfbfeff6c2987ad3429410f4df6637
4
+ data.tar.gz: e2d0636f76b292e859c84cb3d4baf6fc84229dd4
5
+ SHA512:
6
+ metadata.gz: cf29236266e2f5a2fb67199db7d1e5574c1673252cef65c36ea3e359d17e25e786e5d8b10130a295d77428afab78a4a0b189694fd36b072d9925ab986f4af04f
7
+ data.tar.gz: fcc97c08aec1fd59459fb82775c433aa245e5b5a708a1d6883b70de130eccb2b80fa9272b9506ee34c7bca36393fc827e312bb03f70470e832bc790745a76374
@@ -0,0 +1,25 @@
1
+ require 'eversign/version'
2
+ require 'configurations'
3
+ require 'addressable/uri'
4
+ require 'eversign/client'
5
+ require 'eversign/models/business'
6
+ require 'eversign/models/file'
7
+ require 'eversign/models/field'
8
+ require 'eversign/models/signer'
9
+ require 'eversign/models/recipient'
10
+ require 'eversign/models/document'
11
+ require 'eversign/models/template'
12
+ require 'eversign/models/error'
13
+ require 'eversign/models/exception'
14
+ require 'eversign/mappings/business'
15
+ require 'eversign/mappings/file'
16
+ require 'eversign/mappings/document'
17
+ require 'eversign/mappings/exception'
18
+
19
+ module Eversign
20
+ include Configurations
21
+ configurable String, :access_key
22
+ configurable Integer, :business_id
23
+ configurable String, :oauth_base
24
+ configurable String, :api_base
25
+ end
@@ -0,0 +1,207 @@
1
+ require 'addressable/template'
2
+ require 'faraday'
3
+ require 'json'
4
+ require 'logger'
5
+
6
+ module Eversign
7
+
8
+ class FileNotFoundException < Exception
9
+ end
10
+
11
+ class Client
12
+ attr_accessor :access_key, :base_uri, :business_id, :token
13
+
14
+ def initialize()
15
+ self.base_uri = (Eversign.configuration && Eversign.configuration.api_base) ? Eversign.configuration.api_base : 'https://api.eversign.com'
16
+ access_key = Eversign.configuration.access_key
17
+ if access_key.start_with?('Bearer ')
18
+ self.set_oauth_access_token(access_key)
19
+ else
20
+ self.access_key = access_key
21
+ end
22
+ self.business_id = Eversign.configuration.business_id
23
+ end
24
+
25
+ def set_oauth_access_token(oauthtoken)
26
+ if oauthtoken.startswith('Bearer ')
27
+ self.token = oauthtoken
28
+ else
29
+ self.token = 'Bearer ' + oauthtoken
30
+ end
31
+ self.get_businesses()
32
+ end
33
+
34
+ def generate_oauth_authorization_url(options)
35
+ check_arguments(['client_id', 'state'], options)
36
+ template = Addressable::Template.new(Eversign.configuration.oauth_base + '/authorize{?clinet_id,state}')
37
+ return template.partial_expand(clinet_id: options['client_id'], state: options['state']).pattern
38
+ end
39
+
40
+ def request_oauth_token(options)
41
+ check_arguments(['client_id', 'client_secret', 'code', 'state'], options)
42
+
43
+ req = execute_request(:post, '/token', options)
44
+ if req.status == 200
45
+ response_obj = JSON.parse(req.body)
46
+
47
+ if response_obj.key?('success')
48
+ raise response_obj['message']
49
+ else
50
+ return response_obj['access_token']
51
+ end
52
+ end
53
+ raise 'no success'
54
+ end
55
+
56
+ def get_buisnesses
57
+ response = execute_request(:get, "/api/business?access_key=#{access_key}")
58
+ extract_response(response.body, Eversign::Mappings::Business)
59
+ end
60
+
61
+ def get_all_documents
62
+ get_documents('all')
63
+ end
64
+
65
+ def get_completed_documents
66
+ get_documents('completed')
67
+ end
68
+
69
+ def get_draft_documents
70
+ get_documents('draft')
71
+ end
72
+
73
+ def get_cancelled_documents
74
+ get_documents('cancelled')
75
+ end
76
+
77
+ def get_action_required_documents
78
+ get_documents('my_action_required')
79
+ end
80
+
81
+ def get_waiting_for_others_documents
82
+ get_documents('waiting_for_others')
83
+ end
84
+
85
+ def get_templates
86
+ get_documents('templates')
87
+ end
88
+
89
+ def get_archived_templates
90
+ get_documents('templates_archived')
91
+ end
92
+
93
+ def get_draft_templates
94
+ get_documents('template_draft')
95
+ end
96
+
97
+ def get_document(document_hash)
98
+ path = "/api/document?access_key=#{access_key}&business_id=#{business_id}&document_hash=#{document_hash}"
99
+ response = execute_request(:get, path)
100
+ extract_response(response.body, Eversign::Mappings::Document)
101
+ end
102
+
103
+ def create_document(document)
104
+ if document.files
105
+ for file in document.files
106
+ if file.file_url
107
+ file_response = self.upload_file(file.file_url)
108
+ file.file_url = nil
109
+ file.file_id = file_response.file_id
110
+ end
111
+ end
112
+ end
113
+ path = "/api/document?access_key=#{access_key}&business_id=#{business_id}"
114
+ data = Eversign::Mappings::Document.representation_for(document)
115
+ response = execute_request(:post, path, data)
116
+ extract_response(response.body, Eversign::Mappings::Document)
117
+ end
118
+
119
+ def create_document_from_template(template)
120
+ create_document(template)
121
+ end
122
+
123
+ def delete_document(document_hash)
124
+ path = "/api/document?access_key=#{access_key}&business_id=#{business_id}&document_hash=#{document_hash}"
125
+ delete(path, document_hash)
126
+ end
127
+
128
+ def cancel_document(document_hash)
129
+ path = "/api/document?access_key=#{access_key}&business_id=#{business_id}&document_hash=#{document_hash}&cancel=1"
130
+ delete(path, document_hash)
131
+ end
132
+
133
+ def download_raw_document_to_path(document_hash, path)
134
+ sub_uri = "/api/download_raw_document?access_key=#{access_key}&business_id=#{business_id}&document_hash=#{document_hash}"
135
+ download(sub_uri, path)
136
+ end
137
+
138
+ def download_final_document_to_path(document_hash, path, audit_trail=1)
139
+ sub_uri = "/api/download_raw_document?access_key=#{access_key}&business_id=#{business_id}&document_hash=#{document_hash}&audit_trail=#{audit_trail}"
140
+ download(sub_uri, path)
141
+ end
142
+
143
+ def upload_file(file_path)
144
+ payload = { upload: Faraday::UploadIO.new(file_path, 'text/plain') }
145
+ path = "/api/file?access_key=#{access_key}&business_id=#{business_id}"
146
+ response = execute_request(:post, path, payload, true)
147
+ extract_response(response.body, Eversign::Mappings::File)
148
+ end
149
+
150
+ def send_reminder_for_document(document_hash, signer_id)
151
+ path = "/api/send_reminder?access_key=#{access_key}&business_id=#{business_id}"
152
+ response = execute_request(:post, path, {document_hash: document_hash, signer_id: signer_id}.to_json)
153
+ eval(response.body)[:success] ? true : extract_response(response.body)
154
+ end
155
+
156
+ private
157
+ def execute_request(method, path, body=nil, multipart=false)
158
+ @faraday ||= Faraday.new(base_uri) do |conn|
159
+ conn.headers = { }
160
+ conn.headers['User-Agent'] = 'Eversign_Ruby_SDK'
161
+ conn.headers['Authorization'] = token if token
162
+ conn.request :multipart if multipart
163
+ conn.adapter :net_http
164
+ end
165
+
166
+ @faraday.send(method) do |request|
167
+ request.url path
168
+ request.body = body if body
169
+ end
170
+ end
171
+
172
+ def check_arguments(arguments=[], options={})
173
+ arguments.each do |argument|
174
+ raise ('Please specify ' + argument) unless options.has_key?(argument.to_sym)
175
+ end
176
+ end
177
+
178
+ def delete(path, document_hash)
179
+ response = execute_request(:delete, path)
180
+ eval(response.body)[:success] ? true : extract_response(response.body)
181
+ end
182
+
183
+ def download(sub_uri, path)
184
+ response = execute_request(:get, sub_uri)
185
+ File.open(path, 'wb') { |fp| fp.write(response.body) }
186
+ end
187
+
188
+ def get_documents(doc_type)
189
+ path = "/api/document?access_key=#{access_key}&business_id=#{business_id}&type=#{doc_type}"
190
+ response = execute_request(:get, path)
191
+ extract_response(response.body, Eversign::Mappings::Document)
192
+ end
193
+
194
+ def extract_response(body, mapping=nil)
195
+ data = JSON.parse(body)
196
+ if data.kind_of?(Array)
197
+ mapping.extract_collection(body, nil)
198
+ else
199
+ if data.key?('success')
200
+ Eversign::Mappings::Exception.extract_single(body, nil)
201
+ else
202
+ mapping.extract_single(body, nil)
203
+ end
204
+ end
205
+ end
206
+ end
207
+ end
@@ -0,0 +1,16 @@
1
+ require 'kartograph'
2
+ require_relative '../models/business'
3
+
4
+ module Eversign
5
+ module Mappings
6
+ class Business
7
+ include Kartograph::DSL
8
+
9
+ kartograph do
10
+ mapping Eversign::Models::Business
11
+
12
+ property :business_id, :business_status, :business_identifier, :business_name, :creation_time_stamp, :is_primary
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,105 @@
1
+ require 'kartograph'
2
+ require_relative '../models/document'
3
+
4
+ module Eversign
5
+ module Mappings
6
+ class File
7
+ include Kartograph::DSL
8
+
9
+ kartograph do
10
+ mapping Eversign::Models::File
11
+
12
+ property :name, :file_id, :file_url, :file_base64
13
+ end
14
+ end
15
+
16
+ class Signer
17
+ include Kartograph::DSL
18
+
19
+ kartograph do
20
+ mapping Eversign::Models::Signer
21
+
22
+ property :id, :name, :email, :order, :pin, :message, :deliver_email, :role
23
+ end
24
+ end
25
+
26
+ class Field
27
+ include Kartograph::DSL
28
+
29
+ kartograph do
30
+ mapping Eversign::Models::Field
31
+
32
+ property :name, :type, :x, :y, :width, :height, :page, :signer, :identifier, :required, :readonly, :merge, :type,
33
+ :validation_type, :text_style, :text_font, :text_size, :text_color, :value, :options, :group
34
+
35
+ end
36
+ end
37
+
38
+ class Recipient
39
+ include Kartograph::DSL
40
+
41
+ kartograph do
42
+ mapping Eversign::Models::Recipient
43
+
44
+ property :name, :email, :role
45
+ end
46
+ end
47
+
48
+ class Document
49
+ include Kartograph::DSL
50
+
51
+ kartograph do
52
+ mapping Eversign::Models::Document
53
+
54
+ property :document_hash, :template_id, :sandbox, :is_draft, :title, :message, :use_signer_order, :reminders, :require_all_signers,
55
+ :redirect, :redirect_decline, :client, :expires, :embedded_signing_enabled, :requester_email, :is_template,
56
+ :is_completed, :is_archived, :is_deleted, :is_trashed, :is_cancelled, :embedded, :in_person, :permission
57
+ property :files, plural: true, include: File
58
+ property :signers, plural: true, include: Signer
59
+ property :recipients, plural: true, include: Recipient
60
+ end
61
+
62
+ def self.extract_collection(content, scope)
63
+ data = JSON.parse(content)
64
+ result = []
65
+ data.each do |item|
66
+ result << extract_single(item.to_json, nil)
67
+ end
68
+ result
69
+ end
70
+
71
+ def self.extract_single(content, scope)
72
+ obj = super(content, scope)
73
+ data = JSON.parse(content)
74
+ if data['fields']
75
+ data['fields'].each do |field_list|
76
+ field_data = []
77
+ field_list.each do |field|
78
+ extracted_field = Field.extract_single(field.to_json, nil)
79
+ field_data << extracted_field if extracted_field
80
+ end
81
+ obj.add_field_list(field_data)
82
+ end
83
+ end
84
+ obj
85
+ end
86
+
87
+ def self.representation_for(document)
88
+ data = super(nil, document)
89
+ list = []
90
+ if document.fields
91
+ document.fields.each do |field_list|
92
+ field_data = []
93
+ field_list.each do |field|
94
+ field_data << JSON.parse(Field.representation_for(nil, field))
95
+ end
96
+ list << field_data
97
+ end
98
+ end
99
+ data = JSON.parse(data)
100
+ data['fields'] = list
101
+ JSON.dump(data)
102
+ end
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,27 @@
1
+ require 'kartograph'
2
+ #require_relative '../models/document'
3
+
4
+ module Eversign
5
+ module Mappings
6
+ class Error
7
+ include Kartograph::DSL
8
+
9
+ kartograph do
10
+ mapping Eversign::Models::Error
11
+
12
+ property :code, :type, :info
13
+ end
14
+ end
15
+
16
+ class Exception
17
+ include Kartograph::DSL
18
+
19
+ kartograph do
20
+ mapping Eversign::Models::Exception
21
+
22
+ property :success
23
+ property :error, include: Error
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,16 @@
1
+ require 'kartograph'
2
+ require_relative '../models/file'
3
+
4
+ module Eversign
5
+ module Mappings
6
+ class File
7
+ include Kartograph::DSL
8
+
9
+ kartograph do
10
+ mapping Eversign::Models::File
11
+
12
+ property :name, :file_id, :file_url, :file_base64, :pages, :total_pages
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,7 @@
1
+ module Eversign
2
+ module Models
3
+ class Business
4
+ attr_accessor :business_id, :business_status, :business_identifier, :business_name, :creation_time_stamp, :is_primary
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,34 @@
1
+ module Eversign
2
+ module Models
3
+ class Document
4
+ attr_accessor :document_hash, :template_id, :sandbox, :is_draft, :title, :message, :use_signer_order, :reminders, :require_all_signers,
5
+ :redirect, :redirect_decline, :client, :expires, :embedded_signing_enabled, :requester_email, :is_template,
6
+ :is_completed, :is_archived, :is_deleted, :is_trashed, :is_cancelled, :embedded, :in_person, :permission,
7
+ :files, :signers, :recipients, :meta, :fields
8
+
9
+ def add_file(file)
10
+ self.files ||= []
11
+ self.files << file
12
+ end
13
+
14
+ def add_field(field)
15
+ add_field_list([field])
16
+ end
17
+
18
+ def add_field_list(feild_list)
19
+ self.fields ||= []
20
+ self.fields << feild_list
21
+ end
22
+
23
+ def add_recipient(recipient)
24
+ self.recipients ||= []
25
+ self.recipients << recipient
26
+ end
27
+
28
+ def add_signer(signer)
29
+ self.signers ||= []
30
+ self.signers << signer
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,7 @@
1
+ module Eversign
2
+ module Models
3
+ class Error
4
+ attr_accessor :code, :type, :info
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Eversign
2
+ module Models
3
+ class Exception
4
+ attr_accessor :success, :error
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ module Eversign
2
+ module Models
3
+ class Field
4
+ attr_accessor :name, :type, :x, :y, :width, :height, :page, :signer, :identifier, :required, :readonly, :merge, :type,
5
+ :validation_type, :text_style, :text_font, :text_size, :text_color, :value, :options, :group
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,30 @@
1
+ require 'active_model'
2
+ module Eversign
3
+ module Models
4
+ class File
5
+ include ActiveModel::Validations
6
+
7
+ attr_accessor :name, :file_id, :file_url, :file_base64, :pages, :total_pages
8
+
9
+ validate :only_one_option
10
+
11
+ def initialize(name=nil)
12
+ self.name = name
13
+ end
14
+
15
+ def only_one_option()
16
+ error = false
17
+ if file_id && !file_id.empty?
18
+ error = file_url || file_base64
19
+ elsif file_url && !file_url.empty?
20
+ error = file_id || file_base64
21
+ elsif file_base64 && !file_base64.empty?
22
+ error = file_id || file_url
23
+ else
24
+ error = true
25
+ end
26
+ errors.add('Please provide only one file option') if error
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,13 @@
1
+ module Eversign
2
+ module Models
3
+ class Recipient
4
+ attr_accessor :name, :email, :role
5
+
6
+ def initialize(name=nil, email=nil, role=nil)
7
+ self.name = name
8
+ self.email = email
9
+ self.role = role
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Eversign
2
+ module Models
3
+ class Signer
4
+ attr_accessor :id, :name, :email, :order, :pin, :message, :deliver_email, :role
5
+
6
+ def initialize(name=nil, email=nil, role=nil)
7
+ self.name = name
8
+ self.email = email
9
+ self.role = role
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,6 @@
1
+ module Eversign
2
+ module Models
3
+ class Template < Document
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ module Eversign
2
+ VERSION = '0.2.1'
3
+ end
metadata ADDED
@@ -0,0 +1,186 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: eversign
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ platform: ruby
6
+ authors:
7
+ - Sachin Raka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-03-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '4'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.13'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.13'
41
+ - !ruby/object:Gem::Dependency
42
+ name: addressable
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.5'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.5'
55
+ - !ruby/object:Gem::Dependency
56
+ name: kartograph
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.2.3
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.2.3
69
+ - !ruby/object:Gem::Dependency
70
+ name: configurations
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '2.2'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '2.2'
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.12'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.12'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '10.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '10.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rspec
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '3.0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '3.0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: simplecov
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Gem for Eversign API SDK.
140
+ email:
141
+ - Sachin.Raka@outlook.com
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - lib/eversign.rb
147
+ - lib/eversign/client.rb
148
+ - lib/eversign/mappings/business.rb
149
+ - lib/eversign/mappings/document.rb
150
+ - lib/eversign/mappings/exception.rb
151
+ - lib/eversign/mappings/file.rb
152
+ - lib/eversign/models/business.rb
153
+ - lib/eversign/models/document.rb
154
+ - lib/eversign/models/error.rb
155
+ - lib/eversign/models/exception.rb
156
+ - lib/eversign/models/field.rb
157
+ - lib/eversign/models/file.rb
158
+ - lib/eversign/models/recipient.rb
159
+ - lib/eversign/models/signer.rb
160
+ - lib/eversign/models/template.rb
161
+ - lib/eversign/version.rb
162
+ homepage: https://github.com/workatbest/eversign-ruby-sdk
163
+ licenses:
164
+ - MIT
165
+ metadata: {}
166
+ post_install_message:
167
+ rdoc_options: []
168
+ require_paths:
169
+ - lib
170
+ required_ruby_version: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ required_rubygems_version: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ requirements: []
181
+ rubyforge_project:
182
+ rubygems_version: 2.5.1
183
+ signing_key:
184
+ specification_version: 4
185
+ summary: Gem for Eversign API Client.
186
+ test_files: []