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



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

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



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 87

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



107
108
109
# File 'lib/pact_broker/pacts/pact_publication_selector_dataset_module.rb', line 107

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
54
55
56
57
58
59
60
61
62
# 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] }
  branch_versions_join = {
    Sequel[:branch_versions][:version_id] => Sequel[:pact_publications][:consumer_version_id],
    Sequel[:branch_versions][:branch_name] => Sequel[:consumers][:main_branch]
  }
  base_query = self

  if no_columns_selected?
    base_query = base_query.select_all_qualified.select_append(Sequel[:branch_versions][:branch_name].as(:branch_name))
  end
  base_query
    .join(:pacticipants, consumers_join, { table_alias: :consumers })
    .join(:branch_versions, branch_versions_join)
    .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