paperlex 0.9.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.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2011 Paperlex, LLC.
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,37 @@
1
+ = Paperlex
2
+
3
+ Read more at https://sandbox.api.paperlex.com.
4
+
5
+ require 'rubygems'
6
+ require 'paperlex'
7
+
8
+ Paperlex.token = "b53b0c15dce176b4"
9
+
10
+ templates = Paperlex::Slaw.all
11
+
12
+ nda_template = templates.first
13
+
14
+ contract = Paperlex::Contract.create({
15
+ :slaw_id => nda_template.uuid,
16
+ :subject => "My First NDA",
17
+ :number_of_signers => 2,
18
+ :responses => {
19
+ :party_a => "John Smith",
20
+ :party_b => "Jane Smith",
21
+ :party_a_address => "john_smith@example.com",
22
+ :party_b_address => "jane_smith@example.com",
23
+ :confidential_duration => "1 year"
24
+ }
25
+ })
26
+
27
+ contract.responses[:confidential_duration] = "2 years"
28
+ contract.responses[:state] = "New York"
29
+
30
+ contract.save_responses
31
+
32
+ contract.create_signer(:email => "john_smith@example.com")
33
+ contract.create_signer(:email => "jane_smith@example.com")
34
+
35
+ review_session = contract.create_review_session(:email => "john_smith@example.com", :expires_in => 172800)
36
+
37
+ puts "URL: #{review_session.url}"
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env rake
2
+
3
+ begin
4
+ require 'bundler/setup'
5
+ rescue LoadError
6
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
7
+ end
8
+
9
+ require 'rspec/core/rake_task'
10
+
11
+ RSpec::Core::RakeTask.new do |t|
12
+ t.pattern = "./spec/**/*_spec.rb"
13
+ end
14
+
15
+
16
+ begin
17
+ require 'rdoc/task'
18
+ rescue LoadError
19
+ require 'rdoc/rdoc'
20
+ require 'rake/rdoctask'
21
+ RDoc::Task = Rake::RDocTask
22
+ end
23
+
24
+ RDoc::Task.new(:rdoc) do |rdoc|
25
+ rdoc.rdoc_dir = 'rdoc'
26
+ rdoc.title = 'PaperlexApiClient'
27
+ rdoc.options << '--line-numbers'
28
+ rdoc.rdoc_files.include('README.rdoc')
29
+ rdoc.rdoc_files.include('lib/**/*.rb')
30
+ end
31
+
32
+ task :default => :spec
33
+
34
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,39 @@
1
+ module Paperlex
2
+ class Base < Hashie::Dash
3
+ property :uuid, :required => true
4
+
5
+ class << self
6
+ def parse(result)
7
+ if result == "null"
8
+ nil
9
+ else
10
+ JSON.parse(result)
11
+ end
12
+ end
13
+
14
+ def get(url, *attrs)
15
+ parse(RestClient.get("#{Paperlex.base_url}/#{url}?token=#{Paperlex.token}", *attrs))
16
+ end
17
+
18
+ def post(url, attrs = {})
19
+ parse(RestClient.post("#{Paperlex.base_url}/#{url}", attrs.merge(:token => Paperlex.token)))
20
+ end
21
+
22
+ def put(url, attrs = {})
23
+ parse(RestClient.put("#{Paperlex.base_url}/#{url}", attrs.merge(:token => Paperlex.token)))
24
+ end
25
+
26
+ def delete(url, attrs = {})
27
+ parse(RestClient.delete("#{Paperlex.base_url}/#{url}", attrs.merge(:token => Paperlex.token)))
28
+ end
29
+ end
30
+
31
+ def initialize(uuid, attrs = {})
32
+ super(uuid.is_a?(Hash) ? uuid.merge(attrs) : attrs.merge(:uuid => uuid))
33
+ end
34
+
35
+ def to_uuid(object)
36
+ object.respond_to?(:uuid) ? object.uuid : object
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,33 @@
1
+ module Paperlex
2
+ module RootObject
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ def collection_url
7
+ "#{url_name}.json"
8
+ end
9
+
10
+ def url_for(uuid)
11
+ "#{url_name}/#{uuid}.json"
12
+ end
13
+
14
+ def all
15
+ get(collection_url).map {|attrs| new(attrs) }
16
+ end
17
+
18
+ def find(uuid)
19
+ new(get(url_for(uuid)))
20
+ end
21
+ end
22
+
23
+ def to_html
24
+ RestClient.get(html_url(responses))
25
+ end
26
+
27
+ def save!(fields = nil)
28
+ fields ||= self.class.update_fields
29
+ self.class.put(self.class.url_for(uuid), short_name => Hash[fields.map {|field| [field, self[field]]}])
30
+ self
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,45 @@
1
+ module Paperlex
2
+ module SubObject
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ attr_reader :contract_uuid
7
+ end
8
+
9
+ module ClassMethods
10
+ def [](parent_uuid)
11
+ new(parent_uuid)
12
+ end
13
+ end
14
+
15
+ def initialize(contract_uuid)
16
+ @contract_uuid = contract_uuid
17
+ end
18
+
19
+ def new_object(attrs)
20
+ object_class.new(attrs.merge(:contract_uuid => contract_uuid))
21
+ end
22
+
23
+ def all
24
+ self.class.get(collection_url)
25
+ end
26
+
27
+ def create(attrs = {})
28
+ attrs.symbolize_keys!
29
+ attrs.assert_valid_keys(self.class.create_fields)
30
+ new_object(self.class.post(collection_url, short_name => attrs))
31
+ end
32
+
33
+ def find(uuid)
34
+ new_object(self.class.get(url_for(uuid)))
35
+ end
36
+
37
+ def update(uuid, attrs)
38
+ new_object(self.class.put(url_for(uuid), short_name => attrs))
39
+ end
40
+
41
+ def destroy(uuid)
42
+ self.class.delete(url_for(uuid))
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,47 @@
1
+ module Paperlex
2
+ class Contract < Base
3
+ class Responses < Base
4
+ attr_reader :contract_uuid
5
+
6
+ class << self
7
+ def [](contract_uuid)
8
+ new(contract_uuid)
9
+ end
10
+ end
11
+
12
+ def initialize(contract_uuid)
13
+ @contract_uuid = contract_uuid
14
+ end
15
+
16
+ def all
17
+ self.class.get(collection_url)
18
+ end
19
+
20
+ def update_all(responses)
21
+ self.class.post(collection_url, {:responses => responses})
22
+ end
23
+
24
+ def find(key)
25
+ self.class.get(url_for(key)).first
26
+ end
27
+
28
+ def update(key, value)
29
+ self.class.put(url_for(key), {:value => value})
30
+ end
31
+
32
+ def destroy(key)
33
+ self.class.delete(url_for(key))
34
+ end
35
+
36
+ private
37
+
38
+ def collection_url
39
+ "contracts/#{contract_uuid}/responses.json"
40
+ end
41
+
42
+ def url_for(key)
43
+ "contracts/#{contract_uuid}/responses/#{key}.json"
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,31 @@
1
+ module Paperlex
2
+ class Contract < Base
3
+ class ReviewSessions < Paperlex::Base
4
+ include SubObject
5
+
6
+ class << self
7
+ def create_fields
8
+ [:email, :expires_at, :expires_in]
9
+ end
10
+ end
11
+
12
+ def object_class
13
+ Paperlex::ReviewSession
14
+ end
15
+
16
+ def short_name
17
+ :review_session
18
+ end
19
+
20
+ private
21
+
22
+ def collection_url
23
+ "contracts/#{contract_uuid}/review_sessions.json"
24
+ end
25
+
26
+ def url_for(uuid)
27
+ "contracts/#{contract_uuid}/review_sessions/#{to_uuid(uuid)}.json"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,31 @@
1
+ module Paperlex
2
+ class Contract < Base
3
+ class Signers < Paperlex::Base
4
+ include SubObject
5
+
6
+ class << self
7
+ def create_fields
8
+ [:email]
9
+ end
10
+ end
11
+
12
+ def object_class
13
+ Paperlex::Signer
14
+ end
15
+
16
+ def short_name
17
+ :signer
18
+ end
19
+
20
+ private
21
+
22
+ def collection_url
23
+ "contracts/#{contract_uuid}/signers.json"
24
+ end
25
+
26
+ def url_for(uuid)
27
+ "contracts/#{contract_uuid}/signers/#{to_uuid(uuid)}.json"
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ module Paperlex
2
+ class Contract < Base
3
+ class Versions < Paperlex::Versions
4
+ def base
5
+ 'contracts'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,190 @@
1
+ module Paperlex
2
+ class Contract < Base
3
+ include RootObject
4
+
5
+ extend ActiveSupport::Autoload
6
+ autoload :Signers
7
+ autoload :Responses
8
+ autoload :ReviewSessions
9
+ autoload :Versions
10
+
11
+ # Provided by index
12
+ property :created_at
13
+ property :updated_at
14
+ property :subject
15
+
16
+ # Provided by show
17
+ property :body
18
+ property :current_version
19
+ property :locked
20
+ property :number_of_signers
21
+ property :number_of_identity_verifications
22
+ property :responses
23
+ property :signers
24
+ property :signatures
25
+ property :signature_callback_url
26
+ property :review_sessions
27
+
28
+ class << self
29
+ def update_fields
30
+ [:subject, :number_of_signers, :responses, :signature_callback_url, :body]
31
+ end
32
+
33
+ def create_fields
34
+ [*update_fields] << :slaw_id
35
+ end
36
+
37
+ def url_name
38
+ "contracts"
39
+ end
40
+
41
+ def create(attrs = {})
42
+ attrs.symbolize_keys!
43
+ signers = attrs.delete(:signers)
44
+ attrs.assert_valid_keys(create_fields)
45
+ result = new(post("contracts.json", :contract => attrs))
46
+ if signers.present?
47
+ signers.each do |email|
48
+ result.create_signer(:email => email)
49
+ end
50
+ end
51
+ result
52
+ end
53
+ end
54
+
55
+ def html_url
56
+ "#{Paperlex.base_url}/contracts/#{uuid}.html?#{{:token => Paperlex.token}.to_query}"
57
+ end
58
+
59
+ # Signers
60
+ def signers=(signers)
61
+ self[:signers] = signers.map {|signer| signer.is_a?(Paperlex::Signer) ? signer : Paperlex::Signer.new(signer.merge(:contract_uuid => uuid)) }
62
+ end
63
+
64
+ def create_signer(attrs = {})
65
+ signer = Signers[uuid].create(attrs)
66
+ self.signers << signer
67
+ signer
68
+ end
69
+
70
+ def fetch_signers
71
+ self.signers = Signers[uuid].all
72
+ signers
73
+ end
74
+
75
+ def fetch_signer(signer)
76
+ remove_signer!(signer)
77
+ new_signer = Signers[uuid].find(signer)
78
+ self.signers << new_signer
79
+ new_signer
80
+ end
81
+
82
+ def update_signer(signer, attrs)
83
+ remove_signer!(signer)
84
+ updated_signer = Signers[uuid].update(signer, attrs)
85
+ self.signers << updated_signer
86
+ updated_signer
87
+ end
88
+
89
+ def delete_signer(signer)
90
+ remove_signer!(signer)
91
+ Signers[uuid].destroy(signer)
92
+ end
93
+
94
+ # Review Sessions
95
+ def review_sessions=(review_sessions)
96
+ self[:review_sessions] = review_sessions.map {|session| session.is_a?(Paperlex::ReviewSession) ? session : Paperlex::ReviewSession.new(session.merge(:contract_uuid => uuid)) }
97
+ end
98
+
99
+ def review_sessions
100
+ self[:review_sessions] ||= []
101
+ end
102
+
103
+ def create_review_session(attrs = {})
104
+ session = ReviewSessions[uuid].create(attrs)
105
+ self.review_sessions << session
106
+ session
107
+ end
108
+
109
+ def fetch_review_sessions
110
+ self.review_sessions = ReviewSessions[uuid].all
111
+ review_sessions
112
+ end
113
+
114
+ def fetch_review_session(review_session_uuid)
115
+ remove_review_session!(review_session_uuid)
116
+ new_session = ReviewSessions[uuid].find(review_session_uuid)
117
+ self.review_sessions << new_session
118
+ new_session
119
+ end
120
+
121
+ def update_review_session(review_session_uuid, attrs)
122
+ remove_review_session!(review_session_uuid)
123
+ updated_session = ReviewSessions[uuid].update(review_session_uuid, attrs)
124
+ self.review_sessions << updated_session
125
+ updated_session
126
+ end
127
+
128
+ def delete_review_session(review_session_uuid)
129
+ remove_review_session!(review_session_uuid)
130
+ ReviewSessions[uuid].destroy(review_session_uuid)
131
+ end
132
+
133
+ # Versions
134
+ def versions
135
+ Versions[uuid].all.map {|version| Version.new(version) }
136
+ end
137
+
138
+ def at_version(version_index)
139
+ self.class.new(Versions[uuid].find(version_index))
140
+ end
141
+ alias_method :version_at, :at_version
142
+
143
+ def revert_to_version(version_index)
144
+ self.class.new(Versions[uuid].revert_to(version_index))
145
+ end
146
+
147
+ # Responses
148
+ def responses
149
+ self[:responses] ||= {}
150
+ end
151
+
152
+ def fetch_responses
153
+ self.responses = Responses[uuid].all
154
+ end
155
+
156
+ def fetch_response(key)
157
+ self.responses[key] = Responses[uuid].find(key)
158
+ end
159
+
160
+ def save_responses
161
+ Responses[uuid].update_all(responses)
162
+ end
163
+
164
+ def save_response(key)
165
+ Responses[uuid].update(key, responses[key])
166
+ end
167
+
168
+ def delete_response(key)
169
+ Responses[uuid].destroy(key)
170
+ self.responses.delete(key)
171
+ responses
172
+ end
173
+
174
+ private
175
+
176
+ def short_name
177
+ :contract
178
+ end
179
+
180
+ def remove_signer!(signer_to_remove)
181
+ signer_uuid = to_uuid(signer_to_remove)
182
+ signers.delete_if {|signer| signer['uuid'] == signer_uuid }
183
+ end
184
+
185
+ def remove_review_session!(review_session_to_remove)
186
+ review_session_uuid = to_uuid(review_session_to_remove)
187
+ review_sessions.delete_if {|review_session| review_session['uuid'] == review_session_uuid }
188
+ end
189
+ end
190
+ end
@@ -0,0 +1,9 @@
1
+ module Paperlex
2
+ class ReviewSession < Base
3
+ property :expires_at, :required => true
4
+ property :token, :required => true
5
+ property :url, :required => true
6
+ property :email, :required => true
7
+ property :contract_uuid, :required => true
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ module Paperlex
2
+ class Signer < Base
3
+ property :contract_uuid, :required => true
4
+ property :email, :required => true
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ module Paperlex
2
+ class Slaw < Base
3
+ class Versions < Paperlex::Versions
4
+ def base
5
+ 'slaws'
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,62 @@
1
+ module Paperlex
2
+ class Slaw < Base
3
+ include RootObject
4
+
5
+ extend ActiveSupport::Autoload
6
+ autoload :Versions
7
+
8
+ property :public
9
+ property :name
10
+ property :description
11
+ property :body
12
+ property :response_keys
13
+
14
+ class << self
15
+ def url_name
16
+ "slaws"
17
+ end
18
+
19
+ def update_fields
20
+ [:name, :body, :description]
21
+ end
22
+ alias :create_fields :update_fields
23
+
24
+ def create(attrs = {})
25
+ attrs.symbolize_keys!
26
+ attrs.assert_valid_keys(create_fields)
27
+ attrs = post(collection_url, :slaw => attrs)
28
+ new(attrs)
29
+ end
30
+ end
31
+
32
+ def html_url(responses)
33
+ params = {:token => Paperlex.token}
34
+ params[:responses] = responses if responses.present?
35
+ "#{Paperlex.base_url}/slaws/#{uuid}.html?#{params.to_query}"
36
+ end
37
+
38
+ def destroy
39
+ self.class.delete(self.class.url_for(uuid))
40
+ end
41
+
42
+ # Versions
43
+ def versions
44
+ Paperlex::Slaw::Versions[uuid].all.map {|version| Version.new(version) }
45
+ end
46
+
47
+ def at_version(version_index)
48
+ self.class.new(Paperlex::Slaw::Versions[uuid].find(version_index))
49
+ end
50
+ alias_method :version_at, :at_version
51
+
52
+ def revert_to_version(version_index)
53
+ self.class.new(Paperlex::Slaw::Versions[uuid].revert_to(version_index))
54
+ end
55
+
56
+ private
57
+
58
+ def short_name
59
+ :slaw
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,3 @@
1
+ module Paperlex
2
+ VERSION = "0.9.1"
3
+ end
@@ -0,0 +1,37 @@
1
+ module Paperlex
2
+ class Versions < Base
3
+ class << self
4
+ def [](uuid)
5
+ new(uuid)
6
+ end
7
+ end
8
+
9
+ attr_reader :uuid
10
+
11
+ def initialize(uuid)
12
+ @uuid = uuid
13
+ end
14
+
15
+ def all
16
+ self.class.get(collection_url)
17
+ end
18
+
19
+ def find(version_index)
20
+ self.class.get(url_for(version_index))
21
+ end
22
+
23
+ def revert_to(version_index)
24
+ self.class.post("#{base}/#{uuid}/versions/#{version_index}/revert.json")
25
+ end
26
+
27
+ private
28
+
29
+ def collection_url
30
+ "#{base}/#{uuid}/versions.json"
31
+ end
32
+
33
+ def url_for(version_index)
34
+ "#{base}/#{uuid}/versions/#{version_index}.json"
35
+ end
36
+ end
37
+ end
data/lib/paperlex.rb ADDED
@@ -0,0 +1,44 @@
1
+ require 'active_support/dependencies/autoload'
2
+ require 'active_support/concern'
3
+ require 'active_support/core_ext/module/delegation'
4
+ require 'active_support/core_ext/hash/keys'
5
+ require 'active_support/core_ext/object/to_query'
6
+ require 'active_support/core_ext/object/blank'
7
+ require 'hashie/dash'
8
+ require 'rest-client'
9
+ require 'json'
10
+ require 'configatron'
11
+
12
+ module Paperlex
13
+ extend ActiveSupport::Autoload
14
+
15
+ autoload_under 'base' do
16
+ autoload :Base
17
+ autoload :RootObject
18
+ autoload :SubObject
19
+ end
20
+ autoload :Contract
21
+ autoload :Slaw
22
+ autoload :ReviewSession
23
+ autoload :Signer
24
+ autoload :Versions
25
+
26
+ class Version < Hashie::Dash
27
+ property :version, :required => true
28
+ property :event, :required => true
29
+ end
30
+
31
+ SANDBOX_URL = 'https://sandbox.api.paperlex.com/v1'
32
+ LIVE_URL = 'https://api.paperlex.com/v1'
33
+
34
+ class << self
35
+ delegate :configure_from_hash, :base_url, :token, :base_url=, :token=, :to => :configatron
36
+
37
+ def live!
38
+ self.base_url = LIVE_URL
39
+ end
40
+ end
41
+
42
+ configatron.set_default(:base_url, SANDBOX_URL)
43
+ configatron.set_default(:token, nil)
44
+ end
@@ -0,0 +1 @@
1
+ require 'paperlex'
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :paperlex_api_client do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,153 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: paperlex
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Paperlex
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-30 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rest-client
16
+ requirement: &70306626911860 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70306626911860
25
+ - !ruby/object:Gem::Dependency
26
+ name: hashie
27
+ requirement: &70306626908260 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70306626908260
36
+ - !ruby/object:Gem::Dependency
37
+ name: json
38
+ requirement: &70306626907380 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70306626907380
47
+ - !ruby/object:Gem::Dependency
48
+ name: configatron
49
+ requirement: &70306626904780 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *70306626904780
58
+ - !ruby/object:Gem::Dependency
59
+ name: activesupport
60
+ requirement: &70306626903080 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: 3.0.0
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *70306626903080
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: &70306626901940 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70306626901940
80
+ - !ruby/object:Gem::Dependency
81
+ name: faker
82
+ requirement: &70306626900680 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70306626900680
91
+ - !ruby/object:Gem::Dependency
92
+ name: fakeweb
93
+ requirement: &70306626899580 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ type: :development
100
+ prerelease: false
101
+ version_requirements: *70306626899580
102
+ description: Dead-simple Legal Documents
103
+ email:
104
+ - api-help@paperlex.com
105
+ executables: []
106
+ extensions: []
107
+ extra_rdoc_files: []
108
+ files:
109
+ - lib/paperlex/base/base.rb
110
+ - lib/paperlex/base/root_object.rb
111
+ - lib/paperlex/base/sub_object.rb
112
+ - lib/paperlex/contract/responses.rb
113
+ - lib/paperlex/contract/review_sessions.rb
114
+ - lib/paperlex/contract/signers.rb
115
+ - lib/paperlex/contract/versions.rb
116
+ - lib/paperlex/contract.rb
117
+ - lib/paperlex/review_session.rb
118
+ - lib/paperlex/signer.rb
119
+ - lib/paperlex/slaw/versions.rb
120
+ - lib/paperlex/slaw.rb
121
+ - lib/paperlex/version.rb
122
+ - lib/paperlex/versions.rb
123
+ - lib/paperlex.rb
124
+ - lib/paperlex_api_client.rb
125
+ - lib/tasks/paperlex_api_client_tasks.rake
126
+ - MIT-LICENSE
127
+ - Rakefile
128
+ - README.rdoc
129
+ homepage: https://api.paperlex.com/
130
+ licenses: []
131
+ post_install_message:
132
+ rdoc_options: []
133
+ require_paths:
134
+ - lib
135
+ required_ruby_version: !ruby/object:Gem::Requirement
136
+ none: false
137
+ requirements:
138
+ - - ! '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ required_rubygems_version: !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
144
+ - - ! '>='
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ requirements: []
148
+ rubyforge_project:
149
+ rubygems_version: 1.8.10
150
+ signing_key:
151
+ specification_version: 3
152
+ summary: A Paperlex API client in Ruby
153
+ test_files: []