karaden-prg-ruby 1.0.0

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.
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