Class: PactBroker::Matrix::Row

Inherits:
Object
  • Object
show all
Defined in:
lib/pact_broker/matrix/row.rb

Direct Known Subclasses

HeadRow

Constant Summary collapse

TP_COLS =

Used when using table_print to output query results

[ :consumer_version_number, :pact_revision_number, :provider_version_number, :verification_number]

Instance Method Summary collapse

Instance Method Details

#<=>(other) ⇒ Object

Add logic for ignoring case



148
149
150
151
152
153
154
155
156
157
158
159
# File 'lib/pact_broker/matrix/row.rb', line 148

def <=> other
  comparisons = [
    compare_name_asc(consumer_name, other.consumer_name),
    compare_number_desc(consumer_version_order, other.consumer_version_order),
    compare_number_desc(pact_revision_number, other.pact_revision_number),
    compare_name_asc(provider_name, other.provider_name),
    compare_number_desc(provider_version_order, other.provider_version_order),
    compare_number_desc(verification_id, other.verification_id)
  ]

  comparisons.find{|c| c != 0 } || 0
end

#[](key) ⇒ Object

Temporary method while we transition from returning Hashes to return Matrix objects from the repository find methods Need to make the object act as a hash and an object



86
87
88
89
90
91
92
# File 'lib/pact_broker/matrix/row.rb', line 86

def [] key
  if key == :provider_version_tags || key == :consumer_version_tags
    send(key)
  else
    super
  end
end

#compare_name_asc(name1, name2) ⇒ Object



161
162
163
# File 'lib/pact_broker/matrix/row.rb', line 161

def compare_name_asc name1, name2
  name1 <=> name2
end

#compare_number_desc(number1, number2) ⇒ Object



169
170
171
172
173
174
175
176
177
# File 'lib/pact_broker/matrix/row.rb', line 169

def compare_number_desc number1, number2
  if number1 && number2
    number2 <=> number1
  elsif number1
    1
  else
    -1
  end
end

#consumerObject



98
99
100
# File 'lib/pact_broker/matrix/row.rb', line 98

def consumer
  @consumer ||= OpenStruct.new(name: consumer_name, id: consumer_id)
end

#consumer_versionObject



106
107
108
# File 'lib/pact_broker/matrix/row.rb', line 106

def consumer_version
  @consumer_version ||= OpenStruct.new(number: consumer_version_number, order: consumer_version_order, id: consumer_version_id, pacticipant: consumer)
end

#eql?(obj) ⇒ Boolean

Need to overwrite eql? from lib/sequel/model/base.rb because it uses @values instead of self.values so the success boolean/integer problem mentioned above screws things up

Returns:

  • (Boolean)


197
198
199
# File 'lib/pact_broker/matrix/row.rb', line 197

def eql?(obj)
  (obj.class == model) && (obj.values == values)
end

#involves_pacticipant_with_name?(pacticipant_name) ⇒ Boolean

Returns:

  • (Boolean)


205
206
207
# File 'lib/pact_broker/matrix/row.rb', line 205

def involves_pacticipant_with_name?(pacticipant_name)
  pacticipant_name.include?(pacticipant_name)
end

#pactObject



116
117
118
119
120
121
122
123
124
125
126
# File 'lib/pact_broker/matrix/row.rb', line 116

def pact
  @pact ||= OpenStruct.new(
    consumer: consumer,
    provider: provider,
    consumer_version: consumer_version,
    consumer_version_number: consumer_version_number,
    created_at: pact_created_at,
    revision_number: pact_revision_number,
    pact_version_sha: pact_version_sha
  )
end

#pacticipant_namesObject



201
202
203
# File 'lib/pact_broker/matrix/row.rb', line 201

def pacticipant_names
  [consumer_name, provider_name]
end

#providerObject



102
103
104
# File 'lib/pact_broker/matrix/row.rb', line 102

def provider
  @provider ||= OpenStruct.new(name: provider_name, id: provider_id)
end

#provider_versionObject



110
111
112
113
114
# File 'lib/pact_broker/matrix/row.rb', line 110

def provider_version
  if provider_version_number
    @provider_version ||= OpenStruct.new(number: provider_version_number, order: provider_version_order, id: provider_version_id, pacticipant: provider)
  end
end

#successObject

For some reason, with MySQL, the success column value comes back as an integer rather than a boolean for the latest_matrix view (but not the matrix view!) Maybe something to do with the union? Haven’t investigated as this is an easy enough fix.



184
185
186
187
# File 'lib/pact_broker/matrix/row.rb', line 184

def success
  value = super
  value.nil? ? nil : value == true || value == 1
end

#summaryObject



94
95
96
# File 'lib/pact_broker/matrix/row.rb', line 94

def summary
  "#{consumer_name}#{consumer_version_number} #{provider_name}#{provider_version_number || '?'} (r#{pact_revision_number}n#{verification_number || '?'})"
end

#to_sObject



165
166
167
# File 'lib/pact_broker/matrix/row.rb', line 165

def to_s
  "#{consumer_name} v#{consumer_version_number} #{provider_name} #{provider_version_number} #{success}"
end

#valuesObject



189
190
191
# File 'lib/pact_broker/matrix/row.rb', line 189

def values
  super.merge(success: success)
end

#verificationObject



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
# File 'lib/pact_broker/matrix/row.rb', line 128

def verification
  if verification_executed_at
    @latest_verification ||= OpenStruct.new(
      id: verification_id,
      success: success,
      number: verification_number,
      execution_date: verification_executed_at,
      created_at: verification_executed_at,
      provider_version_number: provider_version_number,
      provider_version_order: provider_version_order,
      build_url: verification_build_url,
      provider_version: provider_version,
      consumer_name: consumer_name,
      provider_name: provider_name,
      pact_version_sha: pact_version_sha
    )
  end
end