hello_sign 0.3.0 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/hello_sign.rb +15 -21
- data/lib/hello_sign/client.rb +4 -0
- data/lib/hello_sign/parameters/unclaimed_draft.rb +27 -0
- data/lib/hello_sign/proxy.rb +56 -0
- data/lib/hello_sign/proxy/account.rb +35 -0
- data/lib/hello_sign/proxy/reusable_form.rb +41 -0
- data/lib/hello_sign/proxy/settings.rb +22 -0
- data/lib/hello_sign/proxy/signature_request.rb +72 -0
- data/lib/hello_sign/proxy/team.rb +49 -0
- data/lib/hello_sign/proxy/unclaimed_draft.rb +29 -0
- data/lib/hello_sign/version.rb +1 -1
- data/spec/integration/account_spec.rb +0 -1
- data/spec/integration/signature_request_spec.rb +2 -2
- data/spec/integration/unclaimed_draft_spec.rb +23 -0
- data/spec/shared_examples/proxy.rb +49 -0
- data/spec/unit/client_spec.rb +6 -12
- data/spec/unit/hello_sign_spec.rb +21 -39
- data/spec/unit/parameters/unclaimed_draft_spec.rb +25 -0
- data/spec/unit/{account_proxy_spec.rb → proxy/account_spec.rb} +4 -8
- data/spec/unit/{reusable_form_proxy_spec.rb → proxy/reusable_form_spec.rb} +3 -3
- data/spec/unit/{settings_proxy_spec.rb → proxy/settings_spec.rb} +3 -3
- data/spec/unit/proxy/signature_request_spec.rb +149 -0
- data/spec/unit/{team_proxy_spec.rb → proxy/team_spec.rb} +3 -3
- data/spec/unit/proxy/unclaimed_draft_spec.rb +32 -0
- metadata +29 -18
- data/lib/hello_sign/account_proxy.rb +0 -33
- data/lib/hello_sign/reusable_form_proxy.rb +0 -43
- data/lib/hello_sign/settings_proxy.rb +0 -20
- data/lib/hello_sign/signature_request_proxy.rb +0 -60
- data/lib/hello_sign/team_proxy.rb +0 -47
- data/spec/unit/signature_request_proxy_spec.rb +0 -126
data/lib/hello_sign.rb
CHANGED
@@ -1,37 +1,31 @@
|
|
1
|
-
require 'hello_sign/version'
|
2
1
|
require 'hello_sign/client'
|
3
|
-
require 'hello_sign/
|
4
|
-
|
5
|
-
require '
|
6
|
-
require 'hello_sign/team_proxy'
|
2
|
+
require 'hello_sign/version'
|
3
|
+
|
4
|
+
require 'forwardable'
|
7
5
|
|
8
6
|
module HelloSign
|
9
7
|
class << self
|
10
|
-
|
11
|
-
|
12
|
-
def account
|
13
|
-
AccountProxy.new(client)
|
14
|
-
end
|
15
|
-
|
16
|
-
def signature_request
|
17
|
-
SignatureRequestProxy.new(client)
|
18
|
-
end
|
8
|
+
extend Forwardable
|
19
9
|
|
20
|
-
|
21
|
-
ReusableFormProxy.new(client)
|
22
|
-
end
|
10
|
+
attr_accessor :email, :password
|
23
11
|
|
24
|
-
|
25
|
-
|
26
|
-
end
|
12
|
+
delegate [:account, :signature_request, :reusable_form, :team,
|
13
|
+
:unclaimed_draft] => :client
|
27
14
|
|
28
15
|
def client
|
29
|
-
@client
|
16
|
+
@client = Client.new(email, password) unless credentials_match?
|
17
|
+
@client
|
30
18
|
end
|
31
19
|
|
32
20
|
def configure
|
33
21
|
yield(self)
|
34
22
|
end
|
35
23
|
|
24
|
+
private
|
25
|
+
|
26
|
+
def credentials_match?
|
27
|
+
@client && [@client.email, @client.password].hash == [email, password].hash
|
28
|
+
end
|
29
|
+
|
36
30
|
end
|
37
31
|
end
|
data/lib/hello_sign/client.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'faraday/upload_io'
|
2
|
+
|
3
|
+
module HelloSign
|
4
|
+
module Parameters
|
5
|
+
class UnclaimedDraft
|
6
|
+
attr_writer :files
|
7
|
+
|
8
|
+
def files
|
9
|
+
@files.each_with_index.inject({}) do |parameter, (file, index)|
|
10
|
+
parameter[index] = upload_io.new(file[:io], file[:mime], file[:name])
|
11
|
+
parameter
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def formatted
|
16
|
+
{:file => files}
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def upload_io
|
22
|
+
Faraday::UploadIO
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'hello_sign/proxy/account'
|
2
|
+
require 'hello_sign/proxy/signature_request'
|
3
|
+
require 'hello_sign/proxy/reusable_form'
|
4
|
+
require 'hello_sign/proxy/team'
|
5
|
+
require 'hello_sign/proxy/unclaimed_draft'
|
6
|
+
|
7
|
+
module HelloSign
|
8
|
+
module Proxy
|
9
|
+
attr_writer :account_proxy_source, :signature_request_proxy_source,
|
10
|
+
:reusable_form_proxy_source, :team_proxy_source,
|
11
|
+
:unclaimed_draft_proxy_source
|
12
|
+
|
13
|
+
def account
|
14
|
+
account_proxy_source.new(self)
|
15
|
+
end
|
16
|
+
|
17
|
+
def signature_request
|
18
|
+
signature_request_proxy_source.new(self)
|
19
|
+
end
|
20
|
+
|
21
|
+
def reusable_form
|
22
|
+
reusable_form_proxy_source.new(self)
|
23
|
+
end
|
24
|
+
|
25
|
+
def team
|
26
|
+
team_proxy_source.new(self)
|
27
|
+
end
|
28
|
+
|
29
|
+
def unclaimed_draft
|
30
|
+
unclaimed_draft_proxy_source.new(self)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def account_proxy_source
|
36
|
+
@account_proxy_source || HelloSign::Proxy::Account
|
37
|
+
end
|
38
|
+
|
39
|
+
def signature_request_proxy_source
|
40
|
+
@signature_request_proxy_source || HelloSign::Proxy::SignatureRequest
|
41
|
+
end
|
42
|
+
|
43
|
+
def reusable_form_proxy_source
|
44
|
+
@reusable_form_proxy_source || HelloSign::Proxy::ReusableForm
|
45
|
+
end
|
46
|
+
|
47
|
+
def team_proxy_source
|
48
|
+
@team_proxy_source || HelloSign::Proxy::Team
|
49
|
+
end
|
50
|
+
|
51
|
+
def unclaimed_draft_proxy_source
|
52
|
+
@unclaimed_draft_proxy_source || HelloSign::Proxy::UnclaimedDraft
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'hello_sign/proxy/settings'
|
2
|
+
|
3
|
+
module HelloSign
|
4
|
+
module Proxy
|
5
|
+
class Account
|
6
|
+
attr_reader :client
|
7
|
+
attr_writer :settings_proxy_source
|
8
|
+
|
9
|
+
def initialize(client)
|
10
|
+
@client = client
|
11
|
+
end
|
12
|
+
|
13
|
+
def create(credentials)
|
14
|
+
email = credentials.fetch(:email)
|
15
|
+
password = credentials.fetch(:password)
|
16
|
+
|
17
|
+
client.post('/account/create',
|
18
|
+
:body => {:email_address => email, :password => password},
|
19
|
+
:auth_not_required => true
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def settings
|
24
|
+
settings_proxy_source.new(client)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def settings_proxy_source
|
30
|
+
@settings_proxy_source || HelloSign::Proxy::Settings
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module HelloSign
|
2
|
+
module Proxy
|
3
|
+
class ReusableForm
|
4
|
+
attr_reader :client
|
5
|
+
|
6
|
+
def initialize(client)
|
7
|
+
@client = client
|
8
|
+
end
|
9
|
+
|
10
|
+
def list(params = {})
|
11
|
+
params = {:page => 1}.merge(params)
|
12
|
+
client.get('/reusable_form/list', :params => params)
|
13
|
+
end
|
14
|
+
|
15
|
+
def show(form_id)
|
16
|
+
client.get("/reusable_form/#{form_id}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def grant_access(form_id, params = {})
|
20
|
+
client.post("/reusable_form/add_user/#{form_id}", :body => body(params))
|
21
|
+
end
|
22
|
+
|
23
|
+
def revoke_access(form_id, params = {})
|
24
|
+
client.post("/reusable_form/remove_user/#{form_id}", :body => body(params))
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def body(params)
|
30
|
+
if email = params[:email]
|
31
|
+
{:email_address => email}
|
32
|
+
elsif account_id = params[:account_id]
|
33
|
+
{:account_id => account_id}
|
34
|
+
else
|
35
|
+
raise ArgumentError, 'An email address or account ID must be provided.'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'hello_sign/client'
|
2
|
+
|
3
|
+
module HelloSign
|
4
|
+
module Proxy
|
5
|
+
class Settings
|
6
|
+
attr_reader :client
|
7
|
+
|
8
|
+
def initialize(client)
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
def show
|
13
|
+
client.get('/account')
|
14
|
+
end
|
15
|
+
|
16
|
+
def update(attributes)
|
17
|
+
client.post('/account', :body => attributes)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'hello_sign/parameters/signature_request'
|
2
|
+
require 'hello_sign/parameters/reusable_form_signature_request'
|
3
|
+
|
4
|
+
module HelloSign
|
5
|
+
module Proxy
|
6
|
+
class SignatureRequest
|
7
|
+
attr_reader :client
|
8
|
+
attr_writer :request_parameters, :reusable_form_request_parameters
|
9
|
+
|
10
|
+
def initialize(client)
|
11
|
+
@client = client
|
12
|
+
end
|
13
|
+
|
14
|
+
def deliver(params = {})
|
15
|
+
if form_id = params[:form]
|
16
|
+
reusable_form_request_parameters.reusable_form_id = form_id
|
17
|
+
yield reusable_form_request_parameters
|
18
|
+
|
19
|
+
client.post(
|
20
|
+
'/signature_request/send_with_reusable_form',
|
21
|
+
:body => reusable_form_request_parameters.formatted
|
22
|
+
)
|
23
|
+
else
|
24
|
+
yield request_parameters
|
25
|
+
|
26
|
+
client.post(
|
27
|
+
'/signature_request/send',
|
28
|
+
:body => request_parameters.formatted
|
29
|
+
)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def status(request_id)
|
34
|
+
client.get("/signature_request/#{request_id}")
|
35
|
+
end
|
36
|
+
|
37
|
+
def list(params = {})
|
38
|
+
params = {:page => 1}.merge(params)
|
39
|
+
|
40
|
+
client.get('/signature_request/list', :params => params)
|
41
|
+
end
|
42
|
+
|
43
|
+
def remind(request_id, params = {})
|
44
|
+
email = params.fetch(:email) { raise ArgumentError, 'An email address must be provided.' }
|
45
|
+
|
46
|
+
client.post(
|
47
|
+
"/signature_request/remind/#{request_id}",
|
48
|
+
:body => {:email_address => email}
|
49
|
+
)
|
50
|
+
end
|
51
|
+
|
52
|
+
def cancel(request_id)
|
53
|
+
client.post("/signature_request/cancel/#{request_id}")
|
54
|
+
end
|
55
|
+
|
56
|
+
def final_copy(request_id)
|
57
|
+
client.get("/signature_request/final_copy/#{request_id}")
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def request_parameters
|
63
|
+
@request_parameters ||= Parameters::SignatureRequest.new
|
64
|
+
end
|
65
|
+
|
66
|
+
def reusable_form_request_parameters
|
67
|
+
@reusable_form_request_parameters ||= Parameters::ReusableFormSignatureRequest.new
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module HelloSign
|
2
|
+
module Proxy
|
3
|
+
class Team
|
4
|
+
attr_reader :client
|
5
|
+
|
6
|
+
def initialize(client)
|
7
|
+
@client = client
|
8
|
+
end
|
9
|
+
|
10
|
+
def create(params)
|
11
|
+
name = params.fetch(:name)
|
12
|
+
client.post('/team/create', :body => {:name => name})
|
13
|
+
end
|
14
|
+
|
15
|
+
def show
|
16
|
+
client.get('/team')
|
17
|
+
end
|
18
|
+
|
19
|
+
def update(attributes)
|
20
|
+
client.post('/team', :body => attributes)
|
21
|
+
end
|
22
|
+
|
23
|
+
def destroy
|
24
|
+
client.post('/team/destroy')
|
25
|
+
end
|
26
|
+
|
27
|
+
def add_member(params)
|
28
|
+
client.post("/team/add_member", :body => body_by_identifier(params))
|
29
|
+
end
|
30
|
+
|
31
|
+
def remove_member(params)
|
32
|
+
client.post("/team/remove_member", :body => body_by_identifier(params))
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def body_by_identifier(params)
|
38
|
+
if email = params[:email]
|
39
|
+
{:email_address => email}
|
40
|
+
elsif account_id = params[:account_id]
|
41
|
+
{:account_id => account_id}
|
42
|
+
else
|
43
|
+
raise ArgumentError, 'An email address or account ID must be provided.'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'hello_sign/parameters/unclaimed_draft'
|
2
|
+
|
3
|
+
module HelloSign
|
4
|
+
module Proxy
|
5
|
+
class UnclaimedDraft
|
6
|
+
attr_reader :client
|
7
|
+
attr_writer :draft_parameters
|
8
|
+
|
9
|
+
def initialize(client)
|
10
|
+
@client = client
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
yield draft_parameters
|
15
|
+
client.post(
|
16
|
+
'/unclaimed_draft/create',
|
17
|
+
:body => draft_parameters.formatted
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def draft_parameters
|
24
|
+
@draft_parameters ||= Parameters::UnclaimedDraft.new
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/hello_sign/version.rb
CHANGED
@@ -8,7 +8,7 @@ describe HelloSign do
|
|
8
8
|
|
9
9
|
before do
|
10
10
|
stub_post_with_auth('/signature_request/send')
|
11
|
-
HelloSign.signature_request.
|
11
|
+
HelloSign.signature_request.deliver do |request|
|
12
12
|
request.title = 'Lease'
|
13
13
|
request.subject = 'Sign this'
|
14
14
|
request.message = 'You must sign this.'
|
@@ -34,7 +34,7 @@ describe HelloSign do
|
|
34
34
|
context "when using a reusable form" do
|
35
35
|
before do
|
36
36
|
stub_post_with_auth('/signature_request/send_with_reusable_form')
|
37
|
-
HelloSign.signature_request.
|
37
|
+
HelloSign.signature_request.deliver(:form => 'form_id') do |request|
|
38
38
|
request.title = 'Lease'
|
39
39
|
request.subject = 'Sign this'
|
40
40
|
request.message = 'You must sign this.'
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'integration/helper'
|
2
|
+
|
3
|
+
describe HelloSign do
|
4
|
+
context "creating an unclaimed draft" do
|
5
|
+
let(:text_io) { File.new('spec/fixtures/test.txt') }
|
6
|
+
let(:image_io) { File.new('spec/fixtures/test.jpg') }
|
7
|
+
|
8
|
+
before { stub_post_with_auth('/unclaimed_draft/create') }
|
9
|
+
|
10
|
+
example do
|
11
|
+
HelloSign.unclaimed_draft.create do |draft|
|
12
|
+
draft.files = [
|
13
|
+
{:name => 'test.txt', :io => text_io, :mime => 'text/plain'},
|
14
|
+
{:name => 'test.jpg', :io => image_io, :mime => 'image/jpeg'}
|
15
|
+
]
|
16
|
+
end
|
17
|
+
|
18
|
+
expect(a_post_with_auth('/unclaimed_draft/create')
|
19
|
+
.with(:headers => {'Content-Type' => /multipart\/form-data/}, :body => /This is a test upload file\./)
|
20
|
+
).to have_been_made
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|