papierkram_api_client 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.editorconfig +16 -0
- data/.gitignore +11 -0
- data/.rubocop +1 -0
- data/.rubocop.yml +25 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +74 -0
- data/LICENSE.txt +21 -0
- data/README.md +478 -0
- data/Rakefile +12 -0
- data/lib/api/v1/banking/bank_connections.rb +28 -0
- data/lib/api/v1/banking/transactions.rb +18 -0
- data/lib/api/v1/base.rb +75 -0
- data/lib/api/v1/contact/companies.rb +28 -0
- data/lib/api/v1/contact/companies_persons.rb +26 -0
- data/lib/api/v1/expense/vouchers.rb +44 -0
- data/lib/api/v1/helper/pdf_from_response.rb +25 -0
- data/lib/api/v1/income/estimates.rb +44 -0
- data/lib/api/v1/income/invoices.rb +44 -0
- data/lib/api/v1/income/propositions.rb +18 -0
- data/lib/api/v1/info.rb +12 -0
- data/lib/api/v1/projects.rb +24 -0
- data/lib/api/v1/tracker/tasks.rb +31 -0
- data/lib/api/v1/tracker/time_entries.rb +59 -0
- data/lib/papierkram_api_client/version.rb +5 -0
- data/lib/papierkram_api_client.rb +110 -0
- data/sig/papierkram_api_client.rbs +4 -0
- metadata +103 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f793e9caedd92f52e53a04afaedba5de7ad092d6db5a6de569dc5e7bfb734430
|
4
|
+
data.tar.gz: f5b657daef559182cbc3307990ebac36f5ddc0feb60f98375000bd561c927c2c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 355c08e0085b6855606d3242177df54eab3b2862facbc5629ddfc3536983a605bab008475d2526bdd4181a7a7a2ec8b4766216052e75a4540efa19ac45e734d5
|
7
|
+
data.tar.gz: 78b2ed8e798dabf1281e1b646e6e8a82cf1b73f5c7618189a4b014e66f19553bb35ab5b65e87ff7ce26cf98bf48a0c0045b8fb302b770bff3bd0f61f433dff05
|
data/.editorconfig
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
# EditorConfig is awesome: https://EditorConfig.org
|
4
|
+
|
5
|
+
# top-most EditorConfig file
|
6
|
+
root = true
|
7
|
+
|
8
|
+
# Unix-style newlines with a newline ending every file
|
9
|
+
[*]
|
10
|
+
end_of_line = lf
|
11
|
+
insert_final_newline = true
|
12
|
+
|
13
|
+
[**.{rb,md}]
|
14
|
+
charset = utf-8
|
15
|
+
indent_style = space
|
16
|
+
indent_size = 2
|
data/.gitignore
ADDED
data/.rubocop
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--server
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require:
|
2
|
+
- rubocop-minitest
|
3
|
+
|
4
|
+
AllCops:
|
5
|
+
NewCops: enable
|
6
|
+
TargetRubyVersion: 2.7
|
7
|
+
Exclude:
|
8
|
+
- "papierkram_api_client.gemspec"
|
9
|
+
|
10
|
+
Metrics/BlockLength:
|
11
|
+
Enabled: true
|
12
|
+
Exclude:
|
13
|
+
- "test/**/*"
|
14
|
+
|
15
|
+
Layout/LineLength:
|
16
|
+
Exclude:
|
17
|
+
- "test/cassettes/**/*"
|
18
|
+
|
19
|
+
Metrics/MethodLength:
|
20
|
+
Max: 16
|
21
|
+
|
22
|
+
Metrics/ParameterLists:
|
23
|
+
Max: 8
|
24
|
+
Exclude:
|
25
|
+
- "lib/api/v1/**/*"
|
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
# Specify your gem's dependencies in papierkram_api_client.gemspec
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
gem 'minitest', '~> 5.0'
|
9
|
+
gem 'minitest-vcr', '~> 1.4'
|
10
|
+
gem 'pry', '~> 0.14.2'
|
11
|
+
gem 'rake', '~> 13.0'
|
12
|
+
gem 'rubocop', '~> 1.48'
|
13
|
+
gem 'rubocop-minitest', '~> 0.30.0'
|
14
|
+
gem 'vcr', '~> 6.1'
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
papierkram_api_client (0.1.0)
|
5
|
+
faraday (~> 2.7)
|
6
|
+
httpx (~> 0.22.5)
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: https://rubygems.org/
|
10
|
+
specs:
|
11
|
+
ast (2.4.2)
|
12
|
+
coderay (1.1.3)
|
13
|
+
faraday (2.7.4)
|
14
|
+
faraday-net_http (>= 2.0, < 3.1)
|
15
|
+
ruby2_keywords (>= 0.0.4)
|
16
|
+
faraday-net_http (3.0.2)
|
17
|
+
http-2-next (0.5.1)
|
18
|
+
httpx (0.22.5)
|
19
|
+
http-2-next (>= 0.4.1)
|
20
|
+
json (2.6.3)
|
21
|
+
method_source (1.0.0)
|
22
|
+
minispec-metadata (2.0.0)
|
23
|
+
minitest
|
24
|
+
minitest (5.18.0)
|
25
|
+
minitest-vcr (1.4.0)
|
26
|
+
minispec-metadata (~> 2.0)
|
27
|
+
minitest (>= 4.7.5)
|
28
|
+
vcr (>= 2.9)
|
29
|
+
parallel (1.22.1)
|
30
|
+
parser (3.2.2.0)
|
31
|
+
ast (~> 2.4.1)
|
32
|
+
pry (0.14.2)
|
33
|
+
coderay (~> 1.1)
|
34
|
+
method_source (~> 1.0)
|
35
|
+
rainbow (3.1.1)
|
36
|
+
rake (13.0.6)
|
37
|
+
regexp_parser (2.7.0)
|
38
|
+
rexml (3.2.5)
|
39
|
+
rubocop (1.48.1)
|
40
|
+
json (~> 2.3)
|
41
|
+
parallel (~> 1.10)
|
42
|
+
parser (>= 3.2.0.0)
|
43
|
+
rainbow (>= 2.2.2, < 4.0)
|
44
|
+
regexp_parser (>= 1.8, < 3.0)
|
45
|
+
rexml (>= 3.2.5, < 4.0)
|
46
|
+
rubocop-ast (>= 1.26.0, < 2.0)
|
47
|
+
ruby-progressbar (~> 1.7)
|
48
|
+
unicode-display_width (>= 2.4.0, < 3.0)
|
49
|
+
rubocop-ast (1.28.0)
|
50
|
+
parser (>= 3.2.1.0)
|
51
|
+
rubocop-minitest (0.30.0)
|
52
|
+
rubocop (>= 1.39, < 2.0)
|
53
|
+
ruby-progressbar (1.13.0)
|
54
|
+
ruby2_keywords (0.0.5)
|
55
|
+
unicode-display_width (2.4.2)
|
56
|
+
vcr (6.1.0)
|
57
|
+
|
58
|
+
PLATFORMS
|
59
|
+
arm64-darwin-22
|
60
|
+
ruby
|
61
|
+
x86_64-linux
|
62
|
+
|
63
|
+
DEPENDENCIES
|
64
|
+
minitest (~> 5.0)
|
65
|
+
minitest-vcr (~> 1.4)
|
66
|
+
papierkram_api_client!
|
67
|
+
pry (~> 0.14.2)
|
68
|
+
rake (~> 13.0)
|
69
|
+
rubocop (~> 1.48)
|
70
|
+
rubocop-minitest (~> 0.30.0)
|
71
|
+
vcr (~> 6.1)
|
72
|
+
|
73
|
+
BUNDLED WITH
|
74
|
+
2.4.8
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2023 Simon Neutert
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,478 @@
|
|
1
|
+
# Papierkram Api Client<!-- omit in toc -->
|
2
|
+
|
3
|
+
Der erste illegale API Client in [Ruby](https://www.ruby-lang.org/de/) für [Papierkram.de](https://www.papierkram.de)!
|
4
|
+
|
5
|
+
**WICHTIG** Dieses Projekt befindet sich im Entwicklungsstatus bis V1.0.0! Ich werde versuchen, die Änderungen so gut wie möglich zu dokumentieren. Wenn du einen Fehler findest, kannst du gerne einen Issue erstellen oder einen Pull Request mit einer Verbesserung erstellen. Ich freue mich über jede Hilfe!
|
6
|
+
|
7
|
+
> 🚨 **Bitte beachte**, dass DU UNBEDINGT die Requests/Responses (VCR Cassettes) von privaten Daten befreien musst, bevor du einen Pull Request erstellst oder einen Commit ins Web lädst! Ich werde die Cassettes auch nochmal durchgehen, bevor ich die Version 1.0.0 veröffentliche. ABER BITTE, BITTE, BITTE, mach das selbst auch! Ich habe keine Lust, dass irgendwelche Daten von dir oder deinen Kunden auf Github landen. Danke! 🙏
|
8
|
+
|
9
|
+
Check das [CHANGELOG.md](CHANGELOG.md), Baby!
|
10
|
+
|
11
|
+
Hier geht es zu den offiziellen API Docs
|
12
|
+
https://DEINE-SUBDOMAIN.papierkram.de/api/v1/api-docs/index.html
|
13
|
+
(wenn du bereits ein Papierkram-Konto hast).
|
14
|
+
Schau bitte dort um alle Rückgabefelder/-werte zu checken, bis ich die Dokumentation hier komplett habe.
|
15
|
+
|
16
|
+
---
|
17
|
+
|
18
|
+
Ruby client für die Papierkram API (V1).
|
19
|
+
|
20
|
+
Aktuell unterstützte Endpunkte / Objekte:
|
21
|
+
|
22
|
+
- [x] Banking::BankConnection
|
23
|
+
- [ ] Banking::BankTransaction
|
24
|
+
- [x] Contact::Company (Unternehmen)
|
25
|
+
- [x] Contact::Company (Kontaktpersonen)
|
26
|
+
- [x] Expense::Voucher (Ausgabe Belege)
|
27
|
+
- [x] Income::Estimate (Angebote)
|
28
|
+
- [x] Income::Invoice (Rechnungen)
|
29
|
+
- [x] Income::Proposition (Waren / Dienstleistungen)
|
30
|
+
- [x] Info
|
31
|
+
- [x] Project (Projekte)
|
32
|
+
- [x] Tracker::Task (Aufgaben)
|
33
|
+
- [x] Tracker::TimeEntry (Zeiterfassung)
|
34
|
+
|
35
|
+
## Was, wie, warum?<!-- omit in toc -->
|
36
|
+
|
37
|
+
Papierkram.de hat nun endlich eine API Schnittstelle für die Programmierung von eigenen Anwendungen. Die Dokumentation findest du hier: [https://DEINE-SUBDOMAIN.papierkram.de/api/v1/api-docs/index.html](https://DEINE-SUBDOMAIN.papierkram.de/api/v1/api-docs/index.html). Dieses Projekt soll eine einfache Schnittstelle für die Papierkram API bereitstellen.
|
38
|
+
|
39
|
+
Ziele:
|
40
|
+
|
41
|
+
- Eine einfache als Gem verfügbare Schnittstelle für die Papierkram API.
|
42
|
+
- Rückgabe von Hashes, Arrays, etc. statt von komplexeren Objekten (der gefürchtete DIY-Ansatz).
|
43
|
+
- Einfach zu testen und zu erweitern.
|
44
|
+
|
45
|
+
---
|
46
|
+
|
47
|
+
- [Installation](#installation)
|
48
|
+
- [API Client](#api-client)
|
49
|
+
- [Initialisierung](#initialisierung)
|
50
|
+
- [Banking::BankConnection (Bankverbindung)](#bankingbankconnection-bankverbindung)
|
51
|
+
- [alle Bankverbindungen](#alle-bankverbindungen)
|
52
|
+
- [eine Bankverbindung](#eine-bankverbindung)
|
53
|
+
- [Banking::Transaction (Kontoumsatz)](#bankingtransaction-kontoumsatz)
|
54
|
+
- [Contact::Company (Unternehmen)](#contactcompany-unternehmen)
|
55
|
+
- [alle Unternehmen](#alle-unternehmen)
|
56
|
+
- [ein Unternehmen](#ein-unternehmen)
|
57
|
+
- [Contact::Company (Kontaktperson eines Unternehmens)](#contactcompany-kontaktperson-eines-unternehmens)
|
58
|
+
- [alle Kontaktpersonen (eines Unternehmens)](#alle-kontaktpersonen-eines-unternehmens)
|
59
|
+
- [eine Kontaktperson (eines Unternehmens)](#eine-kontaktperson-eines-unternehmens)
|
60
|
+
- [Expense::Voucher (Ausgabe Beleg)](#expensevoucher-ausgabe-beleg)
|
61
|
+
- [alle Ausgabe Belege](#alle-ausgabe-belege)
|
62
|
+
- [einen Ausgabe Beleg](#einen-ausgabe-beleg)
|
63
|
+
- [einen Ausgabe Beleg als PDF](#einen-ausgabe-beleg-als-pdf)
|
64
|
+
- [Income::Estimate (Angebot)](#incomeestimate-angebot)
|
65
|
+
- [alle Angebote](#alle-angebote)
|
66
|
+
- [ein Angebot](#ein-angebot)
|
67
|
+
- [ein Angebot als PDF](#ein-angebot-als-pdf)
|
68
|
+
- [Income::Invoice (Rechnung)](#incomeinvoice-rechnung)
|
69
|
+
- [alle Rechnungen](#alle-rechnungen)
|
70
|
+
- [eine Rechnung](#eine-rechnung)
|
71
|
+
- [eine Rechnung als PDF](#eine-rechnung-als-pdf)
|
72
|
+
- [Income::Proposition (Waren / Dienstleistungen)](#incomeproposition-waren--dienstleistungen)
|
73
|
+
- [alle Waren / Dienstleistungen](#alle-waren--dienstleistungen)
|
74
|
+
- [eine Ware / Dienstleistung](#eine-ware--dienstleistung)
|
75
|
+
- [Info](#info)
|
76
|
+
- [Project::Project (Projekt)](#projectproject-projekt)
|
77
|
+
- [alle Projekte](#alle-projekte)
|
78
|
+
- [ein Projekt](#ein-projekt)
|
79
|
+
- [Tracker::Task (Aufgabe)](#trackertask-aufgabe)
|
80
|
+
- [alle Aufgaben](#alle-aufgaben)
|
81
|
+
- [Tracker::TimeEntry (Zeiteintrag)](#trackertimeentry-zeiteintrag)
|
82
|
+
- [alle Zeiteinträge](#alle-zeiteinträge)
|
83
|
+
- [einen Zeiteintrag](#einen-zeiteintrag)
|
84
|
+
- [Verbleibendes Quota](#verbleibendes-quota)
|
85
|
+
- [Helpers](#helpers)
|
86
|
+
- [Generiere ein PDF aus Response](#generiere-ein-pdf-aus-response)
|
87
|
+
- [Development](#development)
|
88
|
+
- [Contributing](#contributing)
|
89
|
+
- [License](#license)
|
90
|
+
|
91
|
+
## Installation
|
92
|
+
|
93
|
+
TODO: Replace `UPDATE_WITH_YOUR_GEM_NAME_PRIOR_TO_RELEASE_TO_RUBYGEMS_ORG` with your gem name right after releasing it to RubyGems.org. Please do not do it earlier due to security reasons. Alternatively, replace this section with instructions to install your gem from git if you don't plan to release to RubyGems.org.
|
94
|
+
|
95
|
+
Install the gem and add to the application's Gemfile by executing:
|
96
|
+
|
97
|
+
$ bundle add papierkram_api_client
|
98
|
+
|
99
|
+
If bundler is not being used to manage dependencies, install the gem by executing:
|
100
|
+
|
101
|
+
$ gem install papierkram_api_client
|
102
|
+
|
103
|
+
## API Client
|
104
|
+
|
105
|
+
Der API Client ist die Hauptklasse für die Kommunikation mit der Papierkram API. Er wird mit den Zugangsdaten initialisiert.
|
106
|
+
|
107
|
+
[Client](/lib/papierkram_api_client.rb)
|
108
|
+
|
109
|
+
Wenn du etwas hinter die Kulissen sehen willst, schau dir diese [Faraday](https://github.com/lostisland/faraday) Klasse an [Faraday::Response](https://github.com/lostisland/faraday/blob/main/lib/faraday/response.rb).
|
110
|
+
|
111
|
+
|
112
|
+
### Initialisierung
|
113
|
+
|
114
|
+
Entweder werden die Zugangsdaten als Argumente übergeben:
|
115
|
+
|
116
|
+
```ruby
|
117
|
+
# usage with subdomain and api key
|
118
|
+
client = PapierkramApiClient::Client.new('subdomain', "SUPER-LONG-API-KEY")
|
119
|
+
```
|
120
|
+
|
121
|
+
Oder es werden die Umgebungsvariablen `PAPIERKRAM_SUBDOMAIN` und `PAPIERKRAM_API_KEY` gesetzt und der Client ohne Argumente initialisiert.
|
122
|
+
|
123
|
+
```ruby
|
124
|
+
# usage with environment variables
|
125
|
+
client = PapierkramApiClient::Client.new
|
126
|
+
```
|
127
|
+
|
128
|
+
### Banking::BankConnection (Bankverbindung)
|
129
|
+
|
130
|
+
Der Endpunkt `/api/v1/banking/bank_connections` liefert Informationen über die Bankverbindungen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
131
|
+
|
132
|
+
[BankConnections](/lib/api/v1/banking/bank_connections.rb)
|
133
|
+
|
134
|
+
#### alle Bankverbindungen
|
135
|
+
|
136
|
+
```ruby
|
137
|
+
bank_connections = client.banking.bank_connections.all
|
138
|
+
puts bank_connections.headers
|
139
|
+
puts bank_connections.body
|
140
|
+
```
|
141
|
+
|
142
|
+
```ruby
|
143
|
+
# body
|
144
|
+
{
|
145
|
+
"type"=>"list",
|
146
|
+
"page"=>1,
|
147
|
+
"page_size"=>100,
|
148
|
+
"total_pages"=>1,
|
149
|
+
"total_entries"=>1,
|
150
|
+
"has_more"=>false,
|
151
|
+
"entries"=>[
|
152
|
+
{ "type"=>"bank_connection",
|
153
|
+
"id"=>4,
|
154
|
+
"name"=>"Standard" }
|
155
|
+
]
|
156
|
+
}
|
157
|
+
```
|
158
|
+
|
159
|
+
#### eine Bankverbindung
|
160
|
+
|
161
|
+
```ruby
|
162
|
+
bank_connection = client.banking.bank_connections.by(id: 1)
|
163
|
+
puts bank_connection.headers
|
164
|
+
puts bank_connection.body
|
165
|
+
```
|
166
|
+
|
167
|
+
```ruby
|
168
|
+
# body
|
169
|
+
{
|
170
|
+
"type"=>"bank_connection",
|
171
|
+
"id"=>4,
|
172
|
+
"name"=>"Standard",
|
173
|
+
"account_no"=>nil,
|
174
|
+
"account_type"=>"default",
|
175
|
+
"bic"=>nil,
|
176
|
+
"blz"=>nil,
|
177
|
+
"connection_type"=>"default",
|
178
|
+
"created_at"=>"2019-12-31T13:29:19.000+01:00",
|
179
|
+
"customer_id"=>nil,
|
180
|
+
"hbci"=>nil,
|
181
|
+
"hbci_host_url"=>nil,
|
182
|
+
"hbci_version"=>nil,
|
183
|
+
"primary"=>nil,
|
184
|
+
"title"=>"Standard",
|
185
|
+
"updated_at"=>"2020-11-03T10:31:56.000+01:00",
|
186
|
+
"user_id"=>nil,
|
187
|
+
"iban"=>""
|
188
|
+
}
|
189
|
+
```
|
190
|
+
|
191
|
+
### Banking::Transaction (Kontoumsatz)
|
192
|
+
|
193
|
+
WORK IN PROGRESS
|
194
|
+
|
195
|
+
[Transactions](/lib/api/v1/banking/transactions.rb)
|
196
|
+
|
197
|
+
### Contact::Company (Unternehmen)
|
198
|
+
|
199
|
+
Der Endpunkt `/api/v1/contact/companies` liefert Informationen über die Unternehmen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
200
|
+
|
201
|
+
[Companies](/lib/api/v1/contact/companies.rb)
|
202
|
+
|
203
|
+
#### alle Unternehmen
|
204
|
+
|
205
|
+
```ruby
|
206
|
+
companies = client.contact.companies.all
|
207
|
+
puts companies.headers
|
208
|
+
puts companies.body
|
209
|
+
```
|
210
|
+
|
211
|
+
#### ein Unternehmen
|
212
|
+
|
213
|
+
```ruby
|
214
|
+
company = client.contact.companies.by(id: 1)
|
215
|
+
puts company.headers
|
216
|
+
puts company.body
|
217
|
+
```
|
218
|
+
|
219
|
+
### Contact::Company (Kontaktperson eines Unternehmens)
|
220
|
+
|
221
|
+
Der Endpunkt `/api/v1/contact/companies/{company_id}` liefert Informationen über die Kontaktpersonen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
222
|
+
|
223
|
+
#### alle Kontaktpersonen (eines Unternehmens)
|
224
|
+
|
225
|
+
```ruby
|
226
|
+
companies = client.contact.companies_persons.all(company_id: 1)
|
227
|
+
puts companies.headers
|
228
|
+
puts companies.body
|
229
|
+
```
|
230
|
+
|
231
|
+
#### eine Kontaktperson (eines Unternehmens)
|
232
|
+
|
233
|
+
```ruby
|
234
|
+
company = client.contact.companies_persons.by(company_id: 1, id: 1)
|
235
|
+
puts company.headers
|
236
|
+
puts company.body
|
237
|
+
```
|
238
|
+
|
239
|
+
### Expense::Voucher (Ausgabe Beleg)
|
240
|
+
|
241
|
+
Der Endpunkt `/api/v1/expense/vouchers` liefert Informationen über die Ausgabe Belege. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
242
|
+
|
243
|
+
[Vouchers](/lib/api/v1/expense/vouchers.rb)
|
244
|
+
|
245
|
+
#### alle Ausgabe Belege
|
246
|
+
|
247
|
+
```ruby
|
248
|
+
vouchers = client.expense.vouchers.all
|
249
|
+
puts vouchers.headers
|
250
|
+
puts vouchers.body
|
251
|
+
```
|
252
|
+
|
253
|
+
#### einen Ausgabe Beleg
|
254
|
+
|
255
|
+
```ruby
|
256
|
+
voucher = client.expense.vouchers.by(id: 1)
|
257
|
+
puts voucher.headers
|
258
|
+
puts voucher.body
|
259
|
+
```
|
260
|
+
|
261
|
+
#### einen Ausgabe Beleg als PDF
|
262
|
+
|
263
|
+
```ruby
|
264
|
+
voucher = client.expense.vouchers.pdf(id: 1, pdf: true)
|
265
|
+
puts Api::V1::Helpers::PdfFromResponse.new(voucher).to_pdf # => {response: Faraday::Response, path_to_pdf_file: 'path/to/tempfile_pdf.pdf'}
|
266
|
+
```
|
267
|
+
|
268
|
+
### Income::Estimate (Angebot)
|
269
|
+
|
270
|
+
Der Endpunkt `/api/v1/income/estimates` liefert Informationen über die Angebote. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
271
|
+
|
272
|
+
[Estimates](/lib/api/v1/income/estimates.rb)
|
273
|
+
|
274
|
+
#### alle Angebote
|
275
|
+
|
276
|
+
```ruby
|
277
|
+
estimates = client.income.estimates.all
|
278
|
+
puts estimates.headers
|
279
|
+
puts estimates.body
|
280
|
+
```
|
281
|
+
|
282
|
+
#### ein Angebot
|
283
|
+
|
284
|
+
```ruby
|
285
|
+
estimate = client.income.estimates.by(id: 1)
|
286
|
+
puts estimate.headers
|
287
|
+
puts estimate.body
|
288
|
+
```
|
289
|
+
|
290
|
+
#### ein Angebot als PDF
|
291
|
+
|
292
|
+
```ruby
|
293
|
+
estimate = client.income.estimates.pdf(id: 1, pdf: true)
|
294
|
+
puts Api::V1::Helpers::PdfFromResponse.new(estimate).to_pdf # => {response: Faraday::Response, path_to_pdf_file: 'path/to/tempfile_pdf.pdf'}
|
295
|
+
```
|
296
|
+
|
297
|
+
### Income::Invoice (Rechnung)
|
298
|
+
|
299
|
+
Der Endpunkt `/api/v1/income/invoices` liefert Informationen über die Rechnungen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
300
|
+
|
301
|
+
[Invoices](/lib/api/v1/income/invoices.rb)
|
302
|
+
|
303
|
+
#### alle Rechnungen
|
304
|
+
|
305
|
+
```ruby
|
306
|
+
invoices = client.income.invoices.all
|
307
|
+
puts invoices.headers
|
308
|
+
puts invoices.body
|
309
|
+
```
|
310
|
+
|
311
|
+
#### eine Rechnung
|
312
|
+
|
313
|
+
```ruby
|
314
|
+
invoice = client.income.invoices.by(id: 1)
|
315
|
+
puts invoice.headers
|
316
|
+
puts invoice.body
|
317
|
+
```
|
318
|
+
|
319
|
+
#### eine Rechnung als PDF
|
320
|
+
|
321
|
+
```ruby
|
322
|
+
invoice = client.income.invoices.pdf(id: 1, pdf: true)
|
323
|
+
puts Api::V1::Helpers::PdfFromResponse.new(invoice).to_pdf # => {response: Faraday::Response, path_to_pdf_file: 'path/to/tempfile_pdf.pdf'}
|
324
|
+
```
|
325
|
+
|
326
|
+
### Income::Proposition (Waren / Dienstleistungen)
|
327
|
+
|
328
|
+
Der Endpunkt `/api/v1/income/propositions` liefert Informationen über die Waren / Dienstleistungen. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
329
|
+
|
330
|
+
[Propositions](/lib/api/v1/income/propositions.rb)
|
331
|
+
|
332
|
+
#### alle Waren / Dienstleistungen
|
333
|
+
|
334
|
+
```ruby
|
335
|
+
propositions = client.income.propositions.all
|
336
|
+
puts propositions.headers
|
337
|
+
puts propositions.body
|
338
|
+
```
|
339
|
+
|
340
|
+
#### eine Ware / Dienstleistung
|
341
|
+
|
342
|
+
```ruby
|
343
|
+
proposition = client.income.propositions.by(id: 1)
|
344
|
+
puts proposition.headers
|
345
|
+
puts proposition.body
|
346
|
+
```
|
347
|
+
|
348
|
+
### Info
|
349
|
+
|
350
|
+
Der Endpunkt `/api/v1/info` liefert Informationen über die API. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
351
|
+
|
352
|
+
[Info](/lib/api/v1/info.rb)
|
353
|
+
|
354
|
+
```ruby
|
355
|
+
info = client.info.details
|
356
|
+
puts info.headers
|
357
|
+
puts info.body
|
358
|
+
```
|
359
|
+
|
360
|
+
### Project::Project (Projekt)
|
361
|
+
|
362
|
+
Der Endpunkt `/api/v1/projects` liefert Informationen über die Projekte. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
363
|
+
|
364
|
+
[Projects](/lib/api/v1/projects.rb)
|
365
|
+
|
366
|
+
#### alle Projekte
|
367
|
+
|
368
|
+
```ruby
|
369
|
+
projects = client.projects.all
|
370
|
+
puts projects.headers
|
371
|
+
puts projects.body
|
372
|
+
```
|
373
|
+
|
374
|
+
#### ein Projekt
|
375
|
+
|
376
|
+
```ruby
|
377
|
+
project = client.projects.by(id: 1)
|
378
|
+
puts project.headers
|
379
|
+
puts project.body
|
380
|
+
```
|
381
|
+
|
382
|
+
### Tracker::Task (Aufgabe)
|
383
|
+
|
384
|
+
Der Endpunkt `/api/v1/tracker/tasks` liefert Informationen über die Aufgaben. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
385
|
+
|
386
|
+
#### alle Aufgaben
|
387
|
+
|
388
|
+
```ruby
|
389
|
+
tasks = client.tracker.tasks.all
|
390
|
+
puts tasks.headers
|
391
|
+
puts tasks.body
|
392
|
+
```
|
393
|
+
|
394
|
+
### Tracker::TimeEntry (Zeiteintrag)
|
395
|
+
|
396
|
+
Der Endpunkt `/api/v1/tracker/time_entries` liefert Informationen über die Zeiteinträge. Die Informationen werden als `Faraday::Response` zurückgegeben.
|
397
|
+
|
398
|
+
[TimeEntries](/lib/api/v1/tracker/time_entries.rb)
|
399
|
+
|
400
|
+
#### alle Zeiteinträge
|
401
|
+
|
402
|
+
```ruby
|
403
|
+
time_entries = client.tracker.time_entries.all
|
404
|
+
puts time_entries.headers
|
405
|
+
puts time_entries.body
|
406
|
+
```
|
407
|
+
|
408
|
+
#### einen Zeiteintrag
|
409
|
+
|
410
|
+
```ruby
|
411
|
+
time_entry = client.tracker.time_entries.by(id: 1)
|
412
|
+
puts time_entry.headers
|
413
|
+
puts time_entry.body
|
414
|
+
```
|
415
|
+
|
416
|
+
### Verbleibendes Quota
|
417
|
+
|
418
|
+
Jede API Anfrage "kostet" 1 Quota. Das Quota wird bei jedem Request aktualisiert. Um das verbleibende Quota zu erhalten, kann die Methode `remaining_quota` aufgerufen werden.
|
419
|
+
|
420
|
+
[Base](/lib/api/v1/base.rb)
|
421
|
+
|
422
|
+
Du kannst dein Quota über die Papierkram Webseite einsehen. Die Anzahl der verbleibenden Anfragen wird dir dort angezeigt.
|
423
|
+
|
424
|
+
Oder nach jeder Anfrage per Client:
|
425
|
+
|
426
|
+
```ruby
|
427
|
+
# `client.info` ist nur eine Möglichkeit, es kann jeder andere Endpoint verwendet werden ✌️
|
428
|
+
response = client.info.details
|
429
|
+
quota = client.info.remaining_quota(response)
|
430
|
+
```
|
431
|
+
|
432
|
+
## Helpers
|
433
|
+
|
434
|
+
Es gibt einige Helper, die dir das Leben leichter machen.
|
435
|
+
|
436
|
+
### Generiere ein PDF aus Response
|
437
|
+
|
438
|
+
Mit dem Helper `Api::V1::Helpers::PdfFromResponse` kannst du für unterstützte Endpunkte aus einer `Faraday::Response` ein PDF schreiben.
|
439
|
+
|
440
|
+
Unterstützte Endpunkte sind beispielsweise: `Income::Estimate`, `Income::Invoice`, `Expense::Voucher`.
|
441
|
+
|
442
|
+
[Api::V1::Helpers::PdfFromResponse](/lib/api/v1/helpers/pdf_from_response.rb)
|
443
|
+
|
444
|
+
```ruby
|
445
|
+
response = client.income.invoices.by(id: 1, pdf: true)
|
446
|
+
pdf = Api::V1::Helpers::PdfFromResponse.new(response).to_pdf("Rechnung Nummer XXX")
|
447
|
+
puts pdf
|
448
|
+
```
|
449
|
+
|
450
|
+
```ruby
|
451
|
+
# value of `pdf`
|
452
|
+
{
|
453
|
+
response: Faraday::Response,
|
454
|
+
path_to_pdf_file: 'path/to/temp/Rechnung Nummer XXX.pdf'
|
455
|
+
}
|
456
|
+
```
|
457
|
+
|
458
|
+
## Development
|
459
|
+
|
460
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
461
|
+
|
462
|
+
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 the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
463
|
+
|
464
|
+
## Contributing
|
465
|
+
|
466
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/simonneutert/papierkram_api_client.
|
467
|
+
|
468
|
+
Bitte achte darauf, dass du die Tests ausführst und die Tests dann auch grün sind 🤓
|
469
|
+
|
470
|
+
🚨 **SEHR WICHTIG!** Dein API Key wird in den Tests verwendet werden. **Bitte achte darauf**, dass du den API Key nicht in deinen Commits hast! Wenn du per Environment Variable arbeitest, dann wird dein API Key **nicht von VCR aufgezeichnet**. Das bedeutet, dass du deine Tests nicht mit deinem API Key ausführen solltest. ⚠️
|
471
|
+
|
472
|
+
🚨 **NOCH WICHTIGER!** deine Kundendaten, also Klarnamen, E-Mails und Telefonnummern haben hier nichts verloren! Bitte sorge dafür, dass du deine Tests mit einem Testaccount ausführst. 🙏 ODER editiere deine Kundendaten in den *VCR Cassettes* nach dem Test. 🙏
|
473
|
+
|
474
|
+
Wenn du unsicher bist, sprich mich an oder erstelle ein Issue. Ich helfe dir gerne weiter. 🤗
|
475
|
+
|
476
|
+
## License
|
477
|
+
|
478
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED