module PactBroker::Pacts::PactPublicationDatasetModule

rubocop: disable Metrics/ModuleLength

Public Instance Methods

consumer_name_like(name) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 350
def consumer_name_like(name)
  where(name_like(Sequel[:consumers][:name], name))
end
consumer_version_number_like(number) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 354
def consumer_version_number_like(number)
  where(name_like(Sequel[:cv][:number], number))
end
consumer_version_order_after(order) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 366
def consumer_version_order_after order
  where(Sequel.lit("consumer_version_order > ?", order))
end
consumer_version_order_before(order) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 362
def consumer_version_order_before order
  where(Sequel.lit("consumer_version_order < ?", order))
end
consumer_version_tag(tag) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 358
def consumer_version_tag(tag)
  where(name_like(Sequel[:ct][:name],tag))
end
created_after(date) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 256
def created_after date
  where(Sequel.lit("#{first_source_alias}.created_at > ?", date))
end
delete() click to toggle source
Calls superclass method
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 398
def delete
  require "pact_broker/webhooks/triggered_webhook"
  PactBroker::Webhooks::TriggeredWebhook.where(pact_publication: self).delete
  super
end
eager_load_pact_versions() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 323
def eager_load_pact_versions
  eager(:pact_versions)
end
earliest() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 382
def earliest
  order(:consumer_version_order).limit(1)
end
for_branch_name(branch_name) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 332
def for_branch_name branch_name
  branch_versions_join = {
    Sequel[:branch_versions][:version_id] => Sequel[:pact_publications][:consumer_version_id],
    Sequel[:branch_versions][:branch_name] => branch_name
  }

  base_query = self
  if no_columns_selected?
    base_query = base_query.select_all_qualified.select_append(Sequel[:branch_versions][:branch_name].as(:branch_name))
  end

  base_query.join(:branch_versions, branch_versions_join)
end
for_consumer(consumer) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 26
def for_consumer consumer
  where(consumer: consumer)
end
for_consumer_id_and_provider_id(consumer_id, provider_id) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 10
def for_consumer_id_and_provider_id(consumer_id, provider_id)
  where(Sequel[:pact_publications][:consumer_id] => consumer_id, Sequel[:pact_publications][:provider_id] => provider_id)
end
for_consumer_name(consumer_name) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 18
def for_consumer_name(consumer_name)
  where(consumer: PactBroker::Domain::Pacticipant.find_by_name(consumer_name))
end
for_consumer_name_and_maybe_version_number(consumer_name, consumer_version_number) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 52
def for_consumer_name_and_maybe_version_number(consumer_name, consumer_version_number)
  if consumer_version_number
    where(consumer_version: PactBroker::Domain::Version.where_pacticipant_name_and_version_number(consumer_name, consumer_version_number))
  else
    where(consumer: PactBroker::Domain::Pacticipant.find_by_name(consumer_name))
  end
end
for_consumer_version_tag(tag_name) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 35
def for_consumer_version_tag tag_name
  base_query = self
  if no_columns_selected?
    base_query = base_query.select_all_qualified.select_append(Sequel[:tags][:name].as(:tag_name))
  end

  base_query
    .join(:tags, { version_id: :consumer_version_id, Sequel[:tags][:name] => tag_name })
    .remove_overridden_revisions_from_complete_query
end
for_consumer_version_tag_all_revisions(tag_name) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 46
def for_consumer_version_tag_all_revisions tag_name
  join(:tags, { version_id: :consumer_version_id }) do
    name_like(Sequel[:tags][:name], tag_name)
  end
end
for_latest_consumer_versions_with_tag(tag_name) click to toggle source

The pacts for the latest versions with the specified tag (new logic) NOT the latest pact that belongs to a version with the specified tag.

# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 206
def for_latest_consumer_versions_with_tag(tag_name)
  if PactBroker.feature_enabled?(:fix_issue_494)
    head_tags = PactBroker::Domain::Tag
                  .select_group(:pacticipant_id, :name)
                  .select_append{ max(version_order).as(:latest_version_order) }
                  .where(name: tag_name)

    head_tags_join = {
      Sequel[:pact_publications][:consumer_id] => Sequel[:head_tags][:pacticipant_id],
      Sequel[:pact_publications][:consumer_version_order] => Sequel[:head_tags][:latest_version_order]
    }

    base_query = self
    if no_columns_selected?
      base_query = base_query.select_all_qualified.select_append(Sequel[:head_tags][:name].as(:tag_name))
    end

    base_query
      .join(head_tags, head_tags_join, { table_alias: :head_tags })
     .remove_overridden_revisions_from_complete_query
  else
    latest_for_consumer_tag(tag_name)
  end
end
for_pact_version_id(pact_version_id) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 272
def for_pact_version_id(pact_version_id)
  where(Sequel[:pact_publications][:pact_version_id] => pact_version_id)
end
for_pact_version_sha(pact_version_sha) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 318
def for_pact_version_sha(pact_version_sha)
  join_pact_versions
    .where(Sequel[:pact_versions][:sha] => pact_version_sha)
end
for_provider(provider) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 22
def for_provider provider
  where(provider: provider)
end
for_provider_name(provider_name) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 14
def for_provider_name(provider_name)
  where(provider: PactBroker::Domain::Pacticipant.find_by_name(provider_name))
end
in_environments() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 231
def in_environments
  currently_deployed_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[:currently_deployed_version_ids][:version_id]
  }

  released_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[:released_versions][:version_id],
    Sequel[:released_versions][:support_ended_at] => nil
  }

  base_query = self
  if no_columns_selected?
    base_query = base_query.select_all_qualified
  end

  deployed = base_query.join(:currently_deployed_version_ids, currently_deployed_join)
  released = base_query.join(:released_versions, released_join)

  deployed.union(released).remove_overridden_revisions_from_complete_query
end
join_consumer_branch_versions() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 287
def join_consumer_branch_versions
  join(:branch_versions, { Sequel[:pact_publications][:consumer_version_id] => Sequel[:branch_versions][:version_id] })
end
join_consumer_version_tags(table_alias = :ct) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 283
def join_consumer_version_tags(table_alias = :ct)
  join(:tags, { Sequel[table_alias][:version_id] => Sequel[:pact_publications][:consumer_version_id]}, { table_alias: table_alias })
end
join_consumer_version_tags_with_names(consumer_version_tag_names) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 291
def join_consumer_version_tags_with_names(consumer_version_tag_names)
  join(:tags, {
    Sequel[:ct][:version_id] => Sequel[:pact_publications][:consumer_version_id],
    Sequel[:ct][:name] => consumer_version_tag_names
  }, {
    table_alias: :ct
  })
end
join_consumer_versions(table_alias = :cv, extra_join_criteria = {}, &block) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 276
def join_consumer_versions(table_alias = :cv, extra_join_criteria = {}, &block)
  versions_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[table_alias][:id]
  }.merge(extra_join_criteria)
  join(:versions, versions_join, { table_alias: table_alias }, &block)
end
join_consumers(table_alias = :consumers, base_table = :pact_publications, extra_join_criteria = {}) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 307
def join_consumers(table_alias = :consumers, base_table = :pact_publications, extra_join_criteria = {})
  consumer_join = {
    Sequel[base_table][:consumer_id] => Sequel[table_alias][:id]
  }.merge(extra_join_criteria)
  join(:pacticipants, consumer_join, { table_alias: table_alias })
end
join_pact_versions() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 314
def join_pact_versions
  join(:pact_versions, { Sequel[:pact_publications][:pact_version_id] => Sequel[:pact_versions][:id] })
end
join_providers(table_alias = :providers, base_table = :pact_publications, extra_join_criteria = {}) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 300
def join_providers(table_alias = :providers, base_table = :pact_publications, extra_join_criteria = {})
  provider_join = {
    Sequel[base_table][:provider_id] => Sequel[table_alias][:id]
  }.merge(extra_join_criteria)
  join(:pacticipants, provider_join, { table_alias: table_alias })
