Sha256: 10441a2386b5cde65b057b15e05ed217bca07ac1e6529a322fc6063f18e391bd

Contents?: true

Size: 1.88 KB

Versions: 2

Compression:

Stored size: 1.88 KB

Contents

# frozen_string_literal: true

module Onebox
  module Engine
    class GithubIssueOnebox
      #Author Lidlanca 2014
      include Engine
      include LayoutSupport
      include JSON
      matches_regexp Regexp.new("^https?:\/\/(?:www\.)?(?:(?:\w)+\.)?github\.com\/(?<org>.+)\/(?<repo>.+)\/issues\/([[:digit:]]+)")
      always_https

      def url
        m = match
        "https://api.github.com/repos/#{m["org"]}/#{m["repo"]}/issues/#{m["item_id"]}"
      end

      private

      def match
        @match ||= @url.match(/^http(?:s)?:\/\/(?:www\.)?(?:(?:\w)+\.)?github\.com\/(?<org>.+)\/(?<repo>.+)\/(?<type>issues)\/(?<item_id>[\d]+)/)
      end

      def data

        @raw ||= ::MultiJson.load(open(url, "Accept" => "application/vnd.github.v3.text+json", read_timeout: timeout)) #custom Accept header so we can get body as text.
        body_text = @raw["body_text"]

        content_words = body_text.gsub("\n\n", "\n").gsub("\n", "<br>").split(" ") #one pass of removing double newline, then we change \n to <br> and later on we revert it back to \n this is a workaround to avoid losing newlines after we join it back.
        max_words = 20
        short_content =  content_words[0..max_words].join(" ")
        short_content += "..." if content_words.length > max_words

        ulink = URI(link)
        {
          link: @url,
          title: @raw["title"],
          content: short_content.gsub("<br>", "\n"),
          labels: @raw["labels"],
          user: @raw['user'],
          created_at: @raw['created_at'].split("T")[0], #get only date for now
          closed_at: (@raw['closed_at'].nil? ? "" : @raw['closed_at'].split("T")[0]),
          closed_by: @raw['closed_by'],
          avatar: "https://avatars1.githubusercontent.com/u/#{@raw['user']['id']}?v=2&s=96",
          domain: "#{ulink.host}/#{ulink.path.split('/')[1]}/#{ulink.path.split('/')[2]}",
        }
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
onebox-1.9.15 lib/onebox/engine/github_issue_onebox.rb
onebox-1.9.14 lib/onebox/engine/github_issue_onebox.rb