hello_sign 0.6.0 → 1.0.0

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.
Files changed (36) hide show
  1. data/lib/hello_sign/client.rb +2 -2
  2. data/lib/hello_sign/parameters/reusable_form_signature_request.rb +9 -9
  3. data/lib/hello_sign/parameters/signature_request.rb +15 -15
  4. data/lib/hello_sign/parameters/unclaimed_draft.rb +7 -7
  5. data/lib/hello_sign/proxy/account.rb +1 -1
  6. data/lib/hello_sign/proxy/reusable_form.rb +10 -9
  7. data/lib/hello_sign/proxy/settings.rb +1 -1
  8. data/lib/hello_sign/proxy/signature_request.rb +13 -12
  9. data/lib/hello_sign/proxy/team.rb +4 -4
  10. data/lib/hello_sign/proxy/unclaimed_draft.rb +1 -1
  11. data/lib/hello_sign/proxy.rb +4 -4
  12. data/lib/hello_sign/upload_io.rb +56 -0
  13. data/lib/hello_sign/version.rb +1 -1
  14. data/lib/hello_sign.rb +1 -1
  15. data/spec/helper.rb +0 -2
  16. data/spec/integration/account_spec.rb +4 -4
  17. data/spec/integration/hello_sign_spec.rb +2 -2
  18. data/spec/integration/helper.rb +6 -1
  19. data/spec/integration/reusable_form_spec.rb +16 -20
  20. data/spec/integration/signature_request_spec.rb +52 -57
  21. data/spec/integration/team_spec.rb +8 -8
  22. data/spec/integration/unclaimed_draft_spec.rb +3 -3
  23. data/spec/shared_examples/proxy.rb +15 -5
  24. data/spec/unit/client_spec.rb +3 -3
  25. data/spec/unit/middleware/raise_error_spec.rb +1 -1
  26. data/spec/unit/parameters/reusable_form_signature_request_spec.rb +17 -17
  27. data/spec/unit/parameters/signature_request_spec.rb +25 -20
  28. data/spec/unit/parameters/unclaimed_draft_spec.rb +12 -11
  29. data/spec/unit/proxy/account_spec.rb +6 -6
  30. data/spec/unit/proxy/reusable_form_spec.rb +13 -12
  31. data/spec/unit/proxy/settings_spec.rb +3 -3
  32. data/spec/unit/proxy/signature_request_spec.rb +29 -32
  33. data/spec/unit/proxy/team_spec.rb +12 -12
  34. data/spec/unit/proxy/unclaimed_draft_spec.rb +1 -1
  35. data/spec/unit/upload_io_spec.rb +60 -0
  36. metadata +19 -15
@@ -42,13 +42,13 @@ module HelloSign
42
42
  end
43
43
 
44
44
  def base_connection
45
- Faraday.new(:url => API_ENDPOINT) do |connection|
45
+ Faraday.new(url: API_ENDPOINT) do |connection|
46
46
  yield connection
47
47
 
48
48
  connection.request :multipart
49
49
  connection.request :url_encoded
50
50
  connection.response :raise_error
51
- connection.response :multi_json, :symbolize_keys => true
51
+ connection.response :multi_json, symbolize_keys: true
52
52
  connection.adapter :net_http
53
53
  end
54
54
  end
@@ -5,13 +5,13 @@ module HelloSign
5
5
 
6
6
  def formatted
7
7
  {
8
- :reusable_form_id => reusable_form_id,
9
- :title => title,
10
- :subject => subject,
11
- :message => message,
12
- :ccs => ccs,
13
- :signers => signers,
14
- :custom_fields => custom_fields
8
+ reusable_form_id: reusable_form_id,
9
+ title: title,
10
+ subject: subject,
11
+ message: message,
12
+ ccs: ccs,
13
+ signers: signers,
14
+ custom_fields: custom_fields
15
15
  }
16
16
  end
17
17
 
@@ -21,14 +21,14 @@ module HelloSign
21
21
 
22
22
  def ccs
23
23
  @ccs.inject({}) do |parameter, cc|
24
- parameter[cc[:role]] = {:email_address => cc[:email_address]}
24
+ parameter[cc[:role]] = {email_address: cc[:email_address]}
25
25
  parameter
26
26
  end
27
27
  end
28
28
 
29
29
  def signers
30
30
  @signers.inject({}) do |parameter, signer|
