inkdit 1.0.0 → 1.1.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.
- data/lib/inkdit.rb +18 -0
- data/lib/inkdit/client.rb +3 -1
- data/lib/inkdit/contract.rb +4 -2
- data/lib/inkdit/entity.rb +2 -0
- data/lib/inkdit/signature.rb +3 -1
- data/lib/inkdit/signature_field.rb +36 -0
- data/lib/inkdit/version.rb +1 -1
- data/script/get_access_token.rb +9 -0
- data/spec/contract_spec.rb +27 -3
- metadata +12 -12
data/lib/inkdit.rb
CHANGED
@@ -61,4 +61,22 @@ module Inkdit
|
|
61
61
|
|
62
62
|
# an exception that's raised when a request fails due to an invalid access token
|
63
63
|
class Unauthorized < Exception; end
|
64
|
+
|
65
|
+
# a generic exception raised when an request fails for any other reason
|
66
|
+
class Error < Exception
|
67
|
+
attr_reader :response
|
68
|
+
|
69
|
+
def initialize(response)
|
70
|
+
@response = response
|
71
|
+
super()
|
72
|
+
end
|
73
|
+
|
74
|
+
def message
|
75
|
+
"response.status=#{response.status} response.body=#{response.body.inspect}"
|
76
|
+
end
|
77
|
+
|
78
|
+
def inspect
|
79
|
+
"#<#{self.class.inspect} #{self.message}>"
|
80
|
+
end
|
81
|
+
end
|
64
82
|
end
|
data/lib/inkdit/client.rb
CHANGED
@@ -74,7 +74,9 @@ module Inkdit
|
|
74
74
|
# raises {Inkdit::Unauthorized} if the response indicates an invalid access token.
|
75
75
|
# @return [OAuth2::Response]
|
76
76
|
def checked_response(response)
|
77
|
-
if response.status == 401 and
|
77
|
+
if response.status == 401 and
|
78
|
+
response.headers['www-authenticate'] and
|
79
|
+
response.headers['www-authenticate'].match /invalid_token/
|
78
80
|
# wrong access token or the user rescinded the app's access.
|
79
81
|
# TODO: properly parse the header
|
80
82
|
# Bearer realm="api.inkdit.com", error="invalid_token"
|
data/lib/inkdit/contract.rb
CHANGED
@@ -12,6 +12,8 @@ module Inkdit
|
|
12
12
|
# @return [Contract] contract the newly created contract
|
13
13
|
def self.create(client, owner, params)
|
14
14
|
response = client.post owner.contracts_link, { :body => params.to_json, :headers => { 'Content-Type' => 'application/json' } }
|
15
|
+
raise Inkdit::Error.new(response) unless response.status == 201
|
16
|
+
|
15
17
|
self.new(client, response.parsed)
|
16
18
|
end
|
17
19
|
|
@@ -55,8 +57,8 @@ module Inkdit
|
|
55
57
|
end
|
56
58
|
end
|
57
59
|
|
58
|
-
# @param [
|
59
|
-
# @param [
|
60
|
+
# @param [String] individual the url of an individual who should be connected to the contract
|
61
|
+
# @param [String] entity the url of an entity that the individual should be connected to the contract through
|
60
62
|
def share_with(individual, entity)
|
61
63
|
params = {
|
62
64
|
:individual => {
|
data/lib/inkdit/entity.rb
CHANGED
@@ -25,6 +25,8 @@ module Inkdit
|
|
25
25
|
# @return [Array<Contract>] the contracts in this entity's Contract Collection
|
26
26
|
def get_contracts
|
27
27
|
response = @client.get(contracts_link)
|
28
|
+
raise Inkdit::Error.new(response) unless response.status == 200
|
29
|
+
|
28
30
|
response.parsed['resources'].map do |contract_params|
|
29
31
|
Contract.new @client, contract_params
|
30
32
|
end
|
data/lib/inkdit/signature.rb
CHANGED
@@ -13,7 +13,9 @@ module Inkdit
|
|
13
13
|
|
14
14
|
# @return [Entity] the entity this field was signed on behalf of
|
15
15
|
def on_behalf_of
|
16
|
-
|
16
|
+
if @params['on_behalf_of']
|
17
|
+
Inkdit::Entity.new(@client, @params['on_behalf_of'])
|
18
|
+
end
|
17
19
|
end
|
18
20
|
|
19
21
|
# @return [Time] when this field was signed
|
@@ -12,6 +12,10 @@ module Inkdit
|
|
12
12
|
@params['url']
|
13
13
|
end
|
14
14
|
|
15
|
+
def designation_url
|
16
|
+
@params['links']['designation']
|
17
|
+
end
|
18
|
+
|
15
19
|
# sign this field as the user and entity associated with the current access token.
|
16
20
|
# @return [Signature] the newly-created signature
|
17
21
|
def sign!
|
@@ -21,9 +25,41 @@ module Inkdit
|
|
21
25
|
|
22
26
|
response = @client.put self.url, { :body => params.to_json, :headers => { 'Content-Type' => 'application/json' } }
|
23
27
|
|
28
|
+
if response.status != 201
|
29
|
+
raise Inkdit::Error.new(response)
|
30
|
+
end
|
31
|
+
|
24
32
|
Inkdit::Signature.new(@client, response.parsed)
|
25
33
|
end
|
26
34
|
|
35
|
+
# +params+ is a Hash specifying who this signature field should be
|
36
|
+
# designated to.
|
37
|
+
# It must contain the key +individual+.
|
38
|
+
# It can contain the key +organization+ if a specific organization
|
39
|
+
# is being designated.
|
40
|
+
#
|
41
|
+
# , and +organization+. At least one
|
42
|
+
# should be present. They should be [Entity]s
|
43
|
+
def designate(params)
|
44
|
+
params = {
|
45
|
+
:individual => { :url => params[:individual].url }
|
46
|
+
}
|
47
|
+
|
48
|
+
params[:entity] = if params[:organization]
|
49
|
+
{ :url => params[:organization].url }
|
50
|
+
else
|
51
|
+
params[:individual]
|
52
|
+
end
|
53
|
+
|
54
|
+
response = @client.put self.designation_url, { :body => params.to_json, :headers => { 'Content-Type' => 'application/json' } }
|
55
|
+
|
56
|
+
if response.status != 200
|
57
|
+
raise Inkdit::Error.new(response)
|
58
|
+
end
|
59
|
+
|
60
|
+
Inkdit::SignatureField.new(@client, @contract, response.parsed)
|
61
|
+
end
|
62
|
+
|
27
63
|
def inspect
|
28
64
|
"#<#{self.class.inspect} params=#{@params}>"
|
29
65
|
end
|
data/lib/inkdit/version.rb
CHANGED
data/script/get_access_token.rb
CHANGED
@@ -35,6 +35,15 @@ get '/get-auth-code' do
|
|
35
35
|
end
|
36
36
|
|
37
37
|
get '/got-auth-code' do
|
38
|
+
if params[:error]
|
39
|
+
return <<END
|
40
|
+
<p>Uh-oh, we ran into a problem!</p>
|
41
|
+
|
42
|
+
<p>Error: <code>#{params[:error]}</code></p>
|
43
|
+
<p>Description: #{params[:error_description]}</p>
|
44
|
+
END
|
45
|
+
end
|
46
|
+
|
38
47
|
auth_code = params[:code]
|
39
48
|
|
40
49
|
@access_token = Inkdit.get_token(params[:code], url('/got-auth-code'))
|
data/spec/contract_spec.rb
CHANGED
@@ -40,11 +40,35 @@ describe Inkdit::Contract do
|
|
40
40
|
contract.signatures.length.should == 1
|
41
41
|
signature_field = contract.signatures.first
|
42
42
|
|
43
|
+
designated_line = signature_field.designate :individual => entity
|
44
|
+
|
43
45
|
signature = signature_field.sign!
|
44
46
|
|
45
|
-
signature.signed_by.should
|
46
|
-
|
47
|
+
signature.signed_by.should == entity
|
48
|
+
|
49
|
+
if entity.type == 'individual'
|
50
|
+
signature.on_behalf_of.should be_nil
|
51
|
+
else
|
52
|
+
signature.on_behalf_of.should == entity
|
53
|
+
end
|
47
54
|
end
|
48
55
|
|
49
|
-
pending '
|
56
|
+
pending 'allows you to share a contract (this is tough to do because it requires an entity URL)' do
|
57
|
+
entity = @client.get_entity
|
58
|
+
|
59
|
+
contract_name = "API Test #{Time.now.iso8601}"
|
60
|
+
|
61
|
+
params = {
|
62
|
+
:name => contract_name,
|
63
|
+
:content => "I agree etc. etc. etc.\n##signature##",
|
64
|
+
:test => true
|
65
|
+
}
|
66
|
+
|
67
|
+
contract = Inkdit::Contract.create @client, entity, params
|
68
|
+
|
69
|
+
# this shouldn't actually return a response but whatevs.
|
70
|
+
response = contract.share_with(SOME_OTHER_USER, SOME_OTHER_USER)
|
71
|
+
|
72
|
+
response.status.should == 201
|
73
|
+
end
|
50
74
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: inkdit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-05-15 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: oauth2
|
16
|
-
requirement: &
|
16
|
+
requirement: &21202900 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *21202900
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: yard
|
27
|
-
requirement: &
|
27
|
+
requirement: &21200800 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *21200800
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &20798500 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *20798500
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: sinatra
|
49
|
-
requirement: &
|
49
|
+
requirement: &20793340 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *20793340
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: haml
|
60
|
-
requirement: &
|
60
|
+
requirement: &20819320 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *20819320
|
69
69
|
description: ! 'A library for using the Inkdit API to sign, share and store contracts.
|
70
70
|
|
71
71
|
|