class Rake::Funnel::Integration::TeamCity::ServiceMessages

Public Class Methods

method_missing(method, *args, &_block) click to toggle source
# File lib/rake/funnel/integration/teamcity/service_messages.rb, line 13
def method_missing(method, *args, &_block) # rubocop:disable Style/MethodMissing
  return unless Rake::Funnel::Integration::TeamCity.running?

  message_name = method.camelize
  publish(message_name, args[0])
end
respond_to_missing?(_method, _include_private = false) click to toggle source
# File lib/rake/funnel/integration/teamcity/service_messages.rb, line 9
def respond_to_missing?(_method, _include_private = false)
  true
end

Private Class Methods

escape(string) click to toggle source
# File lib/rake/funnel/integration/teamcity/service_messages.rb, line 29
def escape(string) # rubocop:disable Metrics/MethodLength
  string
    .to_s
    .gsub(/\|/, '||')
    .gsub(/'/, "|'")
    .gsub(/\r/, '|r')
    .gsub(/\n/, '|n')
    .gsub(/\u0085/, '|x')
    .gsub(/\u2028/, '|l')
    .gsub(/\u2029/, '|p')
    .gsub(/\[/, '|[')
    .gsub(/\]/, '|]')
end
escaped_array_of(args) click to toggle source
# File lib/rake/funnel/integration/teamcity/service_messages.rb, line 43
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
publish(message_name, args) click to toggle source
# File lib/rake/funnel/integration/teamcity/service_messages.rb, line 22
def publish(message_name, args)
  args = [message_name] << escaped_array_of(args)
  args = args.flatten.reject(&:nil?)

  print "##teamcity[#{args.join(' ')}]\n"
end