karaden-prg-ruby 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.devcontainer/devcontainer.json +45 -0
- data/.devcontainer/docker/ruby/Dockerfile +30 -0
- data/.devcontainer/docker-compose.yml +16 -0
- data/.rspec +3 -0
- data/.rubocop.yml +29 -0
- data/.vscode/launch.json +32 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.md +44 -0
- data/Rakefile +8 -0
- data/lib/karaden/config.rb +78 -0
- data/lib/karaden/exception/bad_request_exception.rb +10 -0
- data/lib/karaden/exception/forbidden_exception.rb +10 -0
- data/lib/karaden/exception/invalid_params_exception.rb +9 -0
- data/lib/karaden/exception/invalid_request_options_exception.rb +9 -0
- data/lib/karaden/exception/karaden_exception.rb +15 -0
- data/lib/karaden/exception/not_found_exception.rb +10 -0
- data/lib/karaden/exception/too_many_requests_exception.rb +10 -0
- data/lib/karaden/exception/unauthorized_exception.rb +10 -0
- data/lib/karaden/exception/unexpected_value_exception.rb +9 -0
- data/lib/karaden/exception/unknown_error_exception.rb +9 -0
- data/lib/karaden/exception/unprocessable_entity_exception.rb +10 -0
- data/lib/karaden/model/collection.rb +15 -0
- data/lib/karaden/model/error.rb +19 -0
- data/lib/karaden/model/karaden_object.rb +31 -0
- data/lib/karaden/model/message.rb +130 -0
- data/lib/karaden/model/requestable.rb +22 -0
- data/lib/karaden/net/requestor.rb +55 -0
- data/lib/karaden/net/requestor_interface.rb +9 -0
- data/lib/karaden/net/response.rb +71 -0
- data/lib/karaden/net/response_interface.rb +17 -0
- data/lib/karaden/param/message/message_cancel_params.rb +70 -0
- data/lib/karaden/param/message/message_create_params.rb +152 -0
- data/lib/karaden/param/message/message_detail_params.rb +70 -0
- data/lib/karaden/param/message/message_list_params.rb +106 -0
- data/lib/karaden/param/message/message_params.rb +12 -0
- data/lib/karaden/request_options.rb +153 -0
- data/lib/karaden/utility.rb +35 -0
- data/lib/karaden.rb +36 -0
- data/mock/2023-01-01.yaml +776 -0
- data/mock/latest +1 -0
- data/package-lock.json +3474 -0
- data/package.json +21 -0
- data/sig/karaden.rbs +0 -0
- metadata +178 -0
@@ -0,0 +1,55 @@
|
|
1
|
+
module Karaden
|
2
|
+
module Net
|
3
|
+
class Requestor < RequestorInterface
|
4
|
+
DEFAULT_USER_AGENT = 'Karaden/Ruby/'.freeze
|
5
|
+
|
6
|
+
def send(method, path, content_type = nil, params = nil, data = nil, request_options = nil)
|
7
|
+
request_options = Karaden::RequestOptions.new if request_options.nil?
|
8
|
+
options = Karaden::Config.as_request_options.merge(request_options).validate
|
9
|
+
headers = {
|
10
|
+
'User-Agent': build_user_agent(options),
|
11
|
+
'Karaden-Client-User-Agent': build_client_user_agent,
|
12
|
+
'Karaden-Version' => options.api_version,
|
13
|
+
'Content-Type': content_type,
|
14
|
+
'Authorization': build_authorization(options),
|
15
|
+
}
|
16
|
+
|
17
|
+
uri = URI.parse(build_http_url(path, params, options))
|
18
|
+
http = ::Net::HTTP.new(uri.host, uri.port)
|
19
|
+
http.use_ssl = uri.scheme == 'https'
|
20
|
+
http.open_timeout = options.connection_timeout
|
21
|
+
http.read_timeout = options.read_timeout
|
22
|
+
|
23
|
+
data = URI.encode_www_form(data) unless data.nil?
|
24
|
+
response = http.send_request(method, uri.request_uri, data, headers)
|
25
|
+
|
26
|
+
Karaden::Net::Response.new(response, options)
|
27
|
+
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def build_authorization(request_options)
|
32
|
+
"Bearer #{request_options.api_key}"
|
33
|
+
end
|
34
|
+
|
35
|
+
def build_http_url(path, params, request_options)
|
36
|
+
uri = URI(request_options.base_uri + path)
|
37
|
+
uri.query = URI.encode_www_form(params) unless params.nil?
|
38
|
+
uri.to_s
|
39
|
+
end
|
40
|
+
|
41
|
+
def build_user_agent(request_options)
|
42
|
+
request_options.user_agent || DEFAULT_USER_AGENT + Karaden::Config::VERSION
|
43
|
+
end
|
44
|
+
|
45
|
+
def build_client_user_agent
|
46
|
+
JSON.generate({
|
47
|
+
'bindings_version': Karaden::Config::VERSION,
|
48
|
+
'language': 'Ruby',
|
49
|
+
'language_version': Object::RUBY_VERSION,
|
50
|
+
'uname': Etc.uname.to_s
|
51
|
+
})
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
module Karaden
|
2
|
+
module Net
|
3
|
+
class Response < ResponseInterface
|
4
|
+
ERRORS = {
|
5
|
+
Karaden::Exception::BadRequestException::STATUS_CODE => Karaden::Exception::BadRequestException,
|
6
|
+
Karaden::Exception::UnauthorizedException::STATUS_CODE => Karaden::Exception::UnauthorizedException,
|
7
|
+
Karaden::Exception::NotFoundException::STATUS_CODE => Karaden::Exception::NotFoundException,
|
8
|
+
Karaden::Exception::ForbiddenException::STATUS_CODE => Karaden::Exception::ForbiddenException,
|
9
|
+
Karaden::Exception::UnprocessableEntityException::STATUS_CODE => Karaden::Exception::UnprocessableEntityException,
|
10
|
+
Karaden::Exception::TooManyRequestsException::STATUS_CODE => Karaden::Exception::TooManyRequestsException
|
11
|
+
}.freeze
|
12
|
+
|
13
|
+
def initialize(response, request_options)
|
14
|
+
@error = nil
|
15
|
+
@object = nil
|
16
|
+
super()
|
17
|
+
interpret(response, request_options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def error()
|
21
|
+
@error
|
22
|
+
end
|
23
|
+
|
24
|
+
def object()
|
25
|
+
@object
|
26
|
+
end
|
27
|
+
|
28
|
+
def error?()
|
29
|
+
!@error.nil?
|
30
|
+
end
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def handle_error(code, headers, body, error)
|
35
|
+
clazz = ERRORS[code]
|
36
|
+
object = if clazz
|
37
|
+
clazz.new
|
38
|
+
else
|
39
|
+
UnknownErrorException.new
|
40
|
+
end
|
41
|
+
object.headers = headers
|
42
|
+
object.body = body
|
43
|
+
object.error = error
|
44
|
+
object
|
45
|
+
end
|
46
|
+
|
47
|
+
def interpret(response, request_options)
|
48
|
+
code = response.code.to_i
|
49
|
+
body = response.body
|
50
|
+
headers = response.response.each_header.to_h
|
51
|
+
contents = JSON.parse(response.body)
|
52
|
+
@object = Karaden::Utility.convert_to_karaden_object(contents, request_options)
|
53
|
+
if code < 200 || code >= 400
|
54
|
+
@error = if @object.is_a?(Karaden::Model::Error)
|
55
|
+
handle_error(code, headers, body, @object)
|
56
|
+
else
|
57
|
+
Karaden::Exception::UnexpectedValueException.new
|
58
|
+
end
|
59
|
+
@error.code = code
|
60
|
+
@error.headers = headers
|
61
|
+
@error.body = body
|
62
|
+
end
|
63
|
+
rescue StandardError => _e
|
64
|
+
@error = Karaden::Exception::UnexpectedValueException.new
|
65
|
+
@error.code = code
|
66
|
+
@error.headers = headers
|
67
|
+
@error.body = body
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Karaden
|
2
|
+
module Param
|
3
|
+
module Message
|
4
|
+
class MessageCancelParams < MessageParams
|
5
|
+
attr_accessor :id
|
6
|
+
|
7
|
+
def initialize()
|
8
|
+
@id = nil
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_path
|
13
|
+
"#{CONTEXT_PATH}/#{@id}/cancel"
|
14
|
+
end
|
15
|
+
|
16
|
+
def validate
|
17
|
+
errors = Karaden::Model::KaradenObject.new
|
18
|
+
has_error = false
|
19
|
+
|
20
|
+
messages = validate_id
|
21
|
+
unless messages.empty?
|
22
|
+
errors.set_property('id', messages)
|
23
|
+
has_error = true
|
24
|
+
end
|
25
|
+
|
26
|
+
if has_error
|
27
|
+
e = Karaden::Exception::InvalidParamsException.new
|
28
|
+
error = Karaden::Model::Error.new
|
29
|
+
error.set_property('object', Karaden::Model::Error::OBJECT_NAME)
|
30
|
+
error.set_property('errors', errors)
|
31
|
+
e.error = error
|
32
|
+
raise e
|
33
|
+
end
|
34
|
+
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.new_builder
|
39
|
+
MessageCancelParamsBuilder.new
|
40
|
+
end
|
41
|
+
|
42
|
+
protected
|
43
|
+
|
44
|
+
def validate_id
|
45
|
+
messages = []
|
46
|
+
if @id.nil? || @id == ''
|
47
|
+
messages << 'idは必須です。'
|
48
|
+
messages << '文字列(UUID)を入力してください。'
|
49
|
+
end
|
50
|
+
messages
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class MessageCancelParamsBuilder
|
55
|
+
def initialize
|
56
|
+
@params = MessageCancelParams.new
|
57
|
+
end
|
58
|
+
|
59
|
+
def with_id(id)
|
60
|
+
@params.id = id
|
61
|
+
self
|
62
|
+
end
|
63
|
+
|
64
|
+
def build
|
65
|
+
@params.clone
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
module Karaden
|
2
|
+
module Param
|
3
|
+
module Message
|
4
|
+
class MessageCreateParams < MessageParams
|
5
|
+
attr_accessor :service_id, :to, :body, :tags, :is_shorten, :scheduled_at, :limited_at
|
6
|
+
|
7
|
+
def initialize()
|
8
|
+
@service_id = nil
|
9
|
+
@to = nil
|
10
|
+
@body = nil
|
11
|
+
@tags = nil
|
12
|
+
@is_shorten = nil
|
13
|
+
@scheduled_at = nil
|
14
|
+
@limited_at = nil
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_path
|
19
|
+
CONTEXT_PATH
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_data
|
23
|
+
{
|
24
|
+
service_id: @service_id,
|
25
|
+
to: @to,
|
26
|
+
body: @body,
|
27
|
+
'tags[]' => @tags,
|
28
|
+
is_shorten: if @is_shorten.nil?
|
29
|
+
nil
|
30
|
+
else
|
31
|
+
@is_shorten ? 'true' : 'false'
|
32
|
+
end,
|
33
|
+
scheduled_at: @scheduled_at&.iso8601,
|
34
|
+
limited_at: @limited_at&.iso8601
|
35
|
+
}.reject { |_, value| value.nil? }
|
36
|
+
end
|
37
|
+
|
38
|
+
def validate
|
39
|
+
errors = Karaden::Model::KaradenObject.new
|
40
|
+
has_error = false
|
41
|
+
|
42
|
+
messages = validate_service_id
|
43
|
+
unless messages.empty?
|
44
|
+
errors.set_property('service_id', messages)
|
45
|
+
has_error = true
|
46
|
+
end
|
47
|
+
|
48
|
+
messages = validate_to
|
49
|
+
unless messages.empty?
|
50
|
+
errors.set_property('to', messages)
|
51
|
+
has_error = true
|
52
|
+
end
|
53
|
+
|
54
|
+
messages = validate_body
|
55
|
+
unless messages.empty?
|
56
|
+
errors.set_property('body', messages)
|
57
|
+
has_error = true
|
58
|
+
end
|
59
|
+
|
60
|
+
if has_error
|
61
|
+
e = Karaden::Exception::InvalidParamsException.new
|
62
|
+
error = Karaden::Model::Error.new
|
63
|
+
error.set_property('object', Karaden::Model::Error::OBJECT_NAME)
|
64
|
+
error.set_property('errors', errors)
|
65
|
+
e.error = error
|
66
|
+
raise e
|
67
|
+
end
|
68
|
+
|
69
|
+
self
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.new_builder
|
73
|
+
MessageCreateParamsBuilder.new
|
74
|
+
end
|
75
|
+
|
76
|
+
protected
|
77
|
+
|
78
|
+
def validate_service_id
|
79
|
+
messages = []
|
80
|
+
if @service_id.nil? || @service_id == ''
|
81
|
+
messages << 'service_idは必須です。'
|
82
|
+
messages << '数字を入力してください。'
|
83
|
+
end
|
84
|
+
messages
|
85
|
+
end
|
86
|
+
|
87
|
+
def validate_to
|
88
|
+
messages = []
|
89
|
+
if @to.nil? || @to == ''
|
90
|
+
messages << 'toは必須です。'
|
91
|
+
messages << '文字列を入力してください。'
|
92
|
+
end
|
93
|
+
messages
|
94
|
+
end
|
95
|
+
|
96
|
+
def validate_body
|
97
|
+
messages = []
|
98
|
+
if @body.nil? || @body == ''
|
99
|
+
messages << 'bodyは必須です。'
|
100
|
+
messages << '文字列を入力してください。'
|
101
|
+
end
|
102
|
+
messages
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
class MessageCreateParamsBuilder
|
107
|
+
def initialize
|
108
|
+
@params = MessageCreateParams.new
|
109
|
+
end
|
110
|
+
|
111
|
+
def with_service_id(service_id)
|
112
|
+
@params.service_id = service_id
|
113
|
+
self
|
114
|
+
end
|
115
|
+
|
116
|
+
def with_to(to)
|
117
|
+
@params.to = to
|
118
|
+
self
|
119
|
+
end
|
120
|
+
|
121
|
+
def with_body(body)
|
122
|
+
@params.body = body
|
123
|
+
self
|
124
|
+
end
|
125
|
+
|
126
|
+
def with_tags(tags)
|
127
|
+
@params.tags = tags
|
128
|
+
self
|
129
|
+
end
|
130
|
+
|
131
|
+
def with_is_shorten(is_shorten)
|
132
|
+
@params.is_shorten = is_shorten
|
133
|
+
self
|
134
|
+
end
|
135
|
+
|
136
|
+
def with_scheduled_at(scheduled_at)
|
137
|
+
@params.scheduled_at = scheduled_at
|
138
|
+
self
|
139
|
+
end
|
140
|
+
|
141
|
+
def with_limited_at(limited_at)
|
142
|
+
@params.limited_at = limited_at
|
143
|
+
self
|
144
|
+
end
|
145
|
+
|
146
|
+
def build
|
147
|
+
@params.clone
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module Karaden
|
2
|
+
module Param
|
3
|
+
module Message
|
4
|
+
class MessageDetailParams < MessageParams
|
5
|
+
attr_accessor :id
|
6
|
+
|
7
|
+
def initialize()
|
8
|
+
@id = nil
|
9
|
+
super
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_path
|
13
|
+
"#{CONTEXT_PATH}/#{@id}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def validate
|
17
|
+
errors = Karaden::Model::KaradenObject.new
|
18
|
+
has_error = false
|
19
|
+
|
20
|
+
messages = validate_id
|
21
|
+
unless messages.empty?
|
22
|
+
errors.set_property('id', messages)
|
23
|
+
has_error = true
|
24
|
+
end
|
25
|
+
|
26
|
+
if has_error
|
27
|
+
e = Karaden::Exception::InvalidParamsException.new
|
28
|
+
error = Karaden::Model::Error.new
|
29
|
+
error.set_property('object', Karaden::Model::Error::OBJECT_NAME)
|
30
|
+
error.set_property('errors', errors)
|
31
|
+
e.error = error
|
32
|
+
raise e
|
33
|
+
end
|
34
|
+
|
35
|
+
self
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.new_builder
|
39
|
+
MessageDetailParamsBuilder.new
|
40
|
+
end
|
41
|
+
|
42
|
+
protected
|
43
|
+
|
44
|
+
def validate_id
|
45
|
+
messages = []
|
46
|
+
if @id.nil? || @id == ''
|
47
|
+
messages << 'idは必須です。'
|
48
|
+
messages << '文字列(UUID)を入力してください。'
|
49
|
+
end
|
50
|
+
messages
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class MessageDetailParamsBuilder
|
55
|
+
def initialize
|
56
|
+
@params = MessageDetailParams.new
|
57
|
+
end
|
58
|
+
|
59
|
+
def with_id(id)
|
60
|
+
@params.id = id
|
61
|
+
self
|
62
|
+
end
|
63
|
+
|
64
|
+
def build
|
65
|
+
@params.clone
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
module Karaden
|
2
|
+
module Param
|
3
|
+
module Message
|
4
|
+
class MessageListParams < MessageParams
|
5
|
+
attr_accessor :service_id, :to, :status, :result, :sent_result, :tag, :start_at, :end_at, :page, :per_page
|
6
|
+
|
7
|
+
def initialize()
|
8
|
+
@service_id = nil
|
9
|
+
@to = nil
|
10
|
+
@status = nil
|
11
|
+
@result = nil
|
12
|
+
@sent_result = nil
|
13
|
+
@tag = nil
|
14
|
+
@start_at = nil
|
15
|
+
@end_at = nil
|
16
|
+
@page = nil
|
17
|
+
@per_page = nil
|
18
|
+
super
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_path
|
22
|
+
CONTEXT_PATH
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_params
|
26
|
+
{
|
27
|
+
service_id: @service_id,
|
28
|
+
to: @to,
|
29
|
+
status: @status,
|
30
|
+
result: @result,
|
31
|
+
sent_result: @sent_result,
|
32
|
+
tag: @tag,
|
33
|
+
start_at: @start_at&.iso8601,
|
34
|
+
end_at: @end_at&.iso8601,
|
35
|
+
page: @page,
|
36
|
+
per_page: @per_page
|
37
|
+
}.reject { |_, value| value.nil? }
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.new_builder
|
41
|
+
MessageListParamsBuilder.new
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class MessageListParamsBuilder
|
46
|
+
def initialize
|
47
|
+
@params = MessageListParams.new
|
48
|
+
end
|
49
|
+
|
50
|
+
def with_service_id(service_id)
|
51
|
+
@params.service_id = service_id
|
52
|
+
self
|
53
|
+
end
|
54
|
+
|
55
|
+
def with_to(to)
|
56
|
+
@params.to = to
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
def with_status(status)
|
61
|
+
@params.status = status
|
62
|
+
self
|
63
|
+
end
|
64
|
+
|
65
|
+
def with_result(result)
|
66
|
+
@params.result = result
|
67
|
+
self
|
68
|
+
end
|
69
|
+
|
70
|
+
def with_sent_result(sent_result)
|
71
|
+
@params.sent_result = sent_result
|
72
|
+
self
|
73
|
+
end
|
74
|
+
|
75
|
+
def with_tag(tag)
|
76
|
+
@params.tag = tag
|
77
|
+
self
|
78
|
+
end
|
79
|
+
|
80
|
+
def with_start_at(start_at)
|
81
|
+
@params.start_at = start_at
|
82
|
+
self
|
83
|
+
end
|
84
|
+
|
85
|
+
def with_end_at(end_at)
|
86
|
+
@params.end_at = end_at
|
87
|
+
self
|
88
|
+
end
|
89
|
+
|
90
|
+
def with_page(page)
|
91
|
+
@params.page = page
|
92
|
+
self
|
93
|
+
end
|
94
|
+
|
95
|
+
def with_per_page(per_page)
|
96
|
+
@params.per_page = per_page
|
97
|
+
self
|
98
|
+
end
|
99
|
+
|
100
|
+
def build
|
101
|
+
@params.clone
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|