class PactBroker::Domain::Tag

Public Instance Methods

<=>(other) click to toggle source
# File lib/pact_broker/domain/tag.rb, line 176
def <=> other
  name <=> other.name
end
before_save() click to toggle source

rubocop: disable Metrics/CyclomaticComplexity

Calls superclass method
# File lib/pact_broker/domain/tag.rb, line 132
def before_save
  super
  if version
    if version.order && self.version_order.nil?
      self.version_order = version.order
    end

    if self.pacticipant_id.nil?
      if version.pacticipant_id
        self.pacticipant_id = version.pacticipant_id
      elsif version&.pacticipant&.id
        self.pacticipant_id = version.pacticipant.id
      end
    end
  end

  if version_order.nil? || pacticipant_id.nil?
    raise PactBroker::Error.new("Need to set version_order and pacticipant_id for tags now")
  end
end
for(pacticipant_name, version_number, tag_name) click to toggle source
# File lib/pact_broker/domain/tag.rb, line 31
def for(pacticipant_name, version_number, tag_name)
  where(
    version_id: db[:versions].select(:id).where(
      number: version_number,
      pacticipant_id: db[:pacticipants].select(:id).where(name_like(:name, pacticipant_name))
    ),
    name: tag_name
  ).single_record
end
head_tags_for_consumer_id(consumer_id) click to toggle source

ignores tags that don't have a pact publication

# File lib/pact_broker/domain/tag.rb, line 92
def head_tags_for_consumer_id(consumer_id)
  lp = :latest_pact_publication_ids_for_consumer_versions
  tags_versions_join = {
    Sequel[:tags][:version_id] => Sequel[:versions][:id],
    Sequel[:versions][:pacticipant_id] => consumer_id
  }

  versions_pact_publications_join = {
    Sequel[:versions][:id] => Sequel[lp][:consumer_version_id],
    Sequel[lp][:consumer_id] => consumer_id
  }
  # head tags for this consumer
  # the latest tag, pacticipant_id, version order
  # for versions that have a pact publication
  Tag
    .select_group(Sequel[:tags][:name], Sequel[:versions][:pacticipant_id])
    .select_append{ max(order).as(latest_consumer_version_order) }
    .join(:versions, tags_versions_join)
    .join(lp, versions_pact_publications_join)
end
head_tags_for_pact_publication(pact_publication) click to toggle source
# File lib/pact_broker/domain/tag.rb, line 113
def head_tags_for_pact_publication(pact_publication)
  Tag.where(version_id: pact_publication.consumer_version_id).all.select do | tag |
    tag_pp_join = {
      Sequel[:pact_publications][:consumer_version_id] => Sequel[:tags][:version_id],
      Sequel[:pact_publications][:consumer_id] => pact_publication.consumer_id,
      Sequel[:pact_publications][:provider_id] => pact_publication.provider_id,
      Sequel[:tags][:name] => tag.name
    }
    Tag.join(:pact_publications, tag_pp_join) do
      Sequel[:tags][:version_order] > tag.version_order
    end
    .where(pacticipant_id: pact_publication.consumer_id)
    .limit(1)
    .empty?
  end
end
join_pact_publications() click to toggle source
# File lib/pact_broker/domain/tag.rb, line 27
def join_pact_publications
  join(:pact_publications, { Sequel[:tags][:version_id] => Sequel[:pact_publications][:consumer_version_id] } )
end
latest?()
latest_for_pact_publication?(pact_publication) click to toggle source
# File lib/pact_broker/domain/tag.rb, line 160
def latest_for_pact_publication?(pact_publication)
  tag_pp_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[:tags][:version_id],
    Sequel[:pact_publications][:consumer_id] => pact_publication.consumer_id,
    Sequel[:pact_publications][:provider_id] => pact_publication.provider_id,
    Sequel[:tags][:name] => name
  }
  own_version_order = self.version_order
  Tag.join(:pact_publications, tag_pp_join) do
    Sequel[:tags][:version_order] > own_version_order
  end
  .where(pacticipant_id: pact_publication.consumer_id)
  .limit(1)
  .empty?
end
latest_for_pacticipant?() click to toggle source

rubocop: enable Metrics/CyclomaticComplexity

# File lib/pact_broker/domain/tag.rb, line 154
def latest_for_pacticipant?
  head_tag == self
end
Also aliased as: latest?
latest_tags() click to toggle source
# File lib/pact_broker/domain/tag.rb, line 41
def latest_tags
  self_join = {
    Sequel[:tags][:pacticipant_id] => Sequel[:tags_2][:pacticipant_id],
    Sequel[:tags][:name] => Sequel[:tags_2][:name]
  }

  PactBroker::Domain::Tag
    .select_all_qualified
    .left_join(:tags, self_join, { table_alias: :tags_2 }) do
      Sequel[:tags_2][:version_order] > Sequel[:tags][:version_order]
    end
    .where(Sequel[:tags_2][:name] => nil)
end
latest_tags_for_pacticipant_ids(pacticipant_ids) click to toggle source

Does NOT care about whether or not there is a pact publication for the version

# File lib/pact_broker/domain/tag.rb, line 57
def latest_tags_for_pacticipant_ids(pacticipant_ids)
  self_join = {
    Sequel[:tags][:pacticipant_id] => Sequel[:tags_2][:pacticipant_id],
    Sequel[:tags][:name] => Sequel[:tags_2][:name],
    Sequel[:tags_2][:pacticipant_id] => pacticipant_ids,
  }

  Tag
    .select_all_qualified
    .left_join(:tags, self_join, { table_alias: :tags_2 }) do
      Sequel[:tags_2][:version_order] > Sequel[:tags][:version_order]
    end
    .where(Sequel[:tags_2][:name] => nil)
    .where(Sequel[:tags][:pacticipant_id] => pacticipant_ids)
end
latest_tags_for_pacticipant_ids_and_tag_names(pacticipant_ids, tag_names) click to toggle source
# File lib/pact_broker/domain/tag.rb, line 73
def latest_tags_for_pacticipant_ids_and_tag_names(pacticipant_ids, tag_names)
  self_join = {
    Sequel[:tags][:pacticipant_id] => Sequel[:tags_2][:pacticipant_id],
    Sequel[:tags][:name] => Sequel[:tags_2][:name],
    Sequel[:tags_2][:pacticipant_id] => pacticipant_ids,
    Sequel[:tags_2][:name] => tag_names
  }

  Tag
    .select_all_qualified
    .left_join(:tags, self_join, { table_alias: :tags_2 }) do
      Sequel[:tags_2][:version_order] > Sequel[:tags][:version_order]
    end
    .where(Sequel[:tags_2][:name] => nil)
    .where(Sequel[:tags][:pacticipant_id] => pacticipant_ids)
    .where(Sequel[:tags][:name] => tag_names)
end
pacticipant() click to toggle source
# File lib/pact_broker/domain/tag.rb, line 180
def pacticipant
  version.pacticipant
end