class PactBroker::Matrix::AggregatedRow

Attributes

first_row[R]
matrix_rows[R]

Public Class Methods

new(matrix_rows) click to toggle source
# File lib/pact_broker/matrix/aggregated_row.rb, line 17
def initialize matrix_rows
  @matrix_rows = matrix_rows
  @first_row = matrix_rows.first
end

Public Instance Methods

consumer_head_tag_names() click to toggle source

The list of tag names for which this pact publication is the most recent with that tag There could, however, be a later consumer version that does't have a pact (perhaps because it was deleted) that has the same tag. TODO show a warning when the data is “corrupted” as above.

# File lib/pact_broker/matrix/aggregated_row.rb, line 57
def consumer_head_tag_names
  matrix_rows.collect(&:consumer_version_tag_name).compact
end
latest_verification_for_pact_version() click to toggle source
# File lib/pact_broker/matrix/aggregated_row.rb, line 47
def latest_verification_for_pact_version
  @latest_verificaton_for_pact_version ||= begin
    matrix_rows.collect(&:verification).compact.sort_by(&:id).last
  end
end
latest_verification_for_pseudo_branch() click to toggle source

If this comes back nil, it won't be “cached”, but it's a reasonably quick query, so it's probably ok. The collection of pacts that belong to the same tag can be considered a pseudo branch. Find the latest verification for each pseudo branch and return the most recent. If this pact is the most recent overall, and there were no verifications found for any of the tags, then return the most recent verification

# File lib/pact_broker/matrix/aggregated_row.rb, line 33
def latest_verification_for_pseudo_branch
  @latest_verification ||= begin
    verification = matrix_rows.collect do | row|
      row.verification || latest_verification_for_consumer_version_tag(row)
    end.compact.sort_by(&:id).last

    if !verification && overall_latest?
      overall_latest_verification
    else
      verification
    end
  end
end
overall_latest?() click to toggle source
# File lib/pact_broker/matrix/aggregated_row.rb, line 22
def overall_latest?
  !!matrix_rows.find{ | row| row.consumer_version_tag_name.nil? }
end

Private Instance Methods

consumer_version_tag_names() click to toggle source
# File lib/pact_broker/matrix/aggregated_row.rb, line 74
def consumer_version_tag_names
  matrix_rows.collect(&:consumer_version_tag_name)
end
latest_verification_for_consumer_version_tag(row) click to toggle source
# File lib/pact_broker/matrix/aggregated_row.rb, line 65
def latest_verification_for_consumer_version_tag row
  row.latest_verification_for_consumer_version_tag if row.consumer_version_tag_name
end
overall_latest_verification() click to toggle source
# File lib/pact_broker/matrix/aggregated_row.rb, line 69
def overall_latest_verification
  # not eager loaded because it shouldn't be called that often
  first_row.latest_verification_for_consumer_and_provider
end