31
- parameter[signer[:role]] = {:name => signer[:name], :email_address => signer[:email_address]}
31
+ parameter[signer[:role]] = {name: signer[:name], email_address: signer[:email_address]}
32
32
  parameter
33
33
  end
34
34
  end
@@ -1,17 +1,17 @@
1
- require 'faraday/upload_io'
1
+ require 'hello_sign/upload_io'
2
2
 
3
3
  module HelloSign
4
4
  module Parameters
5
5
  class SignatureRequest
6
6
  attr_accessor :title, :subject, :message, :ccs
7
- attr_writer :signers, :files
7
+ attr_writer :signers, :files, :upload_io_source
8
8
 
9
9
  def signers
10
10
  (@signers || {}).each_with_index.inject({}) do |parameter, (signer, index)|
11
11
  signer = {
12
- :name => signer[:name],
13
- :email_address => signer[:email_address],
14
- :order => index
12
+ name: signer[:name],
13
+ email_address: signer[:email_address],
14
+ order: index
15
15
  }
16
16
  parameter[index] = signer
17
17
  parameter
@@ -19,27 +19,27 @@ module HelloSign
19
19
  end
20
20
 
21
21
  def files
22
- (@files || {}).each_with_index.inject({}) do |parameter, (file, index)|
23
- parameter[index + 1] = upload_io.new(file[:io], file[:mime], file[:name])
22
+ (@files || {}).each_with_index.inject({}) do |parameter, (file_data, index)|
23
+ parameter[index + 1] = upload_io_source.new(file_data).upload
24
24
  parameter
25
25
  end
26
26
  end
27
27
 
28
28
  def formatted
29
29
  {
30
- :title => title,
31
- :subject => subject,
32
- :message => message,
33
- :cc_email_addresses => ccs,
34
- :signers => signers,
35
- :file => files
30
+ title: title,
31
+ subject: subject,
32
+ message: message,
33
+ cc_email_addresses: ccs,
34
+ signers: signers,
35
+ file: files
36
36
  }
37
37
  end
38
38
 
39
39
  private
40
40
 
41
- def upload_io
42
- Faraday::UploadIO
41
+ def upload_io_source
42
+ @upload_io_source || HelloSign::UploadIO
43
43
  end
44
44
 
45
45
  end
@@ -1,25 +1,25 @@
1
- require 'faraday/upload_io'
1
+ require 'hello_sign/upload_io'
2
2
 
3
3
  module HelloSign
4
4
  module Parameters
5
5
  class UnclaimedDraft
6
- attr_writer :files
6
+ attr_writer :files, :upload_io_source
7
7
 
8
8
  def formatted
9
- {:file => files}
9
+ {file: files}
10
10
  end
11
11
 
12
12
  private
13
13
 
14
14
  def files
15
- @files.each_with_index.inject({}) do |parameter, (file, index)|
16
- parameter[index] = upload_io.new(file[:io], file[:mime], file[:name])
15
+ @files.each_with_index.inject({}) do |parameter, (file_data, index)|
16
+ parameter[index] = upload_io_source.new(file_data).upload
17
17
  parameter
18
18
  end
19
19
  end
20
20
 
21
- def upload_io
22
- Faraday::UploadIO
21
+ def upload_io_source
22
+ @upload_io_source || HelloSign::UploadIO
23
23
  end
24
24
 
25
25
  end
@@ -11,7 +11,7 @@ module HelloSign
11
11
  end
12
12
 
13
13
  def create(params = {})
14
- client.post('/account/create', :body => params, :auth_not_required => true)
14
+ client.post('/account/create', body: params, auth_not_required: true)
15
15
  end
16
16
 
17
17
  def settings
@@ -1,26 +1,27 @@
1
1
  module HelloSign
2
2
  module Proxy
3
3
  class ReusableForm
4
- attr_reader :client
4
+ attr_reader :client, :form_id
5
5
 
6
- def initialize(client)
7
- @client = client
6
+ def initialize(client, form_id)
7
+ @client = client
8
+ @form_id = form_id
8
9
  end
9
10
 
10
11
  def list(params = {})
11
- client.get('/reusable_form/list', :params => params)
12
+ client.get('/reusable_form/list', params: params)
12
13
  end
13
14
 
14
- def show(form_id)
15
+ def show
15
16
  client.get("/reusable_form/#{form_id}")
16
17
  end
17
18
 
18
- def grant_access(form_id, params = {})
19
- client.post("/reusable_form/add_user/#{form_id}", :body => params)
19
+ def grant_access(params = {})
20
+ client.post("/reusable_form/add_user/#{form_id}", body: params)
20
21
  end
