server/executionhandlers/ruby/connection.rb in cpee-2.1.17 vs server/executionhandlers/ruby/connection.rb in cpee-2.1.19

- old
+ new

@@ -197,11 +197,11 @@ def inform_manipulate_change(status,changed_dataelements,changed_endpoints,dataelements,endpoints) # {{{ unless status.nil? @controller.notify("status/change", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position, :id => status.id, :message => status.message) end unless changed_dataelements.nil? || changed_dataelements.empty? - de = dataelements.slice(*changed_dataelements).transform_values { |v| detect_encoding(v) == 'UTF-8' ? v : convert_to_base64(v) } + de = dataelements.slice(*changed_dataelements).transform_values { |v| enc = detect_encoding(v); (enc == 'BINARY' ? convert_to_base64(v) : (enc == 'UTF-8' ? v : v.encode('UTF-8',enc))) } @controller.notify("dataelements/change", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position, :changed => changed_dataelements, :values => de) end unless changed_endpoints.nil? || changed_endpoints.empty? @controller.notify("endpoints/change", :'activity-uuid' => @handler_activity_uuid, :endpoint => @handler_endpoint, :label => @label, :activity => @handler_position, :changed => changed_endpoints, :values => endpoints.slice(*changed_endpoints)) end @@ -242,11 +242,20 @@ end result end def detect_encoding(text) - CharlockHolmes::EncodingDetector.detect(text)[:encoding] || 'ISO-8859-1' + if text.is_a? String + res = CharlockHolmes::EncodingDetector.detect(text) + if res.is_a?(Hash) && res[:type] == :text && res[:encoding].match(/(ISO|UTF-8)/) + res[:encoding] + else + 'BINARY' + end + else + 'UTF-8' + end end def convert_to_base64(text) 'data:application/octet-stream;base64,' + Base64::urlsafe_encode64(text) end @@ -264,13 +273,14 @@ ttt = ttt.to_i if ttt == ttt.to_i.to_s ttt else r.value.read end + enc = detect_encoding(res) tmp = { 'name' => r.name == '' ? 'result' : r.name, 'mimetype' => r.mimetype, - 'data' => (detect_encoding(res) == 'UTF-8' ? res : convert_to_base64(res)) + 'data' => (enc == 'BINARY' ? convert_to_base64(res) : (enc == 'UTF-8' ? res : res.encode('UTF-8',enc))) } r.value.rewind tmp end end