class PactBroker::Matrix::IntegrationRow
Public Instance Methods
distinct_integrations_between_given_selectors(resolved_selectors)
click to toggle source
Find all the integrations (consumer/provider pairs) that involve ONLY the given selectors. @public @param [Array<PactBroker::Matrix::ResolvedSelector>] resolved_selectors @return [Sequel::Dataset] for rows with consumer_id, consumer_name, provider_id and provider_name
# File lib/pact_broker/matrix/integration_row.rb, line 31 def distinct_integrations_between_given_selectors(resolved_selectors) if resolved_selectors.size == 1 raise ArgumentError.new("Expected multiple selectors to be provided, but only received one #{selectors}") end query = pact_publications_matching_selectors_as_consumer(resolved_selectors) .select_pacticipant_ids .distinct query.from_self(alias: :pacticipant_ids) .select( :consumer_id, Sequel[:c][:name].as(:consumer_name), :provider_id, Sequel[:p][:name].as(:provider_name) ) .join_consumers(:pacticipant_ids, :c) .join_providers(:pacticipant_ids, :p) end
inner_join_versions_dataset(versions)
click to toggle source
@private
# File lib/pact_broker/matrix/integration_row.rb, line 88 def inner_join_versions_dataset(versions) versions_join = { Sequel[:p][:consumer_version_id] => Sequel[:versions][:id] } join(versions, versions_join, table_alias: :versions) end
inner_join_versions_for_selectors_as_consumer(resolved_selectors)
click to toggle source
@private
# File lib/pact_broker/matrix/integration_row.rb, line 80 def inner_join_versions_for_selectors_as_consumer(resolved_selectors) # get the UnresolvedSelector objects back out of the resolved_selectors because the Version.for_selector() method uses the UnresolvedSelector unresolved_selectors = resolved_selectors.collect(&:original_selector).uniq versions = PactBroker::Domain::Version.ids_for_selectors(unresolved_selectors) inner_join_versions_dataset(versions) end
integrations_for_selector_as_consumer(resolved_selector)
click to toggle source
Return the distinct consumer/provider ids and names for the integrations which involve the given resolved selector in the role of consumer. The resolved selector must have a pacticipant_id, and may or may not have a pacticipant_version_id. @public @param [PactBroker::Matrix::ResolvedSelector] resolved_selector @return [Sequel::Dataset] for rows with consumer_id, consumer_name, provider_id and provider_name
# File lib/pact_broker/matrix/integration_row.rb, line 17 def integrations_for_selector_as_consumer(resolved_selector) select(:consumer_id, :provider_id) .distinct .where({ consumer_id: resolved_selector.pacticipant_id, consumer_version_id: resolved_selector.pacticipant_version_id }.compact) .from_self(alias: :integrations) .select(:consumer_id, :provider_id, Sequel[:consumers][:name].as(:consumer_name), Sequel[:providers][:name].as(:provider_name)) .join_consumers(:integrations, :consumers) .join_providers(:integrations, :providers) end
join_consumers(qualifier = :p, table_alias = :consumers)
click to toggle source
@public
# File lib/pact_broker/matrix/integration_row.rb, line 51 def join_consumers qualifier = :p, table_alias = :consumers join( :pacticipants, { Sequel[qualifier][:consumer_id] => Sequel[table_alias][:id] }, { table_alias: table_alias } ) end
join_providers(qualifier = :p, table_alias = :providers)
click to toggle source
@public
# File lib/pact_broker/matrix/integration_row.rb, line 60 def join_providers qualifier = :p, table_alias = :providers join( :pacticipants, { Sequel[qualifier][:provider_id] => Sequel[table_alias][:id] }, { table_alias: table_alias } ) end
pact_publications_matching_selectors_as_consumer(resolved_selectors)
click to toggle source
@private
# File lib/pact_broker/matrix/integration_row.rb, line 69 def pact_publications_matching_selectors_as_consumer(resolved_selectors) pacticipant_ids = resolved_selectors.collect(&:pacticipant_id).uniq self .select_pacticipant_ids .distinct .inner_join_versions_for_selectors_as_consumer(resolved_selectors) .where(provider_id: pacticipant_ids) end