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



202
203
204
205
206
207
208
209
210
211
212
213
# File 'lib/pact_broker/matrix/row.rb', line 202

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



140
141
142
143
144
145
146
# File 'lib/pact_broker/matrix/row.rb', line 140

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

#compare_name_asc(name1, name2) ⇒ Object



215
216
217
# File 'lib/pact_broker/matrix/row.rb', line 215

def compare_name_asc name1, name2
  name1 <=> name2
end

#compare_number_desc(number1, number2) ⇒ Object



223
224
225
226
227
228
229
230
231
# File 'lib/pact_broker/matrix/row.rb', line 223

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

#consumerObject



152
153
154
# File 'lib/pact_broker/matrix/row.rb', line 152

def consumer
  @consumer ||= Domain::Pacticipant.new(name: consumer_name).tap { |pacticipant| pacticipant.id = consumer_id }
end

#consumer_versionObject



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

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)


251
252
253
# File 'lib/pact_broker/matrix/row.rb', line 251

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

#involves_pacticipant_with_name?(pacticipant_name) ⇒ Boolean

Returns:

  • (Boolean)


259
260
261
# File 'lib/pact_broker/matrix/row.rb', line 259

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

#pactObject



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

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



255
256
257
# File 'lib/pact_broker/matrix/row.rb', line 255

def pacticipant_names
  [consumer_name, provider_name]
end

#providerObject



156
157
158
# File 'lib/pact_broker/matrix/row.rb', line 156

def provider
  @provider ||= Domain::Pacticipant.new(name: provider_name).tap { |pacticipant| pacticipant.id = provider_id }
end

#provider_versionObject



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

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.



238
239
240
241
# File 'lib/pact_broker/matrix/row.rb', line 238

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

#summaryObject



148
149
150
# File 'lib/pact_broker/matrix/row.rb', line 148

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

#to_sObject



219
220
221
# File 'lib/pact_broker/matrix/row.rb', line 219

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

#valuesObject



243
244
245
# File 'lib/pact_broker/matrix/row.rb', line 243

def values
  super.merge(success: success)
end

#verificationObject



182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
# File 'lib/pact_broker/matrix/row.rb', line 182

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