class GithubMembers::MarkdownWriter
Constants
- TAG_BEGIN
- TAG_END
Public Instance Methods
write(org:, members:, file:)
click to toggle source
# File lib/github_members/markdown_writer.rb, line 8 def write(org:, members:, file:) unless file.exist? file.write(<<~MARKDOWN) # Members #{TAG_BEGIN} #{TAG_END} MARKDOWN end table = render_table(members) write_file(table, members.size, org, file) end
Private Instance Methods
render_table(members)
click to toggle source
# File lib/github_members/markdown_writer.rb, line 22 def render_table(members) return "" if members.empty? fields = members.first.additional_fields labels = [" ", "GitHub", "Fullname"] align = ["c", "l", "l"] fields.each do |field| labels << field.capitalize align << "l" end data = members.map do |member| # NOTE: GitHub's default avatar doesn't support `&s=<size>`, so this uses the `<img>` tag. avatar_url = URI(member.avatar).tap { |u| u.query = "s=64" }.to_s avatar = %(<img src="#{avatar_url}" alt="@#{member.github}" width="32" height="32">) github = "[@#{member.github}](#{member.github_url})" fullname = member.fullname.to_s.then { |v| v.empty? ? "-" : v } [avatar, github, fullname].tap do |d| fields.each do |field| d << member[field].to_s.then { |v| v.empty? ? "-" : v } end end end MarkdownTables.make_table(labels, data, is_rows: true, align: align) end
write_file(table, member_count, org, file)
click to toggle source
# File lib/github_members/markdown_writer.rb, line 51 def write_file(table, member_count, org, file) content = file.read unless content.include?(TAG_BEGIN) raise MissingTagInMarkdown, "#{file} must include `#{TAG_BEGIN}`" end unless content.include?(TAG_END) raise MissingTagInMarkdown, "#{file} must include `#{TAG_END}`" end content.sub!(/#{TAG_BEGIN}.+#{TAG_END}/mo, <<~MARKDOWN.strip) #{TAG_BEGIN} **#{member_count}** member#{member_count == 1 ? "" : "s"} of [#{org.name}](#{org.url}) #{table} #{TAG_END} MARKDOWN file.write(content) end