Skip to content

Commit 869d49d

Browse files
committed
feat(matrix ui): add tags
1 parent 73e55e7 commit 869d49d

File tree

7 files changed

+128
-8
lines changed

7 files changed

+128
-8
lines changed

lib/pact_broker/matrix/repository.rb

+11-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@ def find selectors, options = {}
2929
lines = lines.select{ |l| options[:success].include?(l.success) }
3030
end
3131

32-
lines.sort.collect(&:values)
32+
lines.sort.collect do | line |
33+
values = line.values
34+
values[:consumer_version_tags] = line.consumer_version_tags.collect(&:values)
35+
values[:provider_version_tags] = line.provider_version_tags.collect(&:values)
36+
values
37+
end
3338
end
3439

3540
def apply_latestby options, selectors, lines
@@ -59,7 +64,11 @@ def find_compatible_pacticipant_versions selectors
5964
def query_matrix selectors, options
6065
query = view_for(options).select_all.matching_selectors(selectors)
6166
query = query.limit(options[:limit]) if options[:limit]
62-
query.order_by_names_ascending_most_recent_first.all
67+
query
68+
.order_by_names_ascending_most_recent_first
69+
.eager(:consumer_version_tags)
70+
.eager(:provider_version_tags)
71+
.all
6372
end
6473

6574
def view_for(options)

lib/pact_broker/ui/view_models/matrix_line.rb

+30-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
require 'pact_broker/api/pact_broker_urls'
22
require 'pact_broker/ui/helpers/url_helper'
33
require 'pact_broker/date_helper'
4+
require 'pact_broker/ui/view_models/matrix_tag'
45

56
module PactBroker
67
module UI
@@ -70,6 +71,30 @@ def provider_version_order
7071
end
7172
end
7273

74+
def latest_consumer_version_tags
75+
@line[:consumer_version_tags]
76+
.select{ | tag | tag[:latest] }
77+
.collect{ | tag | MatrixTag.new(tag.merge(pacticipant_name: consumer_name, version_number: consumer_version_number)) }
78+
end
79+
80+
def other_consumer_version_tags
81+
@line[:consumer_version_tags]
82+
.select{ | tag | !tag[:latest] }
83+
.collect{ | tag | MatrixTag.new(tag.merge(pacticipant_name: consumer_name, version_number: consumer_version_number)) }
84+
end
85+
86+
def latest_provider_version_tags
87+
@line[:provider_version_tags]
88+
.select{ | tag | tag[:latest] }
89+
.collect{ | tag | MatrixTag.new(tag.merge(pacticipant_name: provider_name, version_number: provider_version_number)) }
90+
end
91+
92+
def other_provider_version_tags
93+
@line[:provider_version_tags]
94+
.select{ | tag | !tag[:latest] }
95+
.collect{ | tag | MatrixTag.new(tag.merge(pacticipant_name: provider_name, version_number: provider_version_number)) }
96+
end
97+
7398
def orderable_fields
7499
[consumer_name, consumer_version_order, @line[:pact_revision_number], provider_name, @line[:verification_id]]
75100
end
@@ -92,7 +117,11 @@ def verification_status
92117
end
93118

94119
def pact_publication_date
95-
DateHelper.distance_of_time_in_words(@line[:pact_created_at], DateTime.now) + " ago"
120+
relative_date(@line[:pact_created_at])
121+
end
122+
123+
def relative_date date
124+
DateHelper.distance_of_time_in_words(date, DateTime.now) + " ago"
96125
end
97126

