cpaas_test_ruby 0.1.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 (64) hide show
  1. checksums.yaml +7 -0
  2. data/.devcontainer/devcontainer.json +38 -0
  3. data/.devcontainer/docker/ruby/Dockerfile +39 -0
  4. data/.devcontainer/docker-compose.yml +17 -0
  5. data/.devcontainer/lifecycle/initialize-command.sh +6 -0
  6. data/.rspec +3 -0
  7. data/.rubocop.yml +34 -0
  8. data/.vscode/launch.json +32 -0
  9. data/Gemfile +6 -0
  10. data/LICENSE +21 -0
  11. data/README.md +2 -0
  12. data/Rakefile +8 -0
  13. data/lib/cpaas_test_ruby/config.rb +78 -0
  14. data/lib/cpaas_test_ruby/exception/bad_request_exception.rb +10 -0
  15. data/lib/cpaas_test_ruby/exception/bulk_message_create_failed_exception.rb +9 -0
  16. data/lib/cpaas_test_ruby/exception/bulk_message_list_message_retry_limit_exceed_exception.rb +9 -0
  17. data/lib/cpaas_test_ruby/exception/bulk_message_show_retry_limit_exceed_exception.rb +9 -0
  18. data/lib/cpaas_test_ruby/exception/file_download_failed_exception.rb +9 -0
  19. data/lib/cpaas_test_ruby/exception/file_not_found_exception.rb +9 -0
  20. data/lib/cpaas_test_ruby/exception/file_upload_failed_exception.rb +9 -0
  21. data/lib/cpaas_test_ruby/exception/forbidden_exception.rb +10 -0
  22. data/lib/cpaas_test_ruby/exception/invalid_params_exception.rb +9 -0
  23. data/lib/cpaas_test_ruby/exception/invalid_request_options_exception.rb +9 -0
  24. data/lib/cpaas_test_ruby/exception/karaden_exception.rb +15 -0
  25. data/lib/cpaas_test_ruby/exception/not_found_exception.rb +10 -0
  26. data/lib/cpaas_test_ruby/exception/too_many_requests_exception.rb +10 -0
  27. data/lib/cpaas_test_ruby/exception/unauthorized_exception.rb +10 -0
  28. data/lib/cpaas_test_ruby/exception/unexpected_value_exception.rb +9 -0
  29. data/lib/cpaas_test_ruby/exception/unknown_error_exception.rb +9 -0
  30. data/lib/cpaas_test_ruby/exception/unprocessable_entity_exception.rb +10 -0
  31. data/lib/cpaas_test_ruby/model/bulk_file.rb +34 -0
  32. data/lib/cpaas_test_ruby/model/bulk_message.rb +53 -0
  33. data/lib/cpaas_test_ruby/model/collection.rb +15 -0
  34. data/lib/cpaas_test_ruby/model/error.rb +19 -0
  35. data/lib/cpaas_test_ruby/model/karaden_object.rb +31 -0
  36. data/lib/cpaas_test_ruby/model/message.rb +134 -0
  37. data/lib/cpaas_test_ruby/model/requestable.rb +29 -0
  38. data/lib/cpaas_test_ruby/net/no_contents_response.rb +80 -0
  39. data/lib/cpaas_test_ruby/net/requestor.rb +55 -0
  40. data/lib/cpaas_test_ruby/net/requestor_interface.rb +9 -0
  41. data/lib/cpaas_test_ruby/net/response.rb +79 -0
  42. data/lib/cpaas_test_ruby/net/response_interface.rb +25 -0
  43. data/lib/cpaas_test_ruby/param/message/bulk/bulk_message_create_params.rb +78 -0
  44. data/lib/cpaas_test_ruby/param/message/bulk/bulk_message_download_params.rb +126 -0
  45. data/lib/cpaas_test_ruby/param/message/bulk/bulk_message_list_message_params.rb +72 -0
  46. data/lib/cpaas_test_ruby/param/message/bulk/bulk_message_params.rb +15 -0
  47. data/lib/cpaas_test_ruby/param/message/bulk/bulk_message_show_params.rb +72 -0
  48. data/lib/cpaas_test_ruby/param/message/message_cancel_params.rb +70 -0
  49. data/lib/cpaas_test_ruby/param/message/message_create_params.rb +152 -0
  50. data/lib/cpaas_test_ruby/param/message/message_detail_params.rb +70 -0
  51. data/lib/cpaas_test_ruby/param/message/message_list_params.rb +106 -0
  52. data/lib/cpaas_test_ruby/param/message/message_params.rb +12 -0
  53. data/lib/cpaas_test_ruby/request_options.rb +142 -0
  54. data/lib/cpaas_test_ruby/service/bulk_message_service.rb +90 -0
  55. data/lib/cpaas_test_ruby/utility.rb +65 -0
  56. data/lib/cpaas_test_ruby.rb +51 -0
  57. data/mock/2023-01-01.yaml +776 -0
  58. data/mock/2023-12-01.yaml +783 -0
  59. data/mock/2024-03-01.yaml +1061 -0
  60. data/mock/latest +1 -0
  61. data/package-lock.json +3474 -0
  62. data/package.json +21 -0
  63. data/sig/karaden.rbs +0 -0
  64. metadata +197 -0
