Sha256: 98ea57731adae4198591b2217e8c49d61be1ab5e78c040afa04e1632d4b3966f

Contents?: true

Size: 1.29 KB

Versions: 1

Compression:

Stored size: 1.29 KB

Contents

require "hub_link/api/pull_request"

module HubLink
  class Batch
    attr_reader :options

    def initialize(options = {})
      @options = options.compact
    end

    def empty?
      results.empty?
    end

    def fetch(resource)
      public_send(resource)
    end

    def pull_requests
      log "Fetching pull requests" do
        pull_request_results.find_all(&:pull_request?).map(&:to_h)
      end
    end

    def reviews
      log "Fetching reviews" do
        pull_request_results.flat_map(&:reviews).map(&:to_h)
      end
    end

    def review_requests
      log "Fetching review requests" do
        pull_request_results.flat_map(&:review_requests).map(&:to_h)
      end
    end

    private

      def pull_request_results
        results.find_all(&:pull_request?)
      end

      def results
        @_results ||= fetch_results
      end

      def fetch_results
        log "*Getting issues* #{formatted_options}" do
          Api::PullRequest.list(options)
        end
      end

      def log(title, &block)
        logger.info(START) { title }

        block.call.tap do |results|
          logger.info(FINISH) { "Found #{results.size}" }
        end
      end

      def formatted_options
        options.values.join(", ")
      end

      def logger
        HubLink.logger
      end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hub_link-0.18.0 lib/hub_link/batch.rb