Module: PactBroker::Pacts::PactPublicationSelectorDatasetModule

Included in:
PactPublicationDatasetModule
Defined in:
lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb

Instance Method Summary collapse

Instance Method Details

#for_currently_deployed_versions(environment_name) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 46

def for_currently_deployed_versions(environment_name)
  deployed_versions_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[:deployed_versions][:version_id]
  }
  currently_deployed_versions_join = {
    Sequel[:deployed_versions][:id] => Sequel[:currently_deployed_version_ids][:deployed_version_id]
  }
  environments_join = {
    Sequel[:deployed_versions][:environment_id] => Sequel[:environments][:id],
    Sequel[:environments][:name] => environment_name
  }.compact

  query = self
  if no_columns_selected?
    query = query.select_all_qualified.select_append(Sequel[:environments][:name].as(:environment_name), Sequel[:deployed_versions][:target].as(:target))
  end
  query
    .join(:deployed_versions, deployed_versions_join)
    .join(:currently_deployed_version_ids, currently_deployed_versions_join)
    .join(:environments, environments_join)
    .remove_overridden_revisions_from_complete_query
end

#for_currently_supported_versions(environment_name) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 69

def for_currently_supported_versions(environment_name)
  released_versions_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[:released_versions][:version_id],
    Sequel[:released_versions][:support_ended_at] => nil
  }
  environments_join = {
    Sequel[:released_versions][:environment_id] => Sequel[:environments][:id],
    Sequel[:environments][:name] => environment_name
  }.compact

  query = self
  if no_columns_selected?
    query = query.select_all_qualified.select_append(Sequel[:environments][:name].as(:environment_name), Sequel.lit("NULL").as(:target))
  end
  query
    .join(:released_versions, released_versions_join)
    .join(:environments, environments_join)
    .remove_overridden_revisions_from_complete_query
end

#for_environment(environment_name) ⇒ Object



89
90
91
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 89

def for_environment(environment_name)
  for_currently_deployed_versions(environment_name).union(for_currently_supported_versions(environment_name))
end

#for_provider_and_consumer_version_selector(provider, selector) ⇒ Object

rubocop: disable Metrics/CyclomaticComplexity



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 5

def for_provider_and_consumer_version_selector provider, selector
  query = for_provider(provider)
  query = query.for_consumer(PactBroker::Domain::Pacticipant.find_by_name(selector.consumer)) if selector.consumer
  query = query.for_currently_deployed_versions(selector.environment_name) if selector.currently_deployed?
  query = query.for_currently_supported_versions(selector.environment_name) if selector.currently_supported?
  query = query.for_consumer_version_tag(selector.tag) if selector.all_for_tag?

  if selector.environment_name && !selector.currently_deployed? && !selector.currently_supported?
    query = query.for_environment(selector.environment_name)
  end

  # Do the "latest" logic last so that the provider/consumer criteria get included in the "latest" query before the join, rather than after
  query = query.latest_for_main_branches if selector.latest_for_main_branch?
  query = query.latest_for_consumer_branch(selector.branch) if selector.latest_for_branch?
  query = query.for_latest_consumer_versions_with_tag(selector.tag) if selector.latest_for_tag?
  query = query.overall_latest if selector.overall_latest?
  query
end

#latest_for_main_branchesObject

Updated logic - the pacts for the latest version of each main branch, not the latest pact that belongs to the main branch.



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 27

def latest_for_main_branches
  consumers_join = { Sequel[:pact_publications][:consumer_id] => Sequel[:consumers][:id] }

  branch_heads_join = {
    Sequel[:pact_publications][:consumer_version_id] => Sequel[:branch_heads][:version_id],
    Sequel[:consumers][:main_branch] => Sequel[:branch_heads][:branch_name]
  }

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

  query
    .join(:pacticipants, consumers_join, { table_alias: :consumers })
    .join(:branch_heads, branch_heads_join)
    .remove_overridden_revisions_from_complete_query
end