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



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

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



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

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



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

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
23
# 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.for_all_branch_heads if selector.latest_for_each_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.



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

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