21
22
 
22
- def revoke_access(form_id, params = {})
23
- client.post("/reusable_form/remove_user/#{form_id}", :body => params)
23
+ def revoke_access(params = {})
24
+ client.post("/reusable_form/remove_user/#{form_id}", body: params)
24
25
  end
25
26
 
26
27
  end
@@ -14,7 +14,7 @@ module HelloSign
14
14
  end
15
15
 
16
16
  def update(params = {})
17
- client.post('/account', :body => params)
17
+ client.post('/account', body: params)
18
18
  end
19
19
 
20
20
  end
@@ -4,11 +4,12 @@ require 'hello_sign/parameters/reusable_form_signature_request'
4
4
  module HelloSign
5
5
  module Proxy
6
6
  class SignatureRequest
7
- attr_reader :client
7
+ attr_reader :client, :request_id
8
8
  attr_writer :request_parameters, :reusable_form_request_parameters
9
9
 
10
- def initialize(client)
10
+ def initialize(client, request_id)
11
11
  @client = client
12
+ @request_id = request_id
12
13
  end
13
14
 
14
15
  def deliver(params = {})
@@ -18,36 +19,36 @@ module HelloSign
18
19
 
19
20
  client.post(
20
21
  '/signature_request/send_with_reusable_form',
21
- :body => reusable_form_request_parameters.formatted
22
+ body: reusable_form_request_parameters.formatted
22
23
  )
23
24
  else
24
25
  yield request_parameters
25
26
 
26
- client.post('/signature_request/send', :body => request_parameters.formatted)
27
+ client.post('/signature_request/send', body: request_parameters.formatted)
27
28
  end
28
29
  end
29
30
 
30
- def status(request_id)
31
+ def status
31
32
  client.get("/signature_request/#{request_id}")
32
33
  end
33
34
 
34
35
  def list(params = {})
35
- params = {:page => 1}.merge(params)
36
+ params = {page: 1}.merge(params)
36
37
 
37
- client.get('/signature_request/list', :params => params)
38
+ client.get('/signature_request/list', params: params)
38
39
  end
39
40
 
40
- def remind(request_id, params = {})
41
- params = {:email_address => params.delete(:email)}.merge(params)
41
+ def remind(params = {})
42
+ params = {email_address: params.delete(:email)}.merge(params)
42
43
 
43
- client.post("/signature_request/remind/#{request_id}", :body => params)
44
+ client.post("/signature_request/remind/#{request_id}", body: params)
44
45
  end
45
46
 
46
- def cancel(request_id)
47
+ def cancel
47
48
  client.post("/signature_request/cancel/#{request_id}")
48
49
  end
49
50
 
50
- def final_copy(request_id)
51
+ def final_copy
51
52
  client.get("/signature_request/final_copy/#{request_id}")
52
53
  end
53
54
 
@@ -8,7 +8,7 @@ module HelloSign
8
8
  end
9
9
 
10
10
  def create(params = {})
11
- client.post('/team/create', :body => params)
11
+ client.post('/team/create', body: params)
12
12
  end
13
13
 
14
14
  def show
@@ -16,7 +16,7 @@ module HelloSign
16
16
  end
17
17
 
18
18
  def update(params = {})
19
- client.post('/team', :body => params)
19
+ client.post('/team', body: params)
20
20
  end
21
21
 
22
22
  def destroy
@@ -24,11 +24,11 @@ module HelloSign
24
24
  end
25
25
 
26
26
  def add_member(params = {})
27
- client.post("/team/add_member", :body => params)
27
+ client.post("/team/add_member", body: params)
28
28
  end
29
29
 
30
30
  def remove_member(params = {})
31
- client.post("/team/remove_member", :body => params)
31
+ client.post("/team/remove_member", body: params)
32
32
  end
33
33
 
34
34
  end
@@ -14,7 +14,7 @@ module HelloSign
14
14
  yield draft_parameters
15
15
  client.post(
16
16
  '/unclaimed_draft/create',
17
- :body => draft_parameters.formatted
17
+ body: draft_parameters.formatted
18
18
  )
19
19
  end
20
20
 
@@ -14,12 +14,12 @@ module HelloSign
14
14
  account_proxy_source.new(self)
15
15
  end
16
16
 
17
- def signature_request
18
- signature_request_proxy_source.new(self)
17
+ def signature_request(request_id = nil)
18
+ signature_request_proxy_source.new(self, request_id)
19
19
  end
