pandadoc-api 0.1.3 → 0.1.4
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 +5 -5
- data/lib/pandadoc/api.rb +2 -0
- data/lib/pandadoc/api/client.rb +31 -0
- data/lib/pandadoc/api/document.rb +13 -64
- data/lib/pandadoc/api/params_validator.rb +49 -0
- data/lib/pandadoc/api/template.rb +7 -24
- data/lib/pandadoc/api/version.rb +1 -1
- data/pandadoc-api.gemspec +1 -0
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 10a86d130a08c5c79a6c1b02d152b4f2d754cfc8
|
4
|
+
data.tar.gz: 465fce230f81e9fa134f7e20d09f39987d10371f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b87a992ae237c8e433defdddb2fea5e2796cab50c6332aad3b63356df51a0d27421eaa841d3e3f14bf26e65e20042067a49bcdfedee8c6af4612da62c07e2c16
|
7
|
+
data.tar.gz: eecc463b78d67bf4d21441eb42b2a06149f0a12df8e58cdf030f0bc37f9403e6a53c079bc84b66e07ca30c16453efdd53fdea1cd1c00b54ad17e4e18b0833c72
|
data/lib/pandadoc/api.rb
CHANGED
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
module Pandadoc
|
4
|
+
module Api
|
5
|
+
class Client
|
6
|
+
def get(path, token, params = {})
|
7
|
+
uri = build_uri(path)
|
8
|
+
HTTParty.get(uri, headers: default_headers(token), query: params)
|
9
|
+
end
|
10
|
+
|
11
|
+
def post_json(path, token, params = {})
|
12
|
+
uri = build_uri(path)
|
13
|
+
headers = default_headers(token).merge('Content-Type' => 'application/json')
|
14
|
+
|
15
|
+
HTTParty.post(uri, headers: headers, body: params.to_json)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def default_headers(token)
|
21
|
+
{
|
22
|
+
'Authorization' => "Bearer #{token}"
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
def build_uri(path)
|
27
|
+
File.join(Pandadoc::Api::API_ROOT, path)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -1,31 +1,3 @@
|
|
1
|
-
require 'httparty'
|
2
|
-
|
3
|
-
class RequiredParameterError < StandardError
|
4
|
-
attr_reader :parameter
|
5
|
-
|
6
|
-
def initialize(message, parameter)
|
7
|
-
# Call the parent's constructor to set the message
|
8
|
-
super(message)
|
9
|
-
|
10
|
-
# Store the action in an instance variable
|
11
|
-
@parameter = parameter
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class ParameterTypeError < StandardError
|
16
|
-
attr_reader :received
|
17
|
-
attr_reader :requested
|
18
|
-
|
19
|
-
def initialize(message, received, requested)
|
20
|
-
# Call the parent's constructor to set the message
|
21
|
-
super(message)
|
22
|
-
|
23
|
-
# Store the action in an instance variable
|
24
|
-
@received = received
|
25
|
-
@requested = requested
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
1
|
module Pandadoc
|
30
2
|
module Api
|
31
3
|
class Document
|
@@ -52,9 +24,7 @@ module Pandadoc
|
|
52
24
|
metadata: { required: false, type: Hash }
|
53
25
|
}
|
54
26
|
|
55
|
-
|
56
|
-
headers: { 'Authorization' => auth_header(token) },
|
57
|
-
query: validated_params(params, validations))
|
27
|
+
client.get '/documents', token, validated_params(params, validations)
|
58
28
|
end
|
59
29
|
|
60
30
|
def create(token, params = {})
|
@@ -62,25 +32,21 @@ module Pandadoc
|
|
62
32
|
name: { required: true, type: String },
|
63
33
|
template_uuid: { required: true, type: String },
|
64
34
|
recipients: { required: true, type: Array },
|
65
|
-
tokens: { required: false, type:
|
35
|
+
tokens: { required: false, type: Array },
|
66
36
|
fields: { required: false, type: Hash },
|
67
37
|
metadata: { required: false, type: Hash },
|
68
38
|
pricing_tables: { required: false, type: Array }
|
69
39
|
}
|
70
40
|
|
71
|
-
|
72
|
-
headers: { 'Authorization' => auth_header(token), 'Content-Type': 'application/json' },
|
73
|
-
body: validated_params(params, validations).to_json)
|
41
|
+
client.post_json '/documents', token, validated_params(params, validations)
|
74
42
|
end
|
75
43
|
|
76
44
|
def status(token, document_id)
|
77
|
-
|
78
|
-
headers: { 'Authorization' => auth_header(token) })
|
45
|
+
client.get "/documents/#{document_id}", token
|
79
46
|
end
|
80
47
|
|
81
48
|
def details(token, document_id)
|
82
|
-
|
83
|
-
headers: { 'Authorization' => auth_header(token) })
|
49
|
+
client.get "/documents/#{document_id}/details", token
|
84
50
|
end
|
85
51
|
|
86
52
|
# send is already a Ruby thing, overriding it would be bad
|
@@ -90,9 +56,7 @@ module Pandadoc
|
|
90
56
|
silent: { required: false, type: [TrueClass, FalseClass] }
|
91
57
|
}
|
92
58
|
|
93
|
-
|
94
|
-
headers: { 'Authorization' => auth_header(token), 'Content-Type': 'application/json' },
|
95
|
-
body: validated_params(params, validations))
|
59
|
+
client.post_json "/documents/#{document_id}/send", token, validated_params(params, validations)
|
96
60
|
end
|
97
61
|
|
98
62
|
def link(token, document_id, params = {})
|
@@ -101,9 +65,7 @@ module Pandadoc
|
|
101
65
|
lifetime: { required: false, type: Integer }
|
102
66
|
}
|
103
67
|
|
104
|
-
response =
|
105
|
-
headers: { 'Authorization' => auth_header(token), 'Content-Type': 'application/json' },
|
106
|
-
body: validated_params(params, validations))
|
68
|
+
response = client.post_json "/documents/#{document_id}/session", token, validated_params(params, validations)
|
107
69
|
|
108
70
|
json_response = JSON.parse(response.body, symbolize_names: true)
|
109
71
|
session_id = json_response[:id]
|
@@ -112,30 +74,17 @@ module Pandadoc
|
|
112
74
|
end
|
113
75
|
|
114
76
|
def download(token, document_id)
|
115
|
-
|
116
|
-
headers: { 'Authorization' => auth_header(token) })
|
77
|
+
client.get "/documents/#{document_id}/download", token
|
117
78
|
end
|
118
79
|
|
119
|
-
|
120
|
-
|
80
|
+
private
|
81
|
+
|
82
|
+
def client
|
83
|
+
@client ||= Pandadoc::Api::Client.new
|
121
84
|
end
|
122
85
|
|
123
86
|
def validated_params(params, validations)
|
124
|
-
|
125
|
-
valid_params = params.keep_if { |key| valid_keys.include? key }
|
126
|
-
|
127
|
-
validations.each_pair do |key, validators|
|
128
|
-
if validators[:required] == true && valid_params[key].nil?
|
129
|
-
raise RequiredParameterError.new('Missing required parameter', key)
|
130
|
-
end
|
131
|
-
|
132
|
-
validators_type_array = validators[:type].is_a?(Array) ? validators[:type] : [validators[:type]]
|
133
|
-
if valid_params[key] && !validators_type_array.include?(valid_params[key].class)
|
134
|
-
raise ParameterTypeError.new("Invalid parameter type, received #{valid_params[key].class} requested #{validators[:type]}", valid_params[:key].class, validators[:type])
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
valid_params
|
87
|
+
Pandadoc::Api::ParamsValidator.validate(params, validations)
|
139
88
|
end
|
140
89
|
end
|
141
90
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Pandadoc
|
2
|
+
module Api
|
3
|
+
class ParamsValidator
|
4
|
+
class RequiredParameterError < StandardError
|
5
|
+
attr_reader :parameter
|
6
|
+
|
7
|
+
def initialize(message, parameter)
|
8
|
+
# Call the parent's constructor to set the message
|
9
|
+
super(message)
|
10
|
+
|
11
|
+
# Store the action in an instance variable
|
12
|
+
@parameter = parameter
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class ParameterTypeError < StandardError
|
17
|
+
attr_reader :received
|
18
|
+
attr_reader :requested
|
19
|
+
|
20
|
+
def initialize(message, received, requested)
|
21
|
+
# Call the parent's constructor to set the message
|
22
|
+
super(message)
|
23
|
+
|
24
|
+
# Store the action in an instance variable
|
25
|
+
@received = received
|
26
|
+
@requested = requested
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.validate(params, validations)
|
31
|
+
valid_keys = validations.keys
|
32
|
+
valid_params = params.keep_if { |key| valid_keys.include? key }
|
33
|
+
|
34
|
+
validations.each_pair do |key, validators|
|
35
|
+
if validators[:required] == true && valid_params[key].nil?
|
36
|
+
raise RequiredParameterError.new('Missing required parameter', key)
|
37
|
+
end
|
38
|
+
|
39
|
+
validators_type_array = validators[:type].is_a?(Array) ? validators[:type] : [validators[:type]]
|
40
|
+
if valid_params[key] && !validators_type_array.include?(valid_params[key].class)
|
41
|
+
raise ParameterTypeError.new("Invalid parameter type, received #{valid_params[key].class} requested #{validators[:type]}", valid_params[:key].class, validators[:type])
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
valid_params
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'httparty'
|
2
|
-
|
3
1
|
module Pandadoc
|
4
2
|
module Api
|
5
3
|
class Template
|
@@ -11,36 +9,21 @@ module Pandadoc
|
|
11
9
|
page: { required: false, type: Integer }
|
12
10
|
}
|
13
11
|
|
14
|
-
|
15
|
-
headers: { 'Authorization' => auth_header(token) },
|
16
|
-
query: validated_params(params, validations))
|
12
|
+
client.get '/templates', token, validated_params(params, validations)
|
17
13
|
end
|
18
14
|
|
19
15
|
def details(token, template_id)
|
20
|
-
|
21
|
-
headers: { 'Authorization' => auth_header(token) })
|
16
|
+
client.get "/templates/#{template_id}/details", token
|
22
17
|
end
|
23
18
|
|
24
|
-
|
25
|
-
"Bearer #{token}"
|
26
|
-
end
|
19
|
+
private
|
27
20
|
|
28
21
|
def validated_params(params, validations)
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
validations.each_pair do |key, validators|
|
33
|
-
if validators[:required] == true && valid_params[key].nil?
|
34
|
-
raise RequiredParameterError.new('Missing required parameter', key)
|
35
|
-
end
|
36
|
-
|
37
|
-
validators_type_array = validators[:type].is_a?(Array) ? validators[:type] : [validators[:type]]
|
38
|
-
if valid_params[key] && !validators_type_array.include?(valid_params[key].class)
|
39
|
-
raise ParameterTypeError.new("Invalid parameter type, received #{valid_params[key].class} requested #{validators[:type]}", valid_params[:key].class, validators[:type])
|
40
|
-
end
|
41
|
-
end
|
22
|
+
Pandadoc::Api::ParamsValidator.validate(params, validations)
|
23
|
+
end
|
42
24
|
|
43
|
-
|
25
|
+
def client
|
26
|
+
@client ||= Pandadoc::Api::Client.new
|
44
27
|
end
|
45
28
|
end
|
46
29
|
end
|
data/lib/pandadoc/api/version.rb
CHANGED
data/pandadoc-api.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pandadoc-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Carey
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-11-07 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -95,6 +95,20 @@ dependencies:
|
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
97
|
version: '3.4'
|
98
|
+
- !ruby/object:Gem::Dependency
|
99
|
+
name: pry
|
100
|
+
requirement: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
type: :development
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
98
112
|
description: Ruby API Wrapper for the PandaDoc API
|
99
113
|
email:
|
100
114
|
- mike@catchandrelease.com
|
@@ -114,7 +128,9 @@ files:
|
|
114
128
|
- bin/console
|
115
129
|
- bin/setup
|
116
130
|
- lib/pandadoc/api.rb
|
131
|
+
- lib/pandadoc/api/client.rb
|
117
132
|
- lib/pandadoc/api/document.rb
|
133
|
+
- lib/pandadoc/api/params_validator.rb
|
118
134
|
- lib/pandadoc/api/template.rb
|
119
135
|
- lib/pandadoc/api/version.rb
|
120
136
|
- pandadoc-api.gemspec
|
@@ -138,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
154
|
version: '0'
|
139
155
|
requirements: []
|
140
156
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.
|
157
|
+
rubygems_version: 2.6.13
|
142
158
|
signing_key:
|
143
159
|
specification_version: 4
|
144
160
|
summary: Ruby API Wrapper for the PandaDoc API
|