Sha256: 239cd8523884bb69559208a6d74d611b0520f36e2049ea33032fe7877eb1d95f

Contents?: true

Size: 1.61 KB

Versions: 70

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

module Onebox
  module Engine
    class GithubGistOnebox
      include Engine
      include LayoutSupport
      include JSON

      MAX_FILES = 3

      matches_regexp Regexp.new("^http(?:s)?://gist\\.(?:(?:\\w)+\\.)?(github)\\.com(?:/)?")
      always_https

      def url
        "https://api.github.com/gists/#{match[:sha]}"
      end

      private

      def data
        @data ||= {
          title: 'gist.github.com',
          link: link,
          gist_files: gist_files.take(MAX_FILES),
          truncated_files?: truncated_files?
        }
      end

      def truncated_files?
        gist_files.size > MAX_FILES
      end

      def gist_files
        return [] unless gist_api

        @gist_files ||= gist_api["files"].values.map do |file_json|
          GistFile.new(file_json)
        end
      end

      def gist_api
        @raw ||= raw.clone
      rescue OpenURI::HTTPError
        # The Gist API rate limit of 60 requests per hour was reached.
        nil
      end

      def match
        @match ||= @url.match(%r{gist\.github\.com/([^/]+/)?(?<sha>[0-9a-f]+)})
      end

      class GistFile
        attr_reader :filename
        attr_reader :language

        MAX_LINES = 10

        def initialize(json)
          @json = json
          @filename = @json["filename"]
          @language = @json["language"]
        end

        def content
          lines.take(MAX_LINES).join("\n")
        end

        def truncated?
          lines.size > MAX_LINES
        end

        private

        def lines
          @lines ||= @json["content"].split("\n")
        end
      end

    end
  end
end

Version data entries

70 entries across 70 versions & 1 rubygems

Version Path
onebox-1.9.19 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.18 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.17 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.16 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.15 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.14 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.13 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.12 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.11 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.10 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.9 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.8 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.7 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.6 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.5 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.4 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.3 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.2 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.1 lib/onebox/engine/github_gist_onebox.rb
onebox-1.9.0 lib/onebox/engine/github_gist_onebox.rb