From 3f492f26ad95e4f1aafcc1022c4224f11491a388 Mon Sep 17 00:00:00 2001 From: Geremia Taglialatela Date: Mon, 20 Jan 2025 17:08:47 +0100 Subject: [PATCH] Allow upload of files with square brackets (#30) Close #1 --- lib/colore/client.rb | 27 ++++------- .../Colore_Client/_create_document/runs.yml | 8 ++-- .../runs.yml | 46 +++++++++++++++++++ .../Colore_Client/_update_title/runs.yml | 26 +++++------ spec/fixtures/test (1)[1].txt | 1 + spec/lib/colore/client_spec.rb | 23 +++++++++- 6 files changed, 94 insertions(+), 37 deletions(-) create mode 100644 spec/fixtures/cassettes/Colore_Client/_create_document/with_spaces_and_brackets_in_the_filename/runs.yml create mode 100644 spec/fixtures/test (1)[1].txt diff --git a/lib/colore/client.rb b/lib/colore/client.rb index 91943ad..271ced7 100644 --- a/lib/colore/client.rb +++ b/lib/colore/client.rb @@ -23,21 +23,6 @@ def self.generate_doc_id SecureRandom.uuid end - # Returns the URI parser based on the Ruby version. - # - # If `URI::RFC2396_PARSER` is defined, it will return that parser. - # Otherwise, it will return `URI::DEFAULT_PARSER`. - # - # @return [URI::Parser] the URI parser to use - def self.uri_parser - @uri_parser ||= - if defined?(URI::RFC2396_PARSER) - URI::RFC2396_PARSER - else - URI::DEFAULT_PARSER - end - end - # Constructor. # # @param base_uri [String] The base URI of the Colore service that you wish to attach to @@ -97,7 +82,7 @@ def create_document(doc_id:, filename:, content:, title: nil, author: nil, actio response = nil with_tempfile(content) do |io| params[:file] = file_param(io) - response = send_request :put, "#{url_for_base doc_id}/#{base_filename}", params, :json + response = send_request :put, "#{url_for_base doc_id}/#{encode_param(base_filename)}", params, :json end response end @@ -129,10 +114,10 @@ def update_document(doc_id:, filename:, content: nil, author: nil, actions: nil, if content with_tempfile(content) do |io| params[:file] = file_param(io) - response = send_request :post, "#{url_for_base(doc_id)}/#{base_filename}", params, :json + response = send_request :post, "#{url_for_base(doc_id)}/#{encode_param(base_filename)}", params, :json end else - response = send_request :post, "#{url_for_base(doc_id)}/#{base_filename}", params, :json + response = send_request :post, "#{url_for_base(doc_id)}/#{encode_param(base_filename)}", params, :json end response end @@ -144,7 +129,7 @@ def update_document(doc_id:, filename:, content: nil, author: nil, actions: nil, # # @return [Hash] a standard response def update_title(doc_id:, title:) - send_request :post, "#{url_for_base(doc_id)}/title/#{self.class.uri_parser.escape title}", {}, :json + send_request :post, "#{url_for_base(doc_id)}/title/#{encode_param(title)}", {}, :json end # Requests a conversion of an existing document. @@ -314,5 +299,9 @@ def with_tempfile(content) def file_param(io) Faraday::Multipart::FilePart.new(io, Marcel::MimeType.for(io)) end + + def encode_param(param) + URI.encode_www_form_component(param).gsub('+', '%20') + end end end diff --git a/spec/fixtures/cassettes/Colore_Client/_create_document/runs.yml b/spec/fixtures/cassettes/Colore_Client/_create_document/runs.yml index c394e48..60a0714 100644 --- a/spec/fixtures/cassettes/Colore_Client/_create_document/runs.yml +++ b/spec/fixtures/cassettes/Colore_Client/_create_document/runs.yml @@ -6,12 +6,12 @@ http_interactions: body: encoding: ASCII-8BIT string: !binary |- - LS0tLS0tLS0tLS0tLVJ1YnlNdWx0aXBhcnRQb3N0LTFjNmFlODA3ZjE4MGFkMzE4ZTAwNjRhMDg4NWQ5NTVmDQpDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InRpdGxlIg0KDQpTYW1wbGUgZG9jdW1lbnQNCi0tLS0tLS0tLS0tLS1SdWJ5TXVsdGlwYXJ0UG9zdC0xYzZhZTgwN2YxODBhZDMxOGUwMDY0YTA4ODVkOTU1Zg0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJhY3Rpb25zW10iDQoNCm9jcg0KLS0tLS0tLS0tLS0tLVJ1YnlNdWx0aXBhcnRQb3N0LTFjNmFlODA3ZjE4MGFkMzE4ZTAwNjRhMDg4NWQ5NTVmDQpDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImF1dGhvciINCg0Kc3BsaWZmeQ0KLS0tLS0tLS0tLS0tLVJ1YnlNdWx0aXBhcnRQb3N0LTFjNmFlODA3ZjE4MGFkMzE4ZTAwNjRhMDg4NWQ5NTVmDQpDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImZpbGUiOyBmaWxlbmFtZT0iY29sb3JlMjAyNTAxMjAtNDIxNjgtNXE0ajhmIg0KQ29udGVudC1MZW5ndGg6IDUxNTINCkNvbnRlbnQtVHlwZTogaW1hZ2UvanBlZw0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5DQoNCv/Y/+AAEEpGSUYAAQEBAGAAYAAA/9sAQwACAQECAQECAgICAgICAgMFAwMDAwMGBAQDBQcGBwcHBgcHCAkLCQgICggHBwoNCgoLDAwMDAcJDg8NDA4LDAwM/9sAQwECAgIDAwMGAwMGDAgHCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8IAEQgAKwGvAwEiAAIRAQMRAf/EABwAAQACAwEBAQAAAAAAAAAAAAAFBwQGCAMCAf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAe/nhVebbbW/beZ5AZ0sigYaN3ank1sbUZsk0X5EyrHazY2LGk4gPw2Br/2T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wfiw6/MthsZaSxTkbnaxj4aoGC1iquhxFdFXOGbYKWPkxgdYRoofKlyrO0K8akbCm3AdsMi2EUBcIC+K4WjAH2oxM9U2IripC1XQgWyiQxCkVspADBNgj7c3VsdgDQpXIUN+R8DYLTS4xPe2KfbsgoB0FyimCnkYyJSo5nn09/g0oIMxdePGtZZGRYWAHxSzxisSC6Yn0ThR84TYE+UrxW+NBkgmYa6R+B7jlFBWqQEClUZHQJZJs1NITScZWDXTjIlCqryW0Yzf0LiQERIg8eWUG1FdTL4aexuC/pp/CrooAer9FluLFnUkImOHB5G9mxcdzYWQpSIz0fhBOOGe7Qecn0C4OJ8DaPTErXEKSuG75VgjjTlh9dVIOYguYAoMS7v8cIYh/oJVHoiPAQEDAPn61Mer3D6sRBEUTi9lbyF4MAAAAH4Snf4PJJ/UDfA/WDNx70cCetQTAPzLHhNCAIaKJr3/AEB//9kNCi0tLS0tLS0tLS0tLS1SdWJ5TXVsdGlwYXJ0UG9zdC0xYzZhZTgwN2YxODBhZDMxOGUwMDY0YTA4ODVkOTU1Zi0tDQo= + LS0tLS0tLS0tLS0tLVJ1YnlNdWx0aXBhcnRQb3N0LWIxY2ZhODkwYTNiOWIyZWEwNjBkZDVmZTkzN2I4MjRiDQpDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9InRpdGxlIg0KDQpTYW1wbGUgZG9jdW1lbnQNCi0tLS0tLS0tLS0tLS1SdWJ5TXVsdGlwYXJ0UG9zdC1iMWNmYTg5MGEzYjliMmVhMDYwZGQ1ZmU5MzdiODI0Yg0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJhY3Rpb25zW10iDQoNCm9jcg0KLS0tLS0tLS0tLS0tLVJ1YnlNdWx0aXBhcnRQb3N0LWIxY2ZhODkwYTNiOWIyZWEwNjBkZDVmZTkzN2I4MjRiDQpDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImF1dGhvciINCg0Kc3BsaWZmeQ0KLS0tLS0tLS0tLS0tLVJ1YnlNdWx0aXBhcnRQb3N0LWIxY2ZhODkwYTNiOWIyZWEwNjBkZDVmZTkzN2I4MjRiDQpDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9ImZpbGUiOyBmaWxlbmFtZT0iY29sb3JlMjAyNTAxMjAtODExMjctcWh5ZDNqIg0KQ29udGVudC1MZW5ndGg6IDUxNTINCkNvbnRlbnQtVHlwZTogaW1hZ2UvanBlZw0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5DQoNCv/Y/+AAEEpGSUYAAQEBAGAAYAAA/9sAQwACAQECAQECAgICAgICAgMFAwMDAwMGBAQDBQcGBwcHBgcHCAkLCQgICggHBwoNCgoLDAwMDAcJDg8NDA4LDAwM/9sAQwECAgIDAwMGAwMGDAgHCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8IAEQgAKwGvAwEiAAIRAQMRAf/EABwAAQACAwEBAQAAAAAAAAAAAAAFBwQGCAMCAf/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgP/2gAMAwEAAhADEAAAAe/nhVebbbW/beZ5AZ0sigYaN3ank1sbUZsk0X5EyrHazY2LGk4gPw2Br/2T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 headers: User-Agent: - Colore Client Content-Type: - - multipart/form-data; boundary=-----------RubyMultipartPost-1c6ae807f180ad318e0064a0885d955f + - multipart/form-data; boundary=-----------RubyMultipartPost-b1cfa890a3b9b2ea060dd5fe937b824b Content-Length: - '5831' Accept-Encoding: @@ -24,7 +24,7 @@ http_interactions: message: Created headers: Date: - - Mon, 20 Jan 2025 10:59:01 GMT + - Mon, 20 Jan 2025 12:54:53 GMT Connection: - close Content-Type: @@ -36,5 +36,5 @@ http_interactions: body: encoding: UTF-8 string: '{"status":201,"description":"Document stored","app":"client_test","doc_id":"test_doc_1","path":"/document/client_test/test_doc_1/current/quickfox.jpg"}' - recorded_at: Mon, 20 Jan 2025 10:59:01 GMT + recorded_at: Mon, 20 Jan 2025 12:54:53 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/cassettes/Colore_Client/_create_document/with_spaces_and_brackets_in_the_filename/runs.yml b/spec/fixtures/cassettes/Colore_Client/_create_document/with_spaces_and_brackets_in_the_filename/runs.yml new file mode 100644 index 0000000..78ec4f0 --- /dev/null +++ b/spec/fixtures/cassettes/Colore_Client/_create_document/with_spaces_and_brackets_in_the_filename/runs.yml @@ -0,0 +1,46 @@ +--- +http_interactions: +- request: + method: put + uri: http://localhost:9240/document/client_test/test_doc_2/test%20(1)%5B1%5D.txt + body: + encoding: UTF-8 + string: "-------------RubyMultipartPost-9f4da2e4f8d1042acbae564ca1f04ef9\r\nContent-Disposition: + form-data; name=\"title\"\r\n\r\nSample document\r\n-------------RubyMultipartPost-9f4da2e4f8d1042acbae564ca1f04ef9\r\nContent-Disposition: + form-data; name=\"actions[]\"\r\n\r\nocr\r\n-------------RubyMultipartPost-9f4da2e4f8d1042acbae564ca1f04ef9\r\nContent-Disposition: + form-data; name=\"author\"\r\n\r\nspliffy\r\n-------------RubyMultipartPost-9f4da2e4f8d1042acbae564ca1f04ef9\r\nContent-Disposition: + form-data; name=\"file\"; filename=\"colore20250120-81818-3lvwha\"\r\nContent-Length: + 10\r\nContent-Type: application/octet-stream\r\nContent-Transfer-Encoding: + binary\r\n\r\nTest File\n\r\n-------------RubyMultipartPost-9f4da2e4f8d1042acbae564ca1f04ef9--\r\n" + headers: + User-Agent: + - Colore Client + Content-Type: + - multipart/form-data; boundary=-----------RubyMultipartPost-9f4da2e4f8d1042acbae564ca1f04ef9 + Content-Length: + - '701' + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + response: + status: + code: 201 + message: Created + headers: + Date: + - Mon, 20 Jan 2025 12:56:24 GMT + Connection: + - close + Content-Type: + - application/json + Content-Length: + - '154' + X-Content-Type-Options: + - nosniff + body: + encoding: UTF-8 + string: '{"status":201,"description":"Document stored","app":"client_test","doc_id":"test_doc_2","path":"/document/client_test/test_doc_2/current/test + (1)[1].txt"}' + recorded_at: Mon, 20 Jan 2025 12:56:24 GMT +recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/cassettes/Colore_Client/_update_title/runs.yml b/spec/fixtures/cassettes/Colore_Client/_update_title/runs.yml index ab88994..cd1f695 100644 --- a/spec/fixtures/cassettes/Colore_Client/_update_title/runs.yml +++ b/spec/fixtures/cassettes/Colore_Client/_update_title/runs.yml @@ -6,12 +6,12 @@ http_interactions: body: encoding: ASCII-8BIT string: !binary |- - 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 headers: User-Agent: - Colore Client Content-Type: - - multipart/form-data; boundary=-----------RubyMultipartPost-0233b32258ef2048543f48c8834a1d9a + - multipart/form-data; boundary=-----------RubyMultipartPost-8645bc23baad36b78893f446aedc116c Content-Length: - '5456' Accept-Encoding: @@ -24,7 +24,7 @@ http_interactions: message: Created headers: Date: - - Mon, 20 Jan 2025 12:08:03 GMT + - Mon, 20 Jan 2025 12:56:03 GMT Connection: - close Content-Type: @@ -36,10 +36,10 @@ http_interactions: body: encoding: UTF-8 string: '{"status":201,"description":"Document stored","app":"client_test","doc_id":"test_update_title_1","path":"/document/client_test/test_update_title_1/current/quickfox.jpg"}' - recorded_at: Mon, 20 Jan 2025 12:08:03 GMT + recorded_at: Mon, 20 Jan 2025 12:56:03 GMT - request: method: post - uri: http://localhost:9240/document/client_test/test_update_title_1/title/This%20is%20a%20new%20title + uri: http://localhost:9240/document/client_test/test_update_title_1/title/Test%20+New+%20(Title)%20%5Bbrackets%5D body: encoding: UTF-8 string: '' @@ -58,7 +58,7 @@ http_interactions: message: OK headers: Date: - - Mon, 20 Jan 2025 12:08:03 GMT + - Mon, 20 Jan 2025 12:56:03 GMT Connection: - close Content-Type: @@ -70,7 +70,7 @@ http_interactions: body: encoding: UTF-8 string: '{"status":200,"description":"Title updated"}' - recorded_at: Mon, 20 Jan 2025 12:08:03 GMT + recorded_at: Mon, 20 Jan 2025 12:56:03 GMT - request: method: get uri: http://localhost:9240/document/client_test/test_update_title_1 @@ -90,20 +90,20 @@ http_interactions: message: OK headers: Date: - - Mon, 20 Jan 2025 12:08:03 GMT + - Mon, 20 Jan 2025 12:56:03 GMT Connection: - close Content-Type: - application/json Content-Length: - - '392' + - '402' X-Content-Type-Options: - nosniff body: encoding: UTF-8 - string: '{"status":200,"description":"Information retrieved","app":"client_test","doc_id":"test_update_title_1","title":"This - is a new title","current_version":"v001","versions":{"v001":{"jpg":{"content_type":"image/jpeg; + string: '{"status":200,"description":"Information retrieved","app":"client_test","doc_id":"test_update_title_1","title":"Test + +New+ (Title) [brackets]","current_version":"v001","versions":{"v001":{"jpg":{"content_type":"image/jpeg; charset=binary","filename":"quickfox.jpg","path":"/document/client_test/test_update_title_1/v001/quickfox.jpg","size":5152,"author":"","created_at":"2025-01-20 - 12:08:03 +0000"}}}}' - recorded_at: Mon, 20 Jan 2025 12:08:03 GMT + 12:56:03 +0000"}}}}' + recorded_at: Mon, 20 Jan 2025 12:56:03 GMT recorded_with: VCR 6.3.1 diff --git a/spec/fixtures/test (1)[1].txt b/spec/fixtures/test (1)[1].txt new file mode 100644 index 0000000..4fff881 --- /dev/null +++ b/spec/fixtures/test (1)[1].txt @@ -0,0 +1 @@ +Test File diff --git a/spec/lib/colore/client_spec.rb b/spec/lib/colore/client_spec.rb index 5de33f5..967f52d 100644 --- a/spec/lib/colore/client_spec.rb +++ b/spec/lib/colore/client_spec.rb @@ -75,6 +75,27 @@ ) end.to raise_error Colore::Errors::ClientError, 'A document with this doc_id already exists' end + + context 'with spaces and brackets in the filename' do + let(:filename) { fixture('test (1)[1].txt') } + + it 'runs' do + doc_id = 'test_doc_2' + rsp = client.create_document( + doc_id: doc_id, + filename: filename, + content: File.read(filename), + title: 'Sample document', + author: 'spliffy', + actions: ['ocr'], + callback_url: nil + ) + expect(rsp).not_to be_nil + expect(rsp['status']).to eq 201 + expect(rsp['description']).not_to be_empty + expect(rsp['path']).to eq "/document/#{app}/#{doc_id}/#{Colore::CURRENT}/#{filename.basename}" + end + end end describe '#update_document', :vcr do @@ -112,7 +133,7 @@ describe '#update_title', :vcr do it 'runs' do doc_id = 'test_update_title_1' - new_title = 'This is a new title' + new_title = 'Test +New+ (Title) [brackets]' client.create_document( doc_id: doc_id, filename: filename,