Sha256: 00c438cd7d0c0754818c8767891bf4be134e547f7781018863246821eb4457fb

Contents?: true

Size: 2 KB

Versions: 1

Compression:

Stored size: 2 KB

Contents

# frozen_string_literal: true

module Geet
  module GitHub
    # For clarity, in this class we keep only the identical logic between the subclasses, but
    # other methods could be moved in here at some complexity cost.
    class AbstractIssue
      attr_reader :issue_number

      # Returns an array of Struct(:number, :title); once this workflow is extended,
      # the struct will likely be converted to a standard class.
      #
      # See https://developer.github.com/v3/issues/#list-issues-for-a-repository
      #
      # options:
      #   filter: :pr, :issue, or nil
      #
      def self.list(api_helper, filter: nil)
        request_address = "#{api_helper.api_repo_link}/issues"

        response = api_helper.send_request(request_address, multipage: true)
        issue_class = Struct.new(:number, :title, :link)

        response.each_with_object([]) do |issue_data, result|
          include_issue = \
            filter.nil? ||
            filter == :pr && issue_data.key?('pull_request') ||
            filter == :issue && !issue_data.key?('pull_request')

          if include_issue
            number = issue_data.fetch('number')
            title = issue_data.fetch('title')
            link = issue_data.fetch('html_url')

            result << issue_class.new(number, title, link)
          end
        end
      end

      def initialize(issue_number, api_helper)
        @issue_number = issue_number
        @api_helper = api_helper
      end

      # params:
      #   users:   String, or Array of strings.
      #
      def assign_users(users)
        request_data = { assignees: Array(users) }
        request_address = "#{@api_helper.api_repo_link}/issues/#{@issue_number}/assignees"

        @api_helper.send_request(request_address, data: request_data)
      end

      def add_labels(labels)
        request_data = labels
        request_address = "#{@api_helper.api_repo_link}/issues/#{@issue_number}/labels"

        @api_helper.send_request(request_address, data: request_data)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
geet-0.1.7 lib/geet/git_hub/abstract_issue.rb