98127
def pact_published_order
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
require 'pact_broker/api/pact_broker_urls'
2+
require 'pact_broker/ui/helpers/url_helper'
3+
require 'pact_broker/date_helper'
4+
5+
module PactBroker
6+
module UI
7+
module ViewDomain
8+
class MatrixTag
9+
10+
include PactBroker::Api::PactBrokerUrls
11+
12+
def initialize params
13+
@params = params
14+
@name = params[:name]
15+
@version_number = params[:version_number]
16+
@created_at = params[:created_at]
17+
@latest = !!params[:latest]
18+
end
19+
20+
def name
21+
@params[:name]
22+
end
23+
24+
def tooltip
25+
if @latest
26+
"LATEST. Tag created #{relative_date(@created_at)}."
27+
else
28+
"Tag created #{relative_date(@created_at)}."
29+
end
30+
end
31+
32+
def url
33+
hal_browser_url("/pacticipants/#{ERB::Util.url_encode(@params[:pacticipant_name])}/versions/#{@params[:version_number]}/tags/#{@params[:name]}")
34+
end
35+
36+
def relative_date date
37+
DateHelper.distance_of_time_in_words(date, DateTime.now) + " ago"
38+
end
39+
end
40+
end
41+
end
42+
end

lib/pact_broker/ui/views/matrix/show.haml

+27-5
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,36 @@
9999
%td.consumer{'data-sort-value' => line.consumer_name}
100100
= line.consumer_name
101101
%td.consumer-version{'data-sort-value' => line.consumer_version_order}
102-
%a{href: line.consumer_version_number_url}
103-
= line.consumer_version_number
102+
%div
103+
%a{href: line.consumer_version_number_url}
104+
= line.consumer_version_number
105+
- line.latest_consumer_version_tags.each do | tag |
106+
.tag-parent{"title": tag.tooltip, "data-toggle": "tooltip", "data-placement": "right"}
107+
%a{href: tag.url}
108+
.tag.label.label-primary
109+
= tag.name
110+
- line.other_consumer_version_tags.each do | tag |
111+
.tag-parent{"title": tag.tooltip, "data-toggle": "tooltip", "data-placement": "right"}
112+
%a{href: tag.url}
113+
.tag.label.label-default
114+
= tag.name
104115
%td.pact-published{'data-sort-value' => line.pact_published_order}
105116
= line.pact_publication_date
106-
%td.provider{'data-sort-value' => line.provider_version_order}
117+
%td.provider{'data-sort-value' => line.provider_name}
107118
= line.provider_name
108119
%td.provider-version{'data-sort-value' => line.provider_version_order}
109-
%a{href: line.provider_version_number_url}
110-
= line.provider_version_number
120+
%div
121+
%a{href: line.provider_version_number_url}
122+
= line.provider_version_number
123+
- line.latest_provider_version_tags.each do | tag |
124+
.tag-parent{"title": tag.tooltip, "data-toggle": "tooltip", "data-placement": "right"}
125+
%a{href: tag.url}
126+
.tag.label.label-primary
127+
= tag.name
128+
- line.other_provider_version_tags.each do | tag |
129+
.tag-parent{"title": tag.tooltip, "data-toggle": "tooltip", "data-placement": "right"}
130+
%a{href: tag.url}
131+
.tag.label.label-default
132+
= tag.name
111133
%td.verification-result{class: line.verification_status_class}
112134
= line.verification_status

public/javascripts/matrix.js

+5
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,9 @@ $(document).ready(function(){
5757
return n.attr('data-sort-value') || n.text();
5858
}
5959
});
60+
61+
62+
$('[data-toggle="tooltip"]').each(function(index, el){
63+
$(el).tooltip({container: $(el)});
64+
});
6065
});

public/stylesheets/matrix.css

+9
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,12 @@ input[type="radio"] {
1010
div.top-of-group {
1111
margin-top: 10px;
1212
}
13+
14+
div.tag-parent {
15+
margin-top: 5px;
16+
margin-bottom: 1px;
17+
}
18+
19+
div.tag {
20+
display: inline-block;
21+
}

spec/lib/pact_broker/matrix/repository_spec.rb

+4
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,10 @@ def shorten_rows rows
510510
expect(subject).to include_hash_matching provider_version_number: "2.0.0"
511511
expect(subject.size).to eq 1
512512
end
513+
514+
it "returns the tag information" do
515+
expect(subject.first[:provider_version_tags]).to include_hash_matching name: 'prod', latest: 1
516+
end
513517
end
514518

515519
context "when the latest version is specified for a provider without a tag" do

0 commit comments

Comments
 (0)