Sha256: b4dc4dc4225e4a55f18105ee6892a6585dae6707fc5de911a073b8e8f1e55b40

Contents?: true

Size: 1.96 KB

Versions: 41

Compression:

Stored size: 1.96 KB

Contents

require_relative 'base'
require 'date'
require 'time'

module Gitlab
  module Triage
    module Resource
      class Milestone < Base
        FIELDS = %i[
          id
          iid
          project_id
          group_id
          title
          description
          state
        ].freeze

        DATE_FIELDS = %i[
          due_date
          start_date
        ].freeze

        TIME_FIELDS = %i[
          updated_at
          created_at
        ].freeze

        FIELDS.each do |field|
          define_field(field) do
            resource[field]
          end
        end

        DATE_FIELDS.each do |field|
          define_field(field) do
            value = resource[field]

            Date.parse(value) if value
          end
        end

        TIME_FIELDS.each do |field|
          define_field(field) do
            value = resource[field]

            Time.parse(value) if value
          end
        end

        def succ
          index = current_index

          all_active_with_start_date[index.succ] if index
        end

        def active?
          state == 'active'
        end

        def closed?
          state == 'closed'
        end

        def started?(today = Date.today)
          start_date && start_date <= today
        end

        def expired?(today = Date.today)
          due_date && due_date < today
        end

        def in_progress?(today = Date.today)
          started?(today) && !expired?(today)
        end

        private

        def current_index
          all_active_with_start_date
            .index { |milestone| milestone.id == id }
        end

        def all_active_with_start_date
          @all_active_with_start_date ||=
            all_active.select(&:start_date).sort_by(&:start_date)
        end

        def all_active
          @all_active ||=
            network
              .query_api_cached(url(state: 'active'))
              .map { |milestone| self.class.new(milestone, parent: self) }
        end
      end
    end
  end
end

Version data entries

41 entries across 41 versions & 2 rubygems

Version Path
gitlab-triage-1.42.2 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.42.1 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.42.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.41.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.40.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.30.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.29.0 lib/gitlab/triage/resource/milestone.rb
payping-gitlab-triage-0.1.3 lib/gitlab/triage/resource/milestone.rb
payping-gitlab-triage-0.1.2 lib/gitlab/triage/resource/milestone.rb
payping-gitlab-triage-0.1.1 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.28.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.27.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.26.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.25.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.24.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.23.1 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.23.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.22.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.21.0 lib/gitlab/triage/resource/milestone.rb
gitlab-triage-1.20.0 lib/gitlab/triage/resource/milestone.rb