end
latest() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 386
def latest
  order(:consumer_version_order, :revision_number).last
end
latest_by_consumer_branch() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 60
def latest_by_consumer_branch
  branch_versions_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[:branch_versions][:version_id]
  }

  branches_join = {
    Sequel[:branch_versions][:branch_id] => Sequel[:branches][:id]
  }

  max_orders = join(:branch_versions, branch_versions_join)
                .join(:branches, branches_join)
                .select_group(Sequel[:pact_publications][:consumer_id], Sequel[:pact_publications][:provider_id], Sequel[:branches][:name].as(:branch_name))
                .select_append{ max(consumer_version_order).as(latest_consumer_version_order) }

  max_join = {
    Sequel[:max_orders][:consumer_id] => Sequel[:pact_publications][:consumer_id],
    Sequel[:max_orders][:provider_id] => Sequel[:pact_publications][:provider_id],
    Sequel[:max_orders][:latest_consumer_version_order] => Sequel[:pact_publications][:consumer_version_order]
  }

  base_query = self
  if no_columns_selected?
    base_query = base_query.select_all_qualified.select_append(Sequel[:max_orders][:branch_name].as(:branch_name))
  end

  base_query
    .remove_overridden_revisions
    .join(max_orders, max_join, { table_alias: :max_orders })
end
latest_by_consumer_tag() click to toggle source

The latest pact publication for each tag

# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 143
def latest_by_consumer_tag
  tags_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[:tags][:version_id]
  }

  base_query = join(:tags, tags_join)

  if no_columns_selected?
    base_query = base_query.select_all_qualified.select_append(Sequel[:tags][:name].as(:tag_name))
  end

  joined_query = base_query.select(
    Sequel[:pact_publications][:consumer_id],
    Sequel[:tags][:version_order],
    Sequel[:tags][:name].as(:tag_name)
  )

  self_join = {
    Sequel[:pact_publications][:consumer_id] => Sequel[:pp2][:consumer_id],
    Sequel[:tags][:name] => Sequel[:pp2][:tag_name]
  }
  base_query.left_join(joined_query, self_join, { table_alias: :pp2 } ) do
    Sequel[:pp2][:version_order] > Sequel[:tags][:version_order]
  end
  .where(Sequel[:pp2][:version_order] => nil)
  .remove_overridden_revisions_from_complete_query
end
latest_by_consumer_version_order() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 370
def latest_by_consumer_version_order
  reverse_order(:consumer_version_order).limit(1)
end
latest_for_consumer_branch(branch_name) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 112
def latest_for_consumer_branch(branch_name)
  branch_versions_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[:branch_versions][:version_id]
  }

  branches_join = {
    Sequel[:branch_versions][:branch_id] => Sequel[:branches][:id],
    Sequel[:branches][:name] => branch_name
  }

  max_orders = join(:branch_versions, branch_versions_join)
                .join(:branches, branches_join)
                .select_group(:consumer_id, :provider_id, Sequel[:branches][:name].as(:branch_name))
                .select_append{ max(consumer_version_order).as(latest_consumer_version_order) }

  max_join = {
    Sequel[:max_orders][:consumer_id] => Sequel[:pact_publications][:consumer_id],
    Sequel[:max_orders][:provider_id] => Sequel[:pact_publications][:provider_id],
    Sequel[:max_orders][:latest_consumer_version_order] => Sequel[:pact_publications][:consumer_version_order]
  }

  base_query = self
  if no_columns_selected?
    base_query = base_query.select_all_qualified.select_append(Sequel[:max_orders][:branch_name].as(:branch_name))
  end
  base_query
    .join(max_orders, max_join, { table_alias: :max_orders })
    .remove_overridden_revisions_from_complete_query
