billomat 0.1.4 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.editorconfig +30 -0
- data/.github/workflows/documentation.yml +38 -0
- data/.github/workflows/test.yml +59 -0
- data/.gitignore +5 -0
- data/.rubocop.yml +53 -0
- data/.simplecov +3 -0
- data/.yardopts +6 -0
- data/CHANGELOG.md +48 -0
- data/Dockerfile +29 -0
- data/Envfile +6 -0
- data/Gemfile +3 -1
- data/Makefile +135 -0
- data/README.md +42 -17
- data/Rakefile +74 -3
- data/billomat.gemspec +28 -22
- data/config/docker/.bash_profile +3 -0
- data/config/docker/.bashrc +48 -0
- data/config/docker/.inputrc +17 -0
- data/doc/assets/project.svg +68 -0
- data/docker-compose.yml +9 -0
- data/lib/billomat/actions/cancel.rb +3 -5
- data/lib/billomat/actions/complete.rb +8 -12
- data/lib/billomat/actions/email.rb +6 -10
- data/lib/billomat/actions/pdf.rb +4 -10
- data/lib/billomat/actions/uncancel.rb +3 -6
- data/lib/billomat/actions.rb +0 -1
- data/lib/billomat/configuration.rb +2 -1
- data/lib/billomat/gateway.rb +52 -24
- data/lib/billomat/models/base.rb +26 -27
- data/lib/billomat/models/client.rb +3 -4
- data/lib/billomat/models/contact.rb +18 -0
- data/lib/billomat/models/credit_note.rb +18 -0
- data/lib/billomat/models/credit_note_item.rb +18 -0
- data/lib/billomat/models/invoice.rb +6 -11
- data/lib/billomat/models/invoice_item.rb +3 -3
- data/lib/billomat/models/invoice_payment.rb +3 -4
- data/lib/billomat/models/tag.rb +18 -0
- data/lib/billomat/models/template.rb +18 -0
- data/lib/billomat/models.rb +6 -2
- data/lib/billomat/search.rb +12 -14
- data/lib/billomat/version.rb +1 -1
- data/lib/billomat.rb +15 -18
- metadata +117 -20
- data/.travis.yml +0 -18
- data/doc/assets/logo.png +0 -0
- data/doc/assets/project.png +0 -0
- data/doc/assets/project.xcf +0 -0
data/billomat.gemspec
CHANGED
@@ -1,40 +1,46 @@
|
|
1
|
-
#
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
5
|
+
require 'billomat/version'
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
8
|
+
spec.name = 'billomat'
|
8
9
|
spec.version = Billomat::VERSION
|
9
10
|
spec.licenses = ['MIT']
|
10
|
-
spec.authors = [
|
11
|
-
spec.email = [
|
11
|
+
spec.authors = ['Henning Vogt']
|
12
|
+
spec.email = ['henning.vogt@hausgold.de']
|
12
13
|
|
13
|
-
spec.summary =
|
14
|
-
spec.homepage =
|
14
|
+
spec.summary = 'Wrapper for the Billomat API'
|
15
|
+
spec.homepage = 'https://github.com/hausgold/billomat'
|
15
16
|
|
16
|
-
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the
|
17
|
-
#
|
17
|
+
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the
|
18
|
+
# 'allowed_push_host'
|
19
|
+
# to allow pushing to a single host or delete this section to allow pushing
|
20
|
+
# to any host.
|
18
21
|
if spec.respond_to?(:metadata)
|
19
|
-
spec.metadata[
|
22
|
+
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
20
23
|
else
|
21
|
-
raise
|
22
|
-
|
24
|
+
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
25
|
+
'public gem pushes.'
|
23
26
|
end
|
24
27
|
|
25
|
-
spec.files
|
28
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
26
29
|
f.match(%r{^(test|spec|features)/})
|
27
30
|
end
|
28
31
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
29
|
-
spec.require_paths = [
|
30
|
-
|
31
|
-
spec.required_ruby_version = '>= 2.0'
|
32
|
+
spec.require_paths = ['lib']
|
32
33
|
|
33
34
|
spec.add_dependency 'rest-client', '~> 2.0', '>= 2.0.2'
|
34
35
|
|
35
|
-
spec.add_development_dependency
|
36
|
-
spec.add_development_dependency
|
37
|
-
spec.add_development_dependency
|
38
|
-
spec.add_development_dependency
|
39
|
-
spec.add_development_dependency
|
36
|
+
spec.add_development_dependency 'bundler', '>= 1.15', '< 3'
|
37
|
+
spec.add_development_dependency 'pry', '~> 0.11'
|
38
|
+
spec.add_development_dependency 'railties', '>= 4.2.0', '< 6.1'
|
39
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
40
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
41
|
+
spec.add_development_dependency 'rubocop', '~> 0.63.1'
|
42
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 1.31'
|
43
|
+
spec.add_development_dependency 'simplecov', '< 0.18'
|
44
|
+
spec.add_development_dependency 'yard', '~> 0.9.18'
|
45
|
+
spec.add_development_dependency 'yard-activesupport-concern', '~> 0.0.1'
|
40
46
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# ~/.bashrc: executed by bash(1) for non-login shells.
|
2
|
+
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
|
3
|
+
# for examples
|
4
|
+
|
5
|
+
_GEM_PATHS=$(ls -d1 ${HOME}/.gem/ruby/*/bin 2>/dev/null | paste -sd ':')
|
6
|
+
_APP_PATHS=$(ls -d1 /app/vendor/bundle/ruby/*/bin 2>/dev/null | paste -sd ':')
|
7
|
+
|
8
|
+
export PATH="${_GEM_PATHS}:${_APP_PATHS}:${PATH}"
|
9
|
+
export PATH="/app/node_modules/.bin:${HOME}/.bin:/app/bin:${PATH}"
|
10
|
+
export MAKE_ENV=baremetal
|
11
|
+
|
12
|
+
# Disable the autostart of all supervisord units
|
13
|
+
sudo sed -i 's/autostart=.*/autostart=false/g' /etc/supervisor/conf.d/*
|
14
|
+
|
15
|
+
# Start the supervisord (empty, no units)
|
16
|
+
sudo supervisord >/dev/null 2>&1 &
|
17
|
+
|
18
|
+
# Wait for supervisord
|
19
|
+
while ! supervisorctl status >/dev/null 2>&1; do sleep 1; done
|
20
|
+
|
21
|
+
# Boot the mDNS stack
|
22
|
+
echo '# Start the mDNS stack'
|
23
|
+
sudo supervisorctl start dbus avahi
|
24
|
+
echo
|
25
|
+
|
26
|
+
function watch-make-test()
|
27
|
+
{
|
28
|
+
while [ 1 ]; do
|
29
|
+
inotifywait --quiet -r `pwd` -e close_write --format '%e -> %w%f'
|
30
|
+
make test
|
31
|
+
done
|
32
|
+
}
|
33
|
+
|
34
|
+
function watch-make()
|
35
|
+
{
|
36
|
+
while [ 1 ]; do
|
37
|
+
inotifywait --quiet -r `pwd` -e close_write --format '%e -> %w%f'
|
38
|
+
make $@
|
39
|
+
done
|
40
|
+
}
|
41
|
+
|
42
|
+
function watch-run()
|
43
|
+
{
|
44
|
+
while [ 1 ]; do
|
45
|
+
inotifywait --quiet -r `pwd` -e close_write --format '%e -> %w%f'
|
46
|
+
bash -c "$@"
|
47
|
+
done
|
48
|
+
}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
|
2
|
+
"\e[1;5C": forward-word
|
3
|
+
"\e[1;5D": backward-word
|
4
|
+
"\e[5C": forward-word
|
5
|
+
"\e[5D": backward-word
|
6
|
+
"\e\e[C": forward-word
|
7
|
+
"\e\e[D": backward-word
|
8
|
+
|
9
|
+
# handle common Home/End escape codes
|
10
|
+
"\e[1~": beginning-of-line
|
11
|
+
"\e[4~": end-of-line
|
12
|
+
"\e[7~": beginning-of-line
|
13
|
+
"\e[8~": end-of-line
|
14
|
+
"\eOH": beginning-of-line
|
15
|
+
"\eOF": end-of-line
|
16
|
+
"\e[H": beginning-of-line
|
17
|
+
"\e[F": end-of-line
|
@@ -0,0 +1,68 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<svg
|
3
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
4
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
5
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
6
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
8
|
+
version="1.1"
|
9
|
+
id="Ebene_1"
|
10
|
+
x="0px"
|
11
|
+
y="0px"
|
12
|
+
viewBox="0 0 800 200"
|
13
|
+
xml:space="preserve"
|
14
|
+
width="800"
|
15
|
+
height="200"><metadata
|
16
|
+
id="metadata33"><rdf:RDF><cc:Work
|
17
|
+
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
18
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
19
|
+
id="defs31" />
|
20
|
+
<style
|
21
|
+
type="text/css"
|
22
|
+
id="style2">
|
23
|
+
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#E73E11;}
|
24
|
+
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#0371B9;}
|
25
|
+
.st2{fill:#132E48;}
|
26
|
+
.st3{font-family:'OpenSans-Bold';}
|
27
|
+
.st4{font-size:29.5168px;}
|
28
|
+
.st5{fill-rule:evenodd;clip-rule:evenodd;fill:none;}
|
29
|
+
.st6{opacity:0.5;fill:#132E48;}
|
30
|
+
.st7{font-family:'OpenSans';}
|
31
|
+
.st8{font-size:12px;}
|
32
|
+
</style>
|
33
|
+
<g
|
34
|
+
transform="translate(0,1.53584)"
|
35
|
+
id="g828"><g
|
36
|
+
transform="translate(35.93985,35.66416)"
|
37
|
+
id="g8">
|
38
|
+
<path
|
39
|
+
style="clip-rule:evenodd;fill:#e73e11;fill-rule:evenodd"
|
40
|
+
id="path4"
|
41
|
+
d="m -0.1,124.4 c 0,0 33.7,-123.2 66.7,-123.2 12.8,0 26.9,21.9 38.8,47.2 -23.6,27.9 -66.6,59.7 -94,76 -7.1,0 -11.5,0 -11.5,0 z"
|
42
|
+
class="st0" />
|
43
|
+
<path
|
44
|
+
style="clip-rule:evenodd;fill:#0371b9;fill-rule:evenodd"
|
45
|
+
id="path6"
|
46
|
+
d="m 88.1,101.8 c 13.5,-10.4 18.4,-16.2 27.1,-25.4 10,25.7 16.7,48 16.7,48 0,0 -41.4,0 -78,0 14.6,-7.9 18.7,-10.7 34.2,-22.6 z"
|
47
|
+
class="st1" />
|
48
|
+
</g><text
|
49
|
+
y="106.40316"
|
50
|
+
x="192.43155"
|
51
|
+
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:29.51733398px;font-family:'Open Sans', sans-serif;-inkscape-font-specification:'OpenSans-Bold, Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#132e48"
|
52
|
+
id="text10"
|
53
|
+
class="st2 st3 st4">Billomat</text>
|
54
|
+
<rect
|
55
|
+
style="clip-rule:evenodd;fill:none;fill-rule:evenodd"
|
56
|
+
id="rect12"
|
57
|
+
height="24"
|
58
|
+
width="314.5"
|
59
|
+
class="st5"
|
60
|
+
y="118.06416"
|
61
|
+
x="194.23985" /><text
|
62
|
+
y="127.22146"
|
63
|
+
x="194.21715"
|
64
|
+
style="font-size:12px;font-family:'Open Sans', sans-serif;opacity:0.5;fill:#132e48;-inkscape-font-specification:'Open Sans, sans-serif, Normal';font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal;text-anchor:start;text-align:start;writing-mode:lr;font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-feature-settings:normal;"
|
65
|
+
id="text14"
|
66
|
+
class="st6 st7 st8">API wrapper for billomat.com</text>
|
67
|
+
</g>
|
68
|
+
</svg>
|
data/docker-compose.yml
ADDED
@@ -2,17 +2,15 @@
|
|
2
2
|
|
3
3
|
module Billomat
|
4
4
|
module Actions
|
5
|
-
##
|
6
5
|
# This actions cancels an invoice
|
7
6
|
class Cancel
|
8
|
-
# @param [String]
|
7
|
+
# @param invoice_id [String] the invoice ID
|
9
8
|
# @return [Billomat::Actions::Cancel]
|
10
9
|
def initialize(invoice_id)
|
11
10
|
@invoice_id = invoice_id
|
12
11
|
end
|
13
12
|
|
14
|
-
|
15
|
-
# Calls the gateway
|
13
|
+
# Calls the gateway.
|
16
14
|
#
|
17
15
|
# @return [TrueClass]
|
18
16
|
def call
|
@@ -21,7 +19,7 @@ module Billomat
|
|
21
19
|
true
|
22
20
|
end
|
23
21
|
|
24
|
-
# @return [String]
|
22
|
+
# @return [String] the cancel path with the invoice_id
|
25
23
|
def path
|
26
24
|
"/invoices/#{@invoice_id}/cancel"
|
27
25
|
end
|
@@ -2,14 +2,12 @@
|
|
2
2
|
|
3
3
|
module Billomat
|
4
4
|
module Actions
|
5
|
-
|
6
|
-
# Completes an invoice by calling the /complete path on a resource
|
5
|
+
# Completes an invoice by calling the /complete path on a resource.
|
7
6
|
class Complete
|
8
|
-
|
9
|
-
# Returns a Complete object
|
7
|
+
# Returns a Complete object.
|
10
8
|
#
|
11
|
-
# @param [String]
|
12
|
-
# @param [Hash]
|
9
|
+
# @param invoice_id [String] the ID of the invoice
|
10
|
+
# @param opts [Hash] the options for this request
|
13
11
|
# @return [Billomat::Actions::Complete]
|
14
12
|
#
|
15
13
|
# @example
|
@@ -19,8 +17,7 @@ module Billomat
|
|
19
17
|
@opts = opts
|
20
18
|
end
|
21
19
|
|
22
|
-
|
23
|
-
# Calls the gateway
|
20
|
+
# Calls the gateway.
|
24
21
|
#
|
25
22
|
# @return [TrueClass]
|
26
23
|
def call
|
@@ -29,15 +26,14 @@ module Billomat
|
|
29
26
|
true
|
30
27
|
end
|
31
28
|
|
32
|
-
|
33
|
-
# The given options have to be wrapped
|
29
|
+
# The given options have to be wrapped.
|
34
30
|
#
|
35
|
-
# @return [Hash]
|
31
|
+
# @return [Hash] the payload for the complete request
|
36
32
|
def wrapped_data
|
37
33
|
{ complete: @opts }
|
38
34
|
end
|
39
35
|
|
40
|
-
# @return [String]
|
36
|
+
# @return [String] the complete path with the invoice_id
|
41
37
|
def path
|
42
38
|
"/invoices/#{@invoice_id}/complete"
|
43
39
|
end
|
@@ -2,25 +2,22 @@
|
|
2
2
|
|
3
3
|
module Billomat
|
4
4
|
module Actions
|
5
|
-
##
|
6
5
|
# This actions sends an invoice email.
|
7
6
|
# Recipients must be passed like this:
|
8
|
-
#
|
7
|
+
# { recipients: { to: 'bob@example.org' } }
|
9
8
|
#
|
10
9
|
# @example
|
11
10
|
# Billomat::Actions::Email.new('1235', { recipiens: { to: 'a@b.org' } })
|
12
11
|
class Email
|
13
|
-
# @param [String]
|
14
|
-
# @param [Hash]
|
15
|
-
#
|
12
|
+
# @param invoice_id [String] the invoice ID
|
13
|
+
# @param opts [Hash] the options for this action
|
16
14
|
# @return [Billomat::Actions::Email]
|
17
15
|
def initialize(invoice_id, opts = {})
|
18
16
|
@invoice_id = invoice_id
|
19
17
|
@opts = opts
|
20
18
|
end
|
21
19
|
|
22
|
-
|
23
|
-
# Calls the gateway
|
20
|
+
# Calls the gateway.
|
24
21
|
#
|
25
22
|
# @return [TrueClass]
|
26
23
|
def call
|
@@ -29,15 +26,14 @@ module Billomat
|
|
29
26
|
true
|
30
27
|
end
|
31
28
|
|
32
|
-
##
|
33
29
|
# Wraps the options
|
34
30
|
#
|
35
|
-
# @return [Hash]
|
31
|
+
# @return [Hash] the wrapped email options
|
36
32
|
def wrapped_data
|
37
33
|
{ email: @opts }
|
38
34
|
end
|
39
35
|
|
40
|
-
# @return [String]
|
36
|
+
# @return [String] the path for the email action
|
41
37
|
def path
|
42
38
|
"/invoices/#{@invoice_id}/email"
|
43
39
|
end
|
data/lib/billomat/actions/pdf.rb
CHANGED
@@ -2,21 +2,18 @@
|
|
2
2
|
|
3
3
|
module Billomat
|
4
4
|
module Actions
|
5
|
-
##
|
6
5
|
# This class allows to download the invoice as a pdf.
|
7
6
|
# The PDF comes in a base64 encoded string in the response body.
|
8
7
|
class Pdf
|
9
|
-
# @param [String]
|
10
|
-
# @param [Hash]
|
11
|
-
#
|
8
|
+
# @param invoice_id [String] the invoice ID
|
9
|
+
# @param opts [Hash] the options for this action
|
12
10
|
# @return [Billomat::Actions::Pdf]
|
13
11
|
def initialize(invoice_id, opts = {})
|
14
12
|
@invoice_id = invoice_id
|
15
13
|
@opts = opts
|
16
14
|
end
|
17
15
|
|
18
|
-
|
19
|
-
# Calls the gateway
|
16
|
+
# Calls the gateway.
|
20
17
|
#
|
21
18
|
# @return [TrueClass]
|
22
19
|
def call
|
@@ -24,10 +21,7 @@ module Billomat
|
|
24
21
|
resp['pdf']
|
25
22
|
end
|
26
23
|
|
27
|
-
|
28
|
-
# Wraps the options
|
29
|
-
#
|
30
|
-
# @return [Hash] The wrapped email options
|
24
|
+
# @return [String] the path for the PDF action
|
31
25
|
def path
|
32
26
|
"/invoices/#{@invoice_id}/pdf"
|
33
27
|
end
|
@@ -2,21 +2,18 @@
|
|
2
2
|
|
3
3
|
module Billomat
|
4
4
|
module Actions
|
5
|
-
##
|
6
5
|
# This actions uncancels an canceld invoice.
|
7
6
|
#
|
8
7
|
# @example
|
9
8
|
# Billomat::Actions::Uncancel.new('1235')
|
10
9
|
class Uncancel
|
11
|
-
# @param [String]
|
12
|
-
#
|
10
|
+
# @param invoice_id [String] the invoice ID
|
13
11
|
# @return [Billomat::Actions::Uncancel]
|
14
12
|
def initialize(invoice_id)
|
15
13
|
@invoice_id = invoice_id
|
16
14
|
end
|
17
15
|
|
18
|
-
|
19
|
-
# Calls the gateway
|
16
|
+
# Calls the gateway.
|
20
17
|
#
|
21
18
|
# @return [TrueClass]
|
22
19
|
def call
|
@@ -25,7 +22,7 @@ module Billomat
|
|
25
22
|
true
|
26
23
|
end
|
27
24
|
|
28
|
-
# @return [String]
|
25
|
+
# @return [String] the path for the uncancel action
|
29
26
|
def path
|
30
27
|
"/invoices/#{@invoice_id}/uncancel"
|
31
28
|
end
|
data/lib/billomat/actions.rb
CHANGED
data/lib/billomat/gateway.rb
CHANGED
@@ -4,16 +4,32 @@ require 'rest-client'
|
|
4
4
|
require 'json'
|
5
5
|
|
6
6
|
module Billomat
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
# Raised if something goes wrong during an API call.
|
8
|
+
class GatewayError < StandardError
|
9
|
+
attr_reader :original_exception
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
# Create a new GatewayError from a RestClient exception.
|
12
|
+
#
|
13
|
+
# @param original_exception [RestClient::Exception] the original exception
|
14
|
+
def initialize(original_exception)
|
15
|
+
# Extract the error from the response if it is present. If no error
|
16
|
+
# could be extracted, use the whole body
|
17
|
+
body = original_exception.response&.body
|
18
|
+
response_error = JSON.parse(body).dig('errors', 'error') || body if body
|
19
|
+
|
20
|
+
# Use the default message and append our detailed error
|
21
|
+
message = original_exception.default_message
|
22
|
+
message += " ('#{response_error}')" if response_error
|
23
|
+
|
24
|
+
super(message)
|
25
|
+
@original_exception = original_exception
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
# This class can be used by the gem to communicate with the API.
|
13
30
|
class Gateway
|
14
31
|
attr_reader :method, :path, :body
|
15
32
|
|
16
|
-
##
|
17
33
|
# Creates a new Gateway
|
18
34
|
#
|
19
35
|
# @param [Symbol] method The HTTP verb
|
@@ -29,25 +45,33 @@ module Billomat
|
|
29
45
|
@body = body
|
30
46
|
end
|
31
47
|
|
32
|
-
|
33
|
-
#
|
34
|
-
# @return [Hash]
|
48
|
+
# Executes the API call and parse the response.
|
49
|
+
#
|
50
|
+
# @return [Hash] the response body
|
35
51
|
def run
|
36
|
-
resp =
|
37
|
-
method: method,
|
38
|
-
url: url,
|
39
|
-
timeout: timeout,
|
40
|
-
headers: headers,
|
41
|
-
payload: body.to_json
|
42
|
-
)
|
52
|
+
resp = response
|
43
53
|
|
44
|
-
raise GatewayError, resp.body if resp.code > 299
|
45
54
|
return nil if resp.body.empty?
|
46
55
|
|
47
56
|
JSON.parse(resp.body)
|
57
|
+
rescue RestClient::Exception => e
|
58
|
+
raise GatewayError, e
|
59
|
+
end
|
60
|
+
|
61
|
+
# Executes the API call and return the response.
|
62
|
+
#
|
63
|
+
# @return [RestClient::Response] the API response
|
64
|
+
def response
|
65
|
+
RestClient::Request.execute(
|
66
|
+
method: method,
|
67
|
+
url: url,
|
68
|
+
timeout: timeout,
|
69
|
+
headers: headers,
|
70
|
+
payload: body.to_json
|
71
|
+
)
|
48
72
|
end
|
49
73
|
|
50
|
-
# @return [String]
|
74
|
+
# @return [String] the complete URL for the request
|
51
75
|
def url
|
52
76
|
"https://#{config.subdomain}.billomat.net/api#{path}"
|
53
77
|
end
|
@@ -57,16 +81,20 @@ module Billomat
|
|
57
81
|
config.timeout || 5
|
58
82
|
end
|
59
83
|
|
60
|
-
# @return [Hash]
|
84
|
+
# @return [Hash] the headers for the request
|
61
85
|
def headers
|
62
86
|
{
|
63
|
-
'Accept'
|
64
|
-
'Content-Type'
|
65
|
-
'X-BillomatApiKey' => config.api_key
|
66
|
-
|
87
|
+
'Accept' => 'application/json',
|
88
|
+
'Content-Type' => 'application/json',
|
89
|
+
'X-BillomatApiKey' => config.api_key,
|
90
|
+
'X-AppId' => config.app_id,
|
91
|
+
'X-AppSecret' => config.app_secret
|
92
|
+
}.reject { |_, val| val.nil? }
|
67
93
|
end
|
68
94
|
|
69
|
-
# @return [Billomat::Configuration]
|
95
|
+
# @return [Billomat::Configuration] the global gem configuration
|
96
|
+
#
|
97
|
+
# :reek:UtilityFunction because it's a shorthand
|
70
98
|
def config
|
71
99
|
Billomat.configuration
|
72
100
|
end
|