karaden-prg-ruby 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.devcontainer/devcontainer.json +45 -0
  3. data/.devcontainer/docker/ruby/Dockerfile +30 -0
  4. data/.devcontainer/docker-compose.yml +16 -0
  5. data/.rspec +3 -0
  6. data/.rubocop.yml +29 -0
  7. data/.vscode/launch.json +32 -0
  8. data/Gemfile +6 -0
  9. data/LICENSE +21 -0
  10. data/README.md +44 -0
  11. data/Rakefile +8 -0
  12. data/lib/karaden/config.rb +78 -0
  13. data/lib/karaden/exception/bad_request_exception.rb +10 -0
  14. data/lib/karaden/exception/forbidden_exception.rb +10 -0
  15. data/lib/karaden/exception/invalid_params_exception.rb +9 -0
  16. data/lib/karaden/exception/invalid_request_options_exception.rb +9 -0
  17. data/lib/karaden/exception/karaden_exception.rb +15 -0
  18. data/lib/karaden/exception/not_found_exception.rb +10 -0
  19. data/lib/karaden/exception/too_many_requests_exception.rb +10 -0
  20. data/lib/karaden/exception/unauthorized_exception.rb +10 -0
  21. data/lib/karaden/exception/unexpected_value_exception.rb +9 -0
  22. data/lib/karaden/exception/unknown_error_exception.rb +9 -0
  23. data/lib/karaden/exception/unprocessable_entity_exception.rb +10 -0
  24. data/lib/karaden/model/collection.rb +15 -0
  25. data/lib/karaden/model/error.rb +19 -0
  26. data/lib/karaden/model/karaden_object.rb +31 -0
  27. data/lib/karaden/model/message.rb +130 -0
  28. data/lib/karaden/model/requestable.rb +22 -0
  29. data/lib/karaden/net/requestor.rb +55 -0
  30. data/lib/karaden/net/requestor_interface.rb +9 -0
  31. data/lib/karaden/net/response.rb +71 -0
  32. data/lib/karaden/net/response_interface.rb +17 -0
  33. data/lib/karaden/param/message/message_cancel_params.rb +70 -0
  34. data/lib/karaden/param/message/message_create_params.rb +152 -0
  35. data/lib/karaden/param/message/message_detail_params.rb +70 -0
  36. data/lib/karaden/param/message/message_list_params.rb +106 -0
  37. data/lib/karaden/param/message/message_params.rb +12 -0
  38. data/lib/karaden/request_options.rb +153 -0
  39. data/lib/karaden/utility.rb +35 -0
  40. data/lib/karaden.rb +36 -0
  41. data/mock/2023-01-01.yaml +776 -0
  42. data/mock/latest +1 -0
  43. data/package-lock.json +3474 -0
  44. data/package.json +21 -0
  45. data/sig/karaden.rbs +0 -0
  46. 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,9 @@
1
+ module Karaden
2
+ module Net
3
+ class RequestorInterface
4
+ def send(method, path, content_type = nil, params = nil, data = nil, request_options = nil)
5
+ raise NotImplementedError
6
+ end
7
+ end
8
+ end
9
+ 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,17 @@
1
+ module Karaden
2
+ module Net
3
+ class ResponseInterface
4
+ def error()
5
+ raise NotImplementedError
6
+ end
7
+
8
+ def object()
9
+ raise NotImplementedError
10
+ end
11
+
12
+ def error?()
13
+ raise NotImplementedError
14
+ end
15
+ end
16
+ end
17
+ 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
@@ -0,0 +1,12 @@
1
+ module Karaden
2
+ module Param
3
+ module Message
4
+ class MessageParams
5
+ CONTEXT_PATH = '/messages'.freeze
6
+ def validate()
7
+ self
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end