20
20
 
21
- def reusable_form
22
- reusable_form_proxy_source.new(self)
21
+ def reusable_form(form_id = nil)
22
+ reusable_form_proxy_source.new(self, form_id)
23
23
  end
24
24
 
25
25
  def team
@@ -0,0 +1,56 @@
1
+ require 'faraday/upload_io'
2
+ require 'hello_sign/error'
3
+
4
+ module HelloSign
5
+ class UploadIO
6
+ MIME_TYPES = {
7
+ 'doc' => 'application/msword',
8
+ 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
9
+ 'gif' => 'image/gif',
10
+ 'jpg' => 'image/jpeg',
11
+ 'jpeg' => 'image/jpeg',
12
+ 'pdf' => 'application/pdf',
13
+ 'png' => 'image/png',
14
+ 'ppsx' => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
15
+ 'ppt' => 'application/vnd.ms-powerpoint',
16
+ 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
17
+ 'tif' => 'image/tiff',
18
+ 'tiff' => 'image/tiff',
19
+ 'txt' => 'text/plain',
20
+ 'xls' => 'application/vnd.ms-excel',
21
+ 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
22
+ }
23
+
24
+ attr_reader :filename, :io_object
25
+
26
+ def initialize(file_data)
27
+ @filename = file_data[:filename]
28
+ @io_object = file_data[:io]
29
+ @mime_type = file_data[:mime]
30
+ end
31
+
32
+ def upload
33
+ file_converter_source.new(*parameters)
34
+ end
35
+
36
+ private
37
+
38
+ def parameters
39
+ begin
40
+ io_object ? [io_object, mime_type, filename] : [filename, mime_type]
41
+ end.compact
42
+ end
43
+
44
+ def mime_type
45
+ @mime_type or begin
46
+ extension = (filename || '').split('.').last
47
+ MIME_TYPES.fetch(extension) { 'text/plain' }
48
+ end
49
+ end
50
+
51
+ def file_converter_source
52
+ @file_converter_source || Faraday::UploadIO
53
+ end
54
+
55
+ end
56
+ end
@@ -1,3 +1,3 @@
1
1
  module HelloSign
2
- VERSION = '0.6.0'
2
+ VERSION = '1.0.0'
3
3
  end
data/lib/hello_sign.rb CHANGED
@@ -31,7 +31,7 @@ module HelloSign
31
31
  @client_source || HelloSign::Client
32
32
  end
33
33
 
34
- Faraday.register_middleware :response, :raise_error => HelloSign::Middleware::RaiseError
34
+ Faraday.register_middleware :response, raise_error: HelloSign::Middleware::RaiseError
35
35
 
36
36
  end
37
37
  end
data/spec/helper.rb CHANGED
@@ -8,9 +8,7 @@ RSpec.configure do |config|
8
8
  end
9
9
 
10
10
  class Module
11
-
12
11
  def _set_internal_collaborator(role, collaborator)
13
12
  instance_variable_set("@#{role.to_s}", collaborator)
14
13
  end
15
-
16
14
  end
@@ -5,10 +5,10 @@ describe HelloSign do
5
5
  before { stub_post('/account/create') }
6
6
 
7
7
  it "sends an account creation request to the HelloSign API" do
8
- HelloSign.account.create(:email_address => 'david@bowman.com', :password => 'foobar')
8
+ HelloSign.account.create(email_address: 'david@bowman.com', password: 'foobar')
9
9
 
10
10
  expect(a_post('/account/create')
11
- .with(:body => {:email_address => 'david@bowman.com', :password => 'foobar'}))
11
+ .with(body: {email_address: 'david@bowman.com', password: 'foobar'}))
12
12
  .to have_been_made
13
13
  end
14
14
  end
@@ -27,10 +27,10 @@ describe HelloSign do
27
27
  before { stub_post_with_auth('/account') }
28
28
 
29
29
  it "sends an update account request to the HelloSign API" do
30
- HelloSign.account.settings.update(:callback_url => 'http://callmemaybe.com')
30
+ HelloSign.account.settings.update(callback_url: 'http://callmemaybe.com')
31
31
 
32
32
  expect(a_post_with_auth('/account')
33
- .with(:body => {:callback_url => 'http://callmemaybe.com'}))
33
+ .with(body: {callback_url: 'http://callmemaybe.com'}))
34
34
  .to have_been_made
35
35
  end
36
36
  end
