diff --git a/Gemfile.lock b/Gemfile.lock index 11bb37c..f3dca5b 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - groupdocs_conversion_cloud (23.7) + groupdocs_conversion_cloud (23.8) addressable (~> 2.8.0, >= 2.8.0) faraday (~> 0.14.0) diff --git a/README.md b/README.md index c3e771b..f678de8 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ gem install groupdocs_conversion_cloud To add dependency to your app copy following into your Gemfile and run `bundle install`: ``` -gem "groupdocs_conversion_cloud", "~> 23.7" +gem "groupdocs_conversion_cloud", "~> 23.8" ``` ## Getting Started diff --git a/lib/groupdocs_conversion_cloud.rb b/lib/groupdocs_conversion_cloud.rb index cf6d2a0..ba07b50 100644 --- a/lib/groupdocs_conversion_cloud.rb +++ b/lib/groupdocs_conversion_cloud.rb @@ -25,11 +25,13 @@ # Common files require_relative 'groupdocs_conversion_cloud/api_client' -require_relative 'groupdocs_conversion_cloud/api_error' +require_relative 'groupdocs_conversion_cloud/api_client_error' require_relative 'groupdocs_conversion_cloud/version' require_relative 'groupdocs_conversion_cloud/configuration' # Models +require_relative 'groupdocs_conversion_cloud/models/api_error' +require_relative 'groupdocs_conversion_cloud/models/api_error_response' require_relative 'groupdocs_conversion_cloud/models/consumption_result' require_relative 'groupdocs_conversion_cloud/models/convert_options' require_relative 'groupdocs_conversion_cloud/models/convert_settings' diff --git a/lib/groupdocs_conversion_cloud/api_client.rb b/lib/groupdocs_conversion_cloud/api_client.rb index 1b07f21..969aa17 100644 --- a/lib/groupdocs_conversion_cloud/api_client.rb +++ b/lib/groupdocs_conversion_cloud/api_client.rb @@ -31,7 +31,7 @@ require 'mimemagic' require 'addressable' require_relative 'version' -require_relative 'api_error' +require_relative 'api_client_error' module GroupDocsConversionCloud # @@ -69,7 +69,7 @@ def call_api(http_method, path, opts = {}) end unless response.success? - raise ApiError.new(:code => response.status, :response_body => response.body) + raise ApiClientError.new(:code => response.status, :response_body => response.body) end data = deserialize(response, opts[:return_type]) if opts[:return_type] diff --git a/lib/groupdocs_conversion_cloud/api_error.rb b/lib/groupdocs_conversion_cloud/api_client_error.rb similarity index 90% rename from lib/groupdocs_conversion_cloud/api_error.rb rename to lib/groupdocs_conversion_cloud/api_client_error.rb index 0e0771c..2273bd9 100644 --- a/lib/groupdocs_conversion_cloud/api_error.rb +++ b/lib/groupdocs_conversion_cloud/api_client_error.rb @@ -25,18 +25,17 @@ module GroupDocsConversionCloud # - # ApiError class for error handling + # ApiClientError class for error handling # - class ApiError < StandardError + class ApiClientError < StandardError attr_reader :code attr_reader :message # Usage examples: - # ApiError.new - # ApiError.new(:code => 500, :response_body => "") - def initialize(arg = nil) - if arg.is_a? Hash - + # ApiClientError.new + # ApiClientError.new(:code => 500, :response_body => "") + def initialize(arg = nil) + if arg.is_a? Hash if arg.key?(:response_body) then data = JSON.parse(arg[:response_body], :symbolize_names => true) if !data.nil? then @@ -69,3 +68,4 @@ def initialize(arg = nil) end end end + diff --git a/lib/groupdocs_conversion_cloud/models/api_error.rb b/lib/groupdocs_conversion_cloud/models/api_error.rb new file mode 100644 index 0000000..ec78ae0 --- /dev/null +++ b/lib/groupdocs_conversion_cloud/models/api_error.rb @@ -0,0 +1,244 @@ + # + # -------------------------------------------------------------------------------------------------------------------- + # + # Copyright (c) 2003-2023 Aspose Pty Ltd + # + # + # Permission is hereby granted, free of charge, to any person obtaining a copy + # of this software and associated documentation files (the "Software"), to deal + # in the Software without restriction, including without limitation the rights + # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + # copies of the Software, and to permit persons to whom the Software is + # furnished to do so, subject to the following conditions: + # + # The above copyright notice and this permission notice shall be included in all + # copies or substantial portions of the Software. + # + # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + # SOFTWARE. + # + # -------------------------------------------------------------------------------------------------------------------- + # + +require 'date' + +module GroupDocsConversionCloud + + class ApiError + attr_accessor :code + attr_accessor :message + attr_accessor :description + attr_accessor :date_time + attr_accessor :inner_error + + # Attribute mapping from ruby-style variable name to JSON key. + def self.attribute_map + { + :'code' => :'Code', + :'message' => :'Message', + :'description' => :'Description', + :'date_time' => :'DateTime', + :'inner_error' => :'InnerError' + } + end + + # Attribute type mapping. + def self.swagger_types + { + :'code' => :'String', + :'message' => :'String', + :'description' => :'String', + :'date_time' => :'DateTime', + :'inner_error' => :'ApiError' + } + end + + # Initializes the object + # @param [Hash] attributes Model attributes in the form of hash + def initialize(attributes = {}) + return unless attributes.is_a?(Hash) + + # convert string to symbol for hash key + attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v } + + if attributes.key?(:'Code') + self.code = attributes[:'Code'] + end + + if attributes.key?(:'Message') + self.message = attributes[:'Message'] + end + + if attributes.key?(:'Description') + self.description = attributes[:'Description'] + end + + if attributes.key?(:'DateTime') + self.date_time = attributes[:'DateTime'] + end + + if attributes.key?(:'InnerError') + self.inner_error = attributes[:'InnerError'] + end + + end + + # Show invalid properties with the reasons. Usually used together with valid? + # @return Array for valid properies with the reasons + def list_invalid_properties + invalid_properties = [] + return invalid_properties + end + + # Check to see if the all the properties in the model are valid + # @return true if the model is valid + def valid? + return true + end + + # Checks equality by comparing each attribute. + # @param [Object] Object to be compared + def ==(other) + return true if self.equal?(other) + self.class == other.class && + code == other.code && + message == other.message && + description == other.description && + date_time == other.date_time && + inner_error == other.inner_error + end + + # @see the `==` method + # @param [Object] Object to be compared + def eql?(other) + self == other + end + + # Calculates hash code according to all attributes. + # @return [Fixnum] Hash code + def hash + [code, message, description, date_time, inner_error].hash + end + + # Downcases first letter. + # @return downcased string + def uncap(str) + str[0, 1].downcase + str[1..-1] + end + + # Builds the object from hash + # @param [Hash] attributes Model attributes in the form of hash + # @return [Object] Returns the model itself + def build_from_hash(attributes) + return nil unless attributes.is_a?(Hash) + self.class.swagger_types.each_pair do |key, type| + pname = uncap(self.class.attribute_map[key]).intern + value = attributes[pname] + if type =~ /\AArray<(.*)>/i + # check to ensure the input is an array given that the the attribute + # is documented as an array but the input is not + if value.is_a?(Array) + self.send("#{key}=", value.map { |v| _deserialize($1, v) }) + end + elsif !value.nil? + self.send("#{key}=", _deserialize(type, value)) + end + # or else data not found in attributes(hash), not an issue as the data can be optional + end + + self + end + + # Deserializes the data based on type + # @param string type Data type + # @param string value Value to be deserialized + # @return [Object] Deserialized data + def _deserialize(type, value) + case type.to_sym + when :DateTime + Date.parse value + when :Date + Date.parse value + when :String + value.to_s + when :Integer + value.to_i + when :Float + value.to_f + when :BOOLEAN + if value.to_s =~ /\A(true|t|yes|y|1)\z/i + true + else + false + end + when :Object + # generic object (usually a Hash), return directly + value + when /\AArray<(?.+)>\z/ + inner_type = Regexp.last_match[:inner_type] + value.map { |v| _deserialize(inner_type, v) } + when /\AHash<(?.+?), (?.+)>\z/ + k_type = Regexp.last_match[:k_type] + v_type = Regexp.last_match[:v_type] + {}.tap do |hash| + value.each do |k, v| + hash[_deserialize(k_type, k)] = _deserialize(v_type, v) + end + end + else + # model + temp_model = GroupDocsConversionCloud.const_get(type).new + temp_model.build_from_hash(value) + end + end + + # Returns the string representation of the object + # @return [String] String presentation of the object + def to_s + to_hash.to_s + end + + # to_body is an alias to to_hash (backward compatibility) + # @return [Hash] Returns the object in the form of hash + def to_body + to_hash + end + + # Returns the object in the form of hash + # @return [Hash] Returns the object in the form of hash + def to_hash + hash = {} + self.class.attribute_map.each_pair do |attr, param| + value = self.send(attr) + next if value.nil? + hash[param] = _to_hash(value) + end + hash + end + + # Outputs non-array value in the form of hash + # For object, use to_hash. Otherwise, just return the value + # @param [Object] value Any valid value + # @return [Hash] Returns the value in the form of hash + def _to_hash(value) + if value.is_a?(Array) + value.compact.map { |v| _to_hash(v) } + elsif value.is_a?(Hash) + {}.tap do |hash| + value.each { |k, v| hash[k] = _to_hash(v) } + end + elsif value.respond_to? :to_hash + value.to_hash + else + value + end + end + + end + +end diff --git a/lib/groupdocs_conversion_cloud/models/api_error_response.rb b/lib/groupdocs_conversion_cloud/models/api_error_response.rb new file mode 100644 index 0000000..28657fd --- /dev/null +++ b/lib/groupdocs_conversion_cloud/models/api_error_response.rb @@ -0,0 +1,220 @@ + # + # -------------------------------------------------------------------------------------------------------------------- + # + # Copyright (c) 2003-2023 Aspose Pty Ltd + # + # + # Permission is hereby granted, free of charge, to any person obtaining a copy + # of this software and associated documentation files (the "Software"), to deal + # in the Software without restriction, including without limitation the rights + # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + # copies of the Software, and to permit persons to whom the Software is + # furnished to do so, subject to the following conditions: + # + # The above copyright notice and this permission notice shall be included in all + # copies or substantial portions of the Software. + # + # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + # SOFTWARE. + # + # -------------------------------------------------------------------------------------------------------------------- + # + +require 'date' + +module GroupDocsConversionCloud + + class ApiErrorResponse + attr_accessor :request_id + attr_accessor :error + + # Attribute mapping from ruby-style variable name to JSON key. + def self.attribute_map + { + :'request_id' => :'RequestId', + :'error' => :'Error' + } + end + + # Attribute type mapping. + def self.swagger_types + { + :'request_id' => :'String', + :'error' => :'ApiError' + } + end + + # Initializes the object + # @param [Hash] attributes Model attributes in the form of hash + def initialize(attributes = {}) + return unless attributes.is_a?(Hash) + + # convert string to symbol for hash key + attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v } + + if attributes.key?(:'RequestId') + self.request_id = attributes[:'RequestId'] + end + + if attributes.key?(:'Error') + self.error = attributes[:'Error'] + end + + end + + # Show invalid properties with the reasons. Usually used together with valid? + # @return Array for valid properies with the reasons + def list_invalid_properties + invalid_properties = [] + return invalid_properties + end + + # Check to see if the all the properties in the model are valid + # @return true if the model is valid + def valid? + return true + end + + # Checks equality by comparing each attribute. + # @param [Object] Object to be compared + def ==(other) + return true if self.equal?(other) + self.class == other.class && + request_id == other.request_id && + error == other.error + end + + # @see the `==` method + # @param [Object] Object to be compared + def eql?(other) + self == other + end + + # Calculates hash code according to all attributes. + # @return [Fixnum] Hash code + def hash + [request_id, error].hash + end + + # Downcases first letter. + # @return downcased string + def uncap(str) + str[0, 1].downcase + str[1..-1] + end + + # Builds the object from hash + # @param [Hash] attributes Model attributes in the form of hash + # @return [Object] Returns the model itself + def build_from_hash(attributes) + return nil unless attributes.is_a?(Hash) + self.class.swagger_types.each_pair do |key, type| + pname = uncap(self.class.attribute_map[key]).intern + value = attributes[pname] + if type =~ /\AArray<(.*)>/i + # check to ensure the input is an array given that the the attribute + # is documented as an array but the input is not + if value.is_a?(Array) + self.send("#{key}=", value.map { |v| _deserialize($1, v) }) + end + elsif !value.nil? + self.send("#{key}=", _deserialize(type, value)) + end + # or else data not found in attributes(hash), not an issue as the data can be optional + end + + self + end + + # Deserializes the data based on type + # @param string type Data type + # @param string value Value to be deserialized + # @return [Object] Deserialized data + def _deserialize(type, value) + case type.to_sym + when :DateTime + Date.parse value + when :Date + Date.parse value + when :String + value.to_s + when :Integer + value.to_i + when :Float + value.to_f + when :BOOLEAN + if value.to_s =~ /\A(true|t|yes|y|1)\z/i + true + else + false + end + when :Object + # generic object (usually a Hash), return directly + value + when /\AArray<(?.+)>\z/ + inner_type = Regexp.last_match[:inner_type] + value.map { |v| _deserialize(inner_type, v) } + when /\AHash<(?.+?), (?.+)>\z/ + k_type = Regexp.last_match[:k_type] + v_type = Regexp.last_match[:v_type] + {}.tap do |hash| + value.each do |k, v| + hash[_deserialize(k_type, k)] = _deserialize(v_type, v) + end + end + else + # model + temp_model = GroupDocsConversionCloud.const_get(type).new + temp_model.build_from_hash(value) + end + end + + # Returns the string representation of the object + # @return [String] String presentation of the object + def to_s + to_hash.to_s + end + + # to_body is an alias to to_hash (backward compatibility) + # @return [Hash] Returns the object in the form of hash + def to_body + to_hash + end + + # Returns the object in the form of hash + # @return [Hash] Returns the object in the form of hash + def to_hash + hash = {} + self.class.attribute_map.each_pair do |attr, param| + value = self.send(attr) + next if value.nil? + hash[param] = _to_hash(value) + end + hash + end + + # Outputs non-array value in the form of hash + # For object, use to_hash. Otherwise, just return the value + # @param [Object] value Any valid value + # @return [Hash] Returns the value in the form of hash + def _to_hash(value) + if value.is_a?(Array) + value.compact.map { |v| _to_hash(v) } + elsif value.is_a?(Hash) + {}.tap do |hash| + value.each { |k, v| hash[k] = _to_hash(v) } + end + elsif value.respond_to? :to_hash + value.to_hash + else + value + end + end + + end + +end diff --git a/lib/groupdocs_conversion_cloud/version.rb b/lib/groupdocs_conversion_cloud/version.rb index ee3d933..c84662d 100644 --- a/lib/groupdocs_conversion_cloud/version.rb +++ b/lib/groupdocs_conversion_cloud/version.rb @@ -25,5 +25,5 @@ # -------------------------------------------------------------------------------------------------------------------- # module GroupDocsConversionCloud - VERSION = "23.7".freeze + VERSION = "23.8".freeze end diff --git a/test/api/test_auth_api.rb b/test/api/test_auth_api.rb index 973f704..6e1477f 100644 --- a/test/api/test_auth_api.rb +++ b/test/api/test_auth_api.rb @@ -50,7 +50,7 @@ def test_auth_error_when_app_sid_not_found info_api = init_conversion_api(app_sid, app_key) request = GetSupportedConversionTypesRequest.new - error = assert_raises ApiError do + error = assert_raises ApiClientError do info_api.get_supported_conversion_types(request) end @@ -65,7 +65,7 @@ def test_auth_error_when_app_key_not_found info_api = init_conversion_api(app_sid, app_key) request = GetSupportedConversionTypesRequest.new - error = assert_raises ApiError do + error = assert_raises ApiClientError do info_api.get_supported_conversion_types(request) end diff --git a/test/api/test_info_api.rb b/test/api/test_info_api.rb index 3573f35..e70757c 100644 --- a/test/api/test_info_api.rb +++ b/test/api/test_info_api.rb @@ -55,7 +55,7 @@ def test_get_document_metadata def test_GetInfoReturnsFileNotFound request = GetDocumentMetadataRequest.new(TestFile.not_exist.path) - error = assert_raises ApiError do + error = assert_raises ApiClientError do @info_api.get_document_metadata(request) end assert_equal true, error.message.include?("AmazonS3 Storage exception: The specified key does not exist.")