Module: Usps::Support::Helpers::BadgesHelper

Defined in:
lib/usps/support/helpers/badges_helper.rb

Overview

Generate badge images

Constant Summary collapse

GITHUB =
'https://github.com/unitedstatespowersquadrons'
SHIELDS =
'https://img.shields.io'

Instance Method Summary collapse

Instance Method Details

#branch_badge(branch, repo: nil) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/usps/support/helpers/badges_helper.rb', line 17

def branch_badge(branch, repo: nil)
  repo = nil if branch == 'main'
  color = branch == 'main' ? :blue : :orange
  name = badgeify(branch)

  image = image_tag("#{SHIELDS}/badge/#{name}-#{color}?logo=git&logoColor=white")
  return image unless repo

  link_to("#{GITHUB}/#{repo}/compare/#{branch}?expand=1", target: :blank) { image }
end

#commit_badge(commit, sha: true, repo: nil) ⇒ Object



28
29
30
31
32
33
# File 'lib/usps/support/helpers/badges_helper.rb', line 28

def commit_badge(commit, sha: true, repo: nil)
  image = image_tag("#{SHIELDS}/badge/#{'sha-' if sha}#{commit[...12]}-purple")
  return image unless repo

  link_to("#{GITHUB}/#{repo}/commit/#{commit}", target: :blank) { image }
end

#gem_badge(gem, include_prereleases: false) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/usps/support/helpers/badges_helper.rb', line 35

def gem_badge(gem, include_prereleases: false)
  link_to("https://rubygems.org/gems/#{gem}", target: :blank) do
    image_tag(
      "#{SHIELDS}/gem/v/#{gem}?logo=rubygems&logoColor=white#{'&include_prereleases' if include_prereleases}"
    )
  end
end

#npm_badge(package, include_prereleases: false) ⇒ Object



43
44
45
46
47
48
# File 'lib/usps/support/helpers/badges_helper.rb', line 43

def npm_badge(package, include_prereleases: false)
  link_to("https://www.npmjs.com/package/@unitedstatespowersquadrons/#{package}", target: :blank) do
    image_base = "#{SHIELDS}/npm/v/@unitedstatespowersquadrons/#{package}?logo=typescript&logoColor=white"
    image_tag("#{image_base}#{'&include_prereleases' if include_prereleases}")
  end
end

#php_library_badge(repo, version) ⇒ Object



50
51
52
53
54
# File 'lib/usps/support/helpers/badges_helper.rb', line 50

def php_library_badge(repo, version)
  link_to("#{GITHUB}/#{repo}", target: :blank) do
    image_tag("#{SHIELDS}/badge/library-#{version}-#{version_color(version)}?logo=php&logoColor=white")
  end
end

#reachable_badge(host, reachable) ⇒ Object



99
100
101
102
103
# File 'lib/usps/support/helpers/badges_helper.rb', line 99

def reachable_badge(host, reachable)
  link_to("https://#{host}.aws.usps.org", target: :blank) do
    image_tag("#{SHIELDS}/badge/#{host}-#{reachable ? :Reachable : :Error}-#{reachable ? :brightgreen : :red}")
  end
end

#relative_date_badge(datetime, **options) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/usps/support/helpers/badges_helper.rb', line 105

def relative_date_badge(datetime, **options)
  timestamp =
    case datetime
    when Integer then datetime
    when String then DateTime.strptime(datetime, options[:format]).in_time_zone('Eastern Time (US & Canada)').to_i
    when DateTime, Time then datetime.to_i
    else
      raise "Unrecognized datetime format: #{datetime.inspect}"
    end

  query = options.slice(:label, :logo)
  query[:color] = timestamp_color(timestamp)
  image_tag("#{SHIELDS}/date/#{timestamp}?#{query.to_query}")
end

#repo_badge(repo) ⇒ Object



56
57
58
# File 'lib/usps/support/helpers/badges_helper.rb', line 56

def repo_badge(repo)
  link_to("#{GITHUB}/#{repo}", target: :blank) { image_tag("#{SHIELDS}/badge/repo-gray?logo=github") }
end

#suite_badge(suite = {}, repo = nil) ⇒ Object



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/usps/support/helpers/badges_helper.rb', line 60

def suite_badge(suite = {}, repo = nil)
  return if suite.nil?

  branch = badgeify(suite[:head_branch])
  description =
    if suite[:skip_ci] then 'Skipped'
    elsif suite[:status] == 'completed' then badgeify(suite[:conclusion]&.titleize)
    else
      badgeify(suite[:status]&.titleize)
    end

  image = image_tag(
    "#{SHIELDS}/badge/#{branch}-#{description || 'Unknown'}-#{suite_badge_color(suite)}?logo=github"
  )
  return image if repo.nil? || suite[:conclusion] == 'success'

  link_to("#{GITHUB}/#{repo}/actions/workflows/main.yml", target: :blank) { image }
end

#suite_badge_color(suite = {}) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# File 'lib/usps/support/helpers/badges_helper.rb', line 79

def suite_badge_color(suite = {})
  return :lightgray if suite[:skip_ci]

  case suite[:status]
  when 'queued', 'in_progress', 'requested', 'waiting', 'pending'
    :yellow
  when 'completed'
    case suite[:conclusion]
    when 'success' then :brightgreen
    when 'failure', 'timed_out', 'action_required' then :red
    when 'cancelled' then :orange
    else
      # includes 'neutral', 'skipped'
      :lightgray
    end
  else
    :lightgray
  end
end

#tag_badge(version, label: nil, logo: nil) ⇒ Object



10
11
12
13
14
15
# File 'lib/usps/support/helpers/badges_helper.rb', line 10

def tag_badge(version, label: nil, logo: nil)
  label = "#{badgeify(label)}-" if label.present?
   = "?logo=#{}" unless .nil?

  image_tag("#{SHIELDS}/badge/#{label}#{version}-#{version_color(version)}#{}")
end