@@ -3,10 +3,10 @@ require 'json'
3
3
 
4
4
  describe HelloSign do
5
5
  context "when returning a response with a body" do
6
- before { stub_get_with_auth('/json').to_return(:body => {:account_id => 1}.to_json) }
6
+ before { stub_get_with_auth('/json').to_return(body: {account_id: 1}.to_json) }
7
7
 
8
8
  it "parses the body into a hash with symbols as keys" do
9
- expect(HelloSign.client.get('/json')).to eq({:account_id => 1})
9
+ expect(HelloSign.client.get('/json')).to eq({account_id: 1})
10
10
  end
11
11
  end
12
12
 
@@ -3,6 +3,11 @@ require 'hello_sign'
3
3
  require 'webmock/rspec'
4
4
  require 'json'
5
5
 
6
+ if ENV['CI']
7
+ require 'coveralls'
8
+ Coveralls.wear!
9
+ end
10
+
6
11
  HelloSign.configure do |hs|
7
12
  hs.email_address = 'david@bowman.com'
8
13
  hs.password = 'foobar'
@@ -25,7 +30,7 @@ def stub_post_with_auth(path)
25
30
  end
26
31
 
27
32
  def stub_request_with_error(error)
28
- stub_request(:any, /api\.hellosign\.com/).to_return(:body => {:error => {:error_name => error}})
33
+ stub_request(:any, /api\.hellosign\.com/).to_return(body: {error: {error_name: error}})
29
34
  end
30
35
 
31
36
  def a_get(path)
@@ -2,49 +2,45 @@ require 'integration/helper'
2
2
 
3
3
  describe HelloSign do
4
4
  context "when getting a list of reusable forms" do
5
- before do
6
- stub_get_with_auth('/reusable_form/list')
7
- HelloSign.reusable_form.list
8
- end
5
+ before { stub_get_with_auth('/reusable_form/list') }
9
6
 
10
7
  it "fetches a list of reusable forms from the HelloSign API" do
8
+ HelloSign.reusable_form.list
9
+
11
10
  expect(a_get_with_auth('/reusable_form/list')).to have_been_made
12
11
  end
13
12
  end
14
13
 
15
14
  context "when fetching information about a reusable form" do
16
- before do
17
- stub_get_with_auth('/reusable_form/form_id')
18
- HelloSign.reusable_form.show('form_id')
19
- end
15
+ before { stub_get_with_auth('/reusable_form/form_id') }
20
16
 
21
17
  it "fetches the reusable form information from the HelloSign API" do
18
+ HelloSign.reusable_form('form_id').show
19
+
22
20
  expect(a_get_with_auth('/reusable_form/form_id')).to have_been_made
23
21
  end
24
22
  end
25
23
 
26
- context "when giving a user access to a reusable form" do
27
- before do
28
- stub_post_with_auth('/reusable_form/add_user/form_id')
29
- HelloSign.reusable_form.grant_access('form_id', :email_address => 'john@johnson.com')
30
- end
24
+ context "when granting user access to a reusable form" do
25
+ before { stub_post_with_auth('/reusable_form/add_user/form_id') }
31
26
 
32
27
  it "sends a request to grant form access to the HelloSign API" do
28
+ HelloSign.reusable_form('form_id').grant_access(email_address: 'john@johnson.com')
29
+
33
30
  expect(a_post_with_auth('/reusable_form/add_user/form_id')
34
- .with(:email_address => 'john@johnson.com')
31
+ .with(email_address: 'john@johnson.com')
35
32
  ).to have_been_made
36
33
  end
37
34
  end
38
35
 
39
- context "when taking away a user's access to a reusable form" do
40
- before do
41
- stub_post_with_auth('/reusable_form/remove_user/form_id')
42
- HelloSign.reusable_form.revoke_access('form_id', :email_address => 'john@johnson.com')
43
- end
36
+ context "when revoking user access to a reusable form" do
37
+ before { stub_post_with_auth('/reusable_form/remove_user/form_id') }
44
38
 
45
39
  it "sends a request to grant form access to the HelloSign API" do
40
+ HelloSign.reusable_form('form_id').revoke_access(email_address: 'john@johnson.com')
41
+
46
42
  expect(a_post_with_auth('/reusable_form/remove_user/form_id')
47
- .with(:email_address => 'john@johnson.com')
43
+ .with(email_address: 'john@johnson.com')
48
44
  ).to have_been_made
49
45
  end
50
46
  end