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



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 55

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



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 78

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



98
99
100
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 98

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

#for_main_branchesObject



47
48
49
50
51
52
53
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 47

def for_main_branches
  consumers_join = { Sequel[:pact_publications][:consumer_id] => Sequel[:consumers][:id] }
  query = self
  query
    .join(:pacticipants, consumers_join, { table_alias: :consumers })
    .remove_overridden_revisions_from_complete_query
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