Sha256: 9822f48d880d82f6f8ab66306ead6b4578cd2c9806437bcca13668db70b299eb

Contents?: true

Size: 1.44 KB

Versions: 4

Compression:

Stored size: 1.44 KB

Contents

require 'open-uri'
require 'json'
require 'tins/string_version'

module Hackmac
  class KextSource
    GITHUB_API_URL = 'https://api.github.com/repos/%s/releases'

    include Tins::StringVersion

    def initialize(github, auth: nil)
      @github = github
      @auth   = auth
      account, repo = github.split(?/)
      @name = repo
      releases = URI.open(
        GITHUB_API_URL % github,
        http_basic_authentication: auth) { |o|
        JSON.parse(o.read, object_class: JSON::GenericObject)
      }
      if max_version = releases.map { |r|
          next unless r.tag_name.include?(?.)
          tag = r.tag_name.delete '^.0-9'
          begin
            [ Version.new(tag), r ]
          rescue ArgumentError
          end
        }.compact.max_by(&:first)
      then
        @version, @release = max_version
      end
    end

    attr_reader :name

    attr_reader :version

    attr_reader :github

    attr_reader :auth

    def download_asset
      @release or return
      asset = @release.assets.find { |a| a.name =~ /RELEASE.*zip/ } or return
      data = URI.open(
        (GITHUB_API_URL % github) + ("/assets/%s" % asset.id),
        'Accept' => 'application/octet-stream',
        http_basic_authentication: auth
      ) { |o| o.read }
      return asset.name, data
    end

    def inspect
      "#<#{self.class}: #{to_s}>"
    end

    def to_s
      "#{name} #{version}"
    end

    def to_s
      "#{name} #{version}"
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
hackmac-0.3.1 lib/hackmac/kext_source.rb
hackmac-0.3.0 lib/hackmac/kext_source.rb
hackmac-0.2.1 lib/hackmac/kext_source.rb
hackmac-0.2.0 lib/hackmac/kext_source.rb