fakturoid 0.5.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +6 -10
- data/.ruby-version +1 -1
- data/CHANGELOG.md +11 -0
- data/README.md +501 -145
- data/Rakefile +3 -1
- data/fakturoid.gemspec +36 -25
- data/lib/fakturoid/api/account.rb +13 -0
- data/lib/fakturoid/api/bank_account.rb +13 -0
- data/lib/fakturoid/api/base.rb +18 -0
- data/lib/fakturoid/api/event.rb +23 -0
- data/lib/fakturoid/api/expense.rb +55 -0
- data/lib/fakturoid/api/expense_payment.rb +20 -0
- data/lib/fakturoid/api/generator.rb +36 -0
- data/lib/fakturoid/api/inbox_file.rb +34 -0
- data/lib/fakturoid/api/inventory_item.rb +66 -0
- data/lib/fakturoid/api/inventory_move.rb +40 -0
- data/lib/fakturoid/api/invoice.rb +62 -0
- data/lib/fakturoid/api/invoice_message.rb +14 -0
- data/lib/fakturoid/api/invoice_payment.rb +26 -0
- data/lib/fakturoid/api/number_format.rb +13 -0
- data/lib/fakturoid/api/recurring_generator.rb +36 -0
- data/lib/fakturoid/api/subject.rb +42 -0
- data/lib/fakturoid/api/todo.rb +20 -0
- data/lib/fakturoid/api/user.rb +17 -0
- data/lib/fakturoid/api.rb +84 -9
- data/lib/fakturoid/client.rb +46 -12
- data/lib/fakturoid/config.rb +69 -12
- data/lib/fakturoid/oauth/access_token_service.rb +46 -0
- data/lib/fakturoid/oauth/credentials.rb +63 -0
- data/lib/fakturoid/oauth/flow/authorization_code.rb +53 -0
- data/lib/fakturoid/oauth/flow/base.rb +42 -0
- data/lib/fakturoid/oauth/flow/client_credentials.rb +27 -0
- data/lib/fakturoid/oauth/flow.rb +5 -0
- data/lib/fakturoid/oauth/request/api.rb +11 -0
- data/lib/fakturoid/oauth/request/base.rb +60 -0
- data/lib/fakturoid/oauth/request/oauth.rb +24 -0
- data/lib/fakturoid/oauth/request.rb +5 -0
- data/lib/fakturoid/oauth/token_response.rb +56 -0
- data/lib/fakturoid/oauth.rb +39 -0
- data/lib/fakturoid/response.rb +8 -20
- data/lib/fakturoid/utils.rb +27 -0
- data/lib/fakturoid/version.rb +1 -1
- data/lib/fakturoid.rb +22 -22
- metadata +47 -53
- data/.github/workflows/rubocop.yml +0 -20
- data/.github/workflows/tests.yml +0 -27
- data/.gitignore +0 -7
- data/Gemfile +0 -6
- data/lib/fakturoid/api/arguments.rb +0 -21
- data/lib/fakturoid/api/http_methods.rb +0 -23
- data/lib/fakturoid/client/account.rb +0 -11
- data/lib/fakturoid/client/bank_account.rb +0 -11
- data/lib/fakturoid/client/event.rb +0 -19
- data/lib/fakturoid/client/expense.rb +0 -49
- data/lib/fakturoid/client/generator.rb +0 -44
- data/lib/fakturoid/client/inventory_items.rb +0 -59
- data/lib/fakturoid/client/inventory_moves.rb +0 -36
- data/lib/fakturoid/client/invoice.rb +0 -73
- data/lib/fakturoid/client/number_format.rb +0 -11
- data/lib/fakturoid/client/subject.rb +0 -41
- data/lib/fakturoid/client/todo.rb +0 -18
- data/lib/fakturoid/client/user.rb +0 -20
- data/lib/fakturoid/connection.rb +0 -30
- data/lib/fakturoid/request.rb +0 -31
- data/test/api_test.rb +0 -24
- data/test/config_test.rb +0 -40
- data/test/fixtures/blocked_account.json +0 -8
- data/test/fixtures/invoice.json +0 -81
- data/test/fixtures/invoice.pdf +0 -0
- data/test/fixtures/invoice_error.json +0 -7
- data/test/fixtures/subjects.json +0 -52
- data/test/request_test.rb +0 -20
- data/test/response_test.rb +0 -189
- data/test/test_helper.rb +0 -19
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "oauth/credentials"
|
4
|
+
require_relative "oauth/flow"
|
5
|
+
require_relative "oauth/request"
|
6
|
+
require_relative "oauth/token_response"
|
7
|
+
require_relative "oauth/access_token_service"
|
8
|
+
|
9
|
+
module Fakturoid
|
10
|
+
class Oauth
|
11
|
+
extend Forwardable
|
12
|
+
|
13
|
+
attr_reader :client, :flow, :access_token_service
|
14
|
+
|
15
|
+
def_delegators :@flow, :authorization_uri, :authorize, :fetch_access_token, :revoke_access, :authorized?
|
16
|
+
|
17
|
+
def initialize(client)
|
18
|
+
@client = client
|
19
|
+
@flow = find_flow
|
20
|
+
@access_token_service = AccessTokenService.new(self)
|
21
|
+
end
|
22
|
+
|
23
|
+
def perform_request(method, path, params)
|
24
|
+
access_token_service.perform_request(method, path, params)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def find_flow
|
30
|
+
if client.config.client_credentials_flow?
|
31
|
+
Flow::ClientCredentials.new(client)
|
32
|
+
elsif client.config.authorization_code_flow?
|
33
|
+
Flow::AuthorizationCode.new(client)
|
34
|
+
else
|
35
|
+
raise ConfigurationError, "Unsupported OAuth flow."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
data/lib/fakturoid/response.rb
CHANGED
@@ -2,30 +2,32 @@
|
|
2
2
|
|
3
3
|
module Fakturoid
|
4
4
|
class Response
|
5
|
-
attr_reader :response, :caller, :
|
5
|
+
attr_reader :response, :caller, :body, :request_method
|
6
6
|
|
7
7
|
def initialize(faraday_response, caller, request_method)
|
8
8
|
@response = faraday_response
|
9
9
|
@caller = caller
|
10
|
-
@env = faraday_response.env
|
11
10
|
@request_method = request_method.to_sym
|
12
11
|
|
12
|
+
env = response.env
|
13
|
+
|
13
14
|
if !(env.body.nil? || env.body.empty? || (json? && env.body =~ /\A\s+\z/))
|
14
15
|
@body = json? ? MultiJson.load(env.body) : env.body
|
15
16
|
end
|
17
|
+
|
16
18
|
handle_response
|
17
19
|
end
|
18
20
|
|
19
21
|
def status_code
|
20
|
-
env["status"]
|
22
|
+
response.env["status"]
|
21
23
|
end
|
22
24
|
|
23
25
|
def json?
|
24
|
-
|
26
|
+
headers["content-type"] =~ %r{\Aapplication/json}
|
25
27
|
end
|
26
28
|
|
27
29
|
def headers
|
28
|
-
env.response_headers
|
30
|
+
response.env.response_headers.transform_keys(&:downcase)
|
29
31
|
end
|
30
32
|
|
31
33
|
def inspect
|
@@ -36,21 +38,7 @@ module Fakturoid
|
|
36
38
|
|
37
39
|
def handle_response
|
38
40
|
case status_code
|
39
|
-
when
|
40
|
-
raise error(UserAgentError, "User-Agent header missing") if env.request_headers["User-Agent"].nil? || env.request_headers["User-Agent"].empty?
|
41
|
-
raise error(PaginationError, "Page does not exist")
|
42
|
-
when 401 then raise error(AuthenticationError, "Authentification failed")
|
43
|
-
when 402 then raise error(BlockedAccountError, "Account is blocked")
|
44
|
-
when 403
|
45
|
-
raise error(DestroySubjectError, "Cannot destroy subject with invoices") if caller == Client::Subject && request_method == :delete
|
46
|
-
raise error(SubjectLimitError, "Subject limit for account reached") if caller == Client::Subject && request_method == :post
|
47
|
-
raise error(GeneratorLimitError, "Recurring generator limit for account reached") if caller == Client::Generator
|
48
|
-
raise error(UnsupportedFeatureError, "Feature unavailable for account plan")
|
49
|
-
when 404 then raise error(RecordNotFoundError, "Record not found")
|
50
|
-
when 415 then raise error(ContentTypeError, "Unsupported Content-Type")
|
51
|
-
when 422 then raise error(InvalidRecordError, "Invalid record")
|
52
|
-
when 429 then raise error(RateLimitError, "Rate limit reached")
|
53
|
-
when 503 then raise error(ReadOnlySiteError, "Fakturoid is in read only state")
|
41
|
+
when 401 then raise error(AuthenticationError, "Authentication failed")
|
54
42
|
else
|
55
43
|
raise error(ServerError, "Server error") if status_code >= 500
|
56
44
|
raise error(ClientError, "Client error") if status_code >= 400
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Fakturoid
|
4
|
+
module Utils
|
5
|
+
def self.permit_params(params_hash, *permitted_params)
|
6
|
+
params_hash.select { |param, _value| permitted_params.include?(param.to_sym) }
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.validate_numerical_id(id)
|
10
|
+
raise ArgumentError, "Wrong ID given: #{id}" if !id.is_a?(Integer) && !(id.is_a?(String) && id =~ /\A\d+\z/)
|
11
|
+
true
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.validate_search_query(query: nil, tags: nil, allow_tags: false)
|
15
|
+
if allow_tags && empty?(tags) && empty?(query)
|
16
|
+
raise ArgumentError, "Query or tags parameter is required"
|
17
|
+
elsif !allow_tags && empty?(query)
|
18
|
+
raise ArgumentError, "Query parameter is required"
|
19
|
+
end
|
20
|
+
true
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.empty?(string)
|
24
|
+
string.nil? || string.empty?
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/fakturoid/version.rb
CHANGED
data/lib/fakturoid.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "uri"
|
4
|
+
require "forwardable"
|
5
|
+
require "time"
|
4
6
|
require "multi_json"
|
5
7
|
require "faraday"
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
require_relative "fakturoid/utils"
|
10
|
+
require_relative "fakturoid/config"
|
11
|
+
require_relative "fakturoid/response"
|
12
|
+
require_relative "fakturoid/api"
|
13
|
+
require_relative "fakturoid/oauth"
|
14
|
+
require_relative "fakturoid/client"
|
15
|
+
require_relative "fakturoid/version"
|
16
|
+
require_relative "fakturoid/railtie" if defined?(::Rails)
|
15
17
|
|
16
18
|
module Fakturoid
|
17
19
|
class ApiError < StandardError
|
@@ -24,25 +26,23 @@ module Fakturoid
|
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
27
|
-
class
|
28
|
-
class
|
29
|
+
class ConfigurationError < ApiError; end
|
30
|
+
class OauthError < ApiError; end
|
29
31
|
class AuthenticationError < ApiError; end
|
30
|
-
class BlockedAccountError < ApiError; end
|
31
|
-
class RateLimitError < ApiError; end
|
32
|
-
class ReadOnlySiteError < ApiError; end
|
33
|
-
class PaginationError < ApiError; end
|
34
|
-
|
35
|
-
class RecordNotFoundError < ApiError; end
|
36
|
-
class InvalidRecordError < ApiError; end
|
37
|
-
class DestroySubjectError < ApiError; end
|
38
|
-
class SubjectLimitError < ApiError; end
|
39
|
-
class GeneratorLimitError < ApiError; end
|
40
|
-
class UnsupportedFeatureError < ApiError; end
|
41
32
|
|
42
33
|
class ClientError < ApiError; end
|
43
34
|
class ServerError < ApiError; end
|
44
35
|
|
36
|
+
HTTP_GET = :get
|
37
|
+
HTTP_POST = :post
|
38
|
+
HTTP_PATCH = :patch
|
39
|
+
HTTP_DELETE = :delete
|
40
|
+
|
45
41
|
def self.configure(&block)
|
46
|
-
|
42
|
+
Client.configure(&block)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.client
|
46
|
+
@client ||= Client.new
|
47
47
|
end
|
48
48
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fakturoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eda Riedl
|
@@ -11,10 +11,10 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2024-03-22 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
|
-
name:
|
17
|
+
name: faraday
|
18
18
|
requirement: !ruby/object:Gem::Requirement
|
19
19
|
requirements:
|
20
20
|
- - ">="
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
- !ruby/object:Gem::Version
|
29
29
|
version: '0'
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
31
|
+
name: multi_json
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
requirements:
|
34
34
|
- - ">="
|
@@ -56,7 +56,7 @@ dependencies:
|
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '1'
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
|
-
name:
|
59
|
+
name: minitest
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
62
|
- - ">="
|
@@ -70,7 +70,7 @@ dependencies:
|
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
|
-
name:
|
73
|
+
name: mocha
|
74
74
|
requirement: !ruby/object:Gem::Requirement
|
75
75
|
requirements:
|
76
76
|
- - ">="
|
@@ -84,7 +84,7 @@ dependencies:
|
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: '0'
|
86
86
|
- !ruby/object:Gem::Dependency
|
87
|
-
name:
|
87
|
+
name: rake
|
88
88
|
requirement: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
90
|
- - ">="
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '0'
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
|
-
name:
|
101
|
+
name: rubocop
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
104
|
- - ">="
|
@@ -112,7 +112,7 @@ dependencies:
|
|
112
112
|
- !ruby/object:Gem::Version
|
113
113
|
version: '0'
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
|
-
name:
|
115
|
+
name: shoulda-context
|
116
116
|
requirement: !ruby/object:Gem::Requirement
|
117
117
|
requirements:
|
118
118
|
- - ">="
|
@@ -132,54 +132,58 @@ executables: []
|
|
132
132
|
extensions: []
|
133
133
|
extra_rdoc_files: []
|
134
134
|
files:
|
135
|
-
- ".github/workflows/rubocop.yml"
|
136
|
-
- ".github/workflows/tests.yml"
|
137
|
-
- ".gitignore"
|
138
135
|
- ".rubocop.yml"
|
139
136
|
- ".ruby-version"
|
140
137
|
- CHANGELOG.md
|
141
|
-
- Gemfile
|
142
138
|
- LICENSE.txt
|
143
139
|
- README.md
|
144
140
|
- Rakefile
|
145
141
|
- fakturoid.gemspec
|
146
142
|
- lib/fakturoid.rb
|
147
143
|
- lib/fakturoid/api.rb
|
148
|
-
- lib/fakturoid/api/
|
149
|
-
- lib/fakturoid/api/
|
144
|
+
- lib/fakturoid/api/account.rb
|
145
|
+
- lib/fakturoid/api/bank_account.rb
|
146
|
+
- lib/fakturoid/api/base.rb
|
147
|
+
- lib/fakturoid/api/event.rb
|
148
|
+
- lib/fakturoid/api/expense.rb
|
149
|
+
- lib/fakturoid/api/expense_payment.rb
|
150
|
+
- lib/fakturoid/api/generator.rb
|
151
|
+
- lib/fakturoid/api/inbox_file.rb
|
152
|
+
- lib/fakturoid/api/inventory_item.rb
|
153
|
+
- lib/fakturoid/api/inventory_move.rb
|
154
|
+
- lib/fakturoid/api/invoice.rb
|
155
|
+
- lib/fakturoid/api/invoice_message.rb
|
156
|
+
- lib/fakturoid/api/invoice_payment.rb
|
157
|
+
- lib/fakturoid/api/number_format.rb
|
158
|
+
- lib/fakturoid/api/recurring_generator.rb
|
159
|
+
- lib/fakturoid/api/subject.rb
|
160
|
+
- lib/fakturoid/api/todo.rb
|
161
|
+
- lib/fakturoid/api/user.rb
|
150
162
|
- lib/fakturoid/client.rb
|
151
|
-
- lib/fakturoid/client/account.rb
|
152
|
-
- lib/fakturoid/client/bank_account.rb
|
153
|
-
- lib/fakturoid/client/event.rb
|
154
|
-
- lib/fakturoid/client/expense.rb
|
155
|
-
- lib/fakturoid/client/generator.rb
|
156
|
-
- lib/fakturoid/client/inventory_items.rb
|
157
|
-
- lib/fakturoid/client/inventory_moves.rb
|
158
|
-
- lib/fakturoid/client/invoice.rb
|
159
|
-
- lib/fakturoid/client/number_format.rb
|
160
|
-
- lib/fakturoid/client/subject.rb
|
161
|
-
- lib/fakturoid/client/todo.rb
|
162
|
-
- lib/fakturoid/client/user.rb
|
163
163
|
- lib/fakturoid/config.rb
|
164
|
-
- lib/fakturoid/
|
164
|
+
- lib/fakturoid/oauth.rb
|
165
|
+
- lib/fakturoid/oauth/access_token_service.rb
|
166
|
+
- lib/fakturoid/oauth/credentials.rb
|
167
|
+
- lib/fakturoid/oauth/flow.rb
|
168
|
+
- lib/fakturoid/oauth/flow/authorization_code.rb
|
169
|
+
- lib/fakturoid/oauth/flow/base.rb
|
170
|
+
- lib/fakturoid/oauth/flow/client_credentials.rb
|
171
|
+
- lib/fakturoid/oauth/request.rb
|
172
|
+
- lib/fakturoid/oauth/request/api.rb
|
173
|
+
- lib/fakturoid/oauth/request/base.rb
|
174
|
+
- lib/fakturoid/oauth/request/oauth.rb
|
175
|
+
- lib/fakturoid/oauth/token_response.rb
|
165
176
|
- lib/fakturoid/railtie.rb
|
166
|
-
- lib/fakturoid/request.rb
|
167
177
|
- lib/fakturoid/response.rb
|
178
|
+
- lib/fakturoid/utils.rb
|
168
179
|
- lib/fakturoid/version.rb
|
169
|
-
- test/api_test.rb
|
170
|
-
- test/config_test.rb
|
171
|
-
- test/fixtures/blocked_account.json
|
172
|
-
- test/fixtures/invoice.json
|
173
|
-
- test/fixtures/invoice.pdf
|
174
|
-
- test/fixtures/invoice_error.json
|
175
|
-
- test/fixtures/subjects.json
|
176
|
-
- test/request_test.rb
|
177
|
-
- test/response_test.rb
|
178
|
-
- test/test_helper.rb
|
179
180
|
homepage: https://github.com/fakturoid/fakturoid-ruby
|
180
181
|
licenses:
|
181
182
|
- MIT
|
182
|
-
metadata:
|
183
|
+
metadata:
|
184
|
+
homepage_uri: https://github.com/fakturoid/fakturoid-ruby
|
185
|
+
source_code_uri: https://github.com/fakturoid/fakturoid-ruby
|
186
|
+
changelog_uri: https://github.com/fakturoid/fakturoid-ruby/blob/main/CHANGELOG.md
|
183
187
|
post_install_message:
|
184
188
|
rdoc_options: []
|
185
189
|
require_paths:
|
@@ -188,25 +192,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
188
192
|
requirements:
|
189
193
|
- - ">="
|
190
194
|
- !ruby/object:Gem::Version
|
191
|
-
version:
|
195
|
+
version: 2.7.0
|
192
196
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
197
|
requirements:
|
194
198
|
- - ">="
|
195
199
|
- !ruby/object:Gem::Version
|
196
200
|
version: '0'
|
197
201
|
requirements: []
|
198
|
-
rubygems_version: 3.
|
202
|
+
rubygems_version: 3.5.5
|
199
203
|
signing_key:
|
200
204
|
specification_version: 4
|
201
205
|
summary: Ruby client for web based invoicing service www.fakturoid.cz
|
202
|
-
test_files:
|
203
|
-
- test/api_test.rb
|
204
|
-
- test/config_test.rb
|
205
|
-
- test/fixtures/blocked_account.json
|
206
|
-
- test/fixtures/invoice.json
|
207
|
-
- test/fixtures/invoice.pdf
|
208
|
-
- test/fixtures/invoice_error.json
|
209
|
-
- test/fixtures/subjects.json
|
210
|
-
- test/request_test.rb
|
211
|
-
- test/response_test.rb
|
212
|
-
- test/test_helper.rb
|
206
|
+
test_files: []
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-ruby
|
2
|
-
# https://github.com/actions/starter-workflows/blob/main/ci/ruby.yml
|
3
|
-
|
4
|
-
name: Rubocop
|
5
|
-
on: [push, pull_request]
|
6
|
-
|
7
|
-
jobs:
|
8
|
-
test:
|
9
|
-
runs-on: ubuntu-latest
|
10
|
-
steps:
|
11
|
-
- uses: actions/checkout@v3
|
12
|
-
|
13
|
-
- name: Set up Ruby
|
14
|
-
uses: ruby/setup-ruby@v1
|
15
|
-
with:
|
16
|
-
ruby-version: 3.0
|
17
|
-
bundler-cache: true
|
18
|
-
|
19
|
-
- name: Rubocop
|
20
|
-
run: bundle exec rubocop
|
data/.github/workflows/tests.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-ruby
|
2
|
-
# https://github.com/actions/starter-workflows/blob/main/ci/ruby.yml
|
3
|
-
|
4
|
-
name: Tests
|
5
|
-
on: [push, pull_request]
|
6
|
-
|
7
|
-
jobs:
|
8
|
-
test:
|
9
|
-
|
10
|
-
runs-on: ubuntu-latest
|
11
|
-
strategy:
|
12
|
-
matrix:
|
13
|
-
ruby-version: ['2.6', '2.7', '3.0']
|
14
|
-
|
15
|
-
steps:
|
16
|
-
- uses: actions/checkout@v3
|
17
|
-
|
18
|
-
- name: Set up Ruby
|
19
|
-
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
20
|
-
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
21
|
-
uses: ruby/setup-ruby@v1
|
22
|
-
with:
|
23
|
-
ruby-version: ${{ matrix.ruby-version }}
|
24
|
-
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
25
|
-
|
26
|
-
- name: Run tests
|
27
|
-
run: bundle exec rake
|
data/.gitignore
DELETED
data/Gemfile
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Fakturoid
|
4
|
-
class Api
|
5
|
-
module Arguments
|
6
|
-
def permit_params(params_hash, *permitted_params)
|
7
|
-
params_hash.select { |param, _value| permitted_params.include?(param.to_sym) }
|
8
|
-
end
|
9
|
-
|
10
|
-
def validate_numerical_id(id)
|
11
|
-
raise ArgumentError, "Wrong ID given: #{id}" if !id.is_a?(Integer) && !(id.is_a?(String) && id =~ /\A\d+\z/)
|
12
|
-
true
|
13
|
-
end
|
14
|
-
|
15
|
-
def validate_search_query(query)
|
16
|
-
raise ArgumentError, "Query parameter is required" if query.nil? || query.empty?
|
17
|
-
true
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Fakturoid
|
4
|
-
class Api
|
5
|
-
module HttpMethods
|
6
|
-
def get_request(path, params = {})
|
7
|
-
Request.new(:get, path, self).call(params)
|
8
|
-
end
|
9
|
-
|
10
|
-
def post_request(path, params = {})
|
11
|
-
Request.new(:post, path, self).call(params)
|
12
|
-
end
|
13
|
-
|
14
|
-
def patch_request(path, params = {})
|
15
|
-
Request.new(:patch, path, self).call(params)
|
16
|
-
end
|
17
|
-
|
18
|
-
def delete_request(path, params = {})
|
19
|
-
Request.new(:delete, path, self).call(params)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,19 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Fakturoid
|
4
|
-
module Client
|
5
|
-
class Event < Fakturoid::Api
|
6
|
-
def self.all(params = {})
|
7
|
-
request_params = permit_params(params, :page, :since, :subject_id) || {}
|
8
|
-
|
9
|
-
get_request("events.json", request_params: request_params)
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.paid(params = {})
|
13
|
-
request_params = permit_params(params, :page, :since, :subject_id) || {}
|
14
|
-
|
15
|
-
get_request("events/paid.json", request_params: request_params)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Fakturoid
|
4
|
-
module Client
|
5
|
-
class Expense < Fakturoid::Api
|
6
|
-
def self.all(params = {})
|
7
|
-
request_params = permit_params(params, :page, :since, :updated_since, :number, :variable_symbol, :status, :subject_id, :custom_id) || {}
|
8
|
-
|
9
|
-
get_request("expenses.json", request_params: request_params)
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.find(id)
|
13
|
-
validate_numerical_id(id)
|
14
|
-
get_request("expenses/#{id}.json")
|
15
|
-
end
|
16
|
-
|
17
|
-
def self.search(query, params = {})
|
18
|
-
validate_search_query(query)
|
19
|
-
|
20
|
-
request_params = permit_params(params, :page)
|
21
|
-
request_params[:query] = query
|
22
|
-
|
23
|
-
get_request("expenses/search.json", request_params: request_params)
|
24
|
-
end
|
25
|
-
|
26
|
-
def self.fire(id, event, params = {})
|
27
|
-
request_params = permit_params(params, :paid_on, :paid_amount, :variable_symbol, :bank_account_id) || {}
|
28
|
-
request_params[:event] = event
|
29
|
-
|
30
|
-
validate_numerical_id(id)
|
31
|
-
post_request("expenses/#{id}/fire.json", request_params: request_params)
|
32
|
-
end
|
33
|
-
|
34
|
-
def self.create(payload = {})
|
35
|
-
post_request("expenses.json", payload: payload)
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.update(id, payload = {})
|
39
|
-
validate_numerical_id(id)
|
40
|
-
patch_request("expenses/#{id}.json", payload: payload)
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.delete(id)
|
44
|
-
validate_numerical_id(id)
|
45
|
-
delete_request("expenses/#{id}.json")
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Fakturoid
|
4
|
-
module Client
|
5
|
-
class Generator < Fakturoid::Api
|
6
|
-
def self.all(params = {})
|
7
|
-
request_params = permit_params(params, :page, :since, :updated_since, :subject_id) || {}
|
8
|
-
|
9
|
-
get_request("generators.json", request_params: request_params)
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.recurring(params = {})
|
13
|
-
request_params = permit_params(params, :page, :since, :updated_since, :subject_id) || {}
|
14
|
-
|
15
|
-
get_request("generators/recurring.json", request_params: request_params)
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.template(params = {})
|
19
|
-
request_params = permit_params(params, :page, :since, :updated_since, :subject_id) || {}
|
20
|
-
|
21
|
-
get_request("generators/template.json", request_params: request_params)
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.find(id)
|
25
|
-
validate_numerical_id(id)
|
26
|
-
get_request("generators/#{id}.json")
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.create(payload = {})
|
30
|
-
post_request("generators.json", payload: payload)
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.update(id, payload = {})
|
34
|
-
validate_numerical_id(id)
|
35
|
-
patch_request("generators/#{id}.json", payload: payload)
|
36
|
-
end
|
37
|
-
|
38
|
-
def self.delete(id)
|
39
|
-
validate_numerical_id(id)
|
40
|
-
delete_request("generators/#{id}.json")
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|