class PactBroker::Matrix::ResolvedSelectorBuilder

Attributes

pacticipant[RW]
selector_ignorer[R]
selector_type[R]
unresolved_selector[R]
versions[RW]

Public Class Methods

new(unresolved_selector, selector_type, selector_ignorer) click to toggle source

@param [PactBroker::Matrix::UnresolvedSelector] unresolved_selector @param [Symbol] selector_type :specified or :inferred @param [PactBroker::Matrix::Ignorer] selector_ignorer

# File lib/pact_broker/matrix/resolved_selector_builder.rb, line 15
def initialize(unresolved_selector, selector_type, selector_ignorer)
  @unresolved_selector = unresolved_selector
  @selector_type = selector_type
  @selector_ignorer = selector_ignorer
end

Public Instance Methods

build() click to toggle source
# File lib/pact_broker/matrix/resolved_selector_builder.rb, line 21
def build
  if pacticipant && versions
    build_resolved_selectors_for_versions(pacticipant, versions, unresolved_selector, selector_type)
  elsif pacticipant
    selector_for_all_versions_of_a_pacticipant(pacticipant, unresolved_selector, selector_type)
  else
    build_selector_for_non_existing_pacticipant(unresolved_selector, selector_type)
  end
end

Private Instance Methods

build_resolved_selectors_for_versions(pacticipant, versions, unresolved_selector, selector_type) click to toggle source

When a single selector specifies multiple versions (eg. “all prod pacts”), this expands the single selector into one selector for each version. When a pacticipant is found, but there are no versions matching the selector, the versions array will be have a single item which is nil (‘[nil]`). See PactBroker::Matrix::SelectorResolver#find_versions_for_selector There may be a better way to pass in this information.

# File lib/pact_broker/matrix/resolved_selector_builder.rb, line 41
def build_resolved_selectors_for_versions(pacticipant, versions, unresolved_selector, selector_type)
  one_of_many = versions.compact.size > 1
  versions.collect do | version |
    if version
      selector_for_found_version(pacticipant, version, unresolved_selector, selector_type, one_of_many)
    else
      selector_for_non_existing_version(pacticipant, unresolved_selector, selector_type)
    end
  end
end
build_selector_for_non_existing_pacticipant(unresolved_selector, selector_type) click to toggle source

only relevant for ignore selectors, validation stops this happening for the normal selectors

# File lib/pact_broker/matrix/resolved_selector_builder.rb, line 79
def build_selector_for_non_existing_pacticipant(unresolved_selector, selector_type)
  ResolvedSelector.for_non_existing_pacticipant(unresolved_selector, selector_type, false)
end
selector_for_all_versions_of_a_pacticipant(pacticipant, unresolved_selector, selector_type) click to toggle source
# File lib/pact_broker/matrix/resolved_selector_builder.rb, line 68
def selector_for_all_versions_of_a_pacticipant(pacticipant, unresolved_selector, selector_type)
  ResolvedSelector.for_pacticipant(
    pacticipant,
    unresolved_selector,
    selector_type,
    selector_ignorer.ignore_pacticipant?(pacticipant)
  )
end
selector_for_found_version(pacticipant, version, unresolved_selector, selector_type, one_of_many) click to toggle source
# File lib/pact_broker/matrix/resolved_selector_builder.rb, line 57
def selector_for_found_version(pacticipant, version, unresolved_selector, selector_type, one_of_many)
  ResolvedSelector.for_pacticipant_and_version(
    pacticipant,
    version,
    unresolved_selector,
    selector_type,
    selector_ignorer.ignore_pacticipant_version?(pacticipant, version),
    one_of_many
  )
end
selector_for_non_existing_version(pacticipant, unresolved_selector, selector_type) click to toggle source
# File lib/pact_broker/matrix/resolved_selector_builder.rb, line 52
def selector_for_non_existing_version(pacticipant, unresolved_selector, selector_type)
  ignore = selector_ignorer.ignore_pacticipant?(pacticipant)
  ResolvedSelector.for_pacticipant_and_non_existing_version(pacticipant, unresolved_selector, selector_type, ignore)
end