class PactBroker::Domain::Pact

Attributes

consumer[W]
consumer_version[RW]

The ID is the pact_publication ID

consumer_version_branch_names[W]
consumer_version_number[RW]

The ID is the pact_publication ID

consumer_version_tag_names[W]
created_at[RW]

The ID is the pact_publication ID

db_model[RW]
head_tag_names[RW]

The ID is the pact_publication ID

id[RW]

The ID is the pact_publication ID

json_content[RW]

The ID is the pact_publication ID

latest_verification[W]
pact_version_sha[RW]

The ID is the pact_publication ID

provider[RW]

The ID is the pact_publication ID

revision_number[RW]

The ID is the pact_publication ID

Public Class Methods

new(attributes = {}) click to toggle source
# File lib/pact_broker/domain/pact.rb, line 31
def initialize attributes = {}
  @latest_verification = UnsetAttribute.new
  @consumer_version_tag_names = UnsetAttribute.new
  @consumer_version_branch_names = UnsetAttribute.new
  attributes.each_pair do | key, value |
    self.send(key.to_s + "=", value)
  end
end

Public Instance Methods

<=>(other) click to toggle source
# File lib/pact_broker/domain/pact.rb, line 112
def <=> other
  self_fields = [consumer_name.downcase, provider_name.downcase, consumer_version.order || 0]
  other_fields = [other.consumer_name.downcase, other.provider_name.downcase, other.consumer_version.order || 0]
  self_fields <=> other_fields
end
consumer() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 48
def consumer
  @consumer || consumer_version.pacticipant
end
consumer_name() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 40
def consumer_name
  consumer.name
end
consumer_version_branch_names() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 56
def consumer_version_branch_names
  get_attribute_if_set :consumer_version_branch_names
end
consumer_version_tag_names() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 52
def consumer_version_tag_names
  get_attribute_if_set :consumer_version_tag_names
end
content_hash() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 80
def content_hash
  JSON.parse(json_content, PACT_PARSING_OPTIONS)
end
content_object() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 84
def content_object
  @content_object ||= begin
    PactBroker::Pacts::Content.from_json(json_content)
  rescue
    PactBroker::Pacts::Content.new
  end
end
latest_verification() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 60
def latest_verification
  get_attribute_if_set :latest_verification
end
name() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 72
def name
  "Pact between #{consumer.name} (#{consumer_version_number}) and #{provider.name}"
end
pact_publication_id() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 92
def pact_publication_id
  id
end
pending_for_any_provider_branch?() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 108
def pending_for_any_provider_branch?
  !pact_version.verified_successfully_by_any_provider_version?
end
pending_for_provider_branch?(branch_name) click to toggle source

@param [String] branch_name the name of the provider branch that will be verifying the pacts @return Boolean whether or not the pact is in pending state (ie. the build should not fail if the verification fails)

# File lib/pact_broker/domain/pact.rb, line 104
def pending_for_provider_branch?(branch_name)
  pact_version.pending_for_provider_branch?(branch_name)
end
provider_name() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 44
def provider_name
  provider.name
end
select_pending_provider_version_tags(provider_version_tags) click to toggle source
# File lib/pact_broker/domain/pact.rb, line 96
def select_pending_provider_version_tags(provider_version_tags)
  tags_with_successful_verifications_from_that_branch = db_model.pact_version.select_provider_tags_with_successful_verifications(provider_version_tags)
  tags_with_previous_successful_verifications_from_other_branches = db_model.pact_version.select_provider_tags_with_successful_verifications_from_another_branch_from_before_this_branch_created(provider_version_tags)
  provider_version_tags - tags_with_successful_verifications_from_that_branch - tags_with_previous_successful_verifications_from_other_branches
end
to_json(_options = {}) click to toggle source
# File lib/pact_broker/domain/pact.rb, line 68
def to_json _options = {}
  json_content
end
to_s() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 64
def to_s
  "Pact: consumer=#{consumer.name} provider=#{provider.name}"
end
version_and_updated_date() click to toggle source
# File lib/pact_broker/domain/pact.rb, line 76
def version_and_updated_date
  "Version #{consumer_version_number} - #{created_at.to_time.localtime.strftime("%d/%m/%Y")}"
end

Private Instance Methods

get_attribute_if_set(attribute_name) click to toggle source

This class has various incarnations with different properties loaded. They should probably be different classes, but for now, raise an error if an attribute is called when it hasn’t been set in the constuctor, because returning nil when there should be an object causes bugs.

# File lib/pact_broker/domain/pact.rb, line 132
def get_attribute_if_set attribute_name
  val = instance_variable_get("@#{attribute_name}".to_sym)
  if val.is_a?(UnsetAttribute)
    raise UnsetAttributeError.new("Attribute #{attribute_name} not set")
  else
    val
  end
end
pact_version() click to toggle source

Really not sure about mixing Sequel model class into this PORO… But it’s much nicer than using a repository to find out the pending information :(

# File lib/pact_broker/domain/pact.rb, line 124
def pact_version
  db_model.pact_version
end