Sha256: 00dc88bc0e749b6c522af798f3040cab2ceebaba700ebf79125ced795858fd32

Contents?: true

Size: 1.25 KB

Versions: 4

Compression:

Stored size: 1.25 KB

Contents

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
                .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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rake-funnel-0.6.1.pre lib/rake/funnel/integration/teamcity/service_messages.rb
rake-funnel-0.6.0.pre lib/rake/funnel/integration/teamcity/service_messages.rb
rake-funnel-0.5.0.pre lib/rake/funnel/integration/teamcity/service_messages.rb
rake-funnel-0.4.0.pre lib/rake/funnel/integration/teamcity/service_messages.rb