module Rake module Funnel module Integration module TeamCity class ServiceMessages class << self def method_missing(method, *args, &_block) return unless Rake::Funnel::Integration::TeamCity.running? message_name = method.camelize publish message_name, args[0] end private def publish(message_name, args) args = [message_name] << escaped_array_of(args) args = args.flatten.reject(&:nil?) puts "##teamcity[#{args.join(' ')}]" end def escape(string) string .to_s .gsub(/\|/, '||') .gsub(/'/, "|'") .gsub(/\r/, '|r') .gsub(/\n/, '|n') .gsub(/\u0085/, '|x') .gsub(/\u2028/, '|l') .gsub(/\u2029/, '|p') .gsub(/\[/, '|[') .gsub(/\]/, '|]') end def escaped_array_of(args) return [] if args.nil? return "'#{escape(args)}'" unless args.is_a?(Hash) args.map { |key, value| "#{key.camelize}='#{escape(value.to_s)}'" } end end end end end end end