Sha256: d0c7cc79caec2048f43f195ec844b60cdb1dc0d81f6f475b017f07b0a649128a

Contents?: true

Size: 1.75 KB

Versions: 2

Compression:

Stored size: 1.75 KB

Contents

# frozen_string_literal: true

module GitHubPages
  module HealthCheck
    class Repository < Checkable
      attr_reader :name, :owner

      REPO_REGEX = %r{\A[a-z0-9_\-]+/[a-z0-9_\-\.]+\z}i

      HASH_METHODS = %i[
        name_with_owner built? last_built build_duration build_error
      ].freeze

      def initialize(name_with_owner, access_token: nil)
        unless name_with_owner =~ REPO_REGEX
          raise Errors::InvalidRepositoryError
        end
        parts = name_with_owner.split("/")
        @owner = parts.first
        @name  = parts.last
        @access_token = access_token || ENV["OCTOKIT_ACCESS_TOKEN"]
      end

      def name_with_owner
        @name_with_owner ||= [owner, name].join("/")
      end
      alias nwo name_with_owner

      def check!
        raise Errors::BuildError.new(:repository => self), build_error unless built?
        true
      end

      def last_build
        @last_build ||= client.latest_pages_build(name_with_owner)
      end

      def built?
        last_build && last_build.status == "built"
      end

      def build_error
        last_build.error["message"] unless built?
      end
      alias reason build_error

      def build_duration
        last_build.duration if last_build
      end

      def last_built
        last_build.updated_at if last_build
      end

      def domain
        return if cname.nil?
        @domain ||= GitHubPages::HealthCheck::Domain.new(cname)
      end

      private

      def client
        raise Errors::MissingAccessTokenError if @access_token.nil?
        @client ||= Octokit::Client.new(:access_token => @access_token)
      end

      def pages_info
        @pages_info ||= client.pages(name_with_owner)
      end

      def cname
        pages_info.cname
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
github-pages-health-check-1.3.6 lib/github-pages-health-check/repository.rb
github-pages-health-check-1.4.0 lib/github-pages-health-check/repository.rb