@@ -0,0 +1,90 @@
1
+ module Karaden
2
+ module Service
3
+ class BulkMessageService
4
+ REGEX_PATTERN = /filename="([^"]+)"/
5
+
6
+ def self.create(filename, request_options = nil)
7
+ raise Karaden::Exception::FileNotFoundException unless File.file?(filename)
8
+
9
+ bulk_file = Karaden::Model::BulkFile.create(request_options)
10
+
11
+ Karaden::Utility.put_signed_url(bulk_file.url, filename, 'text/csv', request_options)
12
+
13
+ params = Karaden::Param::Message::Bulk::BulkMessageCreateParams
14
+ .new_builder
15
+ .with_bulk_file_id(bulk_file.id)
16
+ .build
17
+ Karaden::Model::BulkMessage.create(params, request_options)
18
+ end
19
+
20
+ def self.download(params, request_options = nil)
21
+ params.validate
22
+ show_params = Karaden::Param::Message::Bulk::BulkMessageShowParams.new_builder
23
+ .with_id(params.id)
24
+ .build
25
+ unless Karaden::Service::BulkMessageService.check_bulk_message_status(params.max_retries, params.retry_interval, show_params, request_options)
26
+ raise Exception::BulkMessageShowRetryLimitExceedException
27
+ end
28
+
29
+ list_message_params = Param::Message::Bulk::BulkMessageListMessageParams.new_builder
30
+ .with_id(params.id)
31
+ .build
32
+ download_url = Karaden::Service::BulkMessageService.get_download_url(params.max_retries, params.retry_interval, list_message_params, request_options)
33
+ raise Exception::BulkMessageListMessageRetryLimitExceedException if download_url.nil?
34
+
35
+ begin
36
+ Karaden::Service::BulkMessageService.get_contents(download_url, params.directory_path, request_options)
37
+ rescue StandardError
38
+ raise Exception::FileDownloadFailedException
39
+ end
40
+ end
41
+
42
+ def self.get_contents(download_url, directory_path, request_options = nil)
43
+ uri = URI.parse(download_url)
44
+ http = ::Net::HTTP.new(uri.host, uri.port)
45
+ http.use_ssl = uri.scheme == 'https'
46
+ http.open_timeout, http.read_timeout = Karaden::Utility.get_timeout(request_options)
47
+ http.request_get(uri.request_uri) do |response|
48
+ match = response['content-disposition'].match(Karaden::Service::BulkMessageService::REGEX_PATTERN)
49
+ raise Exception::FileDownloadFailedException unless match
50
+
51
+ filename = File.join(File.realpath(directory_path), match[1])
52
+ File.open(filename, 'w') do |file|
53
+ response.read_body do |chunk|
54
+ file.write(chunk)
55
+ end
56
+ end
57
+ end
58
+ true
59
+ end
60
+
61
+ def self.check_bulk_message_status(retry_count, _retry_interval, params, request_options)
62
+ result = false
63
+ (0..retry_count).each do |_count|
64
+ # sleep retry_interval if count.positive?
65
+ bulk_message = Karaden::Model::BulkMessage.show(params, request_options)
66
+ raise Exception::BulkMessageCreateFailedException if bulk_message.status == Karaden::Model::BulkMessage::STATUS_ERROR
67
+
68
+ if bulk_message.status == Karaden::Model::BulkMessage::STATUS_DONE
69
+ result = true
70
+ break
71
+ end
72
+ end
73
+ result
74
+ end
75
+
76
+ def self.get_download_url(retry_count, _retry_interval, params, request_options)
77
+ result = nil
78
+ (0..retry_count).each do |_count|
79
+ # sleep retry_interval if count.positive?
80
+ output = Karaden::Model::BulkMessage.list_message(params, request_options)
81
+ unless output.nil?
82
+ result = output
83
+ break
84
+ end
85
+ end
86
+ result
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,65 @@
1
+ module Karaden
2
+ class Utility
3
+ OBJECT_TYPES = {
4
+ Karaden::Model::Error::OBJECT_NAME => Karaden::Model::Error,
5
+ Karaden::Model::Collection::OBJECT_NAME => Karaden::Model::Collection,
6
+ Karaden::Model::Message::OBJECT_NAME => Karaden::Model::Message,
7
+ Karaden::Model::BulkFile::OBJECT_NAME => Karaden::Model::BulkFile,
8
+ Karaden::Model::BulkMessage::OBJECT_NAME => Karaden::Model::BulkMessage
9
+ }.freeze
10
+ DEFAULT_CONNECTION_TIMEOUT = 10
11
+ DEFAULT_READ_TIMEOUT = 30
12
+
13
+ def self.convert_to_karaden_object(contents, request_options)
14
+ clazz = OBJECT_TYPES[contents['object']] || Karaden::Model::KaradenObject
15
+ construct_from(clazz, contents, request_options)
16
+ end
17
+
18
+ def self.construct_from(clazz, contents, request_options)
19
+ object = clazz.new(contents['id'], request_options)
20
+ contents.each_pair do |key, value|
21
+ v = if value.is_a?(Array)
22
+ convert_to_array(value, request_options)
23
+ elsif value.is_a?(Hash)
24
+ convert_to_karaden_object(value, request_options)
25
+ else
26
+ value
27
+ end
28
+ object.set_property(key, v)
29
+ end
30
+ object
31
+ end
32
+
33
+ def self.convert_to_array(contents, request_options)
34
+ contents.map do |v|
35
+ v.is_a?(Hash) ? convert_to_karaden_object(v, request_options) : v
36
+ end
37
+ end
38
+
39
+ def self.put_signed_url(signed_url, filename, content_type = 'application/octet-stream', request_options = nil)
40
+ uri = URI.parse(signed_url)
41
+ http = ::Net::HTTP.new(uri.host, uri.port)
42
+ http.use_ssl = uri.scheme == 'https'
43
+ http.open_timeout, http.read_timeout = get_timeout(request_options)
44
+
45
+ request = ::Net::HTTP::Put.new(uri.request_uri)
46
+ response = File.open(filename, 'rb') do |f|
47
+ request.body_stream = f
48
+ request['Content-Length'] = f.size
49
+ request['Content-Type'] = content_type
50
+
51
+ http.request(request)
52
+ end
53
+
54
+ raise Karaden::Exception::FileUploadFailedException unless response.code == '200'
55
+ rescue Karaden::Exception::FileUploadFailedException
56
+ raise
57
+ rescue StandardError
58
+ raise Karaden::Exception::FileUploadFailedException
59
+ end
60
+
61
+ def self.get_timeout(request_options = nil)
62
+ [request_options&.connection_timeout || DEFAULT_CONNECTION_TIMEOUT, request_options&.read_timeout || DEFAULT_READ_TIMEOUT]
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'time'
4
+ require 'json'
5
+ require 'net/http'
6
+ require 'uri'
7
+ require 'etc'
8
+
9
+ require_relative 'cpaas_test_ruby/config'
10
+ require_relative 'cpaas_test_ruby/request_options'
11
+ require_relative 'cpaas_test_ruby/exception/karaden_exception'
12
+ require_relative 'cpaas_test_ruby/exception/bad_request_exception'
13
+ require_relative 'cpaas_test_ruby/exception/bulk_message_create_failed_exception'
14
+ require_relative 'cpaas_test_ruby/exception/bulk_message_list_message_retry_limit_exceed_exception'
15
+ require_relative 'cpaas_test_ruby/exception/bulk_message_show_retry_limit_exceed_exception'
16
+ require_relative 'cpaas_test_ruby/exception/forbidden_exception'
17
+ require_relative 'cpaas_test_ruby/exception/file_download_failed_exception'
18
+ require_relative 'cpaas_test_ruby/exception/file_not_found_exception'
19
+ require_relative 'cpaas_test_ruby/exception/file_upload_failed_exception'
20
+ require_relative 'cpaas_test_ruby/exception/not_found_exception'
21
+ require_relative 'cpaas_test_ruby/exception/invalid_request_options_exception'
22
+ require_relative 'cpaas_test_ruby/exception/invalid_params_exception'
23
+ require_relative 'cpaas_test_ruby/exception/too_many_requests_exception'
24
+ require_relative 'cpaas_test_ruby/exception/unexpected_value_exception'
25
+ require_relative 'cpaas_test_ruby/exception/unauthorized_exception'
26
+ require_relative 'cpaas_test_ruby/exception/unknown_error_exception'
27
+ require_relative 'cpaas_test_ruby/exception/unprocessable_entity_exception'
28
+ require_relative 'cpaas_test_ruby/net/requestor_interface'
29
+ require_relative 'cpaas_test_ruby/net/requestor'
30
+ require_relative 'cpaas_test_ruby/net/response_interface'
31
+ require_relative 'cpaas_test_ruby/net/response'
32
+ require_relative 'cpaas_test_ruby/net/no_contents_response'
33
+ require_relative 'cpaas_test_ruby/model/karaden_object'
34
+ require_relative 'cpaas_test_ruby/model/requestable'
35
+ require_relative 'cpaas_test_ruby/model/message'
36
+ require_relative 'cpaas_test_ruby/model/error'
37
+ require_relative 'cpaas_test_ruby/model/collection'
38
+ require_relative 'cpaas_test_ruby/model/bulk_file'
39
+ require_relative 'cpaas_test_ruby/model/bulk_message'
40
+ require_relative 'cpaas_test_ruby/param/message/message_params'
41
+ require_relative 'cpaas_test_ruby/param/message/message_create_params'
42
+ require_relative 'cpaas_test_ruby/param/message/message_cancel_params'
43
+ require_relative 'cpaas_test_ruby/param/message/message_detail_params'
44
+ require_relative 'cpaas_test_ruby/param/message/message_list_params'
45
+ require_relative 'cpaas_test_ruby/param/message/bulk/bulk_message_params'
46
+ require_relative 'cpaas_test_ruby/param/message/bulk/bulk_message_create_params'
47
+ require_relative 'cpaas_test_ruby/param/message/bulk/bulk_message_download_params'
48
+ require_relative 'cpaas_test_ruby/param/message/bulk/bulk_message_list_message_params'
49
+ require_relative 'cpaas_test_ruby/param/message/bulk/bulk_message_show_params'
50
+ require_relative 'cpaas_test_ruby/service/bulk_message_service'
51
+ require_relative 'cpaas_test_ruby/utility'