lib/babelyoda/tanker.rb in babelyoda-2.1.0 vs lib/babelyoda/tanker.rb in babelyoda-2.1.1

- old
+ new

@@ -102,17 +102,19 @@ end class Tanker include Babelyoda::SpecificationLoader - class FileNameInvalidError < RuntimeError ; end + class FileNameInvalidError < Exception ; end + class KeysetNameInvalidError < Exception ; end attr_accessor :endpoint attr_accessor :token attr_accessor :project_id def replace(keyset, language = nil) + validate_keyset_name!(keyset.name) doc = project_xml do |xml| keyset.to_xml(xml, language) end payload = { :file => StringIO.new(doc), @@ -129,15 +131,17 @@ def list get('/keysets/', { 'project-id' => project_id }).css('keyset').map { |keyset| keyset['id'] } end def create(keyset_name) + validate_keyset_name!(keyset_name) post('/keysets/create/', { 'project-id' => project_id, 'keyset-id' => keyset_name }) end def export(keyset_name = nil, languages = nil, status = nil, safe = false) payload = { 'project-id' => project_id } + validate_keyset_name!(keyset_name) if keyset_name payload.merge!({ 'keyset-id' => keyset_name }) if keyset_name if languages value = languages value = languages.join(',') if languages.respond_to?(:join) payload.merge!({ 'language' => value }) @@ -146,19 +150,21 @@ payload.merge!({ 'safe' => safe }) if safe get('/projects/export/xml/', payload) end def load_keyset(keyset_name, languages = nil, status = nil, safe = false) + validate_keyset_name!(keyset_name) doc = export(keyset_name, languages, status, safe) doc.css("keyset[@id='#{keyset_name}']").each do |keyset_node| keyset = Babelyoda::Keyset.parse_xml(keyset_node) return keyset if keyset.name == keyset_name end Babelyoda::Keyset.new(keyset_name) end def drop_keyset!(keyset_name) + validate_keyset_name!(keyset_name) delete("/admin/project/#{project_id}/keyset/", { :keyset => keyset_name }) end private @@ -202,20 +208,22 @@ end def post(method_name, payload) uri = URI(method(method_name)) req = Net::HTTP::Post.new(uri.path) + req['AUTHORIZATION'] = token req.content_type = multipart_content_type req.body = multipart_data(payload) - $logger.debug "POST URI: #{uri}" - $logger.debug "POST BODY: #{req.body}" - - res = Net::HTTP.start(uri.host, uri.port) do |http| + debug_log = '' + conn = Net::HTTP.new(uri.host, uri.port) + conn.set_debug_output(debug_log) + res = conn.start do |http| http.request(req) end + $logger.debug "HTTP DEBUG: #{debug_log}" case res when Net::HTTPSuccess, Net::HTTPRedirection Nokogiri::XML.parse(res.body) else @@ -229,15 +237,17 @@ uri = URI(method(method_name)) uri.query = URI.encode_www_form(payload) if payload req = Net::HTTP::Get.new(uri.request_uri) req['AUTHORIZATION'] = token - $logger.debug "GET URI: #{uri}" - - res = Net::HTTP.start(uri.host, uri.port) do |http| + debug_log = '' + conn = Net::HTTP.new(uri.host, uri.port) + conn.set_debug_output(debug_log) + res = conn.start do |http| http.request(req) end + $logger.debug "HTTP DEBUG: #{debug_log}" case res when Net::HTTPSuccess, Net::HTTPRedirection Nokogiri::XML.parse(res.body) else @@ -251,22 +261,30 @@ uri = URI(method(method_name)) uri.query = URI.encode_www_form(payload) if payload req = Net::HTTP::Delete.new(uri.request_uri) req['AUTHORIZATION'] = token - $logger.debug "DELETE URI: #{uri}" - - res = Net::HTTP.start(uri.host, uri.port) do |http| + debug_log = '' + conn = Net::HTTP.new(uri.host, uri.port) + conn.set_debug_output(debug_log) + res = conn.start do |http| http.request(req) end + $logger.debug "HTTP DEBUG: #{debug_log}" case res when Net::HTTPSuccess, Net::HTTPRedirection Nokogiri::XML.parse(res.body) else doc = Nokogiri::XML.parse(res.body) error = doc.css('result error')[0].content raise Error.new(error) + end + end + + def validate_keyset_name!(keyset_name) + if keyset_name.match(/[\s\t]/) + raise KeysetNameInvalidError.new("Keyset name must NOT contain tabs or spaces: #{keyset_name}") end end end end