egree 0.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/.rspec +3 -0
- data/.travis.yml +13 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +72 -0
- data/Rakefile +1 -0
- data/egree.gemspec +31 -0
- data/lib/egree.rb +8 -0
- data/lib/egree/case.rb +64 -0
- data/lib/egree/client.rb +103 -0
- data/lib/egree/document.rb +45 -0
- data/lib/egree/form_field.rb +3 -0
- data/lib/egree/party.rb +21 -0
- data/lib/egree/reference_id.rb +34 -0
- data/lib/egree/serializers/case.rb +22 -0
- data/lib/egree/serializers/document.rb +21 -0
- data/lib/egree/serializers/form_field.rb +16 -0
- data/lib/egree/serializers/party.rb +17 -0
- data/lib/egree/serializers/reference_id.rb +18 -0
- data/lib/egree/version.rb +3 -0
- data/spec/egree/case_spec.rb +74 -0
- data/spec/egree/client/create_case_spec.rb +62 -0
- data/spec/egree/client/get_case_url_spec.rb +84 -0
- data/spec/egree/client_spec.rb +125 -0
- data/spec/egree/document_spec.rb +73 -0
- data/spec/egree/form_field_spec.rb +18 -0
- data/spec/egree/party_spec.rb +35 -0
- data/spec/egree/reference_id_spec.rb +40 -0
- data/spec/egree/serializers/case_spec.rb +30 -0
- data/spec/egree/serializers/document_spec.rb +45 -0
- data/spec/egree/serializers/form_field_spec.rb +29 -0
- data/spec/egree/serializers/party_spec.rb +34 -0
- data/spec/egree/serializers/reference_id_spec.rb +28 -0
- data/spec/egree_spec.rb +17 -0
- data/spec/fixtures/agreement.pdf +0 -0
- data/spec/fixtures/cassettes/Egree_Client/_create_case/invalid_case.yml +58 -0
- data/spec/fixtures/cassettes/Egree_Client/_create_case/valid_case.yml +67 -0
- data/spec/fixtures/cassettes/Egree_Client/_create_case/with_an_invalid_case/includes_the_error_message.yml +66 -0
- data/spec/fixtures/cassettes/Egree_Client/_get_case_url/case_exists.yml +113 -0
- data/spec/fixtures/cassettes/Egree_Client/_get_case_url/case_missing.yml +45 -0
- data/spec/spec_helper.rb +38 -0
- metadata +219 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 287435d353b123633d8604c827611f484fe7cef5
|
4
|
+
data.tar.gz: 4f9c098c0618ba59e22f7fdb54e00675cb348384
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 35c1cf0ef2455e02360c8a1962981ab3f2319f27636450ed3c294f5c1d78f38ba1eb84f19bc3a9da3808259b1550ff3cfb30ae865aa600cb88dd09d789727222
|
7
|
+
data.tar.gz: b385eaa4872e5acafb3163ca74c5d692e7056725cbcaec488ded11794d882fd859eea601e24735aad13b71795d0c70eed3cc5f93039d124d242cc44d3918d16d
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 2.1.0
|
4
|
+
- 2.0.0
|
5
|
+
script: rspec spec
|
6
|
+
addons:
|
7
|
+
code_climate:
|
8
|
+
repo_token:
|
9
|
+
secure: Y3b1vSaq1qa9dMTbtftg1HzUrftWkx42F2yD/8ana0nUpg3b6xrvzx3LDiEPG1nLU4R7yk+KBr1dQH+skFl2LCJQpyfqwVvFhZz67S4a/8gQfYReTZDGJELMRP6HxbFbsSNisN11a3Kg3VIutBqyU9u1vSIMPx/o8ScvxVcAqHg=
|
10
|
+
env:
|
11
|
+
global:
|
12
|
+
- secure: CPu3hIqPCA4txUqh7aS90PR7hGURzyoqcMu0zJx4qvrtvzsI9eyEWKx7P8pXbvYUIgaGevw5GiWEMYH2axkH/74KMyAL9DsdpDA06aCxdZfs7iEaNfZY+l4MN3WCFb9WoLVL7fG+wqgvZXnV4RyLkn+W+vjdmvjY8RZ9G7/0HiE=
|
13
|
+
- secure: WG67hclm6kFtNQRKa/a5j2R79n4cTq7WrI+sCaxq5Nr5jvstdamaIOPtaenX7fIIakBYhX1wtGqOvlEjUzF8IpLi/fwDjn1Cb8DP8oyLhK1koeLZhegiGV3hEsne7RNiV1G8VMHfsGeJBUm2wvsWx4EdK60Ib4+ZLuw5WFMVlNg=
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 Joel Junström
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
[](https://travis-ci.org/joeljunstrom/egree-ruby)
|
2
|
+
[](https://codeclimate.com/github/joeljunstrom/egree-ruby)
|
3
|
+
|
4
|
+
# Egree
|
5
|
+
|
6
|
+
Ruby client for the [Egree API](https://app.egree.com/apiv1).
|
7
|
+
|
8
|
+
Currently the only supported actions is the `createcasecommand` and `getviewcaseurlquery`.
|
9
|
+
|
10
|
+
## Usage
|
11
|
+
|
12
|
+
### Creating a case
|
13
|
+
|
14
|
+
```
|
15
|
+
egree = Egree.client username, password
|
16
|
+
|
17
|
+
signature_case = Egree::Case.new "Agreement", ["touch"]
|
18
|
+
signature_case.add_party Egree::Party.new({
|
19
|
+
name: "First Last",
|
20
|
+
email: "name@example.com",
|
21
|
+
social_security_number: "1234567890"
|
22
|
+
})
|
23
|
+
signature_case.add_document Egree::Document.new "/some/path/file.pdf"
|
24
|
+
|
25
|
+
result = egree.create_case signature_case
|
26
|
+
|
27
|
+
if result.success?
|
28
|
+
puts "#{signature_case.reference_id} was created."
|
29
|
+
else
|
30
|
+
puts "There was some issues with the case"
|
31
|
+
result.errors.each do |error|
|
32
|
+
puts error
|
33
|
+
end
|
34
|
+
end
|
35
|
+
```
|
36
|
+
|
37
|
+
### Getting the signature url for a case
|
38
|
+
|
39
|
+
```
|
40
|
+
egree = Egree.client username, password
|
41
|
+
result = egree.get_case_url "98d08cf5-d35d-403b-ac31-fa1ac85037a1"
|
42
|
+
|
43
|
+
if result.success?
|
44
|
+
puts "The url is: #{result.response}"
|
45
|
+
else
|
46
|
+
puts "Could not get signature url"
|
47
|
+
result.errors.each do |error|
|
48
|
+
puts error
|
49
|
+
end
|
50
|
+
end
|
51
|
+
```
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
## Contributing
|
56
|
+
|
57
|
+
1. Fork it ( http://github.com/joeljunstrom/egree/fork )
|
58
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
59
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
60
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
61
|
+
5. Create new Pull Request
|
62
|
+
|
63
|
+
### Local development
|
64
|
+
|
65
|
+
Create a .env file in the root directory.
|
66
|
+
|
67
|
+
```
|
68
|
+
EGREE_USERNAME=your-username
|
69
|
+
EGREE_PASSWORD=your-password
|
70
|
+
```
|
71
|
+
|
72
|
+
This is used for the integration tests.
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/egree.gemspec
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'egree/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "egree"
|
8
|
+
spec.version = Egree::VERSION
|
9
|
+
spec.authors = ["Joel Junström"]
|
10
|
+
spec.email = ["joel.junstrom@oktavilla.se"]
|
11
|
+
spec.summary = %q{Client for the Egree API}
|
12
|
+
spec.homepage = "https://github.com/joeljunstrom/egree-ruby"
|
13
|
+
spec.license = "MIT"
|
14
|
+
|
15
|
+
spec.required_ruby_version = "~> 2.0"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_dependency "faraday", "~> 0.9.0"
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.5"
|
25
|
+
spec.add_development_dependency "dotenv", "~> 0.11.1"
|
26
|
+
spec.add_development_dependency "rake"
|
27
|
+
spec.add_development_dependency "rspec"
|
28
|
+
spec.add_development_dependency "webmock", "~> 1.18.0"
|
29
|
+
spec.add_development_dependency "vcr", "~> 2.9.2"
|
30
|
+
spec.add_development_dependency "luhn", "~> 0.1.1"
|
31
|
+
end
|
data/lib/egree.rb
ADDED
data/lib/egree/case.rb
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
require "egree/reference_id"
|
2
|
+
require "egree/serializers/case"
|
3
|
+
|
4
|
+
module Egree
|
5
|
+
class Case
|
6
|
+
def self.signature_types
|
7
|
+
[ "sms", "electronicId", "touch" ]
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.generate_reference_id
|
11
|
+
ReferenceId.generate
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader :name, :signature_types
|
15
|
+
|
16
|
+
def initialize name, signature_types
|
17
|
+
@name = name
|
18
|
+
self.signature_types = signature_types
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_writer :reference_id
|
22
|
+
|
23
|
+
def reference_id
|
24
|
+
@reference_id ||= self.class.generate_reference_id
|
25
|
+
end
|
26
|
+
|
27
|
+
def signature_types= signature_types
|
28
|
+
types = Array(signature_types)
|
29
|
+
|
30
|
+
unknown_types = types - Case.signature_types
|
31
|
+
if unknown_types.any?
|
32
|
+
raise unknown_signature_type_error(unknown_types)
|
33
|
+
end
|
34
|
+
|
35
|
+
@signature_types = types
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_party party
|
39
|
+
self.parties << party
|
40
|
+
end
|
41
|
+
|
42
|
+
def parties
|
43
|
+
@parties ||= []
|
44
|
+
end
|
45
|
+
|
46
|
+
def add_document document
|
47
|
+
self.documents << document
|
48
|
+
end
|
49
|
+
|
50
|
+
def documents
|
51
|
+
@documents ||= []
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_json
|
55
|
+
Serializers::Case.serialize self
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def unknown_signature_type_error types
|
61
|
+
ArgumentError.new("Unknown signature types: #{types.join(", ")}. Valid types are: #{Case.signature_types.join(", ")}")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/egree/client.rb
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
require "json"
|
2
|
+
require "faraday"
|
3
|
+
|
4
|
+
module Egree
|
5
|
+
class Client
|
6
|
+
attr_reader :username, :password
|
7
|
+
|
8
|
+
attr_accessor :environment
|
9
|
+
|
10
|
+
def initialize username, password, environment = :production
|
11
|
+
@username = username
|
12
|
+
@password = password
|
13
|
+
self.environment = environment
|
14
|
+
end
|
15
|
+
|
16
|
+
def create_case signature_case
|
17
|
+
post "/apiv1/createcasecommand", signature_case.to_json
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_case_url reference_id
|
21
|
+
post "/apiv1/getviewcaseurlquery", reference_id.to_json
|
22
|
+
end
|
23
|
+
|
24
|
+
def post api_command, body = nil
|
25
|
+
response = make_post api_command, body
|
26
|
+
|
27
|
+
if response.success?
|
28
|
+
SuccessResult.new parse_success_response(response.body)
|
29
|
+
else
|
30
|
+
ErrorResult.new parse_error_response(response.body)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def host
|
35
|
+
hosts.fetch(self.environment, hosts[:production])
|
36
|
+
end
|
37
|
+
|
38
|
+
def connection
|
39
|
+
Faraday.new "https://#{host}" do |conn|
|
40
|
+
conn.adapter :net_http
|
41
|
+
conn.headers["Accept"] = "application/json"
|
42
|
+
conn.basic_auth username, password
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def headers
|
47
|
+
connection.headers
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def make_post url, body
|
53
|
+
connection.post do |request|
|
54
|
+
request.url url
|
55
|
+
request.headers["Content-Type"] = "application/json; charset=utf-8"
|
56
|
+
request.body = body if body
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def parse_success_response body
|
61
|
+
begin
|
62
|
+
JSON.parse body
|
63
|
+
rescue JSON::ParserError
|
64
|
+
body
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def parse_error_response body
|
69
|
+
body.scan(/<p>(.*?)<\/p>/).flatten
|
70
|
+
end
|
71
|
+
|
72
|
+
def hosts
|
73
|
+
{
|
74
|
+
production: "app.egree.com",
|
75
|
+
test: "test.underskrift.se"
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
class SuccessResult
|
80
|
+
attr_reader :response
|
81
|
+
|
82
|
+
def initialize response
|
83
|
+
@response = response
|
84
|
+
end
|
85
|
+
|
86
|
+
def success?
|
87
|
+
true
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
class ErrorResult
|
92
|
+
attr_reader :errors
|
93
|
+
|
94
|
+
def initialize errors = []
|
95
|
+
@errors = Array(errors)
|
96
|
+
end
|
97
|
+
|
98
|
+
def success?
|
99
|
+
false
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require "open-uri"
|
2
|
+
|
3
|
+
module Egree
|
4
|
+
class Document
|
5
|
+
attr_reader :path
|
6
|
+
|
7
|
+
def initialize path
|
8
|
+
@path = path
|
9
|
+
end
|
10
|
+
|
11
|
+
def filename
|
12
|
+
File.basename path
|
13
|
+
end
|
14
|
+
|
15
|
+
def size
|
16
|
+
file.size
|
17
|
+
end
|
18
|
+
|
19
|
+
def content_type
|
20
|
+
"application/pdf"
|
21
|
+
end
|
22
|
+
|
23
|
+
def data
|
24
|
+
Base64.encode64 file_contents
|
25
|
+
end
|
26
|
+
|
27
|
+
def add_form_field form_field
|
28
|
+
self.form_fields << form_field
|
29
|
+
end
|
30
|
+
|
31
|
+
def form_fields
|
32
|
+
@form_fields ||= []
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def file_contents
|
38
|
+
file.read
|
39
|
+
end
|
40
|
+
|
41
|
+
def file
|
42
|
+
open path
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/egree/party.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module Egree
|
2
|
+
class Party
|
3
|
+
attr_accessor :name, :email
|
4
|
+
attr_reader :social_security_number
|
5
|
+
|
6
|
+
def self.new_with_attributes attributes = {}
|
7
|
+
party = self.new
|
8
|
+
|
9
|
+
attributes.each do |name, value|
|
10
|
+
assignment_method_name = "#{name}="
|
11
|
+
party.public_send(assignment_method_name, value) if party.respond_to?(assignment_method_name)
|
12
|
+
end
|
13
|
+
|
14
|
+
party
|
15
|
+
end
|
16
|
+
|
17
|
+
def social_security_number= social_security_number
|
18
|
+
@social_security_number = social_security_number.to_s.gsub(/\D/, "")
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require "securerandom"
|
2
|
+
require "egree/serializers/reference_id"
|
3
|
+
|
4
|
+
module Egree
|
5
|
+
class ReferenceId
|
6
|
+
include Comparable
|
7
|
+
|
8
|
+
def self.generate
|
9
|
+
new SecureRandom.uuid
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :id
|
13
|
+
|
14
|
+
def initialize id
|
15
|
+
@id = id
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_s
|
19
|
+
id.to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_json
|
23
|
+
Serializers::ReferenceId.serialize self
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_api_hash
|
27
|
+
Serializers::ReferenceId.to_api_hash self
|
28
|
+
end
|
29
|
+
|
30
|
+
def <=> other
|
31
|
+
other.is_a?(self.class) && self.id <=> other.id
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|