Skip to content

Commit

Permalink
FEATURE: Add githubfolder engine (#440)
Browse files Browse the repository at this point in the history
* FEATURE: Add an engine for deep linking to folders in Github repos

* DEV: add favicon
  • Loading branch information
jbrw committed Nov 20, 2020
1 parent 3e01288 commit ff5a2fb
Show file tree
Hide file tree
Showing 5 changed files with 1,641 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/onebox/engine.rb
Expand Up @@ -152,6 +152,7 @@ def always_https?
require_relative "engine/github_issue_onebox"
require_relative "engine/github_blob_onebox"
require_relative "engine/github_commit_onebox"
require_relative "engine/github_folder_onebox"
require_relative "engine/github_gist_onebox"
require_relative "engine/github_pullrequest_onebox"
require_relative "engine/google_calendar_onebox"
Expand Down
52 changes: 52 additions & 0 deletions lib/onebox/engine/github_folder_onebox.rb
@@ -0,0 +1,52 @@
# frozen_string_literal: true

module Onebox
module Engine
class GithubFolderOnebox
include Engine
include StandardEmbed
include LayoutSupport

matches_regexp Regexp.new(/^https?:\/\/(?:www\.)?(?:(?:\w)+\.)?(github)\.com[\:\d]*(\/\w*){2}\/tree/)
always_https

private

def data
og = get_opengraph

max_length = 250

display_path = extract_path(og.url, max_length)
display_description = clean_description(og.description, og.title, max_length)

{
link: og.url,
path_link: url,
image: og.image,
title: og.title,
path: display_path,
description: display_description,
favicon: get_favicon
}
end

def extract_path(root, max_length)
path = url.split('#')[0].split('?')[0]
path = path["#{root}/tree/".length..-1]
path.length > max_length ? path[-max_length..-1] : path
end

def clean_description(description, title, max_length)
return unless description

desc_end = " - #{title}"
if description[-desc_end.length..-1] == desc_end
description = description[0...-desc_end.length]
end

Onebox::Helpers.truncate(description, max_length)
end
end
end
end

0 comments on commit ff5a2fb

Please sign in to comment.