class Specular
Constants
- MESSAGES
- MESSAGE_EVENTS
- REF_DEFAULT
- STATUS_LABEL
Constants ============================================================¶ ↑
Attributes
Public Class Methods
new(results, **context)
click to toggle source
Instance Methods =====================================================¶ ↑
# File lib/specular.rb, line 44 def initialize(results, **context) @results = results @context = context if (@context[:repo] and !@context[:repo].end_with?('/')) @context[:repo] = '%s/' % @context[:repo] end @context[:result] = self.failures? ? :failed : :passed @context[:messages] = MESSAGES.keys.to_h do |type| [ type, MESSAGE_EVENTS.to_h do |event| [ event, @context.dig(:messages, type, event) || MESSAGES.dig(type, event) ] end ] end end
version()
click to toggle source
# File lib/specular/version.rb, line 2 def self.version File.readlines(File.expand_path('../../VERSION', __dir__)).first.chomp end
Public Instance Methods
create_issue!(services = %i[ github ])
click to toggle source
# File lib/specular.rb, line 159 def create_issue!(services = %i[ github ]) @context[:created_issues] = services.to_h do |service| [ service, Specular::Integration.for(service, @context).create_issue!( title: self.message(service: service), body: self.report ) ] end end
examples()
click to toggle source
# File lib/specular.rb, line 84 def examples if (@context.dig(:show, :all)) @results[:examples] else @results[:examples].select do |example| example[:status] == 'failed' end end end
failures?()
click to toggle source
# File lib/specular.rb, line 73 def failures? @results.dig(:summary, :failure_count) > 0 end
git_ref()
click to toggle source
# File lib/specular.rb, line 67 def git_ref @context[:ref] ||= Open3.popen3('git', 'rev-parse', 'HEAD') do |_sin, sout, _serr, _proc| sout.readlines.first.chomp end end
message(service: :github)
click to toggle source
# File lib/specular.rb, line 77 def message(service: :github) Liquid::Template.parse( @context.dig(:messages, service, @context[:result]) || @context.dig(:messages, service, :default) ).render(Specular::Support.stringify_keys(@context)) end
post_message!(services = %i[ slack ])
click to toggle source
# File lib/specular.rb, line 171 def post_message!(services = %i[ slack ]) @context[:posted_messages] = services.to_h do |service| [ service, Specular::Integration.for(service, @context).post_message!( message: self.message(service: service) ) ] end end
report(title: false)
click to toggle source
# File lib/specular.rb, line 128 def report(title: false) [ *(title ? ("<!-- %s -->\n" % self.message(service: :github)) : ()), "## Test Results\n", self.examples.map do |example| case (example[:status]) when 'failed' "### %s\n\n**Status:** %s\n**Source:** %s\n\n%s" % [ example[:full_description], status_label(example[:status]), source_link(example[:file_path], example[:line_number]), result_format(example.dig(:exception, :message)) ] else "### %s\n\n**Status:** %s\n**Source:** %s\n\n" % [ example[:full_description], status_label(example[:status]), source_link(example[:file_path], example[:line_number]) ] end end, "## Summary\n\n**Duration:** %.2fs\n**Failures:** %d\n" % [ @results.dig(:summary, :duration), @results.dig(:summary, :failure_count) ], "## Git Context\n**Ref:** %s" % [ self.git_ref ] ].join("\n") end
result_format(result)
click to toggle source
# File lib/specular.rb, line 119 def result_format(result) return unless (result) "```\n%s%s```\n" % [ result, result.end_with?("\n") ? "" : "\n" ] end
source_link(file, line)
click to toggle source
# File lib/specular.rb, line 98 def source_link(file, line) if (@context[:repo]) '[`%s:%d`](%s#L%d)' % [ file, line, URI.join( @context[:repo] + 'blob/%s/' % [ self.git_ref, ], file ), line ] else '`%s:%d`' % [ file, line ] end end
status_label(status)
click to toggle source
# File lib/specular.rb, line 94 def status_label(status) STATUS_LABEL[status.to_sym] || status end