kaze_client 0.1.1p0
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.
- checksums.yaml +7 -0
- data/.github/workflows/main.yml +18 -0
- data/.gitignore +16 -0
- data/.rspec +3 -0
- data/.rubocop.yml +2 -0
- data/CHANGELOG.md +16 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +12 -0
- data/Gemfile.lock +64 -0
- data/LICENSE.txt +21 -0
- data/README.md +37 -0
- data/Rakefile +12 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/kaze_client.gemspec +36 -0
- data/lib/activesupport/blank.rb +155 -0
- data/lib/activesupport/camelize.rb +32 -0
- data/lib/kaze_client/client.rb +99 -0
- data/lib/kaze_client/error/disabled_account.rb +13 -0
- data/lib/kaze_client/error/forbidden.rb +13 -0
- data/lib/kaze_client/error/generic.rb +29 -0
- data/lib/kaze_client/error/internal_server_error.rb +13 -0
- data/lib/kaze_client/error/invalid_credentials.rb +13 -0
- data/lib/kaze_client/error/no_endpoint.rb +19 -0
- data/lib/kaze_client/error/no_private_token.rb +13 -0
- data/lib/kaze_client/error/not_found.rb +13 -0
- data/lib/kaze_client/error/unauthorized.rb +13 -0
- data/lib/kaze_client/errors.rb +12 -0
- data/lib/kaze_client/request/request.rb +113 -0
- data/lib/kaze_client/request/requests/assign_performer_request.rb +23 -0
- data/lib/kaze_client/request/requests/create_job_request.rb +32 -0
- data/lib/kaze_client/request/requests/job_request.rb +17 -0
- data/lib/kaze_client/request/requests/job_workflow_request.rb +25 -0
- data/lib/kaze_client/request/requests/job_workflows_request.rb +19 -0
- data/lib/kaze_client/request/requests/jobs_request.rb +18 -0
- data/lib/kaze_client/request/requests/login_request.rb +28 -0
- data/lib/kaze_client/request/requests/partners_request.rb +19 -0
- data/lib/kaze_client/request/requests/profile_request.rb +17 -0
- data/lib/kaze_client/request/requests/update_template_request.rb +19 -0
- data/lib/kaze_client/request/requests/utils/authentified_request.rb +25 -0
- data/lib/kaze_client/request/requests/utils/final_request.rb +13 -0
- data/lib/kaze_client/request/requests/utils/list_request.rb +120 -0
- data/lib/kaze_client/requests.rb +23 -0
- data/lib/kaze_client/response.rb +34 -0
- data/lib/kaze_client/version.rb +5 -0
- data/lib/kaze_client.rb +17 -0
- metadata +114 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
module Error
|
5
|
+
# @author ciappa_m@modulotech.fr
|
6
|
+
# Generic 403 error sent by Kaze server
|
7
|
+
class Forbidden < Generic
|
8
|
+
def initialize(msg = '403 Forbidden')
|
9
|
+
super(status: :forbidden, message: msg)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @since 0.1.0
|
5
|
+
module Error
|
6
|
+
# @author ciappa_m@modulotech.fr
|
7
|
+
# Generic error raised when Kaze server send an unknown error. By default, it is considered
|
8
|
+
# to be an internal server error.
|
9
|
+
class Generic < RuntimeError
|
10
|
+
# @return [Symbol] The HTTP status sent by the server
|
11
|
+
attr_reader :status
|
12
|
+
|
13
|
+
# @return [String] if the server sent a custom error code
|
14
|
+
# @return [Symbol] if the server sent no code, it is the HTTP status sent by the server
|
15
|
+
attr_reader :error
|
16
|
+
|
17
|
+
# The default error message
|
18
|
+
DEFAULT_MESSAGE = 'An unknown error occured'
|
19
|
+
|
20
|
+
def initialize(status: :internal_server_error, error: nil,
|
21
|
+
message: DEFAULT_MESSAGE)
|
22
|
+
super(message || DEFAULT_MESSAGE)
|
23
|
+
|
24
|
+
@status = status || :internal_server_error
|
25
|
+
@error = error || @status
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
module Error
|
5
|
+
# @author ciappa_m@modulotech.fr
|
6
|
+
# Generic 500 error sent by Kaze server
|
7
|
+
class InternalServerError < Generic
|
8
|
+
def initialize(msg = 'An unknown error occured')
|
9
|
+
super(message: msg)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
module Error
|
5
|
+
# @author ciappa_m@modulotech.fr
|
6
|
+
# 401 error sent by Kaze server when trying to log in with invalid credentials
|
7
|
+
class InvalidCredentials < Unauthorized
|
8
|
+
def initialize(msg = 'Invalid Login or Password')
|
9
|
+
super(msg)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
module Error
|
5
|
+
# @author ciappa_m@modulotech.fr
|
6
|
+
# An error raised when the base URL given to the +KazeClient::Client+ is nil
|
7
|
+
# @see KazeClient::Client
|
8
|
+
class NoEndpoint < Generic
|
9
|
+
# @return the given base URL
|
10
|
+
attr_reader :base_url
|
11
|
+
|
12
|
+
def initialize(base_url)
|
13
|
+
super(status: nil, message: "Invalid base url +#{base_url}+", error: nil)
|
14
|
+
|
15
|
+
@base_url = base_url
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
module Error
|
5
|
+
# @author ciappa_m@modulotech.fr
|
6
|
+
# 403 error sent by Kaze server when trying to log in and user has no token
|
7
|
+
class NoPrivateToken < Forbidden
|
8
|
+
def initialize(msg = 'User has no private token assigned')
|
9
|
+
super(msg)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
module Error
|
5
|
+
# @author ciappa_m@modulotech.fr
|
6
|
+
# 404 error sent by Kaze server
|
7
|
+
class NotFound < Generic
|
8
|
+
def initialize(msg = '404 Not Found')
|
9
|
+
super(status: :not_found, message: msg)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
module Error
|
5
|
+
# @author ciappa_m@modulotech.fr
|
6
|
+
# Generic 401 error sent by Kaze server
|
7
|
+
class Unauthorized < Generic
|
8
|
+
def initialize(msg = '401 Unauthorized')
|
9
|
+
super(status: :unauthorized, message: msg)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Require the error classes
|
4
|
+
require_relative 'error/generic'
|
5
|
+
require_relative 'error/unauthorized'
|
6
|
+
require_relative 'error/forbidden'
|
7
|
+
require_relative 'error/not_found'
|
8
|
+
require_relative 'error/internal_server_error'
|
9
|
+
require_relative 'error/disabled_account'
|
10
|
+
require_relative 'error/invalid_credentials'
|
11
|
+
require_relative 'error/no_endpoint'
|
12
|
+
require_relative 'error/no_private_token'
|
@@ -0,0 +1,113 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# Represents request to a Kaze API
|
6
|
+
# @see KazeClient::Client
|
7
|
+
# @see KazeClient::Response
|
8
|
+
# @since 0.1.0
|
9
|
+
class Request
|
10
|
+
# Those headers are added on all requests by default
|
11
|
+
DEFAULT_HEADERS = {
|
12
|
+
'Content-Type' => 'application/json',
|
13
|
+
'Accept' => 'application/json'
|
14
|
+
}.freeze
|
15
|
+
|
16
|
+
# @return [String, Symbol] The HTTP verb to use for the request
|
17
|
+
# @example Common HTTP verbs
|
18
|
+
# [:get, :post, :put, :patch, :delete]
|
19
|
+
attr_reader :method
|
20
|
+
|
21
|
+
# @return [String] The API endpoint
|
22
|
+
# @example To get the list of companies
|
23
|
+
# '/api/companies'
|
24
|
+
attr_reader :url
|
25
|
+
|
26
|
+
# @return [nil, Hash] The query parameters for the request
|
27
|
+
# @example Page parameters from KazeClient::Utils::ListRequest
|
28
|
+
# { page: 1, per_page: 20 }
|
29
|
+
attr_accessor :query
|
30
|
+
|
31
|
+
# @return [nil, Hash, String] The body for the request
|
32
|
+
# @example Login data from KazeClient::LoginRequest
|
33
|
+
# { user: { login: 'test', password: 'test' } }
|
34
|
+
# "{\"user\":{\"login\":\"test\",\"password\":\"test\"}}"
|
35
|
+
attr_accessor :body
|
36
|
+
|
37
|
+
# @return [nil, Hash] The headers for the request
|
38
|
+
# @example Default headers from any KazeClient::Request
|
39
|
+
# { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }
|
40
|
+
attr_accessor :headers
|
41
|
+
|
42
|
+
# @param method [Symbol] The HTTP verb to use for the request (e.g. :get)
|
43
|
+
# @param url [String] The API endpoint (e.g. /jobs)
|
44
|
+
def initialize(method, url)
|
45
|
+
@method = method
|
46
|
+
@url = url
|
47
|
+
@query = nil
|
48
|
+
@body = nil
|
49
|
+
@headers = {}
|
50
|
+
end
|
51
|
+
|
52
|
+
# @return [Hash] The arguments to give to the HTTParty call
|
53
|
+
# @example For instance, when +@body+ is blank
|
54
|
+
# {
|
55
|
+
# query: { page: 1, per_page: 20 },
|
56
|
+
# headers: { 'Content-Type' => 'application/json', 'Accept' => 'application/json' }
|
57
|
+
# }
|
58
|
+
def parameters
|
59
|
+
{
|
60
|
+
query: make_query, body: make_body, headers: make_headers
|
61
|
+
}.reject { |_k, v| v.blank? }
|
62
|
+
end
|
63
|
+
|
64
|
+
# @param response [HTTParty::Response] The response object from HTTParty call
|
65
|
+
# @return [KazeClient::Error::Generic] The adequate error object according to the given response
|
66
|
+
def error_for(response)
|
67
|
+
# Not found is handled in a specific way since there is no message key and the error has a
|
68
|
+
# specific format
|
69
|
+
return KazeClient::Error::NotFound.new if response.code == 404
|
70
|
+
|
71
|
+
# Return the adequate error class for the error code in the response
|
72
|
+
"KazeClient::Error::#{response.parsed_response['error'].camelize}"
|
73
|
+
.constantize.new(response.parsed_response['message'])
|
74
|
+
rescue NameError
|
75
|
+
# This means no error class exists for the error code in the response, we fallback to a
|
76
|
+
# generic error
|
77
|
+
Error::Generic.new(status: response.code,
|
78
|
+
error: response.parsed_response['error'],
|
79
|
+
message: response.parsed_response['message'])
|
80
|
+
end
|
81
|
+
|
82
|
+
protected
|
83
|
+
|
84
|
+
# @return [Hash] The headers for the request
|
85
|
+
# If +@headers+ is blank or is not a Hash, it returns the +DEFAULT_HEADERS+. Else it merges
|
86
|
+
# the +DEFAULT_HEADERS+ with +@headers+ allowing +@headers+ to override +DEFAULT_HEADERS+.
|
87
|
+
def make_headers
|
88
|
+
return DEFAULT_HEADERS if @headers.blank? || !@headers.is_a?(Hash)
|
89
|
+
|
90
|
+
DEFAULT_HEADERS.merge(@headers)
|
91
|
+
end
|
92
|
+
|
93
|
+
# @return [nil, String] The body for the request
|
94
|
+
# +String+ will be sent as-is while +Hash+ will be transformed to a JSON string.
|
95
|
+
def make_body
|
96
|
+
return nil if @body.blank?
|
97
|
+
|
98
|
+
case @body
|
99
|
+
when String
|
100
|
+
@body
|
101
|
+
when Hash
|
102
|
+
@body.to_json
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
# @return [nil, Hash] The query parameters for the request
|
107
|
+
def make_query
|
108
|
+
return nil if @query.blank?
|
109
|
+
|
110
|
+
@query
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# Assign a performer to the given job.
|
6
|
+
# @see KazeClient::Request
|
7
|
+
# @see KazeClient::Utils::FinalRequest
|
8
|
+
# @see KazeClient::Utils::AuthentifiedRequest
|
9
|
+
# @since 0.1.0
|
10
|
+
class AssignPerformerRequest < Utils::FinalRequest
|
11
|
+
include Utils::AuthentifiedRequest
|
12
|
+
|
13
|
+
def initialize(id, performer_user_id)
|
14
|
+
super(:post, "api/jobs/#{id}/performers")
|
15
|
+
|
16
|
+
@body = {
|
17
|
+
job: {
|
18
|
+
performer_user_id: performer_user_id.to_s
|
19
|
+
}
|
20
|
+
}
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# Create a job from the current user to the target company.
|
6
|
+
# @see KazeClient::Request
|
7
|
+
# @see KazeClient::Utils::FinalRequest
|
8
|
+
# @see KazeClient::Utils::AuthentifiedRequest
|
9
|
+
# @since 0.1.0
|
10
|
+
class CreateJobRequest < Utils::FinalRequest
|
11
|
+
include Utils::AuthentifiedRequest
|
12
|
+
|
13
|
+
# @return [String] The id of the target company.
|
14
|
+
attr_reader :target_id
|
15
|
+
|
16
|
+
# @return [Hash] The workflow used to create the job.
|
17
|
+
attr_reader :workflow
|
18
|
+
|
19
|
+
# @param target_id [String] The id of the target company.
|
20
|
+
# @param workflow [Hash] The workflow to use to create the job.
|
21
|
+
def initialize(target_id, workflow)
|
22
|
+
super(:post, 'api/jobs')
|
23
|
+
|
24
|
+
@target_id = target_id
|
25
|
+
@workflow = workflow
|
26
|
+
@body = {
|
27
|
+
target_id: @target_id,
|
28
|
+
workflow: @workflow
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# Fetch the details for the given job id.
|
6
|
+
# @see KazeClient::Request
|
7
|
+
# @see KazeClient::Utils::FinalRequest
|
8
|
+
# @see KazeClient::Utils::AuthentifiedRequest
|
9
|
+
# @since 0.1.0
|
10
|
+
class JobRequest < Utils::FinalRequest
|
11
|
+
include Utils::AuthentifiedRequest
|
12
|
+
|
13
|
+
def initialize(id)
|
14
|
+
super(:get, "api/jobs/#{id}")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# Request the details about a specific workflow.
|
6
|
+
# @see KazeClient::Request
|
7
|
+
# @see KazeClient::Utils::FinalRequest
|
8
|
+
# @see KazeClient::Utils::AuthentifiedRequest
|
9
|
+
# @since 0.1.0
|
10
|
+
class JobWorkflowRequest < Utils::FinalRequest
|
11
|
+
include Utils::AuthentifiedRequest
|
12
|
+
|
13
|
+
# @return [String] The id of the workflow to request
|
14
|
+
attr_reader :id
|
15
|
+
|
16
|
+
# @param id [String] Set the id of the workflow to request
|
17
|
+
def initialize(id)
|
18
|
+
super(:get, "api/job_workflows/#{id}")
|
19
|
+
|
20
|
+
@id = id
|
21
|
+
@query = {}
|
22
|
+
@filters = {}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# Request the list of job workflows for the current user.
|
6
|
+
# @see KazeClient::Request
|
7
|
+
# @see KazeClient::Utils::FinalRequest
|
8
|
+
# @see KazeClient::Utils::AuthentifiedRequest
|
9
|
+
# @see KazeClient::Utils::ListRequest
|
10
|
+
# @since 0.1.0
|
11
|
+
class JobWorkflowsRequest < Utils::FinalRequest
|
12
|
+
include Utils::AuthentifiedRequest
|
13
|
+
include Utils::ListRequest
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
super(:get, 'api/job_workflows')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# List the jobs assigned to the current user's company.
|
6
|
+
# @see KazeClient::Request
|
7
|
+
# @see KazeClient::Utils::FinalRequest
|
8
|
+
# @see KazeClient::Utils::AuthentifiedRequest
|
9
|
+
# @since 0.1.0
|
10
|
+
class JobsRequest < Utils::FinalRequest
|
11
|
+
include Utils::AuthentifiedRequest
|
12
|
+
include Utils::ListRequest
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
super(:get, 'api/jobs')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# Authenticate a user on the server.
|
6
|
+
# @see KazeClient::Request
|
7
|
+
# @see KazeClient::Utils::FinalRequest
|
8
|
+
# @since 0.1.0
|
9
|
+
class LoginRequest < Utils::FinalRequest
|
10
|
+
# @return [String] The user login.
|
11
|
+
attr_reader :login
|
12
|
+
|
13
|
+
# @param login [String] The user login.
|
14
|
+
# @param password [String] The user password.
|
15
|
+
def initialize(login:, password:)
|
16
|
+
super(:post, 'api/login')
|
17
|
+
|
18
|
+
@login = login
|
19
|
+
@password = password
|
20
|
+
@body = {
|
21
|
+
user: {
|
22
|
+
login: @login,
|
23
|
+
password: @password
|
24
|
+
}
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# Request the list of companies.
|
6
|
+
# @see KazeClient::Request
|
7
|
+
# @see KazeClient::Utils::FinalRequest
|
8
|
+
# @see KazeClient::Utils::AuthentifiedRequest
|
9
|
+
# @see KazeClient::Utils::ListRequest
|
10
|
+
# @since 0.1.0
|
11
|
+
class PartnersRequest < Utils::FinalRequest
|
12
|
+
include Utils::AuthentifiedRequest
|
13
|
+
include Utils::ListRequest
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
super(:get, 'api/partners')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# Request data about the current user.
|
6
|
+
# @see KazeClient::Request
|
7
|
+
# @see KazeClient::Utils::FinalRequest
|
8
|
+
# @see KazeClient::Utils::AuthentifiedRequest
|
9
|
+
# @since 0.1.0
|
10
|
+
class ProfileRequest < Utils::FinalRequest
|
11
|
+
include Utils::AuthentifiedRequest
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
super(:get, 'api/profile')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @author ciappa_m@modulotech.fr
|
5
|
+
# Update data of the given template on the given job.
|
6
|
+
# @see KazeClient::Request
|
7
|
+
# @see KazeClient::Utils::FinalRequest
|
8
|
+
# @see KazeClient::Utils::AuthentifiedRequest
|
9
|
+
# @since 0.1.0
|
10
|
+
class UpdateTemplateRequest < Utils::FinalRequest
|
11
|
+
include Utils::AuthentifiedRequest
|
12
|
+
|
13
|
+
def initialize(id, template_id, body)
|
14
|
+
super(:put, "api/performer/jobs/#{id}/templates/#{template_id}")
|
15
|
+
|
16
|
+
@body = body
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
# @since 0.1.0
|
5
|
+
module Utils
|
6
|
+
# @author ciappa_m@modulotech.fr
|
7
|
+
# Included by the request where an authentication token is required.
|
8
|
+
# @see KazeClient::Request
|
9
|
+
module AuthentifiedRequest
|
10
|
+
# @return [String] The authentication token
|
11
|
+
attr_reader :token
|
12
|
+
|
13
|
+
# Store the given authentication token and use it to set the +Authorization+ header of the
|
14
|
+
# request.
|
15
|
+
# @param token [String] The authentication token
|
16
|
+
# @return [KazeClient::Utils::AuthentifiedRequest] self (to chain methods)
|
17
|
+
def with_token(token)
|
18
|
+
@token = token
|
19
|
+
@headers['Authorization'] = token
|
20
|
+
|
21
|
+
self
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
module Utils
|
5
|
+
# @author ciappa_m@modulotech.fr
|
6
|
+
# Set the request as final, disabling the edition of query parameters, headers and request body.
|
7
|
+
# @see KazeClient::Request
|
8
|
+
class FinalRequest < Request
|
9
|
+
# Remove write access inherited from Request
|
10
|
+
undef_method :query=, :body=, :headers=
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module KazeClient
|
4
|
+
module Utils
|
5
|
+
# @author ciappa_m@modulotech.fr
|
6
|
+
# Included by the request where a list will be returned.
|
7
|
+
# @see KazeClient::Request
|
8
|
+
module ListRequest
|
9
|
+
# @return [Integer,String] The page to fetch.
|
10
|
+
attr_reader :page
|
11
|
+
|
12
|
+
# @return [Integer] The number of items to fetch by page; between 1 and 100.
|
13
|
+
attr_reader :per_page
|
14
|
+
|
15
|
+
# @return [String] The field to use for the list order.
|
16
|
+
attr_reader :order_field
|
17
|
+
|
18
|
+
# @return ['asc', 'desc'] The direction of the order.
|
19
|
+
attr_reader :order_direction
|
20
|
+
|
21
|
+
# @return [Hash] The filters to apply to the query.
|
22
|
+
attr_reader :filters
|
23
|
+
|
24
|
+
def initialize(method, url)
|
25
|
+
super(method, url)
|
26
|
+
|
27
|
+
@query ||= {}
|
28
|
+
@filters ||= {}
|
29
|
+
end
|
30
|
+
|
31
|
+
# @param page [Integer,String] Set the page to fetch
|
32
|
+
# @return [KazeClient::Utils::ListRequest] self (to chain methods)
|
33
|
+
def add_page(page)
|
34
|
+
# Ensure the +per_page+ parameter is valid; default is 1
|
35
|
+
@page = if !page.is_a?(Numeric) || page.to_i < 1
|
36
|
+
1
|
37
|
+
else
|
38
|
+
page
|
39
|
+
end
|
40
|
+
|
41
|
+
@query[:page] = @page
|
42
|
+
|
43
|
+
self
|
44
|
+
end
|
45
|
+
|
46
|
+
# @param per_page [Integer,String] Set the number of items to fetch per page
|
47
|
+
# @return [KazeClient::Utils::ListRequest] self (to chain methods)
|
48
|
+
def add_per_page(per_page)
|
49
|
+
# Ensure the +per_page+ parameter is between 1 and 100
|
50
|
+
@per_page = if !per_page.is_a?(Numeric) || per_page.to_i < 1
|
51
|
+
1
|
52
|
+
elsif per_page > 100
|
53
|
+
100
|
54
|
+
else
|
55
|
+
per_page
|
56
|
+
end
|
57
|
+
|
58
|
+
@query[:per_page] = @per_page
|
59
|
+
|
60
|
+
self
|
61
|
+
end
|
62
|
+
|
63
|
+
# @param field [String] Set the field to use for the list order
|
64
|
+
# @return [KazeClient::Utils::ListRequest] self (to chain methods)
|
65
|
+
def add_order_field(field)
|
66
|
+
@order_field = field
|
67
|
+
@query[:order_field] = @order_field
|
68
|
+
|
69
|
+
self
|
70
|
+
end
|
71
|
+
|
72
|
+
# @param direction ['asc','desc'] Set the direction of the order.
|
73
|
+
# @return [KazeClient::Utils::ListRequest] self (to chain methods)
|
74
|
+
def add_order_direction(direction)
|
75
|
+
# Ensure the +direction+ parameter is valid; default direction is ascendant
|
76
|
+
@order_direction = %w[asc desc].include?(direction.to_s) ? direction.to_s : 'asc'
|
77
|
+
|
78
|
+
@query[:order_direction] = @order_direction
|
79
|
+
|
80
|
+
self
|
81
|
+
end
|
82
|
+
|
83
|
+
# @!method filter_by_id(value)
|
84
|
+
# This is an example. Any method beginning with +filter_by_+ is valid and defined using
|
85
|
+
# +method_missing+. This adds a filter on the string following +filter_by_+ to the query.
|
86
|
+
# @param value [String] Add a filter to the query.
|
87
|
+
# @return [KazeClient::Utils::ListRequest] self (to chain methods)
|
88
|
+
# @example To filter on id then on name
|
89
|
+
# filter_by_id(2).filter_by_name('foo')
|
90
|
+
def method_missing(method_name, *args, &block)
|
91
|
+
match_data = method_name.match(/^filter_by_(\w+)/)
|
92
|
+
|
93
|
+
# Match_data[0] is the whole match while match_data[1] is the first capture group; here
|
94
|
+
# it is the field to filter on.
|
95
|
+
# Only the first given argument is considered to be the value to filter on. Possible
|
96
|
+
# subsequent arguments are ignored.
|
97
|
+
match_data ? filter_by(match_data[1], args[0]) : super
|
98
|
+
end
|
99
|
+
|
100
|
+
def respond_to_missing?(method_name, include_private = false)
|
101
|
+
method_name.match?(/^filter_by_/) || super
|
102
|
+
end
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
def filter_by(field, value)
|
107
|
+
# Initialize the filters Hash if needed
|
108
|
+
# @filters ||= {}
|
109
|
+
|
110
|
+
# Store the filter
|
111
|
+
@filters[field] = value
|
112
|
+
|
113
|
+
# Set the filter on the query parameters
|
114
|
+
@query["filter[#{field}]"] = value
|
115
|
+
|
116
|
+
self
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# The base request object - for custom/newest APIs
|
4
|
+
require_relative 'request/request'
|
5
|
+
|
6
|
+
# Modules included in requests
|
7
|
+
require_relative 'request/requests/utils/authentified_request'
|
8
|
+
require_relative 'request/requests/utils/list_request'
|
9
|
+
|
10
|
+
# The base object for pre-crafted requests
|
11
|
+
require_relative 'request/requests/utils/final_request'
|
12
|
+
|
13
|
+
# The pre-crafted requests
|
14
|
+
require_relative 'request/requests/assign_performer_request'
|
15
|
+
require_relative 'request/requests/partners_request'
|
16
|
+
require_relative 'request/requests/create_job_request'
|
17
|
+
require_relative 'request/requests/job_request'
|
18
|
+
require_relative 'request/requests/job_workflow_request'
|
19
|
+
require_relative 'request/requests/job_workflows_request'
|
20
|
+
require_relative 'request/requests/jobs_request'
|
21
|
+
require_relative 'request/requests/login_request'
|
22
|
+
require_relative 'request/requests/profile_request'
|
23
|
+
require_relative 'request/requests/update_template_request'
|