Sha256: 08b77d12b01c8ee57dbb506d09262950ebcd17b56f92cd5618dab2288be29765
Contents?: true
Size: 1.9 KB
Versions: 11
Compression:
Stored size: 1.9 KB
Contents
require "active_support/core_ext/object/deep_dup" module MultiRepo::Helpers class ReadmeBadges attr_reader :repo, :dry_run attr_accessor :badges def initialize(repo, dry_run: false, **) @repo = repo @dry_run = dry_run if repo.dry_run != dry_run raise ArgumentError, "expected repo.dry_run (#{repo.dry_run}) to match dry_run (#{dry_run})" end reload end def save! lines = content.lines apply_badges!(lines) save_contents!(lines.join) if dry_run reload(lines) else reload end true end def content return "" unless @file File.read(repo.path.join(@file)) end private def reload(lines = nil) @file = repo.detect_readme_file if lines.nil? reload_badges(lines) end def reload_badges(lines) lines ||= content.lines @badges = extract_badges(lines) @original_badges = @badges.deep_dup @original_badge_indexes = @badges.map { |b| b["index"] } end def extract_badges(lines) lines.each.with_index.select do |l, _i| l.to_s.start_with?("[![") end.map do |l, i| match = l.match(/\A\[!\[(?<description>[^\]]+)\]\((?<image>[^\)]+)\)\]\((?<url>[^\)]+)\)/) match.named_captures.merge("index" => i) end end def build_badge_string(badge) "[![#{badge["description"]}](#{badge["image"]})](#{badge["url"]})\n" end def apply_badges!(lines) return if badges == @original_badges lines.reject!.with_index { |_l, i| @original_badge_indexes.include?(i) } start_index = @original_badge_indexes[0] || 2 @badges.reverse_each do |b| lines.insert(start_index, build_badge_string(b)) end end def save_contents!(contents) repo.rm_file("README") repo.rm_file("README.txt") repo.write_file("README.md", contents) end end end
Version data entries
11 entries across 11 versions & 1 rubygems