class PactBroker::Matrix::Row

Constants

TP_COLS

Used when using table_print to output query results

Public Instance Methods

<=>(other) click to toggle source

Add logic for ignoring case

# File lib/pact_broker/matrix/row.rb, line 202
def <=> other
  comparisons = [
    compare_name_asc(consumer_name, other.consumer_name),
    compare_number_desc(consumer_version_order, other.consumer_version_order),
    compare_number_desc(pact_revision_number, other.pact_revision_number),
    compare_name_asc(provider_name, other.provider_name),
    compare_number_desc(provider_version_order, other.provider_version_order),
    compare_number_desc(verification_id, other.verification_id)
  ]

  comparisons.find{|c| c != 0 } || 0
end
[](key) click to toggle source

Temporary method while we transition from returning Hashes to return Matrix objects from the repository find methods Need to make the object act as a hash and an object

Calls superclass method
# File lib/pact_broker/matrix/row.rb, line 140
def [] key
  if key == :provider_version_tags || key == :consumer_version_tags
    send(key)
  else
    super
  end
end
compare_name_asc(name1, name2) click to toggle source
# File lib/pact_broker/matrix/row.rb, line 215
def compare_name_asc name1, name2
  name1 <=> name2
end
compare_number_desc(number1, number2) click to toggle source
# File lib/pact_broker/matrix/row.rb, line 223
def compare_number_desc number1, number2
  if number1 && number2
    number2 <=> number1
  elsif number1
    1
  else
    -1
  end
end
consumer(consumer_name) click to toggle source
# File lib/pact_broker/matrix/row.rb, line 29
def consumer consumer_name
  where(name_like(:consumer_name, consumer_name))
end
consumer_version() click to toggle source
# File lib/pact_broker/matrix/row.rb, line 160
def consumer_version
  @consumer_version ||= OpenStruct.new(number: consumer_version_number, order: consumer_version_order, id: consumer_version_id, pacticipant: consumer)
end
eql?(obj) click to toggle source

Need to overwrite eql? from lib/sequel/model/base.rb because it uses @values instead of self.values so the success boolean/integer problem mentioned above screws things up

# File lib/pact_broker/matrix/row.rb, line 251
def eql?(obj)
  (obj.class == model) && (obj.values == values)
end
involves_pacticipant_with_name?(pacticipant_name) click to toggle source
# File lib/pact_broker/matrix/row.rb, line 259
def involves_pacticipant_with_name?(pacticipant_name)
  pacticipant_name.include?(pacticipant_name)
end
matching_selectors(selectors) click to toggle source
# File lib/pact_broker/matrix/row.rb, line 37
def matching_selectors selectors
  if selectors.size == 1
    where_consumer_or_provider_is(selectors.first)
  else
    where_consumer_and_provider_in(selectors)
  end
end
order_by_names_ascending_most_recent_first() click to toggle source
# File lib/pact_broker/matrix/row.rb, line 126
def order_by_names_ascending_most_recent_first
  order(
    Sequel.asc(:consumer_name),
    Sequel.desc(:consumer_version_order),
    Sequel.desc(:pact_revision_number),
    Sequel.asc(:provider_name),
    Sequel.desc(:provider_version_order),
    Sequel.desc(:verification_id))
end
pact() click to toggle source
# File lib/pact_broker/matrix/row.rb, line 170
def pact
  @pact ||= OpenStruct.new(
    consumer: consumer,
    provider: provider,
    consumer_version: consumer_version,
    consumer_version_number: consumer_version_number,
    created_at: pact_created_at,
    revision_number: pact_revision_number,
    pact_version_sha: pact_version_sha
  )
end
pacticipant_names() click to toggle source
# File lib/pact_broker/matrix/row.rb, line 255
def pacticipant_names
  [consumer_name, provider_name]
end
provider(provider_name) click to toggle source
# File lib/pact_broker/matrix/row.rb, line 33
def provider provider_name
  where(name_like(:provider_name, provider_name))
end
provider_version() click to toggle source
# File lib/pact_broker/matrix/row.rb, line 164
def provider_version
  if provider_version_number
    @provider_version ||= OpenStruct.new(number: provider_version_number, order: provider_version_order, id: provider_version_id, pacticipant: provider)
  end
end
success() click to toggle source

For some reason, with MySQL, the success column value comes back as an integer rather than a boolean for the latest_matrix view (but not the matrix view!) Maybe something to do with the union? Haven't investigated as this is an easy enough fix.

Calls superclass method
# File lib/pact_broker/matrix/row.rb, line 238
def success
  value = super
  value.nil? ? nil : value == true || value == 1
end
summary() click to toggle source
# File lib/pact_broker/matrix/row.rb, line 148
def summary
  "#{consumer_name}#{consumer_version_number} #{provider_name}#{provider_version_number || '?'} (r#{pact_revision_number}n#{verification_number || '?'})"
end
to_s() click to toggle source
# File lib/pact_broker/matrix/row.rb, line 219
def to_s
  "#{consumer_name} #{consumer_version_number} #{provider_name} #{provider_version_number} #{success}"
end
values() click to toggle source
Calls superclass method
# File lib/pact_broker/matrix/row.rb, line 243
def values
  super.merge(success: success)
end
verification() click to toggle source
# File lib/pact_broker/matrix/row.rb, line 182
def verification
  if verification_executed_at
    @latest_verification ||= OpenStruct.new(
      id: verification_id,
      success: success,
      number: verification_number,
      execution_date: verification_executed_at,
      created_at: verification_executed_at,
      provider_version_number: provider_version_number,
      provider_version_order: provider_version_order,
      build_url: verification_build_url,
      provider_version: provider_version,
      consumer_name: consumer_name,
      provider_name: provider_name,
      pact_version_sha: pact_version_sha
    )
  end
end
where_consumer_and_provider_in(selectors) click to toggle source

find rows where (the consumer (and optional version) matches any of the selectors) AND the (provider (and optional version) matches any of the selectors OR the provider matches

and the verification is missing (and hence the provider version is null))
# File lib/pact_broker/matrix/row.rb, line 49
def where_consumer_and_provider_in selectors
  where{
    Sequel.&(
      Sequel.|(
        *QueryHelper.consumer_and_maybe_consumer_version_match_any_selector(selectors)
      ),
      Sequel.|(
        *QueryHelper.provider_and_maybe_provider_version_match_any_selector_or_verification_is_missing(selectors)
      ),
      QueryHelper.either_consumer_or_provider_was_specified_in_query(selectors)
    )
  }
end
where_consumer_or_provider_is(s) click to toggle source
# File lib/pact_broker/matrix/row.rb, line 117
def where_consumer_or_provider_is s
  where{
    Sequel.|(
      s[:pacticipant_version_id] ? Sequel.&(consumer_id: s[:pacticipant_id], consumer_version_id: s[:pacticipant_version_id]) :  Sequel.&(consumer_id: s[:pacticipant_id]),
      s[:pacticipant_version_id] ? Sequel.&(provider_id: s[:pacticipant_id], provider_version_id: s[:pacticipant_version_id]) :  Sequel.&(provider_id: s[:pacticipant_id])
    )
  }
end