doc_raptor 0.1.6 → 0.2.0
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/Changelog.md +31 -0
- data/README.md +47 -36
- data/lib/doc_raptor.rb +86 -16
- metadata +4 -3
data/Changelog.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# DocRaptor gem Change Log
|
2
|
+
|
3
|
+
## doc_raptor 0.2.0
|
4
|
+
* tests!
|
5
|
+
* added a create! method which will raise an exception when doc creation fails
|
6
|
+
* added a list_docs! method which will raise an exception when doc listing fails
|
7
|
+
* added a status! method which will raise an exception when getting an async status fails
|
8
|
+
* added a download! method which will raise an exception when getting an async status fails
|
9
|
+
|
10
|
+
## doc_raptor 0.1.6
|
11
|
+
* allow the gem to be used outside of places with activesupport
|
12
|
+
|
13
|
+
## doc_raptor 0.1.5
|
14
|
+
* fix bug caused by activesupport safebuffers in rails ~3.0.6 and up
|
15
|
+
|
16
|
+
## doc_raptor 0.1.4
|
17
|
+
* add support for creating async jobs
|
18
|
+
|
19
|
+
## doc_raptor 0.1.3
|
20
|
+
* if a block is given to "create", make the value the block returns be the
|
21
|
+
value create returns
|
22
|
+
* add list_doc method, for the new api call to list created documents
|
23
|
+
|
24
|
+
## doc_raptor 0.1.2
|
25
|
+
* add support for the the document_url parameter to create
|
26
|
+
|
27
|
+
## doc_raptor 0.1.1
|
28
|
+
* reduce httparty requirement to 0.4.3
|
29
|
+
|
30
|
+
## doc_raptor 0.1
|
31
|
+
* Initial release
|
data/README.md
CHANGED
@@ -9,40 +9,54 @@ This is a Ruby gem providing a simple wrapper around the DocRaptor API. DocRapto
|
|
9
9
|
The gem will look for your api key in the ENV variable "DOCRAPTOR_API_KEY". If it is
|
10
10
|
not there, you can set it directly by calling:
|
11
11
|
|
12
|
-
|
12
|
+
```ruby
|
13
|
+
DocRaptor.api_key "My API Key Here"
|
14
|
+
```
|
13
15
|
|
14
|
-
Once an API key is set, you can create
|
16
|
+
Once an API key is set, you can create a PDF document by calling:
|
15
17
|
|
16
|
-
|
18
|
+
```ruby
|
19
|
+
DocRaptor.create(:document_content => content)
|
20
|
+
```
|
17
21
|
|
18
|
-
|
19
|
-
(or errors, if the request was not valid). You can pass in "pdf" or "xls" as the
|
20
|
-
:document_type - default is pdf. This determines the type of file that DocRaptor will create.
|
21
|
-
You can pass in true or false for :test - default is false - and this turns on or off
|
22
|
-
test mode for DocRaptor. You can pass in true or false for :async - default is false - and
|
23
|
-
this submits the document request to be processed asynchronously. If the document is processed
|
24
|
-
asynchronously, a status id will be returned as opposed to the contents of the document. You can
|
25
|
-
then use <METHOD NAME> to get the status of the document. You can pass in a URL to :callback_url
|
26
|
-
to be called once an asynchronous job is complete. It will be passed a value of "download_url"
|
27
|
-
which will contain a URL that when visited will provide you with your document. This option
|
28
|
-
does nothing if :async is not true. The only required parameter is :document_content, which
|
29
|
-
should be a string of html - this will be what DocRaptor turns into your document.
|
22
|
+
You might want to set other options in that hash:
|
30
23
|
|
31
|
-
|
24
|
+
* `:document_content` - a string containing the content for creating the document
|
25
|
+
* `:document_url` - a url to visit to get the content for creating the document
|
26
|
+
* `:document_type` - "pdf" or "xls"; controls the type of document generated; default is "pdf"
|
27
|
+
* `:name` - an identifier you can use for the document; shows up in doc logs; default is "default"
|
28
|
+
* `:test` - test mode flag; set to true to while doing testing so the docs won't count against your monthly count; default is false
|
29
|
+
* `:async` - create the document asynchonously; default is false
|
30
|
+
* `:callback_url` - a url that we will hit with a status once the asynchronous document has been fully processed
|
31
|
+
* `:prince_options` - see http://docraptor.com/documentation#pdf_options (PDFs only)
|
32
32
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
33
|
+
The only required parameter is one of `:document_content` or `:document_url`.
|
34
|
+
|
35
|
+
`create` will return an HTTParty response object, the body of which will be the new file (or errors, if the request was not valid).
|
36
|
+
|
37
|
+
`create!` will raise an exception instead of return errors if there is a failure of any sort in the document generation process. It otherwise works in the same way as `create`.
|
38
|
+
|
39
|
+
If the document is processed asynchronously, a status id will be returned as opposed to the contents of the document. You can then use <METHOD NAME> to get the status of the document. You can pass in a URL to `:callback_url` to be called once an asynchronous job is complete. It will be passed a value of `download_url` which will contain a URL that when visited will provide you with your document. This option does nothing if `:async` is not true.
|
40
|
+
|
41
|
+
The `create` call can also take a block, like so:
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
DocRaptor.create(:document_content => content) do |file, response|
|
45
|
+
#file is a tempfile holding the response body
|
46
|
+
#reponse is the HTTParty response object
|
47
|
+
end
|
48
|
+
```
|
37
49
|
|
38
50
|
To get the status of an async request, you can call:
|
39
|
-
|
40
|
-
# uses the id of the most recently created async job
|
41
|
-
DocRaptor.status
|
42
|
-
# query some other async job and make it the "active" async job for the DocRaptor class
|
43
|
-
DocRaptor.status(status_id)
|
44
51
|
|
45
|
-
|
52
|
+
```ruby
|
53
|
+
# uses the id of the most recently created async job
|
54
|
+
DocRaptor.status
|
55
|
+
# query some other async job and make it the "active" async job for the DocRaptor class
|
56
|
+
DocRaptor.status(status_id)
|
57
|
+
```
|
58
|
+
|
59
|
+
`status_id` is the value returned from `DocRaptor.create` when `:async` is true. If you have
|
46
60
|
just created a document, status_id defaults to the last status_id received from DocRaptor.
|
47
61
|
This will return a hash containing, at the very least, a key of "status" with a value of
|
48
62
|
one of the following: { "completed", "failed", "killed", "queued", "working" }. If the
|
@@ -60,17 +74,14 @@ for the failure to generate your document.
|
|
60
74
|
To download an async document, you can visit the URL (download_url) provided via the status
|
61
75
|
function or you can call:
|
62
76
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
77
|
+
```ruby
|
78
|
+
# uses the key of the most recently checked async job which is complete
|
79
|
+
DocRaptor.download
|
80
|
+
# use some other complete doc's download key
|
81
|
+
DocRaptor.download(download_key)
|
82
|
+
```
|
68
83
|
|
69
|
-
download_key is the value from the status hash of a call to DocRaptor.status of a
|
70
|
-
completed job. If you have just checked the status of a document and it is completed,
|
71
|
-
download_key defaults to that of the document you just checked. The download function
|
72
|
-
works like DocRaptor.create in that you get back either an HTTParty response object or
|
73
|
-
you can give it a block.
|
84
|
+
`download_key` is the value from the status hash of a call to DocRaptor.status of a completed job. If you have just checked the status of a document and it is completed, `download_key` defaults to that of the document you just checked. The download function works like DocRaptor.create in that you get back either an HTTParty response object or you can give it a block.
|
74
85
|
|
75
86
|
## Examples ###################################################################
|
76
87
|
Check the examples directory for some simple examples. To make them work, you will need to have the docraptor gem installed (via bundler or gem install).
|
data/lib/doc_raptor.rb
CHANGED
@@ -1,28 +1,66 @@
|
|
1
1
|
require "httparty"
|
2
2
|
require "tempfile"
|
3
3
|
|
4
|
+
module DocRaptorError
|
5
|
+
class NoApiKeyProvidedError < RuntimeError; end
|
6
|
+
class NoContentError < ArgumentError; end
|
7
|
+
end
|
8
|
+
|
9
|
+
module DocRaptorException
|
10
|
+
class DocRaptorRequestException < StandardError
|
11
|
+
attr_accessor :status_code
|
12
|
+
attr_accessor :message
|
13
|
+
def initialize(message, status_code)
|
14
|
+
self.message = message
|
15
|
+
self.status_code = status_code
|
16
|
+
super message
|
17
|
+
end
|
18
|
+
|
19
|
+
def to_s
|
20
|
+
"#{self.class.name}\nHTTP Status: #{status_code}\nReturned: #{message}"
|
21
|
+
end
|
22
|
+
|
23
|
+
def inspect
|
24
|
+
self.to_s
|
25
|
+
end
|
26
|
+
end
|
27
|
+
class DocumentCreationFailure < DocRaptorRequestException; end
|
28
|
+
class DocumentListingFailure < DocRaptorRequestException; end
|
29
|
+
class DocumentStatusFailure < DocRaptorRequestException; end
|
30
|
+
class DocumentDownloadFailure < DocRaptorRequestException; end
|
31
|
+
end
|
32
|
+
|
4
33
|
class DocRaptor
|
5
34
|
include HTTParty
|
6
35
|
|
7
36
|
def self.api_key(key = nil)
|
8
|
-
|
9
|
-
default_options[:api_key]
|
37
|
+
default_options[:api_key] = key ? key : default_options[:api_key] || ENV["DOCRAPTOR_API_KEY"]
|
38
|
+
default_options[:api_key] || raise(DocRaptorError::NoApiKeyProvidedError.new("No API key provided"))
|
39
|
+
end
|
40
|
+
|
41
|
+
def self.create!(options = {})
|
42
|
+
raise ArgumentError.new "please pass in an options hash" unless options.is_a? Hash
|
43
|
+
self.create(options.merge({:raise_exception_on_failure => true}))
|
10
44
|
end
|
11
45
|
|
12
46
|
# when given a block, hands the block a TempFile of the resulting document
|
13
47
|
# otherwise, just returns the response
|
14
48
|
def self.create(options = { })
|
49
|
+
raise ArgumentError.new "please pass in an options hash" unless options.is_a? Hash
|
15
50
|
if options[:document_content].blank? && options[:document_url].blank?
|
16
|
-
raise "must supply :document_content or :document_url"
|
51
|
+
raise DocRaptorError::NoContentError.new("must supply :document_content or :document_url")
|
17
52
|
end
|
18
|
-
|
53
|
+
|
19
54
|
default_options = {
|
20
|
-
:name
|
21
|
-
:document_type
|
22
|
-
:test
|
23
|
-
:async
|
55
|
+
:name => "default",
|
56
|
+
:document_type => "pdf",
|
57
|
+
:test => false,
|
58
|
+
:async => false,
|
59
|
+
:raise_exception_on_failure => false
|
24
60
|
}
|
25
61
|
options = default_options.merge(options)
|
62
|
+
raise_exception_on_failure = options[:raise_exception_on_failure]
|
63
|
+
options.delete :raise_exception_on_failure
|
26
64
|
|
27
65
|
query = { }
|
28
66
|
if options[:async]
|
@@ -41,6 +79,10 @@ class DocRaptor
|
|
41
79
|
|
42
80
|
response = post("/docs", :body => {:doc => options}, :basic_auth => { :username => api_key }, :query => query)
|
43
81
|
|
82
|
+
if raise_exception_on_failure && !response.success?
|
83
|
+
raise DocRaptorException::DocumentCreationFailure.new response.body, response.code
|
84
|
+
end
|
85
|
+
|
44
86
|
if block_given?
|
45
87
|
ret_val = nil
|
46
88
|
Tempfile.open("docraptor") do |f|
|
@@ -58,19 +100,40 @@ class DocRaptor
|
|
58
100
|
end
|
59
101
|
end
|
60
102
|
|
103
|
+
def self.list_docs!(options = { })
|
104
|
+
raise ArgumentError.new "please pass in an options hash" unless options.is_a? Hash
|
105
|
+
self.list_docs(options.merge({:raise_exception_on_failure => true}))
|
106
|
+
end
|
107
|
+
|
61
108
|
def self.list_docs(options = { })
|
109
|
+
raise ArgumentError.new "please pass in an options hash" unless options.is_a? Hash
|
62
110
|
default_options = {
|
63
111
|
:page => 1,
|
64
|
-
:per_page => 100
|
112
|
+
:per_page => 100,
|
113
|
+
:raise_exception_on_failure => false
|
65
114
|
}
|
66
115
|
options = default_options.merge(options)
|
67
|
-
|
68
|
-
|
116
|
+
raise_exception_on_failure = options[:raise_exception_on_failure]
|
117
|
+
options.delete :raise_exception_on_failure
|
118
|
+
|
119
|
+
response = get("/docs", :query => options, :basic_auth => { :username => api_key })
|
120
|
+
if raise_exception_on_failure && !response.success?
|
121
|
+
raise DocRaptorException::DocumentListingFailure.new response.body, response.code
|
122
|
+
end
|
123
|
+
response
|
69
124
|
end
|
70
|
-
|
71
|
-
def self.status(id = self.status_id)
|
125
|
+
|
126
|
+
def self.status!(id = self.status_id)
|
127
|
+
self.status(id, true)
|
128
|
+
end
|
129
|
+
|
130
|
+
def self.status(id = self.status_id, raise_exception_on_failure = false)
|
72
131
|
response = get("/status/#{id}", :basic_auth => { :username => api_key }, :output => 'json')
|
73
132
|
|
133
|
+
if raise_exception_on_failure && !response.success?
|
134
|
+
raise DocRaptorException::DocumentStatusFailure.new response.body, response.code
|
135
|
+
end
|
136
|
+
|
74
137
|
json = response.parsed_response
|
75
138
|
if json['status'] == 'completed'
|
76
139
|
self.download_key = json['download_url'].match(/.*?\/download\/(.+)/)[1]
|
@@ -79,8 +142,17 @@ class DocRaptor
|
|
79
142
|
json
|
80
143
|
end
|
81
144
|
|
82
|
-
def self.download(key = self.download_key)
|
145
|
+
def self.download!(key = self.download_key)
|
146
|
+
self.download(key, true)
|
147
|
+
end
|
148
|
+
|
149
|
+
def self.download(key = self.download_key, raise_exception_on_failure = false)
|
83
150
|
response = get("/download/#{key}")
|
151
|
+
|
152
|
+
if raise_exception_on_failure && !response.success?
|
153
|
+
raise DocRaptorException::DocumentDownloadFailure.new response.body, response.code
|
154
|
+
end
|
155
|
+
|
84
156
|
if block_given?
|
85
157
|
ret_val = nil
|
86
158
|
Tempfile.open("docraptor") do |f|
|
@@ -102,6 +174,4 @@ class DocRaptor
|
|
102
174
|
end
|
103
175
|
|
104
176
|
base_uri ENV["DOCRAPTOR_URL"] || "https://docraptor.com/"
|
105
|
-
api_key ENV["DOCRAPTOR_API_KEY"]
|
106
|
-
|
107
177
|
end
|
metadata
CHANGED
@@ -5,9 +5,9 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Kuehl
|
@@ -45,6 +45,7 @@ extensions: []
|
|
45
45
|
extra_rdoc_files: []
|
46
46
|
|
47
47
|
files:
|
48
|
+
- Changelog.md
|
48
49
|
- README.md
|
49
50
|
- MIT-LICENSE
|
50
51
|
- lib/doc_raptor.rb
|