Module: DocmagoClient

Defined in:
lib/docmago_client.rb,
lib/docmago_client/error.rb,
lib/docmago_client/railtie.rb,
lib/docmago_client/version.rb,
lib/docmago_client/exception.rb,
lib/docmago_client/html_resource_archiver.rb

Defined Under Namespace

Modules: Error, Exception Classes: HTMLResourceArchiver, Railtie

Constant Summary collapse

VERSION =
'0.6.0'.freeze

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.api_keyObject



25
26
27
# File 'lib/docmago_client.rb', line 25

def api_key
  @api_key || ENV['DOCMAGO_API_KEY']
end

.base_uriObject



21
22
23
# File 'lib/docmago_client.rb', line 21

def base_uri
  @base_uri || ENV['DOCMAGO_URL'] || 'https://docmago.com/api'
end

.loggerObject



17
18
19
# File 'lib/docmago_client.rb', line 17

def logger
  @logger ||= Logger.new($stdout)
end

Class Method Details

.create(options = {}) ⇒ Object

when given a block, hands the block a TempFile of the resulting document otherwise, just returns the response

Raises:

  • (ArgumentError)


32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/docmago_client.rb', line 32

def self.create(options = {})
  raise ArgumentError, 'please pass in an options hash' unless options.is_a? Hash
  if options[:content].nil? || options[:content].empty?
    raise DocmagoClient::Error::NoContentError.new, 'must supply :content'
  end

  default_options = {
    name: 'default',
    type: 'pdf',
    integrity_check: true
  }

  options = default_options.merge(options)

  if options[:zip_resources]
    tmp_dir = Dir.mktmpdir
    begin
      resource_archiver = HTMLResourceArchiver.new(options)
      options[:content] = File.new(resource_archiver.create_zip("#{tmp_dir}/document.zip"))
      options.delete :assets

      response = Typhoeus.post "#{base_uri}/documents", body: {
        auth_token: api_key,
        document: options.slice(:content, :name, :type, :test_mode)
      }
    ensure
      FileUtils.remove_entry_secure tmp_dir
    end
  else
    response = Typhoeus.post "#{base_uri}/documents", body: {
      auth_token: api_key,
      document: options.slice(:content, :name, :type, :test_mode)
    }
  end

  if options[:integrity_check] && response.headers['X-Docmago-Checksum'] != Digest::MD5.hexdigest(response.body)
    raise DocmagoClient::Error::IntegrityCheckError.new, 'File corrupt (invalid MD5 checksum)'
  end

  response
end