An open API service indexing awesome lists of open source software.

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

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.

[![Build Status](https://github.com/opti/panda_doc/actions/workflows/ci.yml/badge.svg)](https://github.com/opti/panda_doc/actions/workflows/ci.yml)
[![Maintainability](https://api.codeclimate.com/v1/badges/ab0b236ae2c499659214/maintainability)](https://codeclimate.com/github/opti/panda_doc/maintainability)
[![Test Coverage](https://api.codeclimate.com/v1/badges/ab0b236ae2c499659214/test_coverage)](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).