end
latest_for_consumer_tag(tag_name) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 171
def latest_for_consumer_tag(tag_name)
  tags_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[:tags][:version_id],
    Sequel[:tags][:name] => tag_name
  }

  base_query = self
  if no_columns_selected?
    base_query = base_query.select_all_qualified.select_append(Sequel[:tags][:name].as(:tag_name))
  end

  base_query = base_query
    .join(:tags, tags_join)
    .where(Sequel[:tags][:name] => tag_name)

  joined_query = base_query.select(
    Sequel[:pact_publications][:consumer_id],
    Sequel[:tags][:name].as(:tag_name),
    Sequel[:tags][:version_order]
  )

  self_join = {
    Sequel[:pact_publications][:consumer_id] => Sequel[:pp2][:consumer_id],
    Sequel[:tags][:name] => Sequel[:pp2][:tag_name]
  }

  base_query.left_join(joined_query, self_join, { table_alias: :pp2 } ) do
    Sequel[:pp2][:version_order] > Sequel[:tags][:version_order]
  end
  .where(Sequel[:pp2][:version_order] => nil)
  .remove_overridden_revisions_from_complete_query
end
order_by_consumer_name() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 374
def order_by_consumer_name
  order_append_ignore_case(Sequel[:consumers][:name])
end
order_by_consumer_version_order() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 378
def order_by_consumer_version_order
  order_append(:consumer_version_order, :revision_number)
end
overall_latest() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 90
def overall_latest
  self_join = {
    Sequel[:pact_publications][:consumer_id] => Sequel[:pp2][:consumer_id],
    Sequel[:pact_publications][:provider_id] => Sequel[:pp2][:provider_id]
  }

  base_query = self
  base_query = base_query.select_all_qualified if no_columns_selected?

  base_query.left_join(base_query.select(:consumer_id, :provider_id, :consumer_version_order), self_join, { table_alias: :pp2 } ) do
    Sequel[:pp2][:consumer_version_order] > Sequel[:pact_publications][:consumer_version_order]
  end
  .where(Sequel[:pp2][:consumer_version_order] => nil)
  .remove_overridden_revisions_from_complete_query
end
overall_latest_for_consumer_id_and_provider_id(consumer_id, provider_id) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 106
def overall_latest_for_consumer_id_and_provider_id(consumer_id, provider_id)
  for_consumer_id_and_provider_id(consumer_id, provider_id)
    .order(Sequel.desc(Sequel[:pact_publications][:consumer_version_order]), Sequel.desc(:revision_number))
    .limit(1)
end
provider_name_like(name) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 346
def provider_name_like(name)
  where(name_like(Sequel[:providers][:name], name))
end
remove_overridden_revisions(pact_publications_alias = :pact_publications) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 260
def remove_overridden_revisions(pact_publications_alias = :pact_publications)
  base = self
  base = base.select_all_qualified if no_columns_selected?
  base.join(:latest_pact_publication_ids_for_consumer_versions, { Sequel[:lp][:pact_publication_id] => Sequel[pact_publications_alias][:id] }, { table_alias: :lp})
end
remove_overridden_revisions_from_complete_query() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 266
def remove_overridden_revisions_from_complete_query
  from_self(alias: :pact_publications)
    .select(Sequel[:pact_publications].*)
    .remove_overridden_revisions(:pact_publications)
end
tag(tag_name) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 327
def tag tag_name
  filter = name_like(Sequel.qualify(:tags, :name), tag_name)
  join(:tags, {version_id: :consumer_version_id}).where(filter)
end
untagged() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 30
def untagged
  left_outer_join(:tags, { version_id: :consumer_version_id })
    .where(Sequel.qualify(:tags, :name) => nil)
end
verified_before_date(date) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 252
def verified_before_date(date)
  where { Sequel[:verifications][:execution_date] < date }
end
where_consumer_if_set(consumer) click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 390
def where_consumer_if_set(consumer)
  if consumer
    where(consumer: consumer)
  else
    self
  end
end

Private Instance Methods

no_columns_selected?() click to toggle source
# File lib/pact_broker/pacts/pact_publication_dataset_module.rb, line 406
def no_columns_selected?
  opts[:select].nil?
end