lib/onebox/engine/github_blob_onebox.rb in onebox-1.1.0 vs lib/onebox/engine/github_blob_onebox.rb in onebox-1.2.0

- old
+ new

@@ -1,10 +1,10 @@ module Onebox module Engine class GithubBlobOnebox include Engine - include HTML + include LayoutSupport matches do http maybe("www") domain("github") @@ -13,16 +13,36 @@ with("/blob/") end private + def raw + return @raw if @raw + m = @url.match(/github\.com\/(?<user>[^\/]+)\/(?<repo>[^\/]+)\/blob\/(?<sha1>[^\/]+)\/(?<file>[^#]+)(#(L(?<from>[^-]*)(-L(?<to>.*))?))?/mi) + if m + from = (m[:from] || -1).to_i + to = (m[:to] || -1).to_i + @file = m[:file] + contents = open("https://raw.github.com/#{m[:user]}/#{m[:repo]}/#{m[:sha1]}/#{m[:file]}", read_timeout: timeout).read + if from > 0 + if to < 0 + from = from - 10 + to = from + 20 + end + if to > from + contents = contents.split("\n")[from..to].join("\n") + end + end + if contents.length > 5000 + contents = contents[0..5000] + @truncated = true + end + @raw = contents + end + end + def data - { - url: @url, - filename: raw.css(".final-path").inner_text, - lines: raw.css("#files .file .info .mode + span").inner_text, - file: raw.css("#files .file .blob-wrapper").inner_text - } + @data ||= {title: link, link: link, content: raw, truncated: @truncated} end end end end