https://github.com/opti/panda_doc
Ruby wrapper for PandaDoc.com API
https://github.com/opti/panda_doc
api-client ruby wrapper
Last synced: 8 months ago
JSON representation
Ruby wrapper for PandaDoc.com API
- Host: GitHub
- URL: https://github.com/opti/panda_doc
- Owner: opti
- License: mit
- Created: 2016-02-03T20:03:17.000Z (about 10 years ago)
- Default Branch: main
- Last Pushed: 2025-07-26T17:14:05.000Z (9 months ago)
- Last Synced: 2025-09-01T05:58:35.326Z (8 months ago)
- Topics: api-client, ruby, wrapper
- Language: Ruby
- Size: 170 KB
- Stars: 11
- Watchers: 2
- Forks: 19
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# PandaDoc
PandaDoc gem is a simple wrapper for PandaDoc.com API. Please check the official
API [documenation](https://developers.pandadoc.com) for more details.
[](https://github.com/opti/panda_doc/actions/workflows/ci.yml)
[](https://codeclimate.com/github/opti/panda_doc/maintainability)
[](https://codeclimate.com/github/opti/panda_doc/test_coverage)
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'panda_doc'
```
And then execute:
$ bundle
Or install it yourself as:
$ gem install panda_doc
## Configuration
Both [API-Key](https://developers.pandadoc.com/reference#api-key-authentication-process) and [oAuth2.0 access token](https://developers.pandadoc.com/reference#authentication-process) authentications are supported.
```ruby
PandaDoc.configure do |config|
config.api_key = "api key"
end
```
```ruby
PandaDoc.configure do |config|
config.access_token = "an access token"
end
```
## Usage
Every response wrapped into a ruby object with values coerced in corresponding types.
#### Creating a document
```ruby
document = PandaDoc::Document.create(
name: "Sample Document",
url: "url_to_a_document",
recipients: [
{
email: "john.appleseed@yourdomain.com",
first_name: "John",
last_name: "Appleseed",
role: "Signer",
default: false
}
],
fields: {
field_id: {
title: "Field 1"
}
}
)
document.uuid # => "oovHPtkwDqEAvaKmdud"
document.name # => "Sample Document"
document.status # => "uploaded"
document.created_at # => #
document.updated_at # => #
```
#### Creating a document from attached file ([API](https://developers.pandadoc.com/reference#create-document-from-pdf))
```ruby
file = UploadIO.new("/path/to/file.pdf", "application/pdf")
document = PandaDoc::Document.create(
name: "Sample Document",
file: file,
recipients: [
{
email: "john.appleseed@yourdomain.com",
first_name: "John",
last_name: "Appleseed",
role: "Signer",
default: false
}
],
fields: {
field_id: {
title: "Field 1"
}
}
)
```
#### Creating a document from a template ([API](https://developers.pandadoc.com/reference#create-document-from-pandadoc-template))
```ruby
document = PandaDoc::Document.create(
name: "Sample Document",
template_uuid: "uuid_of_the_template",
recipients: [
{
email: "john.appleseed@yourdomain.com",
first_name: "John",
last_name: "Appleseed",
role: "Signer",
default: false
}
],
tokens: [
{ name: "Token.Name", value: "Token Value" },
{ name: "Token.AnotherName", value: "2021" }
],
fields: {
field_id: {
value: "Field 1"
}
}
)
```
#### Getting a document status ([API](https://developers.pandadoc.com/reference#document-status))
```ruby
document = PandaDoc::Document.find("UUID")
document.status # => "draft"
document.updated_at # =>
```
#### Getting a document details ([API](https://developers.pandadoc.com/reference#document-details))
```ruby
document = PandaDoc::Document.details("UUID")
document.tokens
=> [#,
#]
document.fields
=> [#]
```
#### Sending a document ([API](https://developers.pandadoc.com/reference#send-document))
```ruby
PandaDoc::Document.send("UUID", message: "A message to include into the email")
```
#### Creating a View Session
```ruby
session = PandaDoc::Document.session("UUID",
recipient: "john.applessed@yourdoamin.com",
lifetime: 300
)
session.id # => "adssdAvyDXBS"
session.expires_at # => #
```
#### Downloading a document ([API](https://developers.pandadoc.com/reference#download-document))
```ruby
response = PandaDoc::Document.download("uuid")
file = File.open("document.pdf", "w") do |f|
response.body
end
```
#### Listing document sections ([API](https://developers.pandadoc.com/reference/document-sections-info))
```ruby
sections = PandaDoc::DocumentSection.list("document_uuid")
sections.results.each do |section|
puts section.uuid
puts section.name
puts section.status
end
```
#### Creating a document section ([API](https://developers.pandadoc.com/reference/create-document-section))
```ruby
section = PandaDoc::DocumentSection.create(
"document_uuid",
name: "Section Name",
file: file
)
section.uuid # => "section_uuid"
section.name # => "Section Name"
section.status # => "uploaded"
```
#### Deleting a document section ([API](https://developers.pandadoc.com/reference/delete-section))
```ruby
PandaDoc::DocumentSection.delete("document_uuid", "section_uuid")
```
#### Error handling
If an error occurs during an API request it will be wrapped into a plain ruby
object as well.
```ruby
begin
PandaDoc::Document.create(name: "Sample Document")
rescue PandaDoc::FailureResult => e
puts e.detail
puts e.response
end
```
#### Debugging
You can configure a logger if you need to debug your requests/responses
```ruby
require 'logger'
PandaDoc.configure do |config|
config.logger = Logger.new(STDOUT)
end
```
## Development
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/opti/panda_doc.
1. Fork it ( https://github.com/opti/panda_doc/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request
## License
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).