hello_sign 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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