Skip to content

Commit e896b7b

Browse files
committed
feat(matrix): return most recent rows first
1 parent 1832384 commit e896b7b

File tree

4 files changed

+56
-13
lines changed

4 files changed

+56
-13
lines changed

lib/pact_broker/matrix/repository.rb

+8-11
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ def find selectors, options = {}
2323
lines = apply_scope(options, selectors, lines)
2424

2525
if options.key?(:success)
26-
lines = lines.select{ |l| options[:success].include?(l[:success]) }
26+
lines = lines.select{ |l| options[:success].include?(l.success) }
2727
end
2828

29-
lines
29+
lines.sort.collect(&:values)
3030
end
3131

3232
def all_versions_specified? selectors
@@ -41,20 +41,18 @@ def apply_scope options, selectors, lines
4141
when 'cp' then GROUP_BY_PACT
4242
end
4343

44-
lines.group_by{|line| group_by_columns.collect{|key| line[key] }}
44+
lines.group_by{|line| group_by_columns.collect{|key| line.send(key) }}
4545
.values
46-
.collect{ | lines | lines.first[:provider_version_number].nil? ? lines : lines.last }
46+
.collect{ | lines | lines.first.provider_version_number.nil? ? lines : lines.last }
4747
.flatten
4848
end
4949

5050
def find_for_consumer_and_provider pacticipant_1_name, pacticipant_2_name
5151
selectors = [{ pacticipant_name: pacticipant_1_name }, { pacticipant_name: pacticipant_2_name }]
52-
find_all(selectors, {latestby: 'cvpv'})
53-
.sort{|l1, l2| l2[:consumer_version_order] <=> l1[:consumer_version_order]}
52+
find_all(selectors, {latestby: 'cvpv'}).sort.collect(&:values)
5453
end
5554

5655
def find_compatible_pacticipant_versions selectors
57-
5856
find(selectors, latestby: 'cvpv')
5957
.select{|line| line[:success] }
6058
end
@@ -69,11 +67,10 @@ def find_all selectors, options
6967
if selectors.size == 1
7068
query = where_consumer_or_provider_is(selectors.first, query)
7169
else
72-
query = where_consumer_and_provider_within(selectors, query)
70+
query = where_consumer_and_provider_in(selectors, query)
7371
end
7472

75-
query.order(:verification_executed_at, :verification_id)
76-
.collect(&:values)
73+
query.order(:verification_executed_at, :verification_id).all
7774
end
7875

7976
def base_table(options)
@@ -103,7 +100,7 @@ def look_up_versions_for_tags(selectors)
103100
end
104101
end
105102

106-
def where_consumer_and_provider_within selectors, query
103+
def where_consumer_and_provider_in selectors, query
107104
query.where{
108105
Sequel.&(
109106
Sequel.|(

lib/pact_broker/matrix/row.rb

+11
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,17 @@ class Row < Sequel::Model
1212
def summary
1313
"#{consumer_name}#{consumer_version_number} #{provider_name}#{provider_version_number || '?'} (r#{pact_revision_number}n#{verification_number || '?'})"
1414
end
15+
16+
# Add logic for ignoring case
17+
def <=> other
18+
[:consumer_name, :consumer_version_order, :pact_revision_number, :provider_name, :provider_version_order, :verification_id].each do | column |
19+
if send(column) != other.send(column)
20+
return (send(column) <=> other.send(column)) * -1
21+
end
22+
end
23+
24+
return 0
25+
end
1526
end
1627
end
1728
end

lib/pact_broker/ui/view_models/matrix_line.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ def provider_version_order
7171
end
7272

7373
def orderable_fields
74-
[consumer_name, provider_name, consumer_version_order, provider_version_order]
74+
[consumer_name, consumer_version_order, @line[:pact_revision_number], provider_name, @line[:verification_id]]
7575
end
7676

7777
def <=> other
78-
self.orderable_fields <=> other.orderable_fields
78+
(self.orderable_fields <=> other.orderable_fields) * -1
7979
end
8080

8181
def verification_status
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
require 'pact_broker/matrix/row'
2+
3+
module PactBroker
4+
module Matrix
5+
describe Row do
6+
describe "<=>" do
7+
let(:row_1) do
8+
Row.new(
9+
consumer_name: 'A',
10+
consumer_version_order: 1,
11+
pact_revision_number: 1,
12+
provider_name: 'B',
13+
provider_version_order: 1,
14+
verification_id: 1
15+
)
16+
end
17+
let(:row_2) do
18+
Row.new(
19+
consumer_name: 'A',
20+
consumer_version_order: 1,
21+
pact_revision_number: 1,
22+
provider_name: 'B',
23+
provider_version_order: 1,
24+
verification_id: 2
25+
)
26+
end
27+
28+
it "sorts" do
29+
expect([row_1, row_2].sort).to eq [row_2, row_1]
30+
end
31+
32+
end
33+
end
34+
end
35+
end

0 commit comments

Comments
 (0)