Sha256: 821f4bc8be65197531a38429c308733993e9ec60b27907b8e081595dbfc4ea75

Contents?: true

Size: 1.84 KB

Versions: 8

Compression:

Stored size: 1.84 KB

Contents

# frozen_string_literal: true

require_relative '../helpers/json_helper'

module Geet
  module Github
    class Milestone
      attr_reader :number, :title, :due_on

      STATE_CLOSED = 'closed'

      class << self
        private

        include Helpers::JsonHelper
      end

      def initialize(number, title, due_on, api_interface)
        @number = number
        @title = title
        @due_on = due_on

        @api_interface = api_interface
      end

      # See https://developer.github.com/v3/issues/milestones/#create-a-milestone
      def self.create(title, api_interface, **)
        api_path = 'milestones'
        request_data = { title: title }

        response = api_interface.send_request(api_path, data: request_data)

        number = response.fetch('number')
        title = response.fetch('title')
        due_on = nil

        new(number, title, due_on, api_interface)
      end

      # See https://developer.github.com/v3/issues/milestones/#list-milestones-for-a-repository
      #
      def self.list(api_interface, **)
        api_path = 'milestones'

        response = api_interface.send_request(api_path, multipage: true)

        response.map do |milestone_data|
          number = milestone_data.fetch('number')
          title = milestone_data.fetch('title')
          due_on = parse_iso_8601_timestamp(milestone_data.fetch('due_on'))

          new(number, title, due_on, api_interface)
        end
      end

      # See https://docs.github.com/en/free-pro-team@latest/rest/reference/issues#update-a-milestone
      #
      # This is a convenience method; the underlying operation is a generic update.
      #
      def self.close(number, api_interface, **)
        api_path = "milestones/#{number}"
        request_data = { state: STATE_CLOSED }

        api_interface.send_request(api_path, data: request_data)
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
geet-0.22.0 lib/geet/github/milestone.rb
geet-0.21.0 lib/geet/github/milestone.rb
geet-0.19.0 lib/geet/github/milestone.rb
geet-0.18.0 lib/geet/github/milestone.rb
geet-0.17.0 lib/geet/github/milestone.rb
geet-0.16.0 lib/geet/github/milestone.rb
geet-0.15.0 lib/geet/github/milestone.rb
geet-0.14.0 lib/geet/github/milestone.rb