hello_sign 0.0.2 → 0.0.3
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.
- data/lib/hello_sign.rb +1 -1
- data/lib/hello_sign/account_proxy.rb +18 -7
- data/lib/hello_sign/client.rb +33 -5
- data/lib/hello_sign/settings.rb +19 -0
- data/lib/hello_sign/version.rb +1 -1
- data/spec/helper.rb +0 -3
- data/spec/integration/account_spec.rb +27 -2
- data/spec/integration/hello_sign_spec.rb +11 -0
- data/spec/integration/helper.rb +39 -0
- data/spec/unit/account_proxy_spec.rb +59 -0
- data/spec/unit/client_spec.rb +38 -0
- data/spec/unit/hello_sign_spec.rb +40 -0
- data/spec/unit/settings_spec.rb +36 -0
- metadata +27 -5
- data/lib/hello_sign/account.rb +0 -13
- data/spec/unit/account_spec.rb +0 -7
data/lib/hello_sign.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
|
-
require 'hello_sign/
|
1
|
+
require 'hello_sign/settings'
|
2
2
|
|
3
3
|
module HelloSign
|
4
4
|
class AccountProxy
|
5
|
+
attr_reader :client
|
6
|
+
|
7
|
+
def initialize(client)
|
8
|
+
@client = client
|
9
|
+
end
|
5
10
|
|
6
11
|
def create(credentials)
|
7
12
|
email = credentials.fetch(:email)
|
@@ -9,17 +14,23 @@ module HelloSign
|
|
9
14
|
|
10
15
|
create_account(email, password)
|
11
16
|
|
12
|
-
|
17
|
+
true
|
13
18
|
end
|
14
19
|
|
15
|
-
|
20
|
+
def settings
|
21
|
+
settings = client.get('/account')
|
16
22
|
|
17
|
-
|
18
|
-
client.post('/v3/account/create', {:email_address => email, :password => password})
|
23
|
+
Settings.new(settings, client)
|
19
24
|
end
|
20
25
|
|
21
|
-
|
22
|
-
|
26
|
+
private
|
27
|
+
|
28
|
+
def create_account(email, password)
|
29
|
+
client.post(
|
30
|
+
'/account/create',
|
31
|
+
:body => {:email_address => email, :password => password},
|
32
|
+
:unauthenticated => true
|
33
|
+
)
|
23
34
|
end
|
24
35
|
|
25
36
|
end
|
data/lib/hello_sign/client.rb
CHANGED
@@ -1,26 +1,54 @@
|
|
1
1
|
require 'faraday'
|
2
|
+
require 'faraday_middleware-multi_json'
|
2
3
|
|
3
4
|
module HelloSign
|
4
5
|
class Client
|
6
|
+
API_ENDPOINT = 'https://api.hellosign.com'
|
7
|
+
API_VERSION = '/v3'
|
8
|
+
|
5
9
|
attr_reader :email, :password
|
10
|
+
attr_writer :connection
|
6
11
|
|
7
12
|
def initialize(email, password)
|
8
13
|
@email = email
|
9
14
|
@password = password
|
10
15
|
end
|
11
16
|
|
12
|
-
def
|
13
|
-
|
17
|
+
def get(path, options = {})
|
18
|
+
request(:get, path, options)
|
19
|
+
end
|
20
|
+
|
21
|
+
def post(path, options = {})
|
22
|
+
request(:post, path, options)
|
14
23
|
end
|
15
24
|
|
16
25
|
private
|
17
26
|
|
18
|
-
def
|
19
|
-
|
20
|
-
|
27
|
+
def request(method, path, options)
|
28
|
+
connection = options[:unauthenticated] ? unauth_connection : auth_connection
|
29
|
+
request = connection.send(method) do |request|
|
30
|
+
request.path = "#{API_VERSION}#{path}"
|
31
|
+
request.body = options[:body]
|
32
|
+
end
|
33
|
+
|
34
|
+
request.body
|
35
|
+
end
|
36
|
+
|
37
|
+
def unauth_connection(&auth)
|
38
|
+
Faraday.new(:url => API_ENDPOINT) do |faraday|
|
39
|
+
faraday.request :url_encoded
|
40
|
+
faraday.response :logger
|
41
|
+
faraday.response :multi_json, :symbolize_keys => true
|
42
|
+
auth.call(faraday) if block_given?
|
21
43
|
faraday.adapter Faraday.default_adapter
|
22
44
|
end
|
23
45
|
end
|
24
46
|
|
47
|
+
def auth_connection
|
48
|
+
unauth_connection do |faraday|
|
49
|
+
faraday.request :basic_auth, email, password
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
25
53
|
end
|
26
54
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'hello_sign/client'
|
2
|
+
|
3
|
+
module HelloSign
|
4
|
+
class Settings
|
5
|
+
attr_reader :attributes, :client
|
6
|
+
|
7
|
+
def initialize(attributes, client)
|
8
|
+
@attributes = attributes
|
9
|
+
@client = client
|
10
|
+
end
|
11
|
+
|
12
|
+
def update(attributes)
|
13
|
+
client.post('/account', :body => attributes)
|
14
|
+
|
15
|
+
true
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
data/lib/hello_sign/version.rb
CHANGED
data/spec/helper.rb
CHANGED
@@ -3,14 +3,39 @@ require 'integration/helper'
|
|
3
3
|
describe HelloSign do
|
4
4
|
context "when creating an account" do
|
5
5
|
before do
|
6
|
-
|
6
|
+
stub_post('/account/create')
|
7
7
|
HelloSign.account.create(:email => 'david@bowman.com', :password => 'foobar')
|
8
8
|
end
|
9
9
|
|
10
10
|
it "sends an account creation request to the HelloSign API" do
|
11
|
-
expect(
|
11
|
+
expect(a_post('/account/create')
|
12
12
|
.with(:body => {:email_address => 'david@bowman.com', :password => 'foobar'}))
|
13
13
|
.to have_been_made
|
14
14
|
end
|
15
15
|
end
|
16
|
+
|
17
|
+
context "when accessing an account's settings" do
|
18
|
+
before do
|
19
|
+
stub_get_with_auth('/account')
|
20
|
+
@settings = HelloSign.account.settings
|
21
|
+
end
|
22
|
+
|
23
|
+
it "fetches the account's settings from the HelloSign API" do
|
24
|
+
expect(a_get_with_auth('/account')).to have_been_made
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when updating an account's settings" do
|
29
|
+
before do
|
30
|
+
stub_get_with_auth('/account')
|
31
|
+
stub_post_with_auth('/account')
|
32
|
+
HelloSign.account.settings.update(:callback_url => 'http://callmemaybe.com')
|
33
|
+
end
|
34
|
+
|
35
|
+
it "sends an update account request to the HelloSign API" do
|
36
|
+
expect(a_post_with_auth('/account')
|
37
|
+
.with(:body => {:callback_url => 'http://callmemaybe.com'}))
|
38
|
+
.to have_been_made
|
39
|
+
end
|
40
|
+
end
|
16
41
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'integration/helper'
|
2
|
+
|
3
|
+
describe HelloSign do
|
4
|
+
context "when returning a response with a body" do
|
5
|
+
before { stub_get('/json').to_return(:body => {:account_id => 1}.to_json) }
|
6
|
+
|
7
|
+
it "renders it as JSON" do
|
8
|
+
expect(HelloSign.client.get('/json', :unauthenticated => true)).to eq({:account_id => 1})
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/spec/integration/helper.rb
CHANGED
@@ -1,2 +1,41 @@
|
|
1
1
|
require 'helper'
|
2
|
+
require 'hello_sign'
|
2
3
|
require 'webmock/rspec'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
HelloSign.configure do |hs|
|
7
|
+
hs.email = 'david@bowman.com'
|
8
|
+
hs.password = 'foobar'
|
9
|
+
end
|
10
|
+
|
11
|
+
def stub_get(path)
|
12
|
+
stub_request(:get, "https://api.hellosign.com/v3#{path}")
|
13
|
+
end
|
14
|
+
|
15
|
+
def stub_post(path)
|
16
|
+
stub_request(:post, "https://api.hellosign.com/v3#{path}")
|
17
|
+
end
|
18
|
+
|
19
|
+
def stub_get_with_auth(path)
|
20
|
+
stub_request(:get, "https://david@bowman.com:foobar@api.hellosign.com/v3#{path}")
|
21
|
+
end
|
22
|
+
|
23
|
+
def stub_post_with_auth(path)
|
24
|
+
stub_request(:post, "https://david@bowman.com:foobar@api.hellosign.com/v3#{path}")
|
25
|
+
end
|
26
|
+
|
27
|
+
def a_get(path)
|
28
|
+
a_request(:get, "https://api.hellosign.com/v3#{path}")
|
29
|
+
end
|
30
|
+
|
31
|
+
def a_post(path)
|
32
|
+
a_request(:post, "https://api.hellosign.com/v3#{path}")
|
33
|
+
end
|
34
|
+
|
35
|
+
def a_get_with_auth(path)
|
36
|
+
a_request(:get, "https://david@bowman.com:foobar@api.hellosign.com/v3#{path}")
|
37
|
+
end
|
38
|
+
|
39
|
+
def a_post_with_auth(path)
|
40
|
+
a_request(:post, "https://david@bowman.com:foobar@api.hellosign.com/v3#{path}")
|
41
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'hello_sign/account_proxy'
|
3
|
+
|
4
|
+
describe HelloSign::AccountProxy do
|
5
|
+
let(:client) { double('client') }
|
6
|
+
subject(:account_proxy) { HelloSign::AccountProxy.new(client) }
|
7
|
+
|
8
|
+
describe "#client" do
|
9
|
+
it "returns the client" do
|
10
|
+
expect(account_proxy.client).to be client
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#create" do
|
15
|
+
context "when passed the proper parameters" do
|
16
|
+
before { client.stub(:post) }
|
17
|
+
|
18
|
+
it "sends an account creation request" do
|
19
|
+
client.should_receive(:post)
|
20
|
+
.with(
|
21
|
+
'/account/create',
|
22
|
+
:body => {:email_address => 'david@bowman.com', :password => 'space'},
|
23
|
+
:unauthenticated => true
|
24
|
+
)
|
25
|
+
account_proxy.create(:email => 'david@bowman.com', :password => 'space')
|
26
|
+
end
|
27
|
+
|
28
|
+
it "returns true" do
|
29
|
+
expect(account_proxy.create(:email => 'david@bowman.com', :password => 'space')). to be true
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when not passed the proper parameters" do
|
34
|
+
it "raises an exception" do
|
35
|
+
expect { account_proxy.create(:email => 'david@bowman.com') }.to raise_error
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "#settings" do
|
41
|
+
let(:settings) { double('settings') }
|
42
|
+
|
43
|
+
before { client.stub(:get).and_return(settings) }
|
44
|
+
|
45
|
+
it "sends a request to fetch the account's settings" do
|
46
|
+
client.should_receive(:get).with('/account')
|
47
|
+
account_proxy.settings
|
48
|
+
end
|
49
|
+
|
50
|
+
it "creates an account object" do
|
51
|
+
HelloSign::Settings.should_receive(:new).with(settings, client)
|
52
|
+
account_proxy.settings
|
53
|
+
end
|
54
|
+
|
55
|
+
it "returns an account object" do
|
56
|
+
expect(account_proxy.settings).to be_a HelloSign::Settings
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'json'
|
3
|
+
require 'hello_sign/client'
|
4
|
+
|
5
|
+
describe HelloSign::Client do
|
6
|
+
let(:connection) { double('connection') }
|
7
|
+
subject(:client) { HelloSign::Client.new('david@bowman.com', 'space') }
|
8
|
+
|
9
|
+
before { client.connection = connection }
|
10
|
+
|
11
|
+
describe "#email" do
|
12
|
+
it "returns the email address" do
|
13
|
+
expect(client.email).to eq 'david@bowman.com'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "#password" do
|
18
|
+
it "returns the password" do
|
19
|
+
expect(client.password).to eq 'space'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
describe "#get" do
|
24
|
+
before { subject.should_receive(:request).with(:get, 'path', {:options => {}}) }
|
25
|
+
|
26
|
+
it "makes a GET request" do
|
27
|
+
subject.get('path', :options => {})
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "#post" do
|
32
|
+
before { subject.should_receive(:request).with(:post, 'path', {:options => {}}) }
|
33
|
+
|
34
|
+
it "makes a POST request" do
|
35
|
+
subject.post('path', :options => {})
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'helper'
|
2
|
+
require 'hello_sign'
|
2
3
|
|
3
4
|
describe HelloSign do
|
4
5
|
describe "::account" do
|
@@ -6,4 +7,43 @@ describe HelloSign do
|
|
6
7
|
expect(HelloSign.account).to be_a HelloSign::AccountProxy
|
7
8
|
end
|
8
9
|
end
|
10
|
+
|
11
|
+
describe "::client" do
|
12
|
+
context "when it has not previously been called" do
|
13
|
+
it "returns a new client" do
|
14
|
+
expect(HelloSign.client).to be_a HelloSign::Client
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
context "when it has previously been called" do
|
19
|
+
it "returns the same client" do
|
20
|
+
client = HelloSign.client
|
21
|
+
expect(HelloSign.client).to be client
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "::configure" do
|
27
|
+
it "yields itself to the block" do
|
28
|
+
HelloSign.configure do |hs|
|
29
|
+
expect(hs).to be HelloSign
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "::email" do
|
35
|
+
it "sets and returns the email address" do
|
36
|
+
HelloSign.email = 'hal@jupiter.com'
|
37
|
+
|
38
|
+
expect(HelloSign.email).to eq 'hal@jupiter.com'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "::password" do
|
43
|
+
it "sets and returns the password" do
|
44
|
+
HelloSign.password = 'human_domination'
|
45
|
+
|
46
|
+
expect(HelloSign.password).to eq 'human_domination'
|
47
|
+
end
|
48
|
+
end
|
9
49
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'hello_sign/settings'
|
3
|
+
|
4
|
+
describe HelloSign::Settings do
|
5
|
+
let(:attributes) { double('attributes') }
|
6
|
+
let(:client) { double('client') }
|
7
|
+
subject(:settings) { HelloSign::Settings.new(attributes, client) }
|
8
|
+
|
9
|
+
describe "#attributes" do
|
10
|
+
it "returns the attributes" do
|
11
|
+
expect(settings.attributes).to eq attributes
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#client" do
|
16
|
+
it "returns the client" do
|
17
|
+
expect(settings.client).to eq client
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#update" do
|
22
|
+
let(:callback_url) { 'http://www.callmemaybe.com' }
|
23
|
+
|
24
|
+
before { client.stub(:post) }
|
25
|
+
|
26
|
+
it "sends a request to update the account's settings" do
|
27
|
+
client.should_receive(:post)
|
28
|
+
.with('/account', :body => {:callback_url => callback_url})
|
29
|
+
settings.update(:callback_url => callback_url)
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns true" do
|
33
|
+
expect(settings.update(:callback_url => callback_url)).to be true
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hello_sign
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01-
|
12
|
+
date: 2013-01-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: faraday
|
@@ -27,6 +27,22 @@ dependencies:
|
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: 0.8.4
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: faraday_middleware-multi_json
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 0.0.5
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.0.5
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
47
|
name: rspec
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,16 +82,19 @@ executables: []
|
|
66
82
|
extensions: []
|
67
83
|
extra_rdoc_files: []
|
68
84
|
files:
|
69
|
-
- lib/hello_sign/account.rb
|
70
85
|
- lib/hello_sign/account_proxy.rb
|
71
86
|
- lib/hello_sign/client.rb
|
87
|
+
- lib/hello_sign/settings.rb
|
72
88
|
- lib/hello_sign/version.rb
|
73
89
|
- lib/hello_sign.rb
|
74
90
|
- spec/helper.rb
|
75
91
|
- spec/integration/account_spec.rb
|
92
|
+
- spec/integration/hello_sign_spec.rb
|
76
93
|
- spec/integration/helper.rb
|
77
|
-
- spec/unit/
|
94
|
+
- spec/unit/account_proxy_spec.rb
|
95
|
+
- spec/unit/client_spec.rb
|
78
96
|
- spec/unit/hello_sign_spec.rb
|
97
|
+
- spec/unit/settings_spec.rb
|
79
98
|
homepage: http://www.github.com/craiglittle/hello_sign
|
80
99
|
licenses: []
|
81
100
|
post_install_message:
|
@@ -103,6 +122,9 @@ summary: A Ruby interface to the HelloSign API.
|
|
103
122
|
test_files:
|
104
123
|
- spec/helper.rb
|
105
124
|
- spec/integration/account_spec.rb
|
125
|
+
- spec/integration/hello_sign_spec.rb
|
106
126
|
- spec/integration/helper.rb
|
107
|
-
- spec/unit/
|
127
|
+
- spec/unit/account_proxy_spec.rb
|
128
|
+
- spec/unit/client_spec.rb
|
108
129
|
- spec/unit/hello_sign_spec.rb
|
130
|
+
- spec/unit/settings_spec.rb
|
data/lib/hello_sign/account.rb
DELETED