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

#badge(content, label: nil, color: :gray, **options) ⇒ Object



119
120
121
122
123
# File 'lib/usps/support/helpers/badges_helper.rb', line 119

def badge(content, label: nil, color: :gray, **options)
  main = [label, content, color].compact.join('-')
  src = ["#{SHIELDS}/badge/#{main}", options.compact_blank.to_query].compact_blank.join('?')
  image_tag(src)
end

#branch_badge(branch, repo: nil) ⇒ Object



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

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



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

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



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

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



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

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



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

def php_library_badge(repo, version)
  link_to("#{GITHUB}/#{repo}", target: :blank) do
    badge(version, label: :library, color: version_color(version), logo: :php, logoColor: :white)
  end
end

#reachable_badge(host, reachable, reason: :Error) ⇒ Object



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

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

#relative_date_badge(datetime, **options) ⇒ Object



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

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



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

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



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

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



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

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
# File 'lib/usps/support/helpers/badges_helper.rb', line 10

def tag_badge(version, label: nil, logo: nil)
  label = badgeify(label) if label.present?

  badge(version, label:, color: version_color(version), logo:)
end