Sha256: da8f375e2312354b4fb2f4f1e9a54575e1eff96158adb9e7016da1576aae64ac

Contents?: true

Size: 1.74 KB

Versions: 3

Compression:

Stored size: 1.74 KB

Contents

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 = [
        :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_method :nwo, :name_with_owner

      def check!
        raise Errors::BuildError, 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_method :reason, :build_error

      def build_duration
        last_build.duration unless last_build.nil?
      end

      def last_built
        last_build.updated_at unless last_build.nil?
      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

3 entries across 3 versions & 1 rubygems

Version Path
github-pages-health-check-1.1.1 lib/github-pages-health-check/repository.rb
github-pages-health-check-1.1.0 lib/github-pages-health-check/repository.rb
github-pages-health-check-1.0.1 lib/github-pages-health-check/repository.rb