lib/pact_broker/pacts/diff.rb in pact_broker-2.18.0 vs lib/pact_broker/pacts/diff.rb in pact_broker-2.19.0
- old
+ new
@@ -1,35 +1,37 @@
require 'pact_broker/api/pact_broker_urls'
require 'pact_broker/date_helper'
require 'pact_broker/pacts/create_formatted_diff'
+require 'pact_broker/pacts/sort_verifiable_content'
require 'pact_broker/repositories'
require 'yaml'
module PactBroker
module Pacts
class Diff
include PactBroker::Repositories
- def process(params)
+ def process(params, comparison_pact_params = nil, options = {})
pact = find_pact(params)
- previous_distinct_pact = pact_repository.find_previous_distinct_pact(pact)
+ comparison_pact = comparison_pact_params ? find_pact(comparison_pact_params) : pact_repository.find_previous_distinct_pact(pact)
- if previous_distinct_pact
- next_pact = pact_repository.find_next_pact(previous_distinct_pact)
- DiffDecorator.new(pact, previous_distinct_pact, next_pact, params[:base_url]).to_text
+ if comparison_pact
+ next_pact = pact_repository.find_next_pact(comparison_pact) || pact
+ DiffDecorator.new(pact, comparison_pact, next_pact, params[:base_url], { raw: options[:raw] }).to_text
else
no_previous_version_message pact
end
end
private
def find_pact(params)
pact_repository.find_pact(params.consumer_name,
params.consumer_version_number,
- params.provider_name)
+ params.provider_name,
+ params.pact_version_sha)
end
def no_previous_version_message(pact)
"No previous distinct version was found for #{pact.name}"
end
@@ -44,64 +46,73 @@
# v1, and the next pact after that is v2.
# The timestamps on v2 are the ones we want - that's when
# the latest distinct version content was first created.
class DiffDecorator
- def initialize(pact, previous_distinct_pact, next_pact, base_url)
+ def initialize(pact, comparison_pact, next_pact, base_url, options)
@pact = pact
- @previous_distinct_pact = previous_distinct_pact
+ @comparison_pact = comparison_pact
@next_pact = next_pact
@base_url = base_url
+ @options = options
end
def to_text
header + "\n\n" + diff + "\n\n" + links
end
private
- attr_reader :pact, :previous_distinct_pact, :next_pact, :base_url
+ attr_reader :pact, :comparison_pact, :next_pact, :base_url, :options
def change_date_in_words
DateHelper.local_date_in_words next_pact.created_at
end
def now
Time.now
end
def header
- title = "# Diff between versions #{previous_distinct_pact.consumer_version_number} and #{pact.consumer_version_number} of the pact between #{pact.consumer.name} and #{pact.provider.name}"
+ title = "# Diff between versions #{comparison_pact.consumer_version_number} and #{pact.consumer_version_number} of the pact between #{pact.consumer.name} and #{pact.provider.name}"
description = "The following changes were made #{change_date_ago_in_words} ago (#{change_date_in_words})"
title + "\n\n" + description
end
def links
self_url = PactBroker::Api::PactBrokerUrls.pact_url(base_url, pact)
- previous_distinct_url = PactBroker::Api::PactBrokerUrls.pact_url(base_url, previous_distinct_pact)
+ previous_distinct_url = PactBroker::Api::PactBrokerUrls.pact_url(base_url, comparison_pact)
links = {
"current-pact-version" => {
"title" => "Pact",
"name" => pact.name,
"href" => self_url
},
"previous-distinct-pact-version" => {
"title" => "Pact",
- "name" => previous_distinct_pact.name,
+ "name" => comparison_pact.name,
"href" => previous_distinct_url
}
}
"## Links\n" + YAML.dump(links).gsub(/---/,'')
end
def diff
- CreateFormattedDiff.(pact.json_content, previous_distinct_pact.json_content)
+ CreateFormattedDiff.(prepare_content(pact.json_content), prepare_content(comparison_pact.json_content))
end
def change_date_ago_in_words
DateHelper.distance_of_time_in_words next_pact.created_at, now
+ end
+
+ def prepare_content json_content
+ if options[:raw]
+ json_content
+ else
+ PactBroker::Pacts::SortVerifiableContent.call(json_content)
+ end
end